client/packages/user/src/wrapper.tsx
2026-03-28 22:10:27 +01:00

41 lines
893 B
TypeScript

import { useEffect, useState } from "react";
import { useUser, type User } from "./context";
import { failedUser } from "@tensamin/shared/data";
// Wrapper function to pass user data to some component
export default function Wrapper(props: {
userId?: number;
loading: React.ReactNode;
component: (user: User) => React.ReactNode;
}) {
const { get } = useUser();
const [user, setUser] = useState<User | null>(null);
useEffect(() => {
if (!props.userId) {
setUser(failedUser);
return;
}
let active = true;
get(props.userId)
.then((value) => {
if (active) {
setUser(value);
}
})
.catch(() => {
if (active) {
setUser(failedUser);
}
});
return () => {
active = false;
};
}, [get, props.userId]);
return <>{user ? props.component(user) : props.loading}</>;
}