update login flow, in the middle,
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
import * as React from 'react';
|
||||
|
||||
import { User } from '../../../types/user';
|
||||
import { authClient } from '../../../lib/auth/custom/client';
|
||||
|
||||
import type { UserContextValue } from '../types';
|
||||
|
||||
export const UserContext = React.createContext<UserContextValue | undefined>(undefined);
|
||||
|
||||
export interface UserProviderProps {
|
||||
children: React.ReactNode;
|
||||
}
|
||||
|
||||
export function UserProvider({ children }: UserProviderProps): React.JSX.Element {
|
||||
const [state, setState] = React.useState<{ user: User | null; error: string | null; isLoading: boolean }>({
|
||||
user: null,
|
||||
error: null,
|
||||
isLoading: true,
|
||||
});
|
||||
|
||||
const checkSession = React.useCallback(async (): Promise<void> => {
|
||||
try {
|
||||
const { data, error } = await authClient.getUser();
|
||||
|
||||
if (error) {
|
||||
// logger.error(error);
|
||||
setState((prev) => ({ ...prev, user: null, error: 'Something went wrong', isLoading: false }));
|
||||
return;
|
||||
}
|
||||
|
||||
setState((prev) => ({ ...prev, user: data ?? null, error: null, isLoading: false }));
|
||||
} catch (err) {
|
||||
// logger.error(err);
|
||||
setState((prev) => ({ ...prev, user: null, error: 'Something went wrong', isLoading: false }));
|
||||
}
|
||||
}, []);
|
||||
|
||||
React.useEffect(() => {
|
||||
checkSession().catch((err) => {
|
||||
// logger.error(err);
|
||||
// noop
|
||||
});
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps -- Expected
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<UserContext.Provider value={{ ...state, checkSession }}>
|
||||
{/* */}
|
||||
{children}
|
||||
</UserContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
export const UserConsumer = UserContext.Consumer;
|
Reference in New Issue
Block a user