@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
167 lines (166 loc) • 6.26 kB
JavaScript
;
"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