import { Field, Fields, reduxForm } from "redux-form"; import router from "next/router"; import React, { useState, useMemo } from "react"; import useTranslation from "next-translate/useTranslation"; import jsonpath from "jsonpath"; import Dropzone, { useDropzone } from "react-dropzone"; import Link from "next/link"; import dynamic from "next/dynamic"; const ReactQuill = dynamic(() => import("react-quill"), { ssr: false }); import "react-quill/dist/quill.snow.css"; import DatePicker, { registerLocale, setDefaultLocale } from "react-datepicker"; import "react-datepicker/dist/react-datepicker.css"; import { addYears, addMonths, addDays, subYears, subMonths, subDays, parseISO, } from "date-fns"; import { getFormCollectionByID, getThumbnailIconByExtension, bytesToSize, } 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 RenderCondtionalRadioList = ({ datafieldname, legend, name, label, id, errorMsg, options, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const required = (value) => (value ? undefined : "Required"); 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 == "Yes" && options[key] == "Yes" && (
)}
))}
); }; export const RenderLPACondtionalRadioList = ({ datafieldname, legend, 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) => (
{value == custom.optionSelect && options[key] == custom.optionSelect && (
)}
))}
); }; export const RenderPickList = ({ datafieldname, name, label, input, optionsArr, meta: { touched, error }, errorMsg, }) => { 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} )} {/* {value}
{moment(value).format("DD/MM/YY")}
*/}
); }; 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 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], `${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) && ( )} {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)})
))}{" "} ); }; export function FileUploadField(props) { return ( <>

{props.label}

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

Please note that all questionnaire documents may be published in line with our Publishing Policy. Should your questionnaire include any sensitive information or potentially defamatory information, it may be redacted before publishing.{" "} https://gov.wales/planning-and-environment-decisions-wales-publishing-policy-html

); break; default: return (

Please note that all representations may be published in line with our Publishing Policy. Should your representation include any sensitive information or potentially defamatory information, it may be redacted before publishing. If it contains racist, libellous or offensive content it will be returned to you and you will be asked to provide an amended version.{" "} https://gov.wales/planning-and-environment-decisions-wales-publishing-policy-html

); break; } return guidanceString; };