[#446] removed direct state update (#468)

This commit is contained in:
Camille Moussu
2026-01-21 15:17:49 +01:00
committed by GitHub
parent 23d50f250d
commit 00742119be
38 changed files with 119 additions and 1366 deletions
@@ -2,7 +2,7 @@ import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { getUserDetails } from "@/features/User/userAPI";
import { addSharedCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const addSharedCalendarAsync = createAsyncThunk<
{
@@ -1,8 +1,9 @@
import { getUserDetails } from "@/features/User/userAPI";
import { userData } from "@/features/User/userDataTypes";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { postCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const createCalendarAsync = createAsyncThunk<
{
@@ -15,7 +16,7 @@ export const createCalendarAsync = createAsyncThunk<
ownerEmails: string[];
},
{
userId: string;
userData: userData;
calId: string;
color: Record<string, string>;
name: string;
@@ -24,21 +25,25 @@ export const createCalendarAsync = createAsyncThunk<
{ rejectValue: RejectedError }
>(
"calendars/createCalendar",
async ({ userId, calId, color, name, desc }, { rejectWithValue }) => {
async ({ userData, calId, color, name, desc }, { rejectWithValue }) => {
try {
await postCalendar(userId, calId, color, name, desc);
const ownerData: any = await getUserDetails(userId.split("/")[0]);
if (!userData.openpaasId) {
throw new Error("No openpaasId");
}
await postCalendar(userData.openpaasId, calId, color, name, desc);
const owner = [userData.given_name, userData.family_name]
.filter(Boolean)
.join(" ");
return {
userId,
userId: userData.openpaasId,
calId,
color,
name,
desc,
owner: [ownerData.firstname, ownerData.lastname]
.filter(Boolean)
.join(" "),
ownerEmails: ownerData.emails ?? [],
owner,
ownerEmails: userData.email ? [userData.email] : [],
};
} catch (err: any) {
return rejectWithValue({
@@ -1,7 +1,7 @@
import { deleteEvent } from "@/features/Events/EventApi";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const deleteEventAsync = createAsyncThunk<
{ calId: string; eventId: string },
@@ -2,7 +2,7 @@ import { deleteEventInstance } from "@/features/Events/EventApi";
import { CalendarEvent } from "@/features/Events/EventsTypes";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
export const deleteEventInstanceAsync = createAsyncThunk<
@@ -2,7 +2,7 @@ import { CalendarEvent } from "@/features/Events/EventsTypes";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { getCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { extractCalendarEvents } from "../utils/extractCalendarEvents";
export const getCalendarDetailAsync = createAsyncThunk<
@@ -2,7 +2,7 @@ import { getOpenPaasUser, getUserDetails } from "@/features/User/userAPI";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { getCalendars } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
import { normalizeCalendar } from "../utils/normalizeCalendar";
@@ -2,7 +2,7 @@ import { getEvent } from "@/features/Events/EventApi";
import { CalendarEvent } from "@/features/Events/EventsTypes";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const getEventAsync = createAsyncThunk<
{ calId: string; event: CalendarEvent },
@@ -4,7 +4,7 @@ import { getUserDetails } from "@/features/User/userAPI";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { getCalendars } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
export const getTempCalendarsListAsync = createAsyncThunk<
@@ -14,9 +14,14 @@ export const getTempCalendarsListAsync = createAsyncThunk<
>("calendars/getTempCalendars", async (tempUser, { rejectWithValue }) => {
try {
const importedCalendars: Record<string, Calendar> = {};
if (!tempUser.openpaasId) {
const username = tempUser.displayName || tempUser.email || "User";
throw new Error(
`TRANSLATION:calendar.userDoesNotHaveValidId|name=${encodeURIComponent(username)}`
);
}
const calendars = (await getCalendars(
tempUser.openpaasId ?? "",
tempUser.openpaasId,
"sharedPublic=true&"
)) as Record<string, any>;
@@ -2,7 +2,7 @@ import { importEventFromFile } from "@/features/Events/EventApi";
import { importFile } from "@/utils/apiUtils";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const importEventFromFileAsync = createAsyncThunk<
void,
@@ -8,11 +8,11 @@ import {
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { getCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
export const moveEventAsync = createAsyncThunk<
{ calId: string; events: CalendarEvent[] },
{ calId: string },
{ cal: Calendar; newEvent: CalendarEvent; newURL: string },
{ rejectValue: RejectedError }
>(
@@ -21,31 +21,8 @@ export const moveEventAsync = createAsyncThunk<
try {
await moveEvent(newEvent, newURL);
const eventDate = new Date(newEvent.start);
const { start: weekStart, end: weekEnd } = computeWeekRange(eventDate);
const calEvents = (await getCalendar(cal.id, {
start: formatDateToYYYYMMDDTHHMMSS(weekStart),
end: formatDateToYYYYMMDDTHHMMSS(weekEnd),
})) as Record<string, any>;
const events: CalendarEvent[] = calEvents._embedded["dav:item"].flatMap(
(eventdata: any) => {
const vevents = eventdata.data[2] as any[][];
const eventURL = eventdata._links.self.href;
return vevents.map((vevent: any[]) => {
return parseCalendarEvent(
vevent[1],
cal.color ?? {},
cal.id,
eventURL
);
});
}
);
return {
calId: cal.id,
events,
};
} catch (err: any) {
return rejectWithValue({
@@ -1,7 +1,7 @@
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { updateAclCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const patchACLCalendarAsync = createAsyncThunk<
{
@@ -1,7 +1,7 @@
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { proppatchCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const patchCalendarAsync = createAsyncThunk<
{
@@ -1,18 +1,12 @@
import { putEvent } from "@/features/Events/EventApi";
import { CalendarEvent } from "@/features/Events/EventsTypes";
import { parseCalendarEvent } from "@/features/Events/eventUtils";
import {
computeWeekRange,
formatDateToYYYYMMDDTHHMMSS,
} from "@/utils/dateUtils";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { getCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
export const putEventAsync = createAsyncThunk<
{ calId: string; events: CalendarEvent[]; calType?: "temp" },
{ calId: string; calType?: "temp" },
{ cal: Calendar; newEvent: CalendarEvent; calType?: "temp" },
{ rejectValue: RejectedError }
>(
@@ -23,34 +17,9 @@ export const putEventAsync = createAsyncThunk<
newEvent,
cal.ownerEmails ? cal.ownerEmails[0] : undefined
);
const eventDate = new Date(newEvent.start);
const { start: weekStart, end: weekEnd } = computeWeekRange(eventDate);
const calEvents = (await getCalendar(cal.id, {
start: formatDateToYYYYMMDDTHHMMSS(weekStart),
end: formatDateToYYYYMMDDTHHMMSS(weekEnd),
})) as Record<string, any>;
const events: CalendarEvent[] = calEvents._embedded["dav:item"].flatMap(
(eventdata: any) => {
const vevents = eventdata.data[2] as any[][];
const eventURL = eventdata._links.self.href;
const valarm = eventdata.data[2][0][2][0];
return vevents.map((vevent: any[]) => {
return parseCalendarEvent(
vevent[1],
cal.color ?? {},
cal.id,
eventURL,
valarm
);
});
}
);
return {
calId: cal.id,
events,
calType,
};
} catch (err: any) {
@@ -3,7 +3,7 @@ import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import pMap from "p-map";
import { fetchSyncTokenChanges } from "../api/fetchSyncTokenChanges";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
import { expandEventFunction } from "../utils/expandEventFunction";
import { processSyncUpdates } from "../utils/processSyncTokenUpdates";
@@ -1,7 +1,7 @@
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { removeCalendar } from "../CalendarApi";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
export const removeCalendarAsync = createAsyncThunk<
{
@@ -2,7 +2,7 @@ import { putEventWithOverrides } from "@/features/Events/EventApi";
import { CalendarEvent } from "@/features/Events/EventsTypes";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
export const updateEventInstanceAsync = createAsyncThunk<
@@ -2,7 +2,7 @@ import { updateSeries } from "@/features/Events/EventApi";
import { CalendarEvent } from "@/features/Events/EventsTypes";
import { formatReduxError } from "@/utils/errorUtils";
import { createAsyncThunk } from "@reduxjs/toolkit";
import { RejectedError } from "../CalendarSlice";
import { RejectedError } from "../types/RejectedError";
import { Calendar } from "../CalendarTypes";
export const updateSeriesAsync = createAsyncThunk<