tuitio-client-react/src/hooks/useTuitioUserInfo.ts

34 lines
1.0 KiB
TypeScript

// Copyright (c) 2023 Tudor Stanciu
import { useContext, useCallback, useEffect } from "react";
import { TuitioClient } from "@flare/tuitio-client";
import type { TuitioUserInfo } from "@flare/tuitio-client";
import { TuitioContext, TuitioDispatchContext } from "../contexts";
export type TuitioUserInfoHookResult = {
userInfo?: TuitioUserInfo;
};
const useTuitioUserInfo = (): TuitioUserInfoHookResult => {
const state = useContext(TuitioContext);
const dispatchActions = useContext(TuitioDispatchContext);
const getUserInfo = useCallback(async (): Promise<TuitioUserInfo> => {
const client = new TuitioClient(state.configuration.tuitioUrl);
const userInfo = await client.getUserInfo();
dispatchActions.onUserInfoLoaded(userInfo);
return userInfo;
}, [dispatchActions, state.configuration.tuitioUrl]);
useEffect(() => {
if (state.userInfo) return;
getUserInfo();
}, [getUserInfo, state.userInfo]);
const userInfo = state.userInfo;
return { userInfo };
};
export { useTuitioUserInfo };