diff --git a/.env.local b/.env.local index c7c45767..548fde8a 100644 --- a/.env.local +++ b/.env.local @@ -93,13 +93,13 @@ CRMURL_VERSION = "v8.2" # CRMURL_VERSION = "v9.2" # D365 PP WGO -CLIENT_ID = ab6c4678-b31a-4eb3-b429-e039120e488a -CLIENT_SECRET = V288Q~P1lFMvvX9Xnkx2pLixK~GOREH983Owqc1E -RELAY_ROOT = https://ar-ns-lz-pedw-d365ppe-uks-01.servicebus.windows.net/ar-hc-lz-pedw-d365ppe-uks-01/ -RELAYURI = "ar-ns-lz-pedw-d365ppe-uks-01.servicebus.windows.net" -RELAYPATH = "ar-hc-lz-pedw-d365ppe-uks-01" -CRMURL = "wg-pp-pedw.crm11.dynamics.com" -CRMURL_VERSION = "v9.2" +# CLIENT_ID = ab6c4678-b31a-4eb3-b429-e039120e488a +# CLIENT_SECRET = V288Q~P1lFMvvX9Xnkx2pLixK~GOREH983Owqc1E +# RELAY_ROOT = https://ar-ns-lz-pedw-d365ppe-uks-01.servicebus.windows.net/ar-hc-lz-pedw-d365ppe-uks-01/ +# RELAYURI = "ar-ns-lz-pedw-d365ppe-uks-01.servicebus.windows.net" +# RELAYPATH = "ar-hc-lz-pedw-d365ppe-uks-01" +# CRMURL = "wg-pp-pedw.crm11.dynamics.com" +# CRMURL_VERSION = "v9.2" diff --git a/components/elements/index.js b/components/elements/index.js index cd8c49a9..71d1206f 100644 --- a/components/elements/index.js +++ b/components/elements/index.js @@ -651,40 +651,50 @@ const RenderDatePicker = ({ const router = useRouter(); let { t } = useTranslation(); - 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]); + function dateFromOffset(offsetStr) { + const today = new Date(); - 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]); + // "0" means today + if (!offsetStr || offsetStr === "0") { + return today; + } + + // Expect formats like: -5d, +18m, -10y + const match = offsetStr.match(/^([+-])(\d+)([dmy])$/i); + + if (!match) { + console.warn("Invalid offset format:", offsetStr); + return today; // fallback + } + + 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 ( <> @@ -783,12 +793,11 @@ export function DateFieldPicker(props) { formProps, parentFieldShowOnValue, validation, - dateStart, - dateEnd, } = props; + let dateStart = props.dateStart; + let dateEnd = props.dateEnd; let { t } = useTranslation(); const required = (value) => (value ? undefined : "Required"); - var showIfHasParentShowValue = (parentField != false && !_.isEmpty(formProps[form]) && @@ -798,6 +807,28 @@ export function DateFieldPicker(props) { const requiredMessage = t("newappeal:is-required-label"); const emojiNotAllowedMessage = t("newappeal:emojis-not-allowed-label"); const invalidPostcodeMessage = t("newappeal:invalid-postcode-label"); + + // a and b are javascript Date objects + function dateDiffInDays(a, b) { + const _MS_PER_DAY = 1000 * 60 * 60 * 24; + // Discard the time and time-zone information. + const utc1 = Date.UTC(a.getFullYear(), a.getMonth(), a.getDate()); + const utc2 = Date.UTC(b.getFullYear(), b.getMonth(), b.getDate()); + + return Math.floor((utc2 - utc1) / _MS_PER_DAY); + } + + dateStart = + showIfHasParentShowValue && name == "pinswg_dateoflpadecision" + ? "-" + + (dateDiffInDays( + new Date(formProps[form].values["pinswg_dateofapplication"]), + new Date() + ) - + 1) + + "d" + : dateStart; + return (