import useSWR from "swr"; import { Field, reduxForm } from "redux-form"; import { useRouter } from "next/router"; import DatePicker, { registerLocale, setDefaultLocale } from "react-datepicker"; import cy from "date-fns/locale/cy"; import React, { useCallback, useEffect, useMemo, useState } from "react"; import "react-datepicker/dist/react-datepicker.css"; import moment from "moment"; import jsonpath from "jsonpath"; import fieldLookup from "../../data/crmfieldlookuptranslations.json"; import pickListLookup from "../../data/picklistLookups.json"; import useTranslation from "next-translate/useTranslation"; import FileUpload from "../newappeal/fileupload"; import Dropzone, { useDropzone } from "react-dropzone"; import _ from "lodash"; import { connect, useDispatch } from "react-redux"; import { getFilesFromBlobHashed, deleteBlob, downloadBlob, } from "../../actions"; import { setFilesForAppeal } from "../../store/appealType/action"; import Link from "next/link"; import { addYears, addMonths, addDays, subYears, subMonths, subDays, parseISO, } from "date-fns"; const RenderTextfield = ({ id, className, rows, datafieldname, name, label, input, errorMsg, meta: { touched, error }, ...custom }) => { return ( <>
{touched && error && ( Error:{" "} {errorMsg} )}
); }; export function Textfield(props) { const { name, label, validation, ticketnumber, form, formProps, parentField, parentFieldShowOnValue, hint, } = props; const required = (value) => (value ? undefined : "Required"); let { t } = useTranslation(); if (name == "pinswg_name") { return ( <>
{t("newappeal:new-appeal-introduction-paragraph")}
); } else { var showIfHasParentShowValue = (parentField != false && !_.isEmpty(formProps[form]) && _.has(formProps[form].values, parentField) && formProps[form].values[parentField]) == parentFieldShowOnValue; // console.log(parentField, showIfHasParentShowValue); // console.log(parentField, formProps, form); //console.log("validation props:", validation); return (
{parentField != false ? ( showIfHasParentShowValue && ( ) ) : ( )}
); } } const RenderMultiline = ({ id, className, rows, datafieldname, name, label, input, errorMsg, meta: { touched, error }, ...custom }) => { return ( <>
{/* */} {touched && error && ( Error:{" "} {touched && ((error && ( {errorMsg ? errorMsg : error} )) || (warning && {warning}))} )}
); }; export function MultiLinefield(props) { const { name, label, form, formProps, parentField, parentFieldShowOnValue, validation, } = props; const required = (value) => (value ? undefined : "Is required"); var showIfHasParentShowValue = parentField != false && !_.isEmpty(formProps[form]) && _.has(formProps[form].values, parentField) && parentFieldShowOnValue.indexOf( formProps[form].values[parentField].toString() ) > -1; (showIfHasParentShowValue == parentField) != false && showIfHasParentShowValue; //console.log(showIfHasParentShowValue, formProps[form].values[parentField]); return ( <> {parentField != false ? ( showIfHasParentShowValue && (

Do not include personal or financial information.
) ) : (

Do not include personal or financial information.
)} ); } const RenderDatePicker = ({ datafieldname, name, label, id, errorMsg, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const router = useRouter(); registerLocale("cy", cy); var startDateArr = custom.dateStart != "0" ? custom.dateStart.split("") : custom.dateStart; var endDateArr = custom.dateEnd != "0" ? custom.dateEnd.split("") : custom.dateEnd; var minDate = startDateArr == 0 ? new Date() : startDateArr[0] == "-" ? startDateArr[2] == "y" ? subYears(new Date(), startDateArr[1]) : startDateArr[2] == "m" ? subMonths(new Date(), startDateArr[1]) : subDays(new Date(), startDateArr[1]) : startDateArr[2] == "y" ? addYears(new Date(), startDateArr[1]) : startDateArr[2] == "m" ? addMonths(new Date(), startDateArr[1]) : addDays(new Date(), startDateArr[1]); var maxDate = endDateArr == 0 ? new Date() : startDateArr[0] == "-" ? startDateArr[2] == "y" ? subYears(new Date(), startDateArr[1]) : startDateArr[2] == "m" ? subMonths(new Date(), startDateArr[1]) : subDays(new Date(), startDateArr[1]) : startDateArr[2] == "y" ? addYears(new Date(), startDateArr[1]) : startDateArr[2] == "m" ? addMonths(new Date(), startDateArr[1]) : addDays(new Date(), startDateArr[1]); return ( <>
{touched && error && ( Error: {" "} {errorMsg} )} {/* {value}
{moment(value).format("DD/MM/YY")}
*/}
); }; export function DateFieldPicker(props) { const { name, label, parentField, form, formProps, parentFieldShowOnValue, validation, dateStart, dateEnd, } = props; const required = (value) => (value ? undefined : "Required"); var showIfHasParentShowValue = (parentField != false && !_.isEmpty(formProps[form]) && _.has(formProps[form].values, parentField) && formProps[form].values[parentField]) == parentFieldShowOnValue; return (
{parentField != false ? ( showIfHasParentShowValue && ( ) ) : ( )}
); } export function DateField(props) { const { name, label } = props; return (
); } const RenderYesNo = ({ datafieldname, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { return ( <>
{touched && error && ( Error: {" "} {errorMsg} )}
{Object.keys(options).map((key, index) => (
{ let docListObj = custom.documentList; if ( custom.requiredDocumentValue == "Yes" || custom.requiredDocumentValue == "Ydw" ) { e.target.value == "Ydw" || e.target.value == "Yes" ? (docListObj = Object.assign( docListObj, { ["documentCheckList_" + id]: custom.requiredDocumentLabel, } )) : delete docListObj[ "documentCheckList_" + id ]; custom.setDocumentsList(docListObj); } }} />
))}
); }; export function YesNofield(props) { const router = useRouter(); let { t } = useTranslation(); const { name, label, inline, form, formProps, validation, parentFieldShowOnValue, parentField, } = props; const yesNo = router.locale == "cy" ? ["Ydw", "Na"] : ["Yes", "No"]; const required = (value) => (value ? undefined : "Required"); var showIfHasParentShowValue = parentField != false && !_.isEmpty(formProps[form]) && _.has(formProps[form].values, parentField) && parentFieldShowOnValue.indexOf( formProps[form].values[parentField].toString() ) > -1; (showIfHasParentShowValue == parentField) != false && showIfHasParentShowValue; return ( <> {parentField != false ? ( showIfHasParentShowValue && ( ) ) : ( )} ); } const RenderRadio = ({ datafieldname, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { let { t } = useTranslation(); return ( <>
{touched && error && ( Error: {" "} {errorMsg} )}
{" "} {custom.hint != false && (
{t(custom.hint)}
)} {Object.keys(options).map((key, index) => (
{ let docListObj = custom.documentList; if ( custom.requiredDocumentValue == "Yes" ) { e.target.value != "846040000" ? (docListObj = Object.assign( docListObj, { ["documentCheckList_" + id]: custom.requiredDocumentLabel, } )) : delete docListObj[ "documentCheckList_" + id ]; custom.setDocumentsList(docListObj); } }} />
))}
); }; export function Radiofield(props) { const { name, label, datafieldname, form, formProps, parentFieldShowOnValue, parentField, validation, } = props; const router = useRouter(); const required = (value) => (value ? undefined : "Required"); // console.log(props.options); let { t } = useTranslation(); const fieldOptions = props.options .slice(1, props.options.length - 1) .split(","); //parentFieldShowOnValue var showIfHasParentShowValue = parentField != false && !_.isEmpty(formProps[form]) && _.has(formProps[form].values, parentField) && parentFieldShowOnValue.indexOf( formProps[form].values[parentField].toString() ) > -1; (showIfHasParentShowValue == parentField) != false && showIfHasParentShowValue; return ( <> {parentField != false ? ( showIfHasParentShowValue && ( ) ) : ( )} ); } const RenderCheckBox = ({ datafieldname, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { return ( <>
{touched && error && ( Error: {" "} {errorMsg} )}
{Object.keys(options).map((key, index) => (
))}
); }; export function CheckBoxfield(props) { const router = useRouter(); console.log(props); const required = (value) => (value ? undefined : "Required"); const fieldOptions = router.locale == "cy" ? ["Ydw", "Na", "2323"] : ["Yes", "No", "23232"]; return ( ); } const RenderPickList = ({ datafieldname, picklistData, name, label, input, meta: { touched, errorStr }, }) => { let { t } = useTranslation(); var dropdownObj = jsonpath.query( picklistData, "$..value[?(@.LogicalName=='" + datafieldname + "')]..Options" ); dropdownObj = dropdownObj[0]; return (
{touched && errorStr && {errorStr}}
); }; export function PickList(props) { const { name, label, datafieldname } = props; return (
); } export function NumericField(props) { const { name, label, validation, form, formProps, parentFieldShowOnValue, parentField, } = props; const required = (value) => (value ? undefined : "Required"); //parentFieldShowOnValue var showIfHasParentShowValue = parentField != false && !_.isEmpty(formProps[form]) && _.has(formProps[form].values, parentField) && parentFieldShowOnValue.indexOf( formProps[form].values[parentField].toString() ) > -1; (showIfHasParentShowValue == parentField) != false && showIfHasParentShowValue; //console.log("parentField:", parentField, showIfHasParentShowValue); return ( <> {parentField != false ? ( showIfHasParentShowValue && (
) ) : (
)} ); } export function DecimalField(props) { const { name, label, validation, form, formProps, parentFieldShowOnValue, parentField, } = props; const required = (value) => (value ? undefined : "Required"); //parentFieldShowOnValue var showIfHasParentShowValue = parentField != false && !_.isEmpty(formProps[form]) && _.has(formProps[form].values, parentField) && parentFieldShowOnValue.indexOf( formProps[form].values[parentField].toString() ) > -1; (showIfHasParentShowValue == parentField) != false && showIfHasParentShowValue; //console.log("parentField:", parentField, showIfHasParentShowValue); return ( <> {parentField != false ? ( showIfHasParentShowValue && (
) ) : (
)} ); } const RenderCaseID = {}; export function ReadOnlyfield(props) { const { name, label, value } = props; //console.log(props.value.refno); return ( <>
); } export const FieldsTranslations = (label) => { const router = useRouter(); const { locale } = router; const { appealtypes } = router.query; let formObj = jsonpath.query(fieldLookup, "$['" + appealtypes + "']"); let labelTrans = router.locale == "cy" ? jsonpath.query( formObj, "$..[?(@.value=='" + label + "')].value_cy" ) : label; return labelTrans; }; const PickListTranslations = (optionValue) => { const router = useRouter(); const { locale } = router; const { appealtypes } = router.query; //console.log(optionValue); let optionTrans = router.locale == "cy" ? jsonpath.query( pickListLookup, '$..[?(@.value=="' + optionValue + '")].value_cy' ) : optionValue; //console.log(optionTrans, optionValue); return optionTrans; }; export function FileUploadField(props) { return ( <>

{props.label}

); } const baseStyle = { display: "flex", flexDirection: "column", alignItems: "center", padding: "20px", borderWidth: 2, borderRadius: 2, borderColor: "#eeeeee", borderStyle: "dashed", backgroundColor: "#fafafa", color: "#bdbdbd", transition: "border .3s ease-in-out", }; const activeStyle = { borderColor: "#2196f3", }; const acceptStyle = { borderColor: "#00e676", }; const rejectStyle = { borderColor: "#ff1744", }; const RenderFileUpload = (field) => { const files = field.input.value; let { t } = useTranslation(); const style = useMemo( () => ({ ...baseStyle, // ...(isDragActive ? activeStyle : {}), // ...(isDragAccept ? acceptStyle : {}), // ...(isDragReject ? rejectStyle : {}), }), [] // [isDragActive, isDragReject, isDragAccept] ); const [filesList, setFilesList] = useState([]); const thumbs = filesList.map((file) => (
{file.name} -{" "} {file.name} ({file.size / 1024}kb)
)); function bytesToSize(bytes) { var sizes = ["Bytes", "KB", "MB", "GB", "TB"]; if (bytes == 0) return "0 Byte"; var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); return Math.round(bytes / Math.pow(1024, i), 2) + " " + sizes[i]; } const getThumbnailIcon = (fileObj, fileType) => { switch (fileType) { case "text/html": return "/assets/images/documenttypes/html.png"; break; case "text/plain": return "/assets/images/documenttypes/txt.png"; break; case "application/msword": return "/assets/images/documenttypes/doc.png"; break; case "application/pdf": return "/assets/images/documenttypes/pdf.png"; break; case "application/vnd.openxmlformats-officedocument.wordprocessingml.document": return "/assets/images/documenttypes/docx.png"; break; case "text/csv": return "/assets/images/documenttypes/csv.png"; break; case "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": return "/assets/images/documenttypes/xlsx.png"; break; case "application/zip": return "/assets/images/documenttypes/zip.png"; break; case "image/jpeg": case "image/png": return URL.createObjectURL(fileObj); break; default: return "/assets/images/documenttypes/txt.png"; break; } }; const getThumbnailIconByExtension = (blobName) => { let fileType = blobName.slice(blobName.lastIndexOf(".") + 1); switch (fileType) { case "html": return "/assets/images/documenttypes/html.png"; break; case "txt": return "/assets/images/documenttypes/txt.png"; break; case "doc": return "/assets/images/documenttypes/doc.png"; break; case "pdf": return "/assets/images/documenttypes/pdf.png"; break; case "docx": return "/assets/images/documenttypes/docx.png"; break; case "csv": return "/assets/images/documenttypes/csv.png"; break; case "xlsx": return "/assets/images/documenttypes/xlsx.png"; break; case "zip": return "/assets/images/documenttypes/zip.png"; break; case "jpeg": case "jpg": return "/assets/images/documenttypes/jpg.png"; case "png": return "/assets/images/documenttypes/png.png"; break; default: return "/assets/images/documenttypes/txt.png"; break; } }; const getDocumentType = (docCode) => { switch (docCode) { case "000001": return "000001"; break; case "000002": return "000002"; break; case "000003": return "000003"; break; case "000004": return "000004"; break; case "000005": return "000005"; break; case "000006": return "000006"; break; case "000007": return "000007"; break; case "000008": return "000008"; break; case "000009": return "000009"; break; case "000010": return "000010"; break; case "000011": return "000011"; break; case "000012": return "000012"; break; case "000013": return "000013"; break; case "000014": return "000014"; break; case "000015": return "000015"; break; default: return "000000"; } }; const filelistObj = field.fileList || {}; const blobList = jsonpath.query( filelistObj, "$..[?(@.documentType=='" + field.documentTypeCode + "')]" ); const deleteThisBlob = async ( containerName, blobName, deleteblobhash, getblobshash, casefolderID ) => { //console.log(containerName, blobName, deleteblobhash); deleteBlob(containerName, blobName, deleteblobhash, casefolderID) .then((data) => data) .then(() => { getFilesFromBlobHashed( containerName, getblobshash, casefolderID ).then((newfilelist) => field.setFilesForAppeal(newfilelist)); }); }; return ( <> { const renamedAcceptedFiles = filesToUpload.map( (file) => new File( [file], `${getDocumentType(field.documentTypeCode)}_${ file.name }`, { type: file.type, } ) ); field.input.onChange(renamedAcceptedFiles); }} > {({ getRootProps, getInputProps }) => ( <> {/* {field.hint != false && (
ss{t(field.hint)}
)}
*/}
{" "}
{t( "newappeal:new-appeal-fileupload-drop-label" )}
( {t( "newappeal:new-appeal-fileupload-file-list-label" )} )
)}
{field.meta.touched && field.meta.error && ( {field.meta.error} )} {files && Array.isArray(files) && (
    {files.map((file, i) => (
    {file.name} {file.name.slice(file.name.indexOf("_") + 1)} ( ({bytesToSize(file.size)})
    ))}
)} {blobList.map((blob, i) => (
{ deleteThisBlob( field.containerID, blob.name, blob.hasheddeletepath, blob.hashgetblobs, field.ticketnumber ); }} title="Remove this file" > −
{blob.name} {blob.name.slice(blob.name.indexOf("_") + 1)} ( {bytesToSize(blob.contentLength)})
))}{" "} ); };