mirror of
https://github.com/urosran/cally.git
synced 2025-11-27 17:04:55 +00:00
New calendar
This commit is contained in:
45
components/pages/calendar/useCalendarControls.ts
Normal file
45
components/pages/calendar/useCalendarControls.ts
Normal file
@ -0,0 +1,45 @@
|
||||
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
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user