import { useCallback } from 'react'; import debounce from 'debounce'; import { useSetAtom } from 'jotai'; import { editVisibleAtom, eventForEditAtom, selectedNewEventDateAtom, selectedDateAtom, } from '@/components/pages/calendar/atoms'; import {DateOrDateTime} from "@howljs/calendar-kit"; export const useCalendarControls = (events: any[]) => { const setEditVisible = useSetAtom(editVisibleAtom); const setEventForEdit = useSetAtom(eventForEditAtom); const setSelectedNewEndDate = useSetAtom(selectedNewEventDateAtom); const setSelectedDate = useSetAtom(selectedDateAtom); const handlePressEvent = useCallback((event: any) => { const foundEvent = events?.find(x => x.id === event.id); setEditVisible(true); setEventForEdit(foundEvent!); }, [events, setEditVisible, setEventForEdit]); const handlePressCell = useCallback((date: DateOrDateTime) => { const selectedDate = new Date(date.dateTime!); const minutes = selectedDate.getMinutes(); selectedDate.setMinutes(minutes - (minutes % 30), 0, 0); // Also sets seconds and milliseconds to 0 setSelectedNewEndDate(selectedDate); }, [setSelectedNewEndDate]); const debouncedOnDateChanged = useCallback( debounce((date: string) => { setSelectedDate(new Date(date)); }, 50), [setSelectedDate] ); return { handlePressEvent, handlePressCell, debouncedOnDateChanged }; };