Skip to content

Commit

Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
DESENG-448: Moving Consent under Additional Details tab
Browse files Browse the repository at this point in the history
ratheesh-aot committed Jan 11, 2024
1 parent 05121ea commit 96c350a
Showing 6 changed files with 134 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
import React, { createContext, useContext, useState } from 'react';
import { ActionContext } from '../../ActionContext';
import { EngagementTabsContext } from '../EngagementTabsContext';
import { useAppDispatch } from 'hooks';
import { openNotification } from 'services/notificationService/notificationSlice';
import { SubmissionStatus } from 'constants/engagementStatus';

export interface AdditionalDetailsContextState {
initialConsentMessage: string;
setInitialConsentMessage: (richContent: string) => void;
consentMessage: string;
setConsentMessage: (richContent: string) => void;
handleSaveAdditional: () => void;
updatingAdditional: boolean;
hasBeenOpened: boolean;
}

export const AdditionalDetailsContext = createContext<AdditionalDetailsContextState>({
initialConsentMessage: '',
setInitialConsentMessage: () => {
return;
},
consentMessage: '',
setConsentMessage: () => {
return;
},
handleSaveAdditional: () => {
return;
},
updatingAdditional: false,
hasBeenOpened: false,
});

export const AdditionalDetailsContextProvider = ({ children }: { children: React.ReactNode }) => {
const { handleUpdateEngagementRequest, savedEngagement } = useContext(ActionContext);
const { engagementFormData } = useContext(EngagementTabsContext);
const dispatch = useAppDispatch();

const [updatingAdditional, setUpdatingAdditional] = useState(false);
const [consentMessage, setConsentMessage] = useState(savedEngagement?.consent_message || '');
const [initialConsentMessage, setInitialConsentMessage] = useState(savedEngagement?.consent_message || '');

const handleUpdateEngagementAdditional = () => {
return handleUpdateEngagementRequest({
...engagementFormData,
consent_message: consentMessage,
});
};

const handleSaveAdditional = async () => {
try {
if (!savedEngagement.id) {
dispatch(openNotification({ text: 'Must create engagement first', severity: 'error' }));
return;
}
setUpdatingAdditional(true);
await handleUpdateEngagementAdditional();
setUpdatingAdditional(false);
dispatch(openNotification({ text: 'Engagement additional details saved', severity: 'success' }));
} catch (error) {
setUpdatingAdditional(false);
dispatch(openNotification({ text: 'Error saving engagement additional details', severity: 'error' }));
}
};

const hasBeenOpened = [SubmissionStatus.Closed, SubmissionStatus.Open].includes(
savedEngagement.engagement_status.id,
);

return (
<AdditionalDetailsContext.Provider
value={{
initialConsentMessage,
setInitialConsentMessage,
consentMessage,
setConsentMessage,
handleSaveAdditional,
updatingAdditional,
hasBeenOpened,
}}
>
{children}
</AdditionalDetailsContext.Provider>
);
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import React, { useContext } from 'react';
import { Divider, Grid } from '@mui/material';
import { MetPaper, PrimaryButton } from 'components/common';
import ConsentMessage from './ConsentMessage';
import EngagementInformation from './EngagementInformation';

import { AdditionalDetailsContext } from './AdditionalDetailsContext';

const AdditionalTabContent = () => {
const { handleSaveAdditional, updatingAdditional } = useContext(AdditionalDetailsContext);

return (
<MetPaper elevation={1}>
<Grid
container
direction="row"
justifyContent="flex-start"
alignItems="flex-start"
spacing={2}
sx={{ padding: '2em' }}
>
<Grid item xs={12}>
<EngagementInformation />
</Grid>
<Grid item xs={12}>
<Divider />
</Grid>
<Grid item xs={12}>
<ConsentMessage />
</Grid>
<Grid item xs={12}>
<PrimaryButton loading={updatingAdditional} onClick={handleSaveAdditional}>
Save
</PrimaryButton>
</Grid>
</Grid>
</MetPaper>
);
};

export default AdditionalTabContent;
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React, { useContext } from 'react';
import { Box, Grid } from '@mui/material';
import { MetHeader4 } from 'components/common';
import { EngagementSettingsContext } from './EngagementSettingsContext';
import { AdditionalDetailsContext } from './AdditionalDetailsContext';
import RichTextEditor from 'components/common/RichTextEditor';

const ConsentMessage = () => {
const { consentMessage, setConsentMessage } = useContext(EngagementSettingsContext);
const { initialConsentMessage, setConsentMessage } = useContext(AdditionalDetailsContext);

const handleRichContentChange = (newState: string) => {
setConsentMessage(newState);
@@ -20,7 +20,7 @@ const ConsentMessage = () => {
<Box display="flex" flexDirection="column" justifyContent="space-between">
<RichTextEditor
handleEditorStateChange={handleRichContentChange}
initialRawEditorState={consentMessage || ''}
initialRawEditorState={initialConsentMessage || ''}
/>
</Box>
</Grid>
Original file line number Diff line number Diff line change
@@ -1,24 +1,12 @@
import React from 'react';
import { Grid } from '@mui/material';
import { MetPaper } from 'components/common';
import EngagementInformation from './EngagementInformation';
import AdditionalTabContent from './AdditionalTabContent';
import { AdditionalDetailsContextProvider } from './AdditionalDetailsContext';

const EngagementAdditionalDetails = () => {
return (
<MetPaper elevation={1}>
<Grid
container
direction="row"
justifyContent="flex-start"
alignItems="flex-start"
spacing={1}
sx={{ padding: '2em' }}
>
<Grid item xs={12}>
<EngagementInformation />
</Grid>
</Grid>
</MetPaper>
<AdditionalDetailsContextProvider>
<AdditionalTabContent />
</AdditionalDetailsContextProvider>
);
};

Original file line number Diff line number Diff line change
@@ -8,8 +8,6 @@ import { SubmissionStatus } from 'constants/engagementStatus';
export interface EngagementSettingsContextState {
isInternal: boolean;
setIsInternal: (isInternal: boolean) => void;
consentMessage: string;
setConsentMessage: (richContent: string) => void;
sendReport: boolean;
setSendReport: (sendReport: boolean) => void;
handleSaveSettings: () => void;
@@ -22,10 +20,6 @@ export const EngagementSettingsContext = createContext<EngagementSettingsContext
setIsInternal: () => {
return;
},
consentMessage: '',
setConsentMessage: () => {
return;
},
sendReport: false,
setSendReport: () => {
return;
@@ -47,7 +41,6 @@ export const EngagementSettingsContextProvider = ({ children }: { children: Reac
const [isInternal, setIsInternal] = useState(savedIsInternal);
const [sendReport, setSendReport] = useState(Boolean(settings.send_report));
const [updatingSettings, setUpdatingSettings] = useState(false);
const [consentMessage, setConsentMessage] = useState(savedEngagement?.consent_message || '');

const handleUpdateEngagementMetadata = () => {
return handleUpdateEngagementMetadataRequest({
@@ -60,7 +53,6 @@ export const EngagementSettingsContextProvider = ({ children }: { children: Reac
return handleUpdateEngagementRequest({
...engagementFormData,
is_internal: isInternal,
consent_message: consentMessage,
});
};

@@ -97,8 +89,6 @@ export const EngagementSettingsContextProvider = ({ children }: { children: Reac
value={{
isInternal,
sendReport,
consentMessage,
setConsentMessage,
setIsInternal,
setSendReport,
handleSaveSettings,
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import React, { useContext } from 'react';
import { Divider, Grid } from '@mui/material';
import { MetPaper, PrimaryButton } from 'components/common';
import ConsentMessage from './ConsentMessage';
import InternalEngagement from './InternalEngagement';
import SendReport from './SendReport';
import { EngagementSettingsContext } from './EngagementSettingsContext';
@@ -29,12 +28,6 @@ const EngagementSettingsForm = () => {
<Grid item xs={12}>
<SendReport />
</Grid>
<Grid item xs={12}>
<Divider />
</Grid>
<Grid item xs={12}>
<ConsentMessage />
</Grid>
<Grid item xs={12}>
<PrimaryButton loading={updatingSettings} onClick={handleSaveSettings}>
Save

0 comments on commit 96c350a

Please sign in to comment.