Files
workavia-calendar-front/src/features/Calendars/services/getCalendarDetailAsync.ts
T
Camille Moussu 478a0e0eb0 405 back reload token with synctokens (#436)
* [#405] added syncToken in calendar params and fetch with sync token

* [#405] changed reload to work with sync-token

* [#405] fixup promise handling, added calendar adding and removing hanlding with refresh

* [#405]  fixed event expansion calls

* [#405 & refactor] added helperfunction to get base event uid + refactored synctoken updates management

* [#405] added pMap lib to process event expansion

* [#405] added flag for no synctoken / new synctoken
2026-01-13 11:06:34 +01:00

47 lines
1.4 KiB
TypeScript

import { createAsyncThunk } from "@reduxjs/toolkit";
import { formatReduxError } from "../../../utils/errorUtils";
import { CalendarEvent } from "../../Events/EventsTypes";
import { getCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { extractCalendarEvents } from "../utils/extractCalendarEvents";
export const getCalendarDetailAsync = createAsyncThunk<
{
calId: string;
events: CalendarEvent[];
calType?: string;
syncToken?: string;
},
{
calId: string;
match: { start: string; end: string };
calType?: string;
signal?: AbortSignal;
},
{ rejectValue: RejectedError }
>(
"calendars/getCalendarDetails",
async ({ calId, match, calType, signal }, { rejectWithValue }) => {
try {
const calendar = (await getCalendar(calId, match, signal)) as any;
const color = calendar["apple:color"];
const syncToken = calendar._embedded?.["sync-token"];
const items = calendar._embedded?.["dav:item"];
const events: CalendarEvent[] = Array.isArray(items)
? items.flatMap((item: any) =>
extractCalendarEvents(item, { calId, color })
)
: [];
return { calId, events, calType, syncToken };
} catch (err: any) {
return rejectWithValue({
message: formatReduxError(err),
status: err.response?.status,
});
}
}
);