import * as React from "react"; import {createContext, useCallback, useEffect, useState} from "react"; import {logger} from "../lib/DefaultLogger"; import {userClient} from "../lib/clients/UserClient"; import {tokenUtil} from "../lib/clients/TokenUtil"; export const UserContext = createContext(undefined); export function UserProvider({children}) { const refresh = () => { checkSession() .catch((err) => logger.error(err)) } const [state, setState] = useState({ user: {}, session: {}, error: "", isLoading: true, refresh: refresh }); const checkSession = useCallback(async () => { try { setState((prev) => ({...prev, isLoading: true})); if (!tokenUtil.checkToken(tokenUtil.getToken())) { setState((prev) => ({...prev, error: '', isLoading: false, user: {}})); return; } if (Object.keys(state.user).length === 0) { const userMock = { name: 'Sergey', lastName: 'Kayashov' } setState((prev) => ({...prev, error: "", isLoading: false, user: userMock})) return; const {data, errorData} = await userClient.getMe(); if (errorData) { setState((prev) => ({...prev, error: errorData, isLoading: false, user: {}})); return; } setState((prev) => ({...prev, error: "", isLoading: false, user: data})); } } catch (err) { logger.error(err); setState((prev) => ({...prev, error: 'Что-то пошло не так', isLoading: false, user: {}})); } }, [state]); useEffect(() => { checkSession() .catch((err) => { logger.error(err); }); // eslint-disable-next-line }, []); return {children}; } export const UserConsumer = UserContext.Consumer;