UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

171 lines (170 loc) 6.33 kB
"use strict"; "use client"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _dateFns = require("date-fns"); var _Context = _interopRequireDefault(require("../../shared/Context.js")); var _DatePickerCalc = require("./DatePickerCalc.js"); var _DatePickerContext = _interopRequireDefault(require("./DatePickerContext.js")); var _useViews = _interopRequireDefault(require("./hooks/useViews.js")); var _useDates = _interopRequireDefault(require("./hooks/useDates.js")); var _useLastEventCallCache = _interopRequireDefault(require("./hooks/useLastEventCallCache.js")); var _useHoverDate = _interopRequireDefault(require("./hooks/useHoverDate.js")); var _useSubmittedDates = _interopRequireDefault(require("./hooks/useSubmittedDates.js")); var _jsxRuntime = require("react/jsx-runtime"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); } function DatePickerProvider(props) { const sharedContext = (0, _react.useContext)(_Context.default); const { returnFormat: defaultReturnFormat, dateFormat: defaultDateFormat } = sharedContext.translation.DatePicker; const { date, startDate, endDate, month, startMonth, endMonth, minDate, maxDate, dateFormat = defaultDateFormat, range, attributes, returnFormat: returnFormatProp, children, onChange, open, setReturnObject, hidePicker } = props; const returnFormat = (0, _react.useMemo)(() => returnFormatProp || defaultReturnFormat, [returnFormatProp, defaultReturnFormat]); const { dates, updateDates, previousDateProps } = (0, _useDates.default)({ date, startDate, endDate, startMonth: startMonth !== null && startMonth !== void 0 ? startMonth : month, endMonth, minDate, maxDate }, { dateFormat, isRange: range }); const { views, setViews, setHasClickedCalendarDay } = (0, _useViews.default)({ startMonth: dates.startMonth, endMonth: dates.endMonth, isRange: range }); const [lastEventCallCache, setLastEventCallCache] = (0, _useLastEventCallCache.default)({ startDate: dates.startDate, endDate: dates.endDate }); const { hoverDate, setHoverDate } = (0, _useHoverDate.default)(); const { submittedDatesRef, setSubmittedDates } = (0, _useSubmittedDates.default)(); const prevOpenRef = (0, _react.useRef)(open); if (open && !prevOpenRef.current) { setSubmittedDates({ startDate: dates.startDate, endDate: dates.endDate }); } prevOpenRef.current = open; const getReturnObject = (0, _react.useCallback)(({ event = null, ...rest } = {}) => { const { startDate, endDate, invalidStartDate, invalidEndDate } = { ...views, ...dates, ...rest }; const startDateIsValid = Boolean(startDate && (0, _dateFns.isValid)(startDate)); const endDateIsValid = Boolean(endDate && (0, _dateFns.isValid)(endDate)); const hasMinOrMaxDates = minDate || maxDate; const returnObject = { event, attributes: attributes || {} }; if (range) { return { ...returnObject, daysBetween: startDateIsValid && endDateIsValid ? (0, _dateFns.differenceInCalendarDays)(endDate, startDate) : null, startDate: startDateIsValid ? (0, _dateFns.format)(startDate, returnFormat) : null, endDate: endDateIsValid ? (0, _dateFns.format)(endDate, returnFormat) : null, isValidStartDate: startDateIsValid && endDateIsValid && (0, _dateFns.isAfter)(startDate, endDate) || hasMinOrMaxDates && startDateIsValid && (0, _DatePickerCalc.isDisabled)(startDate, dates.minDate, dates.maxDate) ? false : startDateIsValid, isValidEndDate: startDateIsValid && endDateIsValid && (0, _dateFns.isAfter)(startDate, endDate) || hasMinOrMaxDates && endDateIsValid && (0, _DatePickerCalc.isDisabled)(endDate, dates.minDate, dates.maxDate) ? false : endDateIsValid, invalidStartDate, invalidEndDate }; } return { ...returnObject, date: startDateIsValid ? (0, _dateFns.format)(startDate, returnFormat) : null, invalidDate: invalidStartDate, isValid: hasMinOrMaxDates && startDateIsValid && (0, _DatePickerCalc.isDisabled)(startDate, dates.minDate, dates.maxDate) ? false : startDateIsValid }; }, [dates, views, attributes, maxDate, minDate, range, returnFormat]); const callOnChangeHandler = (0, _react.useCallback)(event => { if (lastEventCallCache && lastEventCallCache.startDate === event.startDate && lastEventCallCache.endDate === event.endDate) { return; } onChange === null || onChange === void 0 || onChange(getReturnObject({ ...dates, ...event })); setLastEventCallCache({ startDate: event.startDate, endDate: event.endDate }); }, [getReturnObject, dates, onChange, lastEventCallCache, setLastEventCallCache]); if (typeof setReturnObject === 'function') { setReturnObject(getReturnObject); } return (0, _jsxRuntime.jsx)(_DatePickerContext.default, { value: { translation: sharedContext.translation, updateDates, getReturnObject, callOnChangeHandler, hidePicker: hidePicker, props, dateFormat, ...dates, previousDateProps, submittedDates: submittedDatesRef.current, setSubmittedDates, views, setViews, setHasClickedCalendarDay, hoverDate, setHoverDate }, children: children }); } var _default = exports.default = DatePickerProvider; //# sourceMappingURL=DatePickerProvider.js.map