rsuite
Version:
A suite of react components
55 lines • 1.85 kB
JavaScript
'use client';
import { useMemo, useState } from 'react';
import { addMonths } from "../../internals/utils/date/index.js";
import { useEventCallback } from "../../internals/hooks/index.js";
export let CalendarState = /*#__PURE__*/function (CalendarState) {
CalendarState["TIME"] = "TIME";
CalendarState["MONTH"] = "MONTH";
return CalendarState;
}({});
export const useCalendarState = props => {
const [calendarState, setCalendarState] = useState(props.defaultState);
const reset = useEventCallback(() => {
setCalendarState(undefined);
if (calendarState === CalendarState.TIME) {
props.onToggleTimeDropdown?.(false);
} else if (calendarState === CalendarState.MONTH) {
props.onToggleMonthDropdown?.(false);
}
});
const onMoveForward = useEventCallback(() => {
props.onMoveForward?.(addMonths(props.calendarDate, 1));
});
const onMoveBackward = useEventCallback(() => {
props.onMoveBackward?.(addMonths(props.calendarDate, -1));
});
const onToggleTimeDropdown = useEventCallback(() => {
if (calendarState === CalendarState.TIME) {
setCalendarState(undefined);
} else {
setCalendarState(CalendarState.TIME);
}
props.onToggleTimeDropdown?.(calendarState !== CalendarState.TIME);
});
const onToggleMonthDropdown = useEventCallback(() => {
if (calendarState === CalendarState.MONTH) {
setCalendarState(undefined);
} else {
setCalendarState(CalendarState.MONTH);
}
props.onToggleMonthDropdown?.(calendarState !== CalendarState.MONTH);
});
const handlers = useMemo(() => {
return {
onMoveForward,
onMoveBackward,
onToggleTimeDropdown,
onToggleMonthDropdown
};
}, [onMoveBackward, onMoveForward, onToggleMonthDropdown, onToggleTimeDropdown]);
return {
calendarState,
handlers,
reset
};
};