Skip to content

Commit 0ce2417

Browse files
committed
feat: add status header for cbc
1 parent 27503fb commit 0ce2417

File tree

6 files changed

+128
-9
lines changed

6 files changed

+128
-9
lines changed

app/components/Analyst/ApplicationHeader.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ChangeStatus from 'components/Analyst/ChangeStatus';
66
import { useFeature } from '@growthbook/growthbook-react';
77
import EditProjectDescription from './EditProjectDescription';
88
import StatusInformationIcon from './StatusInformationIcon';
9+
import StatusInformationModal from './StatusInformationModal';
910
import AssignProjectType from './AssignProjectType';
1011
import PendingChangeRequest from './PendingChangeRequest/PendingChangeRequest';
1112

@@ -174,7 +175,7 @@ const ApplicationHeader: React.FC<Props> = ({ query }) => {
174175
}
175176
statusList={allApplicationStatusTypes?.nodes}
176177
/>
177-
<StatusInformationIcon />
178+
<StatusInformationIcon ModalComponent={StatusInformationModal} />
178179
</StyledItem>
179180
<StyledItem>
180181
<StyledLabel htmlFor="change-status">External Status</StyledLabel>

app/components/Analyst/CBC/CbcHeader.tsx

+3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import PendingChangeRequest from '../PendingChangeRequest/PendingChangeRequest';
55
import CbcEditProjectDescription from './CbcEditProjectDescription';
66
import CbcAssignProjectType from './CbcAssignProjectType';
77
import CbcEditProjectNumber from './CbcEditProjectNumber';
8+
import StatusInformationIcon from '../StatusInformationIcon';
9+
import CbcStatusInformationModal from './CbcStatusInformationModal';
810

911
const StyledCallout = styled.div`
1012
margin-bottom: 0.5em;
@@ -140,6 +142,7 @@ const CbcHeader: React.FC<Props> = ({ query, isFormEditable = false }) => {
140142
]}
141143
isFormEditable={isFormEditable}
142144
/>
145+
<StatusInformationIcon ModalComponent={CbcStatusInformationModal} />
143146
</StyledItem>
144147
<StyledProjectType>
145148
<StyledLabel htmlFor="assign-project-type">Project Type</StyledLabel>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import Image from 'next/image';
2+
import styled from 'styled-components';
3+
import Chip from '@mui/material/Chip';
4+
import Modal from 'components/Modal';
5+
6+
interface Props {
7+
id?: string;
8+
title?: string;
9+
close: () => void;
10+
isOpen: boolean;
11+
}
12+
13+
// Styled div whose children are split to two columns
14+
const TwoColumnDiv = styled.div`
15+
display: grid;
16+
grid-template-columns: 100px 1fr;
17+
gap: 16px;
18+
align-items: center;
19+
`;
20+
21+
const CbcStatusInformationModal: React.FC<Props> = ({
22+
id = 'cbc-status-information-modal',
23+
title = 'Description of Statuses and Triggers',
24+
isOpen,
25+
close,
26+
}) => {
27+
const infoGraphicUrl = '/images/cbcStateMachine.svg';
28+
29+
return (
30+
<Modal id={id} onClose={close} open={isOpen} title={title}>
31+
<div>
32+
<a href={infoGraphicUrl} target="_blank" rel="noopener noreferrer">
33+
<Image
34+
src={infoGraphicUrl}
35+
alt="The happy path for a project until its completion. The external status is the only status applicable to a CBC project. Once the project is in the Connectivity portal, it will start at Conditionally Approved. From there it can continue to Funding Agreement Signed, Agreement Signed, Final Report Delivered, and finally Reporting Complete."
36+
width={1000}
37+
height={140}
38+
/>
39+
</a>
40+
</div>
41+
<div style={{ paddingBottom: '8px' }}>
42+
<span style={{ fontWeight: 800 }}>Other Statuses</span>
43+
</div>
44+
<TwoColumnDiv>
45+
<Chip
46+
label="Withdrawn"
47+
sx={{
48+
bgcolor: '#E8E8E8',
49+
color: '#414141',
50+
fontFamily: 'BCSans, Verdana, Arial, sans-serif',
51+
}}
52+
/>
53+
<span>Applicant has withdrawn their submitted application</span>
54+
</TwoColumnDiv>
55+
</Modal>
56+
);
57+
};
58+
59+
export default CbcStatusInformationModal;

app/components/Analyst/StatusInformationIcon.tsx

+6-7
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,27 @@ import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
22
import { faCircleInfo } from '@fortawesome/free-solid-svg-icons';
33
import styled from 'styled-components';
44
import useModal from 'lib/helpers/useModal';
5-
import StatusInformationModal from './StatusInformationModal';
65

76
const StyledFontAwesome = styled(FontAwesomeIcon)`
8-
margin-left: 4px; ;
7+
margin-left: 4px;
98
`;
109

11-
const StatusInformationIcon = () => {
12-
const statusInformationModal = useModal();
10+
const StatusInformationIcon = ({ ModalComponent }) => {
11+
const modalProps = useModal();
1312

1413
const handleClick = () => {
15-
statusInformationModal.open();
14+
modalProps.open();
1615
};
1716

18-
const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {
17+
const handleKeyDown = (event) => {
1918
if (event.key === 'Enter' || event.key === ' ') {
2019
handleClick();
2120
}
2221
};
2322

2423
return (
2524
<>
26-
<StatusInformationModal {...statusInformationModal} />
25+
<ModalComponent {...modalProps} />
2726
<div
2827
role="button"
2928
tabIndex={0}

app/components/AnalystDashboard/AllDashboard.tsx

+2-1
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ import type { AllDashboardTable_query$key } from '__generated__/AllDashboardTabl
3131
import { Box, IconButton, TableCellProps } from '@mui/material';
3232
import { useFeature } from '@growthbook/growthbook-react';
3333
import getConfig from 'next/config';
34+
import StatusInformationModal from 'components/Analyst/StatusInformationModal';
3435
import {
3536
filterZones,
3637
sortStatus,
@@ -632,7 +633,7 @@ const AllDashboardTable: React.FC<Props> = ({ query }) => {
632633
renderToolbarInternalActions: ({ table }) => (
633634
<Box>
634635
<IconButton size="small">
635-
<StatusInformationIcon />
636+
<StatusInformationIcon ModalComponent={StatusInformationModal} />
636637
</IconButton>
637638
<MRT_ToggleFiltersButton table={table} />
638639
<MRT_ShowHideColumnsButton table={table} />

0 commit comments

Comments
 (0)