494 lines
17 KiB
JavaScript
494 lines
17 KiB
JavaScript
import useTranslation from "next-translate/useTranslation";
|
|
import Head from "next/head";
|
|
import { useEffect, useState } from "react";
|
|
|
|
import { getSession, useSession } from "next-auth/react";
|
|
import { useRouter } from "next/router";
|
|
import { connect, useDispatch } from "react-redux";
|
|
import {
|
|
getPersonalAccount,
|
|
getPortalLoginProxy,
|
|
getPortalLogin,
|
|
getRepsFromBlob,
|
|
getCase,
|
|
getPortalModuleDetails,
|
|
getBasicSearch,
|
|
getFilesFromBlob,
|
|
} from "../../actions";
|
|
import { getFormCollectionByID } from "../../components/utils";
|
|
import Breadcrumbs from "../../components/breadcrumbs";
|
|
import CookieBanner from "../../components/cookieBanner";
|
|
import Footer from "../../components/footer";
|
|
import Header from "../../components/header";
|
|
import Case from "../../components/representation";
|
|
import {
|
|
setAccountDetails,
|
|
setContainerID,
|
|
setLoggedInUserId,
|
|
} from "../../store/accountDetails/action";
|
|
import { wrapper } from "../../store/store";
|
|
import { getSearchDetails } from "../../components/utils";
|
|
|
|
import {
|
|
setCurrentReference,
|
|
setCurrentView,
|
|
setFilesForRepresentations,
|
|
setRepresentationCapacity,
|
|
} from "../../store/currentView/action";
|
|
import {
|
|
setSearchDetails,
|
|
setSearchResults,
|
|
} from "../../store/searchOutput/action";
|
|
import { setSearch } from "../../store/search/action";
|
|
|
|
import NoSessionWarning from "../../components/nosession";
|
|
import ServiceBanner from "../../components/myportal/servicebanner";
|
|
import TimeOut from "../../components/timeout";
|
|
|
|
import {
|
|
setMyRepresentations,
|
|
setMyRepresentationsDetails,
|
|
setMySubmittedReps,
|
|
setMySubmittedRepsDetails,
|
|
} from "../../store/myRepresentations/action";
|
|
import { getRepsFilesBlobs } from "../../actions/azurestorage";
|
|
|
|
const RepresentationF = (props) => {
|
|
const { footerLinks, pages } = props;
|
|
let { t, lang } = useTranslation();
|
|
|
|
const router = useRouter();
|
|
const { locale } = router;
|
|
const { appealtypes } = router.query;
|
|
|
|
const dispatch = useDispatch();
|
|
|
|
const [showQuestionnaireSection, setShowQuestionnaireSection] = useState(1);
|
|
|
|
// useEffect(() => {
|
|
// const updateAccountStore = async () => {
|
|
// const thisSession = await getSession();
|
|
|
|
// if (thisSession) {
|
|
// let loggedInUser = await getPortalLoginProxy(
|
|
// thisSession.user.email
|
|
// );
|
|
// dispatch(
|
|
// setAccountDetails(
|
|
// await getPersonalAccount(
|
|
// loggedInUser.value[0].contactid
|
|
// )
|
|
// )
|
|
// );
|
|
// dispatch(setContainerID(thisSession.user.id));
|
|
// dispatch(setLoggedInUserId(loggedInUser.value[0].contactid));
|
|
// //dispatch(setRepresentationSubmit(true));
|
|
// }
|
|
// };
|
|
// updateAccountStore();
|
|
// }, [dispatch]);
|
|
|
|
const { data: session, status } = useSession();
|
|
|
|
// if (status === "loading") {
|
|
// return <NoSessionWarning loading={true} />;
|
|
// }
|
|
|
|
return (
|
|
<div>
|
|
<Head>
|
|
<title>
|
|
{t("case:page-title")} - {t("common:service-name")}
|
|
</title>
|
|
<>
|
|
<link
|
|
rel="canonical"
|
|
href={t("common:gov-wales-link") + router.asPath}
|
|
/>
|
|
<meta
|
|
key="og:locale"
|
|
property="og:locale"
|
|
content={router.locale}
|
|
/>
|
|
{/* If they have a Twitter Handle, include the meta details below */}
|
|
<meta
|
|
key="og:site_name"
|
|
property="og:site_name"
|
|
content={t("common:service-name")}
|
|
/>
|
|
<meta
|
|
key="twitter:site"
|
|
property="twitter:site"
|
|
content="@UKGovWales"
|
|
/>
|
|
|
|
<meta
|
|
name="description"
|
|
content={t("common:service-description")}
|
|
/>
|
|
<meta
|
|
property="og:site_name"
|
|
content={t("common:gov-wales-label")}
|
|
/>
|
|
<meta property="og:title" content={t("case:page-title")} />
|
|
<meta
|
|
property="og:description"
|
|
content={t("common:service-description")}
|
|
/>
|
|
<meta property="og:type" content="website" />
|
|
<meta
|
|
property="og:url"
|
|
content={t("common:gov-wales-link")}
|
|
/>
|
|
<meta
|
|
property="og:image"
|
|
content="https://gov.wales/themes/custom/govwales/images/content/og-global-1200.png"
|
|
/>
|
|
<meta name="twitter:card" content="summary" />
|
|
<meta
|
|
name="twitter:title"
|
|
content={t("common:gov-wales-label")}
|
|
/>
|
|
<meta
|
|
name="twitter:url"
|
|
content={t("common:gov-wales-link") + router.asPath}
|
|
/>
|
|
<meta
|
|
name="twitter:image"
|
|
content="https://gov.wales/themes/custom/govwales/images/content/og-global-120.png"
|
|
/>
|
|
</>
|
|
</Head>
|
|
<div id="page_wrapper">
|
|
<CookieBanner />
|
|
<Header />
|
|
<div className="govuk-width-container">
|
|
<Breadcrumbs
|
|
slug={appealtypes}
|
|
props={props}
|
|
setShowQuestionnaireSection={
|
|
setShowQuestionnaireSection
|
|
}
|
|
showQuestionnaireSection={showQuestionnaireSection}
|
|
/>
|
|
<ServiceBanner props={props} />
|
|
<Case
|
|
myCases={props.myCases.myCases}
|
|
searchResultsObj={
|
|
props.searchResultsObj.searchResultsObj
|
|
}
|
|
searchDetailsObj={
|
|
props.searchResultsObj.searchDetailsObj
|
|
}
|
|
myRepresentations={
|
|
props.myRepresentations.myRepresentations
|
|
}
|
|
watchedCases={props.watchedCases.watchedCases}
|
|
awaitingSubmission={
|
|
props.awaitingSubmission.awaitingSubmission
|
|
}
|
|
caseReference={
|
|
props.currentView.caseReference.currentReference
|
|
}
|
|
ticketnumber={
|
|
props.currentView.caseReference.ticketnumber
|
|
}
|
|
currentType={
|
|
props.currentView.caseReference.currentType
|
|
}
|
|
appealTypeID={
|
|
props.currentView.caseReference.appealType
|
|
}
|
|
incidentid={props.currentView.caseReference.incidentid}
|
|
representationsObj={
|
|
props.searchResultsObj.representationsObj
|
|
}
|
|
props={props}
|
|
setShowQuestionnaireSection={
|
|
setShowQuestionnaireSection
|
|
}
|
|
setCurrentReference={setCurrentReference}
|
|
showQuestionnaireSection={showQuestionnaireSection}
|
|
/>
|
|
</div>
|
|
<Footer footerLinks={footerLinks} ticketnumber={props} />
|
|
<TimeOut />
|
|
</div>
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export const getServerSideProps = wrapper.getServerSideProps(
|
|
(store) => async (ctx) => {
|
|
const { query, req, res } = ctx;
|
|
console.log("The query", query);
|
|
|
|
const { cookies } = req;
|
|
|
|
let loggedInUserCookie = cookies.pinsUser;
|
|
|
|
let thisSession = await getSession(ctx);
|
|
let loggedInUser = {};
|
|
|
|
if (!thisSession) {
|
|
console.log("not has sesssion.......");
|
|
return {
|
|
redirect: {
|
|
destination: "/auth/signin",
|
|
permanent: false,
|
|
},
|
|
};
|
|
} else {
|
|
[loggedInUser] = await Promise.all([
|
|
await getPortalLogin(thisSession.user.email),
|
|
]);
|
|
|
|
console.log(
|
|
"=====//////////=====",
|
|
thisSession,
|
|
thisSession.user.email,
|
|
loggedInUser
|
|
);
|
|
loggedInUser = loggedInUser.value[0].contactid;
|
|
}
|
|
|
|
const [accountDetails, myRepresentations] = await Promise.all([
|
|
await getPersonalAccount(loggedInUser),
|
|
await getRepsFromBlob(thisSession.user.id),
|
|
]);
|
|
|
|
const myRepresentationsDetails = await getDetails(
|
|
myRepresentations,
|
|
"myRepresentations"
|
|
);
|
|
|
|
console.log(accountDetails);
|
|
|
|
const isLPA =
|
|
accountDetails[
|
|
"pinswg_typeofinvolvement@OData.Community.Display.V1.FormattedValue"
|
|
] == "LPA"
|
|
? true
|
|
: false;
|
|
|
|
//isLPA && store.dispatch(setRepresentationCapacity("LPA"));
|
|
|
|
if (query.hasOwnProperty("state")) {
|
|
console.log("is lpa?:", isLPA);
|
|
|
|
store.dispatch(setContainerID(thisSession.user.id));
|
|
store.dispatch(setMyRepresentations(myRepresentations));
|
|
store.dispatch(
|
|
setMyRepresentationsDetails(myRepresentationsDetails)
|
|
);
|
|
|
|
function findObjectByKeyValue(arr, key, value) {
|
|
return arr.find((obj) => obj[key] === value);
|
|
}
|
|
|
|
const result = findObjectByKeyValue(
|
|
myRepresentations.value,
|
|
"repfile_name",
|
|
query.created
|
|
);
|
|
|
|
store.dispatch(
|
|
setCurrentReference({
|
|
"ticketnumber":
|
|
result.ticketnumber ||
|
|
result.caseRef ||
|
|
result.pinswg_name,
|
|
"currentReference": result.caseRef,
|
|
"currentType": "myRepresentations",
|
|
"incidentid": result.incidentID,
|
|
"appealType": result.appealType,
|
|
"repDetails": result,
|
|
})
|
|
);
|
|
|
|
store.dispatch(
|
|
setRepresentationCapacity(result.representationCapacity)
|
|
);
|
|
|
|
// console.log(
|
|
// "===========================\n getting files",
|
|
// result.filesList
|
|
// );
|
|
|
|
const repsFileListObj = await getRepsFilesBlobs(
|
|
result.containerID,
|
|
result.caseRef,
|
|
result.repfile_name
|
|
);
|
|
|
|
store.dispatch(setAccountDetails(accountDetails));
|
|
store.dispatch(setFilesForRepresentations(repsFileListObj));
|
|
|
|
return {
|
|
props: {
|
|
containerID: thisSession.user.id,
|
|
},
|
|
};
|
|
} else {
|
|
const searchResultsObj = await getBasicSearch(query.case);
|
|
const searchDetailsObj = await getSearchDetails(searchResultsObj);
|
|
|
|
store.dispatch(setContainerID(thisSession.user.id));
|
|
store.dispatch(setSearchResults(searchResultsObj));
|
|
store.dispatch(setSearchDetails(searchDetailsObj));
|
|
store.dispatch(setSearch(query.case));
|
|
store.dispatch(
|
|
setCurrentView({
|
|
"viewName": "My Representations",
|
|
"viewKey": "myRepresentations",
|
|
})
|
|
);
|
|
store.dispatch(
|
|
setCurrentReference({
|
|
"ticketnumber": searchResultsObj.value[0].ticketnumber,
|
|
"currentReference": searchResultsObj.value[0].title,
|
|
"currentType": "myRepresentations",
|
|
"incidentid": searchResultsObj.value[0].incidentid,
|
|
"appealType":
|
|
searchResultsObj.value[0].pinswg_appealcasetype,
|
|
|
|
"specialistProcess":
|
|
searchDetailsObj[0].value[0]
|
|
.pinswg_speacialistcaseprocess != null ||
|
|
searchDetailsObj[0].value[0]
|
|
.pinswg_specialistcaseprocess != null
|
|
? searchDetailsObj[0].value[0]
|
|
.pinswg_speacialistcaseprocess ||
|
|
searchDetailsObj[0].value[0]
|
|
.pinswg_specialistcaseprocess
|
|
: "",
|
|
})
|
|
);
|
|
|
|
store.dispatch(setAccountDetails(accountDetails));
|
|
|
|
// return {
|
|
// props: {
|
|
// searchResultsObj: {
|
|
// searchResultsObj: searchResultsObj,
|
|
// searchDetailsObj: searchDetailsObj,
|
|
// },
|
|
// containerID: thisSession.user.id,
|
|
// },
|
|
// };
|
|
}
|
|
}
|
|
);
|
|
|
|
const getDetails = (resultsObj, detailsType) => {
|
|
let detailsArr = [];
|
|
|
|
resultsObj =
|
|
detailsType == "mySubmittedReps" ? resultsObj : resultsObj.value;
|
|
|
|
if (detailsType == "myRepresentations") {
|
|
const repsObj = resultsObj.map((searchDetail, index) => {
|
|
detailsArr.push(
|
|
getCase(searchDetail["incidentID"]).then((data) => {
|
|
let caseID = "";
|
|
|
|
switch (detailsType) {
|
|
case "myCases":
|
|
caseID = data.pinswg_title;
|
|
break;
|
|
case "myWatchedCases":
|
|
case "mySubmittedReps":
|
|
caseID =
|
|
data[
|
|
"_pinswg_watchedcase_value@OData.Community.Display.V1.FormattedValue"
|
|
];
|
|
break;
|
|
case "awaitingSubmission":
|
|
case "myRepresentations":
|
|
caseID = data.ticketnumber;
|
|
break;
|
|
default:
|
|
caseID = data.pinswg_title;
|
|
}
|
|
return getPortalModuleDetails(
|
|
getFormCollectionByID(data.pinswg_appealcasetype)
|
|
.LogicalCollectionName,
|
|
caseID
|
|
);
|
|
})
|
|
);
|
|
});
|
|
}
|
|
|
|
// const detailsObj = resultsObj.map(async (searchDetail, index) => {
|
|
// let caseID = "";
|
|
|
|
// switch (detailsType) {
|
|
// case "myCases":
|
|
// caseID = searchDetail.pinswg_title;
|
|
// break;
|
|
// case "myWatchedCases":
|
|
// case "mySubmittedReps":
|
|
// caseID =
|
|
// searchDetail[
|
|
// "_pinswg_watchedcase_value@OData.Community.Display.V1.FormattedValue"
|
|
// ];
|
|
// break;
|
|
// case "awaitingSubmission":
|
|
// caseID = searchDetail.ticketnumber;
|
|
// break;
|
|
// case "myRepresentations":
|
|
// caseID = searchDetail.casereference;
|
|
// break;
|
|
// default:
|
|
// caseID = searchDetail.pinswg_title;
|
|
// }
|
|
|
|
// console.log(detailsType, " case id : ", caseID);
|
|
|
|
// searchDetail.pinswg_appealcasetype != null &&
|
|
// detailsArr.push(
|
|
// getPortalModuleDetails(
|
|
// getFormCollectionByID(searchDetail.pinswg_appealcasetype)
|
|
// .LogicalCollectionName,
|
|
// caseID
|
|
// // detailsType != "myWatchedCases"
|
|
// // ? searchDetail.ticketnumber
|
|
// // : searchDetail[
|
|
// // "_pinswg_watchedcase_value@OData.Community.Display.V1.FormattedValue"
|
|
// // ]
|
|
// )
|
|
// );
|
|
// });
|
|
|
|
let detArr = Promise.all(detailsArr);
|
|
console.log(detArr);
|
|
return detArr;
|
|
};
|
|
|
|
// const mapDispatchToProps = (dispatch) => {
|
|
// return {
|
|
// setAccountDetails: (loggedInUser) => {
|
|
// dispatch(setAccountDetails(loggedInUser));
|
|
// },
|
|
// };
|
|
// };
|
|
|
|
const mapStateToProps = (state) => {
|
|
return {
|
|
accountDetails: state.accountDetails,
|
|
currentView: state.currentView,
|
|
search: state.search,
|
|
searchResultsObj: state.searchResultsObj,
|
|
formData: state.formData,
|
|
appealType: state.appealType,
|
|
form: state.form,
|
|
myCases: state.myCases,
|
|
watchedCases: state.watchedCases,
|
|
myRepresentations: state.myRepresentations,
|
|
awaitingSubmission: state.awaitingSubmission,
|
|
};
|
|
};
|
|
|
|
export default connect(mapStateToProps)(RepresentationF);
|