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
}