import { JSONPath as jsonpath } from "jsonpath-plus"; import _ from "lodash"; import useTranslation from "next-translate/useTranslation"; import Link from "next/link"; import { useRouter } from "next/router"; import { parseCookies } from "nookies"; import { connect } from "react-redux"; import { deleteAwaitingSubmissions, deleteWatchedCases, getAwaitingSubmissionProxy, getPortalModuleDetailsProxy, getWatchedCasesProxy } from "../../actions/services/portalService"; import { getFormCollectionByID, getDetailsProxy } from "../../components/utils"; import transLookup from "../../data/lookuptranslations.json"; import { setAwaitingSubmission, setAwaitingSubmissionDetails } from "../../store/awaitingSubmission/action"; import { setCurrentReference } from "../../store/currentView/action"; import { setSearchDetails, setSearchResults } from "../../store/searchOutput/action"; import { setWatchedCases, setWatchedCasesDetails } from "../../store/watchedCases/action"; import { planningappeals78_pdf } from "../../components/pdftemplates/planningappeals78_pdf"; import { other_pdf } from "../../components/pdftemplates/other_pdf"; import { PDFDownloadLink, pdf } from "@react-pdf/renderer"; const TopThree = (props) => { let { t } = useTranslation(); const { currentView, showTopThree, showDetails, setCurrentReference, topThreeType, setWatchedCases, setWatchedCasesDetails, setAwaitingSubmission, setAwaitingSubmissionDetails, setSearchResults, setSearchDetails, showLoginCheck } = props; const router = useRouter(); const { locale } = router; let topthreeRow = []; let showTopThreeArr; showTopThreeArr = props.myReps ? showTopThree : showTopThree.value; Object.keys(showTopThreeArr).map((key, index) => { let createdDate = parseInt(showTopThreeArr[key].createdon); showTopThreeArr[key].createdDate = createdDate; }); showTopThreeArr.sort(function compare(a, b) { var dateA = new Date(a.createdDate); var dateB = new Date(b.createdDate); return dateB - dateA; }); // check start function sortByISODate(arr, dateKey) { return arr.sort((a, b) => new Date(b[dateKey]) - new Date(a[dateKey])); } function sortByField(arr, field, ascending = true) { return arr.sort((a, b) => { if (a[field] < b[field]) return ascending ? -1 : 1; if (a[field] > b[field]) return ascending ? 1 : -1; return 0; // Equal }); } //let showTopThreeArr = showTopThree.value; let showTopThreeArrDets = showDetails; showTopThreeArr = sortByField(showTopThreeArr, "ticketnumber"); //console.log("showTopThreeArr:", showTopThreeArr); showTopThreeArrDets = sortByField(showTopThreeArrDets, "pinswg_name"); //console.log("showTopThreeArrDets:", showTopThreeArrDets); showTopThreeArrDets = showTopThreeArrDets.flatMap((item) => item.value); let mergedArray = showTopThreeArr.map((item1) => { let item2 = showTopThreeArrDets.find( (item) => item.pinswg_name === item1.ticketnumber ); return { ...item1, ...item2 }; }); showTopThreeArr = mergedArray; showTopThreeArr = sortByISODate(showTopThreeArr, "createdon"); // check end const raisedDate = (datePart) => { var dateObj = new Date(datePart); return dateObj.toLocaleString(); }; const deleteItem = (caseID, topThreeType) => { let cookies = parseCookies(); //console.log("sssss", caseID, topThreeType); topThreeType == "watchedCases" && deleteWatchedCases(caseID) .then((data) => data) .then(() => { getWatchedCasesProxy( props.accountDetails.loggedinUserId ).then((data) => { let showWatchedCases = (submittedArr) => { const required = submittedArr.value.filter((el) => { return ( el.pinswg_representationsubmitted == null ); }); let newObj = {}; return Object.assign(newObj, { "@odata.count": required.length, "value": required }); }; let filteredWatchedCases = showWatchedCases(data); (setWatchedCases(filteredWatchedCases), getDetailsProxy( filteredWatchedCases, "myWatchedCases" ).then((data) => { setWatchedCasesDetails(data); })); }); }); topThreeType == "awaitingSubmission" && deleteAwaitingSubmissions(caseID) .then((data) => { return data; }) .then(() => { getAwaitingSubmissionProxy(cookies.pinsUser).then( (data) => { (setAwaitingSubmission(data), getDetailsProxy( data, "awaitingSubmission" ).then((data) => { //console.log( // "submission get details:", // data // ); setAwaitingSubmissionDetails(data); })); } ); }); }; const getIncidentId = (topThreeType, objArr) => { switch (topThreeType) { case "myCases": return objArr.incidentid; break; case "watchedCases": return objArr._pinswg_watchedcase_value; break; case "myRepresentations": return objArr.ticketnumber; break; case "awaitingSubmission": return objArr.ticketnumber; break; default: // code block } }; const downloadPDF = async (docProps, ticketnumber) => { try { const res = await fetch("/api/file/generateappealpdfcopy", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ docProps }) }); if (!res.ok) throw new Error("PDF generation failed"); const blob = await res.blob(); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = `Appeal_${ticketnumber || "summary"}.pdf`; a.click(); URL.revokeObjectURL(url); } catch (err) { console.error("Download error:", err); alert("Could not generate PDF."); } }; let topThreeOnlyArr = showTopThreeArr.slice(0, 3); Object.keys(topThreeOnlyArr).map((key, index) => { topthreeRow.push(
{t("myportal:case-reference")}: {topThreeType == "myCases" && showTopThreeArr[key].pinswg_publishtoweb === false ? ( <> {showTopThreeArr[key].ticketnumber}{" "} {" "} - {t("myportal:appeal-pending-label")} { confirm( "Do you want to download a pdf copy of your appeal for " + showTopThreeArr[key] .ticketnumber ) && downloadPDF( showTopThreeArr[key].incidentid, showTopThreeArr[key] .ticketnumber ); }} > {showTopThreeArr[key].ticketnumber} ) : ( { (setSearchResults( props.props[topThreeType][topThreeType] ), setSearchDetails( props.props[topThreeType][ topThreeType + "Details" ] ), setCurrentReference({ "statuscode": showTopThreeArr[key].statuscode, "ticketnumber": showTopThreeArr[key] .ticketnumber, "currentReference": topThreeType != "watchedCases" ? topThreeType != "myRepresentations" ? showTopThreeArr[key] .ticketnumber : showTopThreeArr[key][ "_pinswg_case_value@OData.Community.Display.V1.FormattedValue" ] : showTopThreeArr[key] .ticketnumber, "currentType": topThreeType, "incidentid": getIncidentId( topThreeType, showTopThreeArr[key] ), "appealType": showTopThreeArr[key] .pinswg_appealcasetype })); }} > {showTopThreeArr[key].pinswg_title} {/* {topThreeType != "watchedCases" ? topThreeType != "myRepresentations" ? topThreeType == "mySubmittedReps" ? showTopThreeArr[key].pinswg_title : showTopThreeArr[key].ticketnumber : showTopThreeArr[key][ "_pinswg_case_value@OData.Community.Display.V1.FormattedValue" ] : showTopThreeArr[key][ "_pinswg_watchedcase_value@OData.Community.Display.V1.FormattedValue" ]}{" "} */} )} {topThreeType == "watchedCases" && !props.myReps && (
)} {topThreeType == "awaitingSubmission" && (
)}
{t("myportal:appeal-type-label")}:{" "} {router.locale == "cy" ? jsonpath({ path: '$..[?(@ && @.value=="' + showTopThreeArr[key][ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" ] + '")].value_cy', json: transLookup, eval: true }) : showTopThreeArr[key][ "pinswg_appealcasetype@OData.Community.Display.V1.FormattedValue" ] || ""}
{/* )} */} {/* {topThreeType != "awaitingSubmission" ? ( */}
{t("myportal:case-address")}:{" "} {_.isEmpty(showTopThreeArr[key]) ? t("myportal:case-address-not-entered") : _.isEmpty(showTopThreeArr[key]) ? t("myportal:case-address-not-entered") : _.isEmpty(showTopThreeArr[key]) ? t("myportal:case-address-not-entered") : _.isEmpty( showTopThreeArr[key] .pinswg_siteaddressline1 ) ? t("myportal:case-address-not-entered") : showTopThreeArr[key] .pinswg_siteaddressline1 + (!_.isEmpty( showTopThreeArr[key] .pinswg_siteaddressline2 ) ? ", " + showTopThreeArr[key] .pinswg_siteaddressline2 : "") + (!_.isEmpty( showTopThreeArr[key] .pinswg_siteaddresstown ) ? ", " + showTopThreeArr[key] .pinswg_siteaddresstown : "")}
{showTopThreeArr[key].pinswg_appellantagent != null && (
{showTopThreeArr[key].pinswg_appellantagent != 846040000 && ( {t("myportal:raised-by-label")}: )} {showTopThreeArr[key].pinswg_appellantagent != 846040000 && (showTopThreeArr[key].pinswg_agentcompanyname != null ? showTopThreeArr[key] .pinswg_agentcompanyname + ", " : "") + showTopThreeArr[key].pinswg_agentfirstname + " " + showTopThreeArr[key].pinswg_agentlastname}
)} {showTopThreeArr[key].pinswg_appellantfirstname != null && (
{t("myportal:on-behalf-of-label")}: {showTopThreeArr[key].pinswg_appellantfirstname + " " + showTopThreeArr[key].pinswg_appellantlastname}
)}
{router.locale == "cy" ? "ACLl" : "LPA"}: {router.locale == "cy" ? jsonpath({ path: '$..[?(@ && @.value=="' + showTopThreeArr[key][ "_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" ] + '")].value_cy', json: transLookup, eval: true }) : showTopThreeArr[key][ "_pinswg_associatedlpa_value@OData.Community.Display.V1.FormattedValue" ] || ""}
{topThreeType == "awaitingSubmission" ? (
Case Incomplete, not submitted
) : ( "" )} {topThreeType != "watchedCases" && (
{t("myportal:date-raised")}: {" "} {raisedDate(showTopThreeArr[key].createdon)}
)} {topThreeType == "watchedCases" && props.myReps && showTopThreeArr[key].pinswg_representationsubmitted != null && (
{t("myportal:representation-submitted")}: {" "} {raisedDate( showTopThreeArr[key] .pinswg_representationsubmitted )}
)} {topThreeType == "watchedCases" && props.myReps && showTopThreeArr[key].pinswg_representationtype != null && (
{t("myportal:representation-type")}: {" "} {showTopThreeArr[key].pinswg_representationtype}
)}
); }); let noRecordsLabel = ""; switch (topThreeType) { case "watchedCases": noRecordsLabel = t("myportal:norecords-watched-cases"); break; case "myRepresentations": noRecordsLabel = t("myportal:norecords-representations"); break; case "myCases": noRecordsLabel = t("myportal:norecords-cases"); break; case "awaitingSubmission": noRecordsLabel = t("myportal:norecords-awaiting-submissions"); break; } return ( <> {topthreeRow.length == 0 ? (
{noRecordsLabel}
) : ( topthreeRow )} ); }; const mapDispatchToProps = (dispatch) => { return { setCurrentReference: (currentReference) => { dispatch(setCurrentReference(currentReference)); }, setWatchedCases: (watchedCases) => { dispatch(setWatchedCases(watchedCases)); }, setWatchedCasesDetails: (watchedCasesDetails) => { dispatch(setWatchedCasesDetails(watchedCasesDetails)); }, setAwaitingSubmission: (awaitingSubmission) => { dispatch(setAwaitingSubmission(awaitingSubmission)); }, setAwaitingSubmissionDetails: (awaitingSubmissionDetails) => { dispatch(setAwaitingSubmissionDetails(awaitingSubmissionDetails)); }, setSearchResults: (searchResults) => { dispatch(setSearchResults(searchResults)); }, setSearchDetails: (searchDetails) => { dispatch(setSearchDetails(searchDetails)); } }; }; export default connect(null, mapDispatchToProps)(TopThree);