Complete recurrence editing and calendar preferences
This commit is contained in:
@@ -51,6 +51,10 @@ export type CalendarEvent = {
|
||||
created_at: string;
|
||||
updated_at: string;
|
||||
metadata?: Record<string, unknown> | null;
|
||||
instance_id?: string | null;
|
||||
series_event_id?: string | null;
|
||||
is_occurrence?: boolean;
|
||||
is_override?: boolean;
|
||||
};
|
||||
|
||||
export type CalendarCollectionListResponse = { calendars: CalendarCollection[] };
|
||||
@@ -243,6 +247,29 @@ export type CalendarEventCreatePayload = {
|
||||
};
|
||||
|
||||
export type CalendarEventUpdatePayload = Partial<CalendarEventCreatePayload>;
|
||||
export type CalendarViewPreferences = {
|
||||
dim_weekends: boolean;
|
||||
dim_off_hours: boolean;
|
||||
workday_start_hour: number;
|
||||
workday_end_hour: number;
|
||||
continuous_virtualization: boolean;
|
||||
continuous_overscan_weeks: number;
|
||||
alternate_continuous_months: boolean;
|
||||
overridden_fields: string[];
|
||||
defaults: Record<string, boolean | number>;
|
||||
};
|
||||
export type CalendarViewPreferencesUpdatePayload = Partial<
|
||||
Pick<
|
||||
CalendarViewPreferences,
|
||||
| "dim_weekends"
|
||||
| "dim_off_hours"
|
||||
| "workday_start_hour"
|
||||
| "workday_end_hour"
|
||||
| "continuous_virtualization"
|
||||
| "continuous_overscan_weeks"
|
||||
| "alternate_continuous_months"
|
||||
>
|
||||
>;
|
||||
|
||||
export function listCalendars(settings: ApiSettings): Promise<CalendarCollectionListResponse> {
|
||||
return apiFetch<CalendarCollectionListResponse>(settings, "/api/v1/calendar/calendars");
|
||||
@@ -320,12 +347,13 @@ export function syncCalDavSource(settings: ApiSettings, sourceId: string, payloa
|
||||
|
||||
export function listCalendarEvents(
|
||||
settings: ApiSettings,
|
||||
params: { calendar_id?: string; start_at?: string; end_at?: string } = {}
|
||||
params: { calendar_id?: string; start_at?: string; end_at?: string; expand_recurring?: boolean } = {}
|
||||
): Promise<CalendarEventListResponse> {
|
||||
const search = new URLSearchParams();
|
||||
if (params.calendar_id) search.set("calendar_id", params.calendar_id);
|
||||
if (params.start_at) search.set("start_at", params.start_at);
|
||||
if (params.end_at) search.set("end_at", params.end_at);
|
||||
if (params.expand_recurring) search.set("expand_recurring", "true");
|
||||
const suffix = search.toString() ? `?${search.toString()}` : "";
|
||||
return apiFetch<CalendarEventListResponse>(settings, `/api/v1/calendar/events${suffix}`);
|
||||
}
|
||||
@@ -344,6 +372,10 @@ export function listCalendarEventsDelta(
|
||||
return apiFetch<CalendarEventDeltaResponse>(settings, `/api/v1/calendar/events/delta${suffix}`);
|
||||
}
|
||||
|
||||
export function getCalendarEvent(settings: ApiSettings, eventId: string): Promise<CalendarEvent> {
|
||||
return apiFetch<CalendarEvent>(settings, `/api/v1/calendar/events/${eventId}`);
|
||||
}
|
||||
|
||||
export function createCalendarEvent(settings: ApiSettings, payload: CalendarEventCreatePayload): Promise<CalendarEvent> {
|
||||
return apiFetch<CalendarEvent>(settings, "/api/v1/calendar/events", { method: "POST", body: JSON.stringify(payload) });
|
||||
}
|
||||
@@ -355,3 +387,49 @@ export function updateCalendarEvent(settings: ApiSettings, eventId: string, payl
|
||||
export function deleteCalendarEvent(settings: ApiSettings, eventId: string): Promise<void> {
|
||||
return apiFetch<void>(settings, `/api/v1/calendar/events/${eventId}`, { method: "DELETE" });
|
||||
}
|
||||
|
||||
export function updateCalendarEventOccurrence(
|
||||
settings: ApiSettings,
|
||||
seriesEventId: string,
|
||||
recurrenceId: string,
|
||||
payload: CalendarEventUpdatePayload
|
||||
): Promise<CalendarEvent> {
|
||||
return apiFetch<CalendarEvent>(
|
||||
settings,
|
||||
`/api/v1/calendar/events/${seriesEventId}/occurrence`,
|
||||
{
|
||||
method: "PATCH",
|
||||
body: JSON.stringify({ ...payload, recurrence_id: recurrenceId })
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
export function deleteCalendarEventOccurrence(
|
||||
settings: ApiSettings,
|
||||
seriesEventId: string,
|
||||
recurrenceId: string
|
||||
): Promise<CalendarEvent> {
|
||||
return apiFetch<CalendarEvent>(
|
||||
settings,
|
||||
`/api/v1/calendar/events/${seriesEventId}/occurrence`,
|
||||
{
|
||||
method: "DELETE",
|
||||
body: JSON.stringify({ recurrence_id: recurrenceId })
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
export function getCalendarViewPreferences(settings: ApiSettings): Promise<CalendarViewPreferences> {
|
||||
return apiFetch<CalendarViewPreferences>(settings, "/api/v1/calendar/preferences/view");
|
||||
}
|
||||
|
||||
export function updateCalendarViewPreferences(
|
||||
settings: ApiSettings,
|
||||
payload: CalendarViewPreferencesUpdatePayload
|
||||
): Promise<CalendarViewPreferences> {
|
||||
return apiFetch<CalendarViewPreferences>(
|
||||
settings,
|
||||
"/api/v1/calendar/preferences/view",
|
||||
{ method: "PATCH", body: JSON.stringify(payload) }
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user