UNPKG

@dnb/eufemia

Version:

DNB Eufemia Design System UI Library

167 lines (166 loc) 6.26 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")); 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, startMonth, endMonth, minDate, maxDate, dateFormat = defaultDateFormat, range, attributes, returnFormat: returnFormatProp, children, onChange, setReturnObject, hidePicker, correctInvalidDate } = props; const returnFormat = (0, _react.useMemo)(() => (0, _DatePickerCalc.correctV1Format)(returnFormatProp || defaultReturnFormat), [returnFormatProp, defaultReturnFormat]); const { dates, updateDates, previousDateProps } = (0, _useDates.default)({ date, startDate, endDate, startMonth, endMonth, minDate, maxDate }, { dateFormat, isRange: range, shouldCorrectDate: correctInvalidDate }); 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 getReturnObject = (0, _react.useCallback)(({ event = null, ...rest } = {}) => { const { startDate, endDate, partialStartDate, partialEndDate, 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, days_between: startDateIsValid && endDateIsValid ? (0, _dateFns.differenceInCalendarDays)(endDate, startDate) : null, start_date: startDateIsValid ? (0, _dateFns.format)(startDate, returnFormat) : null, end_date: endDateIsValid ? (0, _dateFns.format)(endDate, returnFormat) : null, is_valid_start_date: startDateIsValid && endDateIsValid && (0, _dateFns.isAfter)(startDate, endDate) || hasMinOrMaxDates && startDateIsValid && (0, _DatePickerCalc.isDisabled)(startDate, dates.minDate, dates.maxDate) ? false : startDateIsValid, is_valid_end_date: startDateIsValid && endDateIsValid && (0, _dateFns.isAfter)(startDate, endDate) || hasMinOrMaxDates && endDateIsValid && (0, _DatePickerCalc.isDisabled)(endDate, dates.minDate, dates.maxDate) ? false : endDateIsValid, partialStartDate, partialEndDate, invalidStartDate, invalidEndDate }; } return { ...returnObject, date: startDateIsValid ? (0, _dateFns.format)(startDate, returnFormat) : null, partialDate: partialStartDate, partialStartDate, invalidDate: invalidStartDate, is_valid: 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 _react.default.createElement(_DatePickerContext.default.Provider, { value: { translation: sharedContext.translation, updateDates, getReturnObject, callOnChangeHandler, hidePicker: hidePicker, props, dateFormat, ...dates, previousDateProps, submittedDates: submittedDatesRef.current, setSubmittedDates, views, setViews, setHasClickedCalendarDay, hoverDate, setHoverDate } }, children); } var _default = exports.default = DatePickerProvider; //# sourceMappingURL=DatePickerProvider.js.map