mirror of
https://github.com/urosran/cally.git
synced 2025-07-11 15:47:21 +00:00
45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
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
|
|
};
|
|
}; |