This commit is contained in:
pa
2026-03-09 02:49:59 +09:00
parent 64b27ce7f1
commit 90a17bb0ba
39 changed files with 9487 additions and 4384 deletions

View File

@@ -0,0 +1,58 @@
import { computed } from 'vue';
/**
* Composable for filtering group calendar events into past and upcoming,
* and updating follow state on individual events.
*
* @param {import('vue').Ref} groupDialog - reactive ref to the group dialog state
* @returns {{
* pastCalenderEvents: import('vue').ComputedRef<Array>,
* upcomingCalenderEvents: import('vue').ComputedRef<Array>,
* updateFollowingCalendarData: (event: Object) => void
* }}
*/
export function useGroupCalendarEvents(groupDialog) {
const pastCalenderEvents = computed(() => {
if (!groupDialog.value.calendar) {
return [];
}
const now = Date.now();
return groupDialog.value.calendar.filter((event) => {
const eventEnd = new Date(event.endsAt).getTime();
return eventEnd < now;
});
});
const upcomingCalenderEvents = computed(() => {
if (!groupDialog.value.calendar) {
return [];
}
const now = Date.now();
return groupDialog.value.calendar.filter((event) => {
const eventEnd = new Date(event.endsAt).getTime();
return eventEnd >= now;
});
});
/**
* @param {Object} event
*/
function updateFollowingCalendarData(event) {
const calendar = groupDialog.value.calendar;
for (let i = 0; i < calendar.length; i++) {
if (calendar[i].id === event.id) {
calendar[i] = {
...calendar[i],
...event
};
break;
}
}
}
return {
pastCalenderEvents,
upcomingCalenderEvents,
updateFollowingCalendarData
};
}