Skip to content

Commit 1828942

Browse files
committed
chore: work done so far
1 parent 76704f4 commit 1828942

File tree

4 files changed

+280
-65
lines changed

4 files changed

+280
-65
lines changed

app/pages/applicantportal/form/[id]/rfi/[applicantRfiId].tsx

+178-65
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,11 @@ import { useRouter } from 'next/router';
1515
import FormDiv from 'components/FormDiv';
1616
import styled from 'styled-components';
1717
import { useEffect, useState } from 'react';
18-
import { useCreateNewFormDataMutation } from 'schema/mutations/application/createNewFormData';
1918
import useEmailNotification from 'lib/helpers/useEmailNotification';
2019
import useRfiCoverageMapKmzUploadedEmail from 'lib/helpers/useRfiCoverageMapKmzUploadedEmail';
20+
import { useUpdateRfiAndCreateTemplateNineDataMutation } from 'schema/mutations/application/updateRfiAndCreateTemplateNineDataMutation';
21+
import { useUpdateRfiAndFormDataMutation } from 'schema/mutations/application/updateRfiAndFormDataMutation';
22+
import { useUpdateFormRfiAndCreateTemplateNineDataMutation } from 'schema/mutations/application/updateFormRfiAndCreateTemplateNineDataMutation';
2123

2224
const Flex = styled('header')`
2325
display: flex;
@@ -64,14 +66,26 @@ const ApplicantRfiPage = ({
6466
const { session, rfiDataByRowId, applicationByRowId } = query;
6567
const { rfiNumber } = rfiDataByRowId;
6668
const [updateRfi] = useUpdateWithTrackingRfiMutation();
69+
const [updateRfiAndCreateTemplateNineData] =
70+
useUpdateRfiAndCreateTemplateNineDataMutation();
71+
const [updateFormRfiAndCreateTemplateNineData] =
72+
useUpdateFormRfiAndCreateTemplateNineDataMutation();
73+
const [updateRfiAndFormData] = useUpdateRfiAndFormDataMutation();
6774
const router = useRouter();
6875
const formJsonData = applicationByRowId?.formData?.jsonData;
6976
const applicationId = router.query.id as string;
7077
const formSchemaId = applicationByRowId?.formData?.formSchemaId;
7178
const ccbcNumber = applicationByRowId?.ccbcNumber;
7279
const [newFormData, setNewFormData] = useState(formJsonData);
73-
const [createNewFormData] = useCreateNewFormDataMutation();
80+
const [hasApplicationFormDataUpdated, setHasApplicationFormDataUpdated] =
81+
useState(false);
82+
const [templateNineData, setTemplateNineData] = useState(null);
7483
const [templateData, setTemplateData] = useState(null);
84+
const [templatesUpdated, setTemplatesUpdated] = useState({
85+
one: false,
86+
two: false,
87+
nine: false,
88+
});
7589
const [formData, setFormData] = useState(rfiDataByRowId.jsonData);
7690
const { notifyHHCountUpdate } = useEmailNotification();
7791
const { notifyRfiCoverageMapKmzUploaded } =
@@ -89,6 +103,10 @@ const ApplicantRfiPage = ({
89103
},
90104
};
91105
setNewFormData(newFormDataWithTemplateOne);
106+
setTemplatesUpdated((prevTemplatesUpdated) => {
107+
return { ...prevTemplatesUpdated, one: true };
108+
});
109+
setHasApplicationFormDataUpdated(true);
92110
} else if (templateData?.templateNumber === 2 && !templateData.error) {
93111
const newFormDataWithTemplateTwo = {
94112
...newFormData,
@@ -99,7 +117,21 @@ const ApplicantRfiPage = ({
99117
},
100118
};
101119
setNewFormData(newFormDataWithTemplateTwo);
102-
} else if (templateData?.error && templateData?.templateNumber === 1) {
120+
setTemplatesUpdated((prevTemplatesUpdated) => {
121+
return { ...prevTemplatesUpdated, two: true };
122+
});
123+
setHasApplicationFormDataUpdated(true);
124+
} else if (templateData?.templateNumber === 9 && !templateData.error) {
125+
setTemplatesUpdated((prevTemplatesUpdated) => {
126+
return { ...prevTemplatesUpdated, nine: true };
127+
});
128+
setTemplateNineData({ ...templateData });
129+
} else if (
130+
templateData?.error &&
131+
(templateData?.templateNumber === 1 ||
132+
templateData?.templateNumber === 2 ||
133+
templateData?.templateNumber === 9)
134+
) {
103135
const fileArrayLength =
104136
newFormData.templateUploads?.eligibilityAndImpactsCalculator?.length;
105137
fetch(`/api/email/notifyFailedReadOfTemplateData`, {
@@ -119,89 +151,170 @@ const ApplicantRfiPage = ({
119151
},
120152
}),
121153
});
122-
} else if (templateData?.error && templateData?.templateNumber === 2) {
123-
const fileArrayLength =
124-
newFormData.templateUploads?.detailedBudget?.length;
125-
fetch(`/api/email/notifyFailedReadOfTemplateData`, {
126-
method: 'POST',
127-
headers: { 'Content-Type': 'application/json' },
128-
body: JSON.stringify({
129-
applicationId,
130-
host: window.location.origin,
131-
params: {
132-
templateNumber: templateData.templateNumber,
133-
uuid: newFormData.templateUploads?.detailedBudget?.[
134-
fileArrayLength - 1
135-
]?.uuid,
136-
uploadedAt:
137-
newFormData.templateUploads?.detailedBudget?.[fileArrayLength - 1]
138-
?.uploadedAt,
139-
},
140-
}),
141-
});
142154
}
143155
// eslint-disable-next-line react-hooks/exhaustive-deps
144156
}, [templateData]);
145157

146158
const handleSubmit = (e: IChangeEvent<any>) => {
147-
updateRfi({
148-
variables: {
149-
input: {
150-
jsonData: e.formData,
151-
rfiRowId: rfiDataByRowId.rowId,
152-
},
153-
},
154-
onCompleted: () => {
155-
if (e.formData?.rfiAdditionalFiles?.geographicCoverageMap?.length > 0) {
156-
notifyRfiCoverageMapKmzUploaded(
157-
rfiDataByRowId,
158-
e.formData,
159-
applicationId,
159+
const getTemplateNineUUID = () => {
160+
// can be wrong source if there are multiple uploads
161+
return e.formData?.rfiAdditionalFiles?.geographicNames?.[0]?.uuid;
162+
};
163+
164+
const checkAndNotifyRfiCoverage = async () => {
165+
if (e.formData?.rfiAdditionalFiles?.geographicCoverageMap?.length > 0) {
166+
return notifyRfiCoverageMapKmzUploaded(
167+
rfiDataByRowId,
168+
e.formData,
169+
applicationId,
170+
ccbcNumber,
171+
rfiNumber,
172+
applicationByRowId.organizationName
173+
);
174+
}
175+
return Promise.resolve();
176+
};
177+
178+
const checkAndNotifyHHCount = async () => {
179+
if (templatesUpdated?.one) {
180+
return notifyHHCountUpdate(
181+
newFormData.benefits,
182+
formJsonData.benefits,
183+
applicationId,
184+
{
160185
ccbcNumber,
186+
timestamp: new Date().toLocaleString(),
187+
manualUpdate: false,
161188
rfiNumber,
162-
applicationByRowId.organizationName
163-
);
164-
}
165-
if (!templateData) {
166-
router.push(`/applicantportal/dashboard`);
167-
}
168-
},
169-
onError: (err) => {
170-
// eslint-disable-next-line no-console
171-
console.log('Error updating RFI', err);
172-
},
173-
});
174-
if (templateData) {
175-
createNewFormData({
189+
organizationName: applicationByRowId.organizationName,
190+
}
191+
);
192+
}
193+
return Promise.resolve();
194+
};
195+
196+
if (!hasApplicationFormDataUpdated && !templatesUpdated.nine) {
197+
// form data not updated and template nine not updated
198+
// only update rfi
199+
updateRfi({
176200
variables: {
177201
input: {
202+
jsonData: e.formData,
203+
rfiRowId: rfiDataByRowId.rowId,
204+
},
205+
},
206+
onCompleted: () => {
207+
checkAndNotifyRfiCoverage().then(() => {
208+
// wait until email is sent before redirecting
209+
router.push(`/applicantportal/dashboard`);
210+
});
211+
},
212+
onError: (err) => {
213+
// eslint-disable-next-line no-console
214+
console.log('Error updating RFI', err);
215+
},
216+
});
217+
} else if (!hasApplicationFormDataUpdated && templatesUpdated.nine) {
218+
// form data not updated but template nine updated, update rfi and create template nine record
219+
updateRfiAndCreateTemplateNineData({
220+
variables: {
221+
rfiInput: {
222+
jsonData: e.formData,
223+
rfiRowId: rfiDataByRowId.rowId,
224+
},
225+
templateNineInput: {
226+
applicationFormTemplate9Data: {
227+
applicationId: Number(applicationId),
228+
jsonData: templateNineData.data,
229+
source: {
230+
source: 'RFI',
231+
uuid: getTemplateNineUUID(),
232+
},
233+
},
234+
},
235+
},
236+
onError: (err) => {
237+
// eslint-disable-next-line no-console
238+
console.log(
239+
'Error updating RFI and creating template nine data',
240+
err
241+
);
242+
},
243+
onCompleted: () => {
244+
checkAndNotifyRfiCoverage().then(() => {
245+
// wait until email(s) is sent before redirecting
246+
router.push(`/applicantportal/dashboard`);
247+
});
248+
},
249+
});
250+
} else if (hasApplicationFormDataUpdated && !templatesUpdated.nine) {
251+
// only update rfi and form data since no template nine data
252+
updateRfiAndFormData({
253+
variables: {
254+
formInput: {
178255
applicationRowId: Number(applicationId),
179256
jsonData: newFormData,
180257
reasonForChange: `Auto updated from upload for RFI: ${rfiNumber}`,
181258
formSchemaId,
182259
},
260+
rfiInput: {
261+
jsonData: e.formData,
262+
rfiRowId: rfiDataByRowId.rowId,
263+
},
183264
},
184265
onError: (err) => {
185266
// eslint-disable-next-line no-console
186267
console.log('Error creating new form data', err);
187268
},
188269
onCompleted: () => {
189-
if (templateData?.templateNumber === 1) {
190-
notifyHHCountUpdate(
191-
newFormData.benefits,
192-
formJsonData.benefits,
193-
applicationId,
194-
{
195-
ccbcNumber,
196-
timestamp: new Date().toLocaleString(),
197-
manualUpdate: false,
198-
rfiNumber,
199-
organizationName: applicationByRowId.organizationName,
200-
}
201-
);
202-
}
203270
setTemplateData(null);
204-
router.push(`/applicantportal/dashboard`);
271+
checkAndNotifyRfiCoverage().then(() => {
272+
checkAndNotifyHHCount().then(() => {
273+
// wait until email is sent before redirecting
274+
router.push(`/applicantportal/dashboard`);
275+
});
276+
});
277+
},
278+
});
279+
} else if (hasApplicationFormDataUpdated && templatesUpdated.nine) {
280+
// update rfi, form data, and template nine data (all three)
281+
updateFormRfiAndCreateTemplateNineData({
282+
variables: {
283+
formInput: {
284+
applicationRowId: Number(applicationId),
285+
jsonData: newFormData,
286+
reasonForChange: `Auto updated from upload for RFI: ${rfiNumber}`,
287+
formSchemaId,
288+
},
289+
rfiInput: {
290+
jsonData: e.formData,
291+
rfiRowId: rfiDataByRowId.rowId,
292+
},
293+
templateNineInput: {
294+
applicationFormTemplate9Data: {
295+
applicationId: Number(applicationId),
296+
jsonData: templateNineData.data,
297+
source: {
298+
source: 'RFI',
299+
uuid: getTemplateNineUUID(),
300+
},
301+
},
302+
},
303+
},
304+
onError: (err) => {
305+
// eslint-disable-next-line no-console
306+
console.log(
307+
'Error updating RFI, form data, and template nine data',
308+
err
309+
);
310+
},
311+
onCompleted: () => {
312+
checkAndNotifyHHCount().then(() => {
313+
checkAndNotifyRfiCoverage().then(() => {
314+
// wait until email(s) is sent before redirecting
315+
router.push(`/applicantportal/dashboard`);
316+
});
317+
});
205318
},
206319
});
207320
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { graphql } from 'react-relay';
2+
import { updateFormRfiAndCreateTemplateNineDataMutation } from '__generated__/updateFormRfiAndCreateTemplateNineDataMutation.graphql';
3+
import useMutationWithErrorMessage from '../useMutationWithErrorMessage';
4+
5+
const mutation = graphql`
6+
mutation updateFormRfiAndCreateTemplateNineDataMutation(
7+
$rfiInput: UpdateRfiInput!
8+
$templateNineInput: CreateApplicationFormTemplate9DataInput!
9+
$formInput: CreateNewFormDataInput!
10+
) {
11+
updateRfi(input: $rfiInput) {
12+
rfiData {
13+
rfiNumber
14+
rowId
15+
id
16+
}
17+
}
18+
createApplicationFormTemplate9Data(input: $templateNineInput) {
19+
applicationFormTemplate9Data {
20+
rowId
21+
applicationId
22+
}
23+
}
24+
createNewFormData(input: $formInput) {
25+
formData {
26+
jsonData
27+
}
28+
}
29+
}
30+
`;
31+
32+
const useUpdateFormRfiAndCreateTemplateNineDataMutation = () =>
33+
useMutationWithErrorMessage<updateFormRfiAndCreateTemplateNineDataMutation>(
34+
mutation,
35+
() => 'An error occurred while attempting to create the application.'
36+
);
37+
38+
export { mutation, useUpdateFormRfiAndCreateTemplateNineDataMutation };
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { graphql } from 'react-relay';
2+
import { updateRfiAndCreateTemplateNineDataMutation } from '__generated__/updateRfiAndCreateTemplateNineDataMutation.graphql';
3+
import useMutationWithErrorMessage from '../useMutationWithErrorMessage';
4+
5+
const mutation = graphql`
6+
mutation updateRfiAndCreateTemplateNineDataMutation(
7+
$rfiInput: UpdateRfiInput!
8+
$templateNineInput: CreateApplicationFormTemplate9DataInput!
9+
) {
10+
updateRfi(input: $rfiInput) {
11+
rfiData {
12+
rfiNumber
13+
rowId
14+
id
15+
}
16+
}
17+
createApplicationFormTemplate9Data(input: $templateNineInput) {
18+
applicationFormTemplate9Data {
19+
rowId
20+
applicationId
21+
}
22+
}
23+
}
24+
`;
25+
26+
const useUpdateRfiAndCreateTemplateNineDataMutation = () =>
27+
useMutationWithErrorMessage<updateRfiAndCreateTemplateNineDataMutation>(
28+
mutation,
29+
() =>
30+
'An error occurred while attempting to update the RFI with new Template Nine Data.'
31+
);
32+
33+
export { mutation, useUpdateRfiAndCreateTemplateNineDataMutation };

0 commit comments

Comments
 (0)