mirror of
https://github.com/Memo-2023/mana-monorepo.git
synced 2026-05-19 17:41:26 +02:00
- Fix API response extraction for events and calendars (fixes Invalid Date) - Convert event detail page to URL-based modal overlay (/?event=<id>) - Add structured location fields (street, postal code, city, country) - Add location details toggle in EventForm and QuickEventOverlay - Add YearView component - Improve calendar views with URL-based event navigation - Move calendar settings to settings page
63 lines
1.7 KiB
TypeScript
63 lines
1.7 KiB
TypeScript
/**
|
|
* Events API Client
|
|
*/
|
|
|
|
import { fetchApi } from './client';
|
|
import type { CalendarEvent, CreateEventInput, UpdateEventInput } from '@calendar/shared';
|
|
|
|
export interface QueryEventsParams {
|
|
startDate: string;
|
|
endDate: string;
|
|
calendarIds?: string[];
|
|
}
|
|
|
|
export async function getEvents(params: QueryEventsParams) {
|
|
const searchParams = new URLSearchParams({
|
|
startDate: params.startDate,
|
|
endDate: params.endDate,
|
|
});
|
|
if (params.calendarIds?.length) {
|
|
searchParams.set('calendarIds', params.calendarIds.join(','));
|
|
}
|
|
return fetchApi<CalendarEvent[]>(`/events?${searchParams.toString()}`);
|
|
}
|
|
|
|
export async function getEvent(id: string) {
|
|
const result = await fetchApi<{ event: CalendarEvent }>(`/events/${id}`);
|
|
if (result.error || !result.data) {
|
|
return { data: null, error: result.error };
|
|
}
|
|
return { data: result.data.event, error: null };
|
|
}
|
|
|
|
export async function getEventsByCalendar(calendarId: string) {
|
|
return fetchApi<CalendarEvent[]>(`/events/calendar/${calendarId}`);
|
|
}
|
|
|
|
export async function createEvent(data: CreateEventInput) {
|
|
const result = await fetchApi<{ event: CalendarEvent }>('/events', {
|
|
method: 'POST',
|
|
body: data,
|
|
});
|
|
if (result.error || !result.data) {
|
|
return { data: null, error: result.error };
|
|
}
|
|
return { data: result.data.event, error: null };
|
|
}
|
|
|
|
export async function updateEvent(id: string, data: UpdateEventInput) {
|
|
const result = await fetchApi<{ event: CalendarEvent }>(`/events/${id}`, {
|
|
method: 'PUT',
|
|
body: data,
|
|
});
|
|
if (result.error || !result.data) {
|
|
return { data: null, error: result.error };
|
|
}
|
|
return { data: result.data.event, error: null };
|
|
}
|
|
|
|
export async function deleteEvent(id: string) {
|
|
return fetchApi<void>(`/events/${id}`, {
|
|
method: 'DELETE',
|
|
});
|
|
}
|