import React from "react"; import DatePicker from "react-datepicker"; import { useRouter } from "next/router"; import useTranslation from "next-translate/useTranslation"; import { addDays, addMonths, addYears, parseISO, subDays, subMonths, subYears } from "date-fns"; import fieldLookup from "../../../data/crmfieldlookuptranslations.json"; import { getFieldTranslation } from "../helpers/translationHelpers"; export const RenderDatePicker = ({ datafieldname, name, label, id, errorMsg, input: { onChange, value }, meta: { touched, error }, ...custom }) => { const router = useRouter(); let { t } = useTranslation(); const { locale } = router; const { appealtypes } = router.query; const translatedLabel = getFieldTranslation({ label, locale, appealtypes, fieldLookup }); function dateFromOffset(offsetStr) { const today = new Date(); if (!offsetStr || offsetStr === "0") { return today; } const match = offsetStr.match(/^([+-])(\d+)([dmy])$/i); if (!match) { console.warn("Invalid offset format:", offsetStr); return today; } const [, sign, numberStr, unitRaw] = match; const amount = parseInt(numberStr, 10); const unit = unitRaw.toLowerCase(); const isNegative = sign === "-"; switch (unit) { case "y": return isNegative ? subYears(today, amount) : addYears(today, amount); case "m": return isNegative ? subMonths(today, amount) : addMonths(today, amount); case "d": return isNegative ? subDays(today, amount) : addDays(today, amount); default: return today; } } const minDate = dateFromOffset(custom.dateStart); const maxDate = dateFromOffset(custom.dateEnd); return ( <>
{custom.hasOwnProperty("hint") && (
{t(custom.hint)}
)}
{!custom.hasOwnProperty("showErrorBottom") ? touched && error && ( Error: {" "} {errorMsg} ) : ""} {custom.hasOwnProperty("showErrorBottom") ? touched && error && ( Error: {" "} {error} ) : ""}
); };