import { useNavigate } from "@solidjs/router";
import {
createContext,
createResource,
type Resource,
Suspense,
useContext,
type ParentComponent,
} from "solid-js";
import { getApiAuth, type User } from "~/client";
import { client } from "~/client/client.gen";
export const UserContext = createContext<Resource<User | undefined>>();
export function useMaybeUser() {
const user = useContext(UserContext)!;
return user();
}
export function useUser() {
const user = useContext(UserContext)!;
if (!user()) {
const navigate = useNavigate();
navigate("/api/auth/signin-google", { replace: true, resolve: true });
throw Error("unreachable");
}
return user();
}
export const UserProvider: ParentComponent = (props) => {
const [user] = createResource(() =>
getApiAuth({ client }).then((r) => r.data?.user)
);
return (
<UserContext.Provider value={user}>
<Suspense>{props.children}</Suspense>
</UserContext.Provider>
);
};
import { useNavigate } from "@solidjs/router";
import {
createContext,
createResource,
type Resource,
Suspense,
useContext,
type ParentComponent,
} from "solid-js";
import { getApiAuth, type User } from "~/client";
import { client } from "~/client/client.gen";
export const UserContext = createContext<Resource<User | undefined>>();
export function useMaybeUser() {
const user = useContext(UserContext)!;
return user();
}
export function useUser() {
const user = useContext(UserContext)!;
if (!user()) {
const navigate = useNavigate();
navigate("/api/auth/signin-google", { replace: true, resolve: true });
throw Error("unreachable");
}
return user();
}
export const UserProvider: ParentComponent = (props) => {
const [user] = createResource(() =>
getApiAuth({ client }).then((r) => r.data?.user)
);
return (
<UserContext.Provider value={user}>
<Suspense>{props.children}</Suspense>
</UserContext.Provider>
);
};