Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 | 1x 17x 17x 6x 17x 17x 17x 17x 17x 6x 6x 6x 6x 6x 6x 6x 17x | import { useCallback, useState } from 'react';
import {
DATE_PICKER_TIME_SLOT,
type DateRangeValue,
} from '@repo/ui/components/DatePicker';
import type { QuickSelectValue } from '@repo/ui/components/QuickSelect';
import { getDraftSlotState, toDatePickerRange } from './helpers';
interface UseChooseDateSelectionStateParams {
initialSelectedValue: QuickSelectValue;
}
export const useChooseDateSelectionState = ({
initialSelectedValue,
}: UseChooseDateSelectionStateParams) => {
const [selectedValue, setSelectedValue] =
useState<QuickSelectValue>(initialSelectedValue);
const [datePickerValue, setDatePickerValue] = useState<DateRangeValue>(() =>
toDatePickerRange(initialSelectedValue),
);
const [datePickerTimeSlot, setDatePickerTimeSlot] = useState(
initialSelectedValue.timeSlot || DATE_PICKER_TIME_SLOT.ALL_DAY,
);
const [datePickerRangeStartTimeSlot, setDatePickerRangeStartTimeSlot] =
useState(initialSelectedValue.timeSlot || DATE_PICKER_TIME_SLOT.ALL_DAY);
const [datePickerRangeEndTimeSlot, setDatePickerRangeEndTimeSlot] = useState(
initialSelectedValue.timeSlot || DATE_PICKER_TIME_SLOT.ALL_DAY,
);
const [datePickerActiveRangeSelection, setDatePickerActiveRangeSelection] =
useState<'start' | 'end'>('start');
const syncSelectionState = useCallback((value: QuickSelectValue) => {
const draftSlotState = getDraftSlotState(
value.startDate,
value.endDate,
value.timeSlot,
);
setSelectedValue(value);
setDatePickerValue(toDatePickerRange(value));
setDatePickerTimeSlot(
draftSlotState.timeSlot || DATE_PICKER_TIME_SLOT.ALL_DAY,
);
setDatePickerRangeStartTimeSlot(
draftSlotState.rangeStartTimeSlot || DATE_PICKER_TIME_SLOT.ALL_DAY,
);
setDatePickerRangeEndTimeSlot(
draftSlotState.rangeEndTimeSlot || DATE_PICKER_TIME_SLOT.ALL_DAY,
);
setDatePickerActiveRangeSelection(draftSlotState.activeRangeSelection);
}, []);
return {
selectedValue,
datePickerValue,
datePickerTimeSlot,
datePickerRangeStartTimeSlot,
datePickerRangeEndTimeSlot,
datePickerActiveRangeSelection,
setSelectedValue,
setDatePickerValue,
setDatePickerTimeSlot,
setDatePickerRangeStartTimeSlot,
setDatePickerRangeEndTimeSlot,
setDatePickerActiveRangeSelection,
syncSelectionState,
};
};
|