add error handler to auth

This commit is contained in:
Sidney Alcantara
2022-06-02 14:05:12 +10:00
parent 9373c8c985
commit effe08ec5c

View File

@@ -1,6 +1,7 @@
import { useEffect, useCallback } from "react";
import { useAtom, useSetAtom } from "jotai";
import { useAtomCallback } from "jotai/utils";
import { useErrorHandler } from "react-error-boundary";
import { getIdTokenResult } from "firebase/auth";
import {
@@ -15,6 +16,7 @@ import { firebaseAuthAtom } from "./init";
* Sets currentUser and userRoles based on Firebase Auth user
*/
export function useAuthUser() {
const elevateError = useErrorHandler();
// Get current user and store in atoms
const [firebaseAuth] = useAtom(firebaseAuthAtom, globalScope);
const setCurrentUser = useSetAtom(currentUserAtom, globalScope);
@@ -33,22 +35,32 @@ export function useAuthUser() {
const unsubscribe = firebaseAuth.onAuthStateChanged(async (user) => {
setCurrentUser(user);
if (user) {
// Get user roles
const tokenResult = await getIdTokenResult(user);
const roles = (tokenResult.claims.roles as string[]) ?? [];
setUserRoles(roles);
try {
if (user) {
// Get user roles
const tokenResult = await getIdTokenResult(user);
const roles = (tokenResult.claims.roles as string[]) ?? [];
setUserRoles(roles);
// Update user settings doc with roles for User Management page
const _updateUserSettings = await updateUserSettings();
if (_updateUserSettings) _updateUserSettings({ roles });
} else {
setUserRoles([]);
// Update user settings doc with roles for User Management page
const _updateUserSettings = await updateUserSettings();
if (_updateUserSettings) _updateUserSettings({ roles });
} else {
setUserRoles([]);
}
} catch (e) {
elevateError(e);
}
});
}, elevateError);
return () => {
unsubscribe();
};
}, [firebaseAuth, setCurrentUser, setUserRoles, updateUserSettings]);
}, [
firebaseAuth,
setCurrentUser,
setUserRoles,
updateUserSettings,
elevateError,
]);
}