import useTranslation from "next-translate/useTranslation"; import dynamic from "next/dynamic"; import Link from "next/link"; import router from "next/router"; import React, { useMemo, useState } from "react"; import DatePicker from "react-datepicker"; import "react-datepicker/dist/react-datepicker.css"; import Dropzone from "react-dropzone"; import "react-quill-new/dist/quill.snow.css"; import { Field } from "redux-form"; const ReactQuill = dynamic(() => import("react-quill-new"), { ssr: false }); import { addDays, addMonths, addYears, parseISO, subDays, subMonths, subYears, } from "date-fns"; import { bytesToSize, getThumbnailIconByExtension } from "../../utils"; import { useRouter } from "next/router"; export const RenderRadioList = ({ datafieldname, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const required = (value) => (value ? undefined : "Required"); return ( <>
{touched && error && ( Error: {" "} {errorMsg} )}
{Object.keys(options).map((key, index) => (
))}
); }; export const RenderRadioListWithText = ({ datafieldname, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const required = (value) => (value ? undefined : "Required"); const router = useRouter(); return ( <>
{touched && error && ( Error: {" "} {errorMsg} )}
{Object.keys(options).map((key, index) => (
{value === options[key] && (
)}
))}
); }; export const RenderCondtionalRadioList = ({ datafieldname, legend, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const required = (value) => (value ? undefined : "Required"); let { t } = useTranslation(); return ( <>
{touched && error && ( Error: {" "} {errorMsg} )}
e.g. ‘Owners of Numbers 1-5 High Street‘, or ‘Mr and Mrs Smith‘ or ‘The executors of Mr Evans‘ estate‘
{Object.keys(options).map((key, index) => (
{value == t("myrepresentations:questionnaire-yes") && options[key] == t( "myrepresentations:questionnaire-yes" ) && (
)}
))}
); }; export const RenderLPACondtionalRadioList = ({ datafieldname, legend, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const required = (value) => (value ? undefined : "Required"); //console.log(error); return ( <>
{touched && error && ( Error: {" "} {errorMsg} )}
{Object.keys(options).map((key, index) => (
{value == custom.optionSelect && options[key] == custom.optionSelect && (
)}
))}
); }; export const RenderPickList = ({ datafieldname, name, label, input, optionsArr, meta: { touched, error }, errorMsg, ...custom }) => { // console.log(custom.disabled); let { t } = useTranslation(); return ( <>
{touched && error && ( Error:{" "} {errorMsg} )}
); }; export const RenderTextfield = ({ id, rows, datafieldname, name, label, input, errorMsg, type, className, meta: { touched, error }, ...custom }) => { const required = (value) => (value ? undefined : "Required"); return ( <>
{touched && error && ( Error:{" "} {errorMsg} )}
); }; export const RenderDatePicker = ({ datafieldname, name, label, id, errorMsg, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const router = useRouter(); 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} )}
); }; export const RenderMultiline = ({ id, className, rows, datafieldname, name, label, input, meta: { touched, error }, ...custom }) => { const [editValue, setEditValue] = useState( input.value != null ? input.value : "" ); const changeEdit = (valStr) => { setEditValue(valStr); input.onChange(valStr); }; var modules = { toolbar: [ [{ "header": [1, 2, false] }], ["bold", "italic", "underline", "blockquote"], [{ "list": "ordered" }, { "list": "bullet" }, "link"], ["clean"], ], }; return ( <>
{"hint" in custom} {"hint" in custom && (
{custom.hint}
)}
); }; export const RenderRichMultiline = ({ id, className, rows, datafieldname, name, label, input, meta: { touched, error }, ...custom }) => { const [editValue, setEditValue] = useState( input.value != null ? input.value : "" ); const changeEdit = (valStr) => { setEditValue(valStr); input.onChange(valStr); }; var modules = { toolbar: [ [{ "header": [1, 2, false] }], ["bold", "italic", "underline", "blockquote"], [{ "list": "ordered" }, { "list": "bullet" }], ["clean"], ], }; return ( <> ); }; export function MultiLinefield(props) { const { name, label } = props; return (
Do not include personal or financial information, like your National Insurance number or credit card details.
); } 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", }; export 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)
)); 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 filelistObj = field.fileList || {}; console.log("----", filelistObj.length); let blobList = filelistObj; function removeNullObjects(arr) { if (arr.length === 0) { return arr; } return arr.filter((obj) => obj !== null); } function removeObjectsWithUndefinedKey(arr, key) { if (arr.length === 0) { return arr; } return arr.filter((obj) => obj[key] !== undefined); } function removeEmptyObjects(arr) { if (arr.length === 0) { return arr; } return arr.filter( (obj) => obj && typeof obj === "object" && Object.keys(obj).length > 0 ); } blobList = removeEmptyObjects(blobList); blobList = removeObjectsWithUndefinedKey(blobList, "name"); blobList = removeNullObjects(blobList); 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; const deleteThisBlob = async ( containerName, blobName, deleteblobhash, getblobshash, casefolderID ) => { 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], `${field.filenamePrefix}_-_Attachment_-_${file.name}`, { type: file.type, } ) ); field.input.onChange(renamedAcceptedFiles); }} > {({ getRootProps, getInputProps }) => ( <>
{" "}
{t( "myrepresentations:fileupload-drop-label" )}
( {t( "myrepresentations:fileupload-file-list-label" )} )
)}
{field.meta.touched && field.meta.error && ( {field.meta.error} )} {filesUploadObj && Array.isArray(filesUploadObj) && ( )} {blobList.map((blob, i) => (
{ deleteThisBlob( field.containerID, blob.name, blob.hasheddeletepath, blob.hashgetblobs, field.ticketnumber ); }} title="Remove this file" > −
{blob.name} {blob.name} ( {bytesToSize(blob.contentLength || blob.size)})
))}{" "} ); }; export function FileUploadField(props) { return ( <>

{props.label}

); } // export const RepresentationGuidanceText = (appealType) => { // let { t } = useTranslation(); // console.log(appealType); // switch (appealType) { // case "846040004": //has/cas // return ( //

// {t("myrepresentations:questionnaire-publish-policy-label")}{" "} // // https://gov.wales/planning-and-environment-decisions-wales-publishing-policy-html // //

// ); // break; // default: // return ( //

// {t("myrepresentations:publish-policy-label")}{" "} // // https://gov.wales/planning-and-environment-decisions-wales-publishing-policy-html // //

// ); // break; // } // return guidanceString; // };