import * as React from "react"; import { useSocket } from "@tensamin/ttp/context"; import { socket as schemas } from "@tensamin/shared/data"; import type z from "zod"; export type User = z.infer; interface contextValue { get(userId: number): Promise; } const UserContext = React.createContext(undefined); /** * Executes UserProvider. * @param props Parameter props. * @returns unknown. */ export default function UserProvider(props: { children: React.ReactNode }) { const storageRef = React.useRef>({}); const { send } = useSocket(); /** * Executes get. * @param userId Parameter userId. * @returns Promise. */ async function get(userId: number): Promise { if (storageRef.current[userId] === undefined) { const userData = await send("get_user_data", { user_id: userId }); // Temp, add base64 stuff userData.data.avatar = userData.data.avatar ? `data:image/png;base64,${userData.data.avatar}` : undefined; // Temp end storageRef.current[userId] = userData.data; } return storageRef.current[userId]; } return ( {props.children} ); } /** * Executes useUser. * @param none This function has no parameters. * @returns contextValue. */ export function useUser(): contextValue { const context = React.useContext(UserContext); if (!context) { throw new Error("useUser must be used within a UserProvider"); } return context; }