import { JSONPath as jsonpath } from "jsonpath-plus"; import useTranslation from "next-translate/useTranslation"; import Link from "next/link"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; import { connect } from "react-redux"; import { formValueSelector, Field, reduxForm } from "redux-form"; import xpath from "xpath"; import fieldLookup from "../../data/crmfieldlookuptranslations.json"; import { setCurrentSection, setFormComplete } from "../../store/appealType/action"; import BuildCheckRow from "./buildcheckrow"; import { bytesToSize, getThumbnailIconByExtension, updateLinks, getDocLink } from "../utils"; import { dedupeFilesListByName, removeDuplicatesByKey } from "../../lib/newappeal/fileListHelpers"; import { generateAppealPDFEffect, sendCaseCompleteMessageEffect } from "../../lib/newappeal/journeyEffects"; import CheckSectionHeading from "./buildCheckSection/CheckSectionHeading"; import ConfirmationCheckboxGroup from "./buildCheckSection/ConfirmationCheckboxGroup"; import DocsOfflineNotice from "./buildCheckSection/DocsOfflineNotice"; import FinalisingStatePanel from "./buildCheckSection/FinalisingStatePanel"; import SectionReviewList from "./buildCheckSection/SectionReviewList"; import SubmitActionsPanel from "./buildCheckSection/SubmitActionsPanel"; import resolveCrmDisplayValue from "../../lib/i18n/crmDisplay/resolveCrmDisplayValue"; let BuildCheckSection = (props) => { useEffect(() => { setFormComplete(); }, []); let { t } = useTranslation(); const router = useRouter(); const { locale } = router; const { formXML, sectionCount, onSubmit, handleSubmit, formTitle, setCurrentSection, updateCurrentSection, mandatoryFieldsData, docsOffline } = props; const legacyProps = props.props; const legacyAppealType = legacyProps.appealType; const legacyFormState = legacyProps.form; const legacyAccountDetails = legacyProps.accountDetails; const parser = new DOMParser(); var doc = parser.parseFromString(props.formXML, "text/xml"); var titles = xpath.select( "//form/tabs/tab[*]/labels/label/@description", doc ); var rowXML = xpath.select( "/form/tabs/tab[*]/columns//sections/section/rows/row", doc ); var titleList = xpath.select( "//form/tabs/tab[*]/labels/label/@description", doc ); const handleParam = (setValue) => (e) => setValue(e.target.value); // const basicSearch = (event) => { // event.preventDefault(); // //console.log(query); // // /searchresults // }; const onHandleSubmit = (values) => { //alert(1); //updateCaseProgress(values); // setCurrentSection(9999); alert(1); }; let buildAppealFilesArray = []; //console.log("attached docs: - ", buildAppealFilesArray); buildAppealFilesArray = legacyAppealType.fileList?.value[0] || []; //let filesUploadObj = buildAppealFilesArray; // let filesUploadObj = props.appealType.fileList.hasOwnProperty("value") // ? props.appealType.fileList.value[0] // : []; // for (let key in filesUploadObj) { // typeof filesUploadObj[key].name != "undefined" && // buildAppealFilesArray.push({ // "name": filesUploadObj[key].name, // "size": filesUploadObj[key].contentLength, // }); // } buildAppealFilesArray.filter(function (item, idx) { return item.name; }); //console.log(buildAppealFilesArray); buildAppealFilesArray = removeDuplicatesByKey( buildAppealFilesArray, "name" ); let pdfObj = legacyFormState.appealForm.values; pdfObj = updateLinks(pdfObj); Object.assign(pdfObj, { "filesList": buildAppealFilesArray, "containerID": legacyAccountDetails.containerID, "casefolderID": props.appealType.caseReference.ticketnumber }); const [confirmSections, setConfirmSections] = useState(false); const [finaliseAppealProcess, setFinaliseAppealProcess] = useState(false); const [downloadAppealForm, setDownloadAppealForm] = useState(false); const [downloadInProgress, setDownloadInProgress] = useState(false); const FieldsTranslations = (label) => { const router = useRouter(); const { locale } = router; const { appealtypes } = router.query; let formObj = jsonpath({ path: "$['" + appealtypes + "']", json: fieldLookup, eval: true }); let labelTrans = resolveCrmDisplayValue({ value: label, locale, translations: formObj }); return labelTrans; }; const finaliseAppeal = async () => { //console.log("finalising appeal:", pdfObj); const uniqueArray = dedupeFilesListByName(pdfObj.filesList); pdfObj.filesList = uniqueArray; pdfObj.locale = locale; confirmSections ? (setFinaliseAppealProcess(true), await generateAppealPDFEffect( pdfObj, legacyAccountDetails.containerID, props.appealType.caseReference.ticketnumber, router.query.appealtypes, pdfObj.filesList // props.appealType.fileList ) .then((data) => { console.log("have generated pdf:", data); sendCaseCompleteMessageEffect( legacyAccountDetails.containerID, props.appealType.caseReference.ticketnumber, legacyAccountDetails.accountDetails .pinswg_typeofinvolvement ); }) .then(() => { //console.log("have sent complete message :"); setCurrentSection(9999); })) : setConfirmSections(false); }; const triggerAppealDownload = async () => { if (!downloadAppealForm) { return; } if (downloadInProgress) { return; } try { setDownloadInProgress(true); const uniqueArray = dedupeFilesListByName(pdfObj.filesList); pdfObj.filesList = uniqueArray; pdfObj.locale = locale; const containerID = props.accountDetails?.containerID || legacyProps?.accountDetails?.containerID || legacyProps?.props?.accountDetails?.containerID; const caseRef = props?.currentView?.caseReference?.ticketnumber || props?.appealType?.caseReference?.ticketnumber; if (!containerID || !caseRef) { console.error( "Appeal Form download skipped: missing containerID or case reference", { containerID, caseRef } ); return; } const pdfBlob = await generateAppealPDFEffect( pdfObj, containerID, caseRef, router.query.appealtypes, pdfObj.filesList, { download: true } ); if (pdfBlob) { const blobUrl = window.URL.createObjectURL(pdfBlob); const anchor = document.createElement("a"); anchor.href = blobUrl; anchor.download = `${"appealForm"}.pdf`; document.body.appendChild(anchor); anchor.click(); anchor.remove(); window.URL.revokeObjectURL(blobUrl); } } catch (error) { console.error("Appeal Form download failed", error); } finally { setDownloadInProgress(false); } }; let ShowDocLinks = getDocLink(docsOffline); return (