Merged PR 1286: hooks fixes and ordering of events

hooks fixes and ordering of events

Related work items: #12688
This commit is contained in:
Robert Bond
2024-11-18 13:11:54 +00:00
6 changed files with 234 additions and 152 deletions
+16 -20
View File
@@ -961,7 +961,7 @@ export const getRepsFromBlob = (containerName) => {
}); });
}; };
export const getRepsFromBlobProxy = (containerName) => { export const getRepsFromBlobProxy = async (containerName) => {
//console.log( //console.log(
// "///////////////////////getRepsFromBlobProxy: " + containerName, // "///////////////////////getRepsFromBlobProxy: " + containerName,
// "/api/file/getawaitingsubmissionfromblobproxy?container=" + // "/api/file/getawaitingsubmissionfromblobproxy?container=" +
@@ -969,8 +969,8 @@ export const getRepsFromBlobProxy = (containerName) => {
// "\n///////////////////////\n" // "\n///////////////////////\n"
// ); // );
return axios try {
.get( const res = await axios.get(
// BASE_URL + // BASE_URL +
"/api/file/getrepsblobproxy?container=" + containerName "/api/file/getrepsblobproxy?container=" + containerName
// + // +
@@ -978,16 +978,14 @@ export const getRepsFromBlobProxy = (containerName) => {
// "/api/file/getawaitingsubmissionfromblob?container=" + // "/api/file/getawaitingsubmissionfromblob?container=" +
// containerName // containerName
// ) // )
) );
.then((res) => { return res.data;
return res.data; } catch (error) {
}) consoleLogger(error);
.catch((error) => { }
consoleLogger(error);
});
}; };
export const getAwaitingSubmissionFromBlobProxy = (containerName) => { export const getAwaitingSubmissionFromBlobProxy = async (containerName) => {
console.log( console.log(
"///////////////////////getAwaitingSubmissionFromBlobProxy: " + "///////////////////////getAwaitingSubmissionFromBlobProxy: " +
containerName, containerName,
@@ -996,8 +994,8 @@ export const getAwaitingSubmissionFromBlobProxy = (containerName) => {
"\n///////////////////////\n" "\n///////////////////////\n"
); );
return axios try {
.get( const res = await axios.get(
// BASE_URL + // BASE_URL +
"/api/file/getawaitingsubmissionfromblobproxy?container=" + "/api/file/getawaitingsubmissionfromblobproxy?container=" +
containerName containerName
@@ -1006,13 +1004,11 @@ export const getAwaitingSubmissionFromBlobProxy = (containerName) => {
// "/api/file/getawaitingsubmissionfromblob?container=" + // "/api/file/getawaitingsubmissionfromblob?container=" +
// containerName // containerName
// ) // )
) );
.then((res) => { return res.data;
return res.data; } catch (error) {
}) consoleLogger(error);
.catch((error) => { }
consoleLogger(error);
});
}; };
export const getPortalModuleDetails = async (appealType, caseReference) => { export const getPortalModuleDetails = async (appealType, caseReference) => {
+110 -27
View File
@@ -2,7 +2,7 @@ import { JSONPath as jsonpath } from "jsonpath-plus";
import _ from "lodash"; import _ from "lodash";
import useTranslation from "next-translate/useTranslation"; import useTranslation from "next-translate/useTranslation";
import { useRouter } from "next/router"; import { useRouter } from "next/router";
import { useState } from "react"; import { useEffect, useState } from "react";
import { useDropzone } from "react-dropzone"; import { useDropzone } from "react-dropzone";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { formValueSelector, reduxForm } from "redux-form"; import { formValueSelector, reduxForm } from "redux-form";
@@ -34,6 +34,9 @@ let MakeRepresentation = (props) => {
const [clearRepForm, setClearRepForm] = useState(false); const [clearRepForm, setClearRepForm] = useState(false);
const [savingStatus, setSavingStatus] = useState(false); const [savingStatus, setSavingStatus] = useState(false);
const [showQuestionnaireSection, setShowQuestionnaireSection] = useState(1);
//const [questionnaireCount, setQuestionnaireCount] = useState(0);
const { data: session } = useSession(); const { data: session } = useSession();
const router = useRouter(); const router = useRouter();
@@ -60,9 +63,33 @@ let MakeRepresentation = (props) => {
let setCaseQueryObj = props[currentType] || {}; let setCaseQueryObj = props[currentType] || {};
var casesObj = {}; var casesObj = {};
const [showQuestionnaireSection, setShowQuestionnaireSection] = useState(1); const updateQuestionnaireCount = () => {
const [questionnaireCount, setQuestionnaireCount] = useState(0); {
switch (currentView.caseReference.appealType) {
case 846040000:
case 846040001:
case 846040006:
case 846040025:
case 846040004:
case 846040018:
case 846040003:
case 846040009:
case 846040008:
return 7;
break;
case 846040005:
case 846040006:
case 846040007:
return 9;
break;
default:
return 7;
break;
}
}
};
let questionnaireCount = updateQuestionnaireCount();
const setRepFileName = (values) => { const setRepFileName = (values) => {
//console.log("---------------\n", values); //console.log("---------------\n", values);
if ( if (
@@ -347,12 +374,13 @@ let MakeRepresentation = (props) => {
const whichControl = () => { const whichControl = () => {
if (isLPA && _.isEmpty(currentView.representationCapacity)) { if (isLPA && _.isEmpty(currentView.representationCapacity)) {
return ( return (
//setRepresentationCapacity("lpa"),
<RepLPACapacitySelection <RepLPACapacitySelection
formObj={formObj} formObj={formObj}
capacityOptionsArr={capacityOptionsArr} capacityOptionsArr={capacityOptionsArr}
currentType={currentType} currentType={currentType}
casesObj={casesObj} casesObj={casesObj}
setRepresentationCapacity={"LPA"} setRepresentationCapacity={setRepresentationCapacity}
setRepresentationSubmit={setRepresentationSubmit} setRepresentationSubmit={setRepresentationSubmit}
onHandleSubmit={onHandleSubmit} onHandleSubmit={onHandleSubmit}
currentView={currentView} currentView={currentView}
@@ -408,6 +436,12 @@ let MakeRepresentation = (props) => {
break; break;
case "lpa": case "lpa":
//setRepresentationCapacity("appellant"); //setRepresentationCapacity("appellant");
//setRepresentationCapacity("lpa");
// useEffect(() => {
// setRepresentationCapacity("lpa");
// }, []);
// console.log(currentView.caseReference.appealType);
return ( return (
<RepLPA <RepLPA
formObj={formObj} formObj={formObj}
@@ -426,7 +460,7 @@ let MakeRepresentation = (props) => {
setShowQuestionnaireSection setShowQuestionnaireSection
} }
showQuestionnaireSection={showQuestionnaireSection} showQuestionnaireSection={showQuestionnaireSection}
setQuestionnaireCount={setQuestionnaireCount} //setQuestionnaireCount={setQuestionnaireCount}
questionnaireCount={questionnaireCount} questionnaireCount={questionnaireCount}
setRepFileName={setRepFileName} setRepFileName={setRepFileName}
updateRepresentation={updateRepresentation} updateRepresentation={updateRepresentation}
@@ -548,7 +582,7 @@ let MakeRepresentation = (props) => {
setShowQuestionnaireSection={ setShowQuestionnaireSection={
setShowQuestionnaireSection setShowQuestionnaireSection
} }
setQuestionnaireCount={setQuestionnaireCount} // setQuestionnaireCount={setQuestionnaireCount}
questionnaireCount={questionnaireCount} questionnaireCount={questionnaireCount}
/> />
); );
@@ -566,7 +600,7 @@ let MakeRepresentation = (props) => {
setShowQuestionnaireSection={ setShowQuestionnaireSection={
setShowQuestionnaireSection setShowQuestionnaireSection
} }
setQuestionnaireCount={setQuestionnaireCount} //setQuestionnaireCount={setQuestionnaireCount}
questionnaireCount={questionnaireCount} questionnaireCount={questionnaireCount}
/> />
); );
@@ -578,6 +612,53 @@ let MakeRepresentation = (props) => {
} }
}; };
const sortFileObj = (filelistObj) => {
let blobList = filelistObj;
function removeObjectsWithUndefinedKey(arr, key) {
return arr.filter((obj) => obj[key] !== undefined);
}
function removeEmptyObjects(arr) {
return arr.filter((obj) => Object.keys(obj).length > 0);
}
blobList = removeEmptyObjects(blobList);
blobList = removeObjectsWithUndefinedKey(blobList, "name");
let buildAppealFilesArray = [];
let filesUploadObj = field.input.value;
for (let key in filesUploadObj) {
typeof filesUploadObj[key].name != "undefined" &&
buildAppealFilesArray.push({
"name": filesUploadObj[key].name,
"size": filesUploadObj[key].size,
});
}
buildAppealFilesArray = buildAppealFilesArray.concat(blobList);
function removeDuplicates(arr) {
const seen = new Set();
return arr.filter((obj) => {
const serializedObj = JSON.stringify(obj);
if (seen.has(serializedObj)) {
return false; // Skip this object (duplicate)
}
seen.add(serializedObj); // Add the serialized object to the "seen" set
return true; // Keep this object
});
}
buildAppealFilesArray = removeDuplicates(buildAppealFilesArray);
blobList = buildAppealFilesArray;
return blobList;
};
const updateRepresentation = async ( const updateRepresentation = async (
values, values,
sendSavedEmail, sendSavedEmail,
@@ -727,17 +808,18 @@ let MakeRepresentation = (props) => {
? router.locale + "/myportal" ? router.locale + "/myportal"
: "/myportal" : "/myportal"
)) ))
: values.hasOwnProperty("representationDocuments") && : //values.hasOwnProperty("representationDocuments") &&
(values.representationDocuments.map((Blob) => // sortFileObj()
buildFileArray.push({ // (values.representationDocuments.map((Blob) =>
"name": Blob.name, // buildFileArray.push({
"size": Blob.size, // "name": Blob.name,
}) // "size": Blob.size,
), // })
Object.assign(values, { // ),
"filesList": buildFileArray, // Object.assign(values, {
})), // "filesList": buildFileArray,
uploadRepresentationFiles(values), // })),
uploadRepresentationFiles(values),
generateRepPDF( generateRepPDF(
values, values,
props.props.accountDetails.containerID, props.props.accountDetails.containerID,
@@ -929,18 +1011,19 @@ let MakeRepresentation = (props) => {
const repForm = props.props.form; const repForm = props.props.form;
try { // try {
let value = props.initialValues; // let value = props.initialValues;
setRepresentationCapacity( // setRepresentationCapacity(
props.initialValues.representationCapacity.toLowerCase() // props.initialValues.representationCapacity.toLowerCase()
); // );
//setRepresentationSubmit(false); // //setRepresentationSubmit(false);
} catch { // } catch {
console.log("not has props"); // console.log("not has props");
} // }
return ( return (
<div> <div>
<div>hello {currentView.representationSubmit ? "yep" : "no"}</div>
<form onSubmit={handleSubmit(onHandleSubmit)}> <form onSubmit={handleSubmit(onHandleSubmit)}>
{currentView.representationSubmit == true ? ( {currentView.representationSubmit == true ? (
<RepCompleteSubmit <RepCompleteSubmit
@@ -12,6 +12,7 @@ import { bytesToSize, getThumbnailIconByExtension } from "../../utils";
const RepCompleteSubmit = (props) => { const RepCompleteSubmit = (props) => {
let { t } = useTranslation(); let { t } = useTranslation();
const [confirmSections, setConfirmSections] = useState(false);
const router = useRouter(); const router = useRouter();
const { locale } = router; const { locale } = router;
@@ -33,8 +34,6 @@ const RepCompleteSubmit = (props) => {
</li> </li>
)); ));
const [confirmSections, setConfirmSections] = useState(false);
const repFormData = formObj.representationForm.values; const repFormData = formObj.representationForm.values;
//const repDate = new Date(); //const repDate = new Date();
@@ -133,29 +132,27 @@ const RepCompleteSubmit = (props) => {
let buildAppealFilesArray = []; let buildAppealFilesArray = [];
let filesUploadObj = // let filesUploadObj =
formObj.representationForm.values.representationDocuments; // formObj.representationForm.values.representationDocuments;
for (let key in filesUploadObj) { // for (let key in filesUploadObj) {
typeof filesUploadObj[key].name != "undefined" && // typeof filesUploadObj[key].name != "undefined" &&
buildAppealFilesArray.push({ // buildAppealFilesArray.push({
"name": filesUploadObj[key].name, // "name": filesUploadObj[key].name,
"size": filesUploadObj[key].size, // "size": filesUploadObj[key].size,
}); // });
} // }
console.log( // console.log(
buildAppealFilesArray, // buildAppealFilesArray,
formObj.representationForm.values.filesList // formObj.representationForm.values.filesList
); // );
buildAppealFilesArray = formObj.representationForm.values.hasOwnProperty( buildAppealFilesArray = formObj.representationForm.values.hasOwnProperty(
"filesList" "filesList"
) )
? buildAppealFilesArray.concat( ? formObj.representationForm.values.filesList
formObj.representationForm.values.filesList : [];
)
: buildAppealFilesArray;
console.log(buildAppealFilesArray); console.log(buildAppealFilesArray);
@@ -163,19 +160,19 @@ const RepCompleteSubmit = (props) => {
// ...new Map(buildAppealFilesArray.map((v) => [v.name, v])).values(), // ...new Map(buildAppealFilesArray.map((v) => [v.name, v])).values(),
// ]; // ];
buildAppealFilesArray = buildAppealFilesArray.filter(function (el) { // buildAppealFilesArray = buildAppealFilesArray.filter(function (el) {
return el != null; // return el != null;
}); // });
const arrUniq = buildAppealFilesArray.filter( // const arrUniq = buildAppealFilesArray.filter(
(obj1, i, arr) => arr.findIndex((obj2) => obj2.name === obj1.name) === i // (obj1, i, arr) => arr.findIndex((obj2) => obj2.name === obj1.name) === i
); // );
console.log(arrUniq); // console.log(arrUniq);
Object.assign(formObj.representationForm.values, { // Object.assign(formObj.representationForm.values, {
"filesList": arrUniq, // "filesList": arrUniq,
}); // });
let filterFiles = []; let filterFiles = [];
return ( return (
@@ -357,37 +354,36 @@ const RepCompleteSubmit = (props) => {
</dt> </dt>
<dd className="govuk-summary-list__value"> <dd className="govuk-summary-list__value">
{formObj.representationForm.values {buildAppealFilesArray.length > 0
.filesList.length > 0 ? buildAppealFilesArray.map(
? ((filterFiles = (blob, i) => (
formObj.representationForm.values.filesList.filter( <div
function (el) { key={
return el != null; blob.name +
} "_" +
)), i
filterFiles.map((blob, i) => ( }
<div className="govuk-!-margin-bottom-5 fileThumb "
key={blob.name + "_" + i} >
className="govuk-!-margin-bottom-5 fileThumb " <img
> src={getThumbnailIconByExtension(
<img blob.name
src={getThumbnailIconByExtension( )}
blob.name alt={blob.name}
)} width="50"
alt={blob.name} />
width="50"
/>
<span className="govuk-body govuk-!-font-size-14 govuk-!-padding-left-5"> <span className="govuk-body govuk-!-font-size-14 govuk-!-padding-left-5">
{blob.name} ( {blob.name} (
{bytesToSize( {bytesToSize(
blob.size blob.size
)} )}
) )
</span> </span>
</div> </div>
))) )
: ""}{" "} )
: ""}
</dd> </dd>
<dd className="govuk-summary-list__actions"> <dd className="govuk-summary-list__actions">
@@ -966,21 +966,46 @@ export const RenderFileUpload = (field) => {
let blobList = filelistObj; let blobList = filelistObj;
// let buildAppealFilesArray = []; function removeObjectsWithUndefinedKey(arr, key) {
return arr.filter((obj) => obj[key] !== undefined);
}
// let filesUploadObj = field.input.value; function removeEmptyObjects(arr) {
return arr.filter((obj) => Object.keys(obj).length > 0);
}
// for (let key in filesUploadObj) { blobList = removeEmptyObjects(blobList);
// typeof filesUploadObj[key].name != "undefined" && blobList = removeObjectsWithUndefinedKey(blobList, "name");
// buildAppealFilesArray.push({
// "name": filesUploadObj[key].name,
// "size": filesUploadObj[key].size,
// });
// }
// buildAppealFilesArray = buildAppealFilesArray.concat(blobList); let buildAppealFilesArray = [];
// blobList = buildAppealFilesArray; let filesUploadObj = field.input.value;
for (let key in filesUploadObj) {
typeof filesUploadObj[key].name != "undefined" &&
buildAppealFilesArray.push({
"name": filesUploadObj[key].name,
"size": filesUploadObj[key].size,
});
}
buildAppealFilesArray = buildAppealFilesArray.concat(blobList);
function removeDuplicates(arr) {
const seen = new Set();
return arr.filter((obj) => {
const serializedObj = JSON.stringify(obj);
if (seen.has(serializedObj)) {
return false; // Skip this object (duplicate)
}
seen.add(serializedObj); // Add the serialized object to the "seen" set
return true; // Keep this object
});
}
buildAppealFilesArray = removeDuplicates(buildAppealFilesArray);
blobList = buildAppealFilesArray;
const deleteThisBlob = async ( const deleteThisBlob = async (
containerName, containerName,
@@ -1054,7 +1079,7 @@ export const RenderFileUpload = (field) => {
{field.meta.touched && field.meta.error && ( {field.meta.touched && field.meta.error && (
<span className="error">{field.meta.error}</span> <span className="error">{field.meta.error}</span>
)} )}
{files && Array.isArray(files) && ( {blobList && Array.isArray(files) && (
<ul> <ul>
{files.map( {files.map(
(file, i) => (file, i) =>
@@ -5,7 +5,7 @@ import { useRouter } from "next/router";
import { useDropzone } from "react-dropzone"; import { useDropzone } from "react-dropzone";
import { connect } from "react-redux"; import { connect } from "react-redux";
import { Field, change, formValueSelector, reduxForm } from "redux-form"; import { Field, change, formValueSelector, reduxForm } from "redux-form";
import { useState } from "react"; import { useState, useEffect } from "react";
import { import {
FileUploadField, FileUploadField,
@@ -41,7 +41,6 @@ let RepLPA = (props) => {
} = props; } = props;
const { acceptedFiles, getRootProps, getInputProps } = useDropzone(); const { acceptedFiles, getRootProps, getInputProps } = useDropzone();
const [savingStatus, setSavingStatus] = useState(false); const [savingStatus, setSavingStatus] = useState(false);
const files = acceptedFiles.map((file) => ( const files = acceptedFiles.map((file) => (
<li key={file.path}> <li key={file.path}>
{file.path} - {file.size} bytes {file.path} - {file.size} bytes
@@ -49,34 +48,6 @@ let RepLPA = (props) => {
)); ));
const required = (value) => (value ? undefined : "Required"); const required = (value) => (value ? undefined : "Required");
const updateQuestionnaireCount = () => {
{
switch (currentView.caseReference.appealType) {
case 846040000:
case 846040001:
case 846040006:
case 846040025:
case 846040004:
case 846040018:
case 846040003:
case 846040009:
case 846040008:
setQuestionnaireCount(7);
break;
case 846040005:
case 846040006:
case 846040007:
setQuestionnaireCount(9);
break;
default:
setQuestionnaireCount(7);
break;
}
}
};
const whichQuestionnaire = () => { const whichQuestionnaire = () => {
{ {
switch (currentView.caseReference.appealType) { switch (currentView.caseReference.appealType) {
@@ -90,7 +61,6 @@ let RepLPA = (props) => {
case 846040009: case 846040009:
case 846040008: case 846040008:
case 846040017: case 846040017:
updateQuestionnaireCount();
return ( return (
<S78_Questionnaire <S78_Questionnaire
props={props} props={props}
@@ -110,7 +80,6 @@ let RepLPA = (props) => {
case 846040005: case 846040005:
case 846040006: case 846040006:
case 846040007: case 846040007:
updateQuestionnaireCount();
return ( return (
<Enforcement_Questionnaire <Enforcement_Questionnaire
props={props} props={props}
@@ -218,7 +187,8 @@ let RepLPA = (props) => {
); );
resultsObj = resultsObj[0]; resultsObj = resultsObj[0];
props.formObj["representationForm"].hasOwnProperty("values") && props.formObj.hasOwnProperty("representationForm") &&
props.formObj["representationForm"].hasOwnProperty("values") &&
props.formObj["representationForm"].values.hasOwnProperty( props.formObj["representationForm"].values.hasOwnProperty(
"representationCapacity" "representationCapacity"
) && ) &&
@@ -409,7 +379,6 @@ let RepLPA = (props) => {
Back Back
</a> </a>
)} )}
{savingStatus ? ( {savingStatus ? (
<span className=" progress-save-active"> <span className=" progress-save-active">
{router.locale == "cy" {router.locale == "cy"
+13
View File
@@ -21,6 +21,7 @@ import {
import { import {
setCurrentReference, setCurrentReference,
setCurrentView, setCurrentView,
setRepresentationCapacity,
} from "../../store/currentView/action"; } from "../../store/currentView/action";
import { import {
setMyRepresentations, setMyRepresentations,
@@ -45,6 +46,7 @@ const TopThree = (props) => {
setAwaitingSubmissionDetails, setAwaitingSubmissionDetails,
setMyRepresentations, setMyRepresentations,
setMyRepresentationsDetails, setMyRepresentationsDetails,
setRepresentationCapacity,
} = props; } = props;
const router = useRouter(); const router = useRouter();
@@ -107,6 +109,13 @@ const TopThree = (props) => {
}); });
}; };
const isLPA =
props.accountDetails.accountDetails[
"pinswg_typeofinvolvement@OData.Community.Display.V1.FormattedValue"
] == "LPA"
? true
: false;
const deleteRepItem = (containerID, caseID, repfile) => { const deleteRepItem = (containerID, caseID, repfile) => {
let cookies = parseCookies(); let cookies = parseCookies();
//console.log("sssss", containerID, caseID, repfile); //console.log("sssss", containerID, caseID, repfile);
@@ -205,6 +214,7 @@ const TopThree = (props) => {
showTopThreeArr[key].appealType, showTopThreeArr[key].appealType,
"repDetails": showTopThreeArr[key], "repDetails": showTopThreeArr[key],
}); });
isLPA && setRepresentationCapacity("lpa");
}} }}
> >
{showTopThreeArr[key].pinswg_name} {showTopThreeArr[key].pinswg_name}
@@ -343,6 +353,9 @@ const mapDispatchToProps = (dispatch) => {
setMyRepresentationsDetails: (myRepresentationsDetails) => { setMyRepresentationsDetails: (myRepresentationsDetails) => {
dispatch(setMyRepresentationsDetails(myRepresentationsDetails)); dispatch(setMyRepresentationsDetails(myRepresentationsDetails));
}, },
setRepresentationCapacity: (representationCapacity) => {
dispatch(setRepresentationCapacity(representationCapacity));
},
}; };
}; };