mirror of
https://github.com/urosran/cally.git
synced 2025-07-09 22:57:16 +00:00
64 lines
2.0 KiB
JavaScript
64 lines
2.0 KiB
JavaScript
export async function fetchGoogleCalendarEvents(token, email, familyId, startDate, endDate) {
|
|
const googleEvents = [];
|
|
let pageToken = null;
|
|
|
|
do {
|
|
const url = new URL(`https://www.googleapis.com/calendar/v3/calendars/primary/events`);
|
|
url.searchParams.set('singleEvents', 'true');
|
|
url.searchParams.set('timeMin', startDate);
|
|
url.searchParams.set('timeMax', endDate);
|
|
if (pageToken) url.searchParams.set('pageToken', pageToken);
|
|
|
|
const response = await fetch(url.toString(), {
|
|
headers: {
|
|
Authorization: `Bearer ${token}`,
|
|
},
|
|
});
|
|
|
|
const data = await response.json();
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Error fetching events: ${data.error?.message || response.statusText}`);
|
|
}
|
|
|
|
data.items?.forEach((item) => {
|
|
let isAllDay = false;
|
|
let startDateTime, endDateTime;
|
|
|
|
if (item.start) {
|
|
if (item.start.dateTime) {
|
|
startDateTime = new Date(item.start.dateTime);
|
|
} else if (item.start.date) {
|
|
startDateTime = new Date(item.start.date);
|
|
isAllDay = true;
|
|
}
|
|
}
|
|
|
|
if (item.end) {
|
|
if (item.end.dateTime) {
|
|
endDateTime = new Date(item.end.dateTime);
|
|
} else if (item.end.date) {
|
|
endDateTime = new Date(item.end.date);
|
|
isAllDay = true;
|
|
}
|
|
}
|
|
|
|
const googleEvent = {
|
|
id: item.id,
|
|
title: item.summary || "",
|
|
startDate: startDateTime,
|
|
endDate: endDateTime,
|
|
allDay: isAllDay,
|
|
familyId,
|
|
email,
|
|
};
|
|
|
|
googleEvents.push(googleEvent);
|
|
});
|
|
|
|
// Prepare for the next page if it exists
|
|
pageToken = data.nextPageToken;
|
|
} while (pageToken);
|
|
|
|
return { googleEvents, success: true };
|
|
} |