rsuite
Version:
A suite of react components
27 lines • 985 B
JavaScript
'use client';
import { useState, useCallback, useRef } from 'react';
import { useUpdateEffect } from "../../internals/hooks/index.js";
import { startOfToday } from "../../internals/utils/date/index.js";
export const useCalendarDate = (value, defaultDate) => {
const valueRef = useRef(value);
const [calendarDate, setValue] = useState(value ?? defaultDate ?? startOfToday());
const setCalendarDate = useCallback(date => {
if (date && date?.valueOf() !== calendarDate?.valueOf()) {
setValue(date);
}
}, [calendarDate]);
const resetCalendarDate = useCallback((nextValue = value) => {
setValue(nextValue ?? defaultDate ?? startOfToday());
}, [defaultDate, value]);
useUpdateEffect(() => {
if (value?.valueOf() !== valueRef.current?.valueOf()) {
setCalendarDate(value ?? defaultDate ?? startOfToday());
valueRef.current = value;
}
}, [value, defaultDate]);
return {
calendarDate,
setCalendarDate,
resetCalendarDate
};
};