478a0e0eb0
* [#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
47 lines
1.4 KiB
TypeScript
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,
|
|
});
|
|
}
|
|
}
|
|
);
|