29 lines
923 B
TypeScript
29 lines
923 B
TypeScript
import { ref, watch, onMounted } from "vue";
|
|
import { getMonthCalendarEvents } from "@/api/calendar";
|
|
import type { CalendarEventShort } from "@shared/types/calendar";
|
|
|
|
export function useCalendarEvents(selectedMonth, selectedYear) {
|
|
const events = ref([]);
|
|
|
|
function toCalEvent(e: CalendarEventShort) {
|
|
return {
|
|
id: e.id.toString(),
|
|
title: e.name,
|
|
start: new Date(e.start),
|
|
end: e.end ? new Date(e.end) : undefined,
|
|
extendedProps: { color: e.color, cancelled: !!e.cancelled },
|
|
};
|
|
}
|
|
|
|
async function loadEvents() {
|
|
const date = new Date(selectedYear.value, selectedMonth.value, 1);
|
|
const monthEvents = await getMonthCalendarEvents(date);
|
|
events.value = monthEvents.map(toCalEvent);
|
|
}
|
|
|
|
watch([selectedMonth, selectedYear], loadEvents);
|
|
onMounted(loadEvents);
|
|
|
|
return { events, loadEvents };
|
|
}
|