34 lines
1.0 KiB
TypeScript
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 };
|