import { createSignal, createContext, useContext, ParentProps, Accessor } from "solid-js"; interface UserInfoActions { setUser(user: Whoami): void; clearUser(): void; } const UserInfoContext = createContext<[Accessor<Whoami | undefined>, UserInfoActions]>(); export interface Whoami { logoutTime: string; roles: string[] | undefined; userId: number; } interface ProviderProps { whoami?: Whoami; } export function UserInfoProvider(props: ParentProps<ProviderProps>) { const [userInfo, setUserInfo] = createSignal(props.whoami); const wrappedValue: [Accessor<Whoami | undefined>, UserInfoActions] = [ userInfo, { setUser(user: Whoami) { setUserInfo(user); }, clearUser() { setUserInfo(); } } ]; return ( <UserInfoContext.Provider value={wrappedValue}> {props.children} </UserInfoContext.Provider> ); } export function useUserInfo() { return useContext(UserInfoContext); } export function loadUserInfo(): Whoami | undefined { const userInfoString = localStorage.getItem("ALLREDLIB_USERINFO"); if (userInfoString === "" || userInfoString === null) { return undefined; } const userInfo = JSON.parse(userInfoString) if (!userInfo || !userInfo.userId || !userInfo.logoutTime) { return undefined } return userInfo }