@mantine/dates
Version:
Calendars, date and time pickers based on Mantine components
36 lines (35 loc) • 1.3 kB
JavaScript
"use client";
import { toDateString, toDateTimeString } from "../../utils/to-date-string/to-date-string.mjs";
import { useRef } from "react";
import { useUncontrolled } from "@mantine/hooks";
//#region packages/@mantine/dates/src/hooks/use-uncontrolled-dates/use-uncontrolled-dates.ts
const getEmptyValue = (type) => type === "range" ? [null, null] : type === "multiple" ? [] : null;
const convertDatesValue = (value, withTime) => {
const converter = withTime ? toDateTimeString : toDateString;
return Array.isArray(value) ? value.map(converter) : converter(value);
};
function useUncontrolledDates({ type, value, defaultValue, onChange, withTime = false }) {
const storedType = useRef(type);
const [_value, _setValue, controlled] = useUncontrolled({
value: convertDatesValue(value, withTime),
defaultValue: convertDatesValue(defaultValue, withTime),
finalValue: getEmptyValue(type),
onChange
});
let _finalValue = _value;
if (storedType.current !== type) {
storedType.current = type;
if (value === void 0) {
_finalValue = defaultValue !== void 0 ? defaultValue : getEmptyValue(type);
_setValue(_finalValue);
}
}
return [
_finalValue,
_setValue,
controlled
];
}
//#endregion
export { useUncontrolledDates };
//# sourceMappingURL=use-uncontrolled-dates.mjs.map