proteinea / src /lib /user.ts
Mahmoud Eljendy
feat: Antibody Studio — AI-native antibody design workspace by Proteinea
30cc31a
"use client";
import {
createContext,
useContext,
useEffect,
useState,
type ReactNode,
} from "react";
import React from "react";
// ---- Types ----
export interface User {
email: string;
name: string;
}
// ---- Fetch ----
export async function fetchUser(): Promise<User> {
const res = await fetch("/api/me");
if (!res.ok) throw new Error(`/api/me returned ${res.status}`);
return (await res.json()) as User;
}
// ---- Context ----
const UserContext = createContext<User | null>(null);
export function UserProvider({ children }: { children: ReactNode }) {
const [user, setUser] = useState<User | null>(null);
useEffect(() => {
fetchUser()
.then(setUser)
.catch(() => setUser({ email: "dev@proteinea.local", name: "Dev" }));
}, []);
return React.createElement(UserContext.Provider, { value: user }, children);
}
export function useUser(): User | null {
return useContext(UserContext);
}