Files
workavia-calendar-front/src/features/User/HandleLogin.tsx
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

81 lines
2.4 KiB
TypeScript

import { useEffect, useRef } from "react";
import { useAppDispatch, useAppSelector } from "../../app/hooks";
import { Auth } from "./oidcAuth";
import { Loading } from "../../components/Loading/Loading";
import { push } from "redux-first-history";
import { redirectTo } from "../../utils/apiUtils";
import { getOpenPaasUserDataAsync, setTokens, setUserData } from "./userSlice";
import { getCalendarsListAsync } from "../Calendars/services/getCalendarsListAsync";
export function HandleLogin() {
const userData = useAppSelector((state) => state.user);
const calendars = useAppSelector((state) => state.calendars);
const dispatch = useAppDispatch();
const hasInitiatedRef = useRef(false);
const calendarsLoadingRef = useRef(false);
useEffect(() => {
if (hasInitiatedRef.current) return;
if (userData.userData) return;
if (Object.keys(calendars.list).length > 0) return;
if (calendarsLoadingRef.current) return;
hasInitiatedRef.current = true;
const initiateLogin = async () => {
const savedToken = sessionStorage.getItem("tokenSet")
? JSON.parse(sessionStorage.getItem("tokenSet")!)
: null;
const savedUser = sessionStorage.getItem("userData")
? JSON.parse(sessionStorage.getItem("userData")!)
: null;
if (savedToken && savedUser) {
dispatch(setTokens(savedToken));
dispatch(setUserData(savedUser));
await dispatch(getOpenPaasUserDataAsync());
calendarsLoadingRef.current = true;
await dispatch(getCalendarsListAsync());
calendarsLoadingRef.current = false;
dispatch(push("/calendar"));
return;
}
const loginurl = await Auth();
sessionStorage.setItem(
"redirectState",
JSON.stringify({
code_verifier: loginurl.code_verifier,
state: loginurl.state,
})
);
redirectTo(loginurl.redirectTo);
};
initiateLogin();
}, [userData.userData, calendars.list, dispatch]);
useEffect(() => {
if (userData.error) {
dispatch(push("/error"));
}
if (
!calendars.pending &&
!userData.loading &&
!userData.error &&
!calendars.error
) {
dispatch(push("/calendar"));
}
}, [
calendars.pending,
userData.loading,
userData.error,
calendars.error,
dispatch,
]);
return <Loading />;
}
export default HandleLogin;