My-Weekly-ToDo-List/src/lib/apple-calendar.ts
mARTin d92a8c7210 feat: add task actions (notes/delete) and refine animation logic
- Added 'onDelete' and 'onNotes' support to TaskItem.
- Implemented hover actions (Delete and Notes icons) for tasks.
- Added Notes Modal for editing task markdown content.
- Simplified navigation animation to remove blank flash (single-phase slide-in).
- Fixed syntax error in updateTask function.
- Updated styles for modal and task actions.
2026-02-01 12:25:53 +01:00

125 lines
3.2 KiB
TypeScript

// Apple Calendar OAuth wrapper
import { fetch } from 'undici'; // Using undici for HTTP requests
export interface AppleCalendarEvent {
id: string;
title: string;
description?: string;
startDate: string;
endDate: string;
location?: string;
attendees?: Array<{
email: string;
name?: string;
}>;
}
export interface AppleCalendar {
id: string;
title: string;
isPrimary?: boolean;
}
/**
* Initialize Apple Calendar OAuth client
*/
export const initializeOAuth = (clientId: string, clientSecret: string, redirectUri: string) => {
// This would typically configure the OAuth client for Apple
// For now, we'll just return the configuration data
return {
clientId,
clientSecret,
redirectUri,
authorizationUrl: 'https://appleid.apple.com/auth/authorize',
tokenUrl: 'https://appleid.apple.com/auth/token',
};
};
/**
* Get user calendar list using OAuth token
*/
export const getUserCalendars = async (
clientConfig: any,
accessToken: string
): Promise<AppleCalendar[]> => {
try {
// In a real implementation, this would make a request to Apple's calendar API
// using the access token
// Simulate real API call
const response = await fetch(
'https://api.apple.com/calendar/v1/calendars',
{
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json',
}
}
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json() as { calendars?: any[] };
// Map to expected format
return data.calendars?.map((item: any) => ({
id: item.id,
title: item.title,
isPrimary: item.isPrimary
})) || [];
} catch (error) {
console.error('Error fetching user calendars:', error);
throw new Error('Failed to fetch user calendars');
}
};
/**
* Get upcoming events for a specified time period
*/
export const getUpcomingEvents = async (
clientConfig: any,
accessToken: string,
calendarId: string,
timeMin: string,
timeMax: string
): Promise<AppleCalendarEvent[]> => {
try {
// In a real implementation, this would make a request to Apple's calendar API
// using the access token and specified parameters
// Simulate real API call
const response = await fetch(
`https://api.apple.com/calendar/v1/calendars/${calendarId}/events?start=${timeMin}&end=${timeMax}`,
{
method: 'GET',
headers: {
'Authorization': `Bearer ${accessToken}`,
'Content-Type': 'application/json',
}
}
);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const data = await response.json() as { events?: any[] };
// Map to expected format
return data.events?.map((item: any) => ({
id: item.id,
title: item.title,
description: item.description,
startDate: item.startDate,
endDate: item.endDate,
location: item.location,
attendees: item.attendees,
})) || [];
} catch (error) {
console.error('Error fetching upcoming events:', error);
throw new Error('Failed to fetch upcoming events');
}
};