From 2f92e857fa1dab25e48aa8d61df2fa56d299a3df Mon Sep 17 00:00:00 2001 From: "Kalle (Sendou)" <38327916+Sendouc@users.noreply.github.com> Date: Wed, 17 Nov 2021 12:24:39 +0200 Subject: [PATCH] Logged in user via Provider --- App.tsx | 9 ++++--- scenes/layout/components/UserItem.tsx | 10 +++----- utils/UserContext.tsx | 35 +++++++++++++++++++++++++++ 3 files changed, 44 insertions(+), 10 deletions(-) create mode 100644 utils/UserContext.tsx diff --git a/App.tsx b/App.tsx index a6808708a..1157d5c40 100644 --- a/App.tsx +++ b/App.tsx @@ -2,13 +2,16 @@ import { Router } from "solid-app-router"; import type { Component } from "solid-js"; import { Routes } from "./Routes"; import { Layout } from "./scenes/layout/components/Layout"; +import { UserProvider } from "./utils/UserContext"; const App: Component = () => { return ( - - - + + + + + ); }; diff --git a/scenes/layout/components/UserItem.tsx b/scenes/layout/components/UserItem.tsx index a0cf3fcf8..66270a48f 100644 --- a/scenes/layout/components/UserItem.tsx +++ b/scenes/layout/components/UserItem.tsx @@ -1,14 +1,10 @@ -import { createResource, Show } from "solid-js"; +import { Show } from "solid-js"; import { DiscordIcon } from "../../../components/icons/Discord"; -import { trpcClient } from "../../../utils/trpc-client"; +import { useUser } from "../../../utils/UserContext"; import s from "../styles/UserItem.module.css"; -const fetchLoggedInUser = async () => { - return trpcClient.query("layout.getLoggedInUser"); -}; - export function UserItem() { - const [user] = createResource(fetchLoggedInUser); + const user = useUser(); return ( { + return trpcClient.query("layout.getLoggedInUser"); +}; + +type LoggedInUserResource = Resource< + | { + id: number; + discordId: string; + discordAvatar?: string | undefined; + } + | undefined +>; + +const UserContext = createContext(); + +export function UserProvider(props: { children: JSXElement }) { + const [user] = createResource(fetchLoggedInUser); + + return ( + {props.children} + ); +} + +export function useUser(): LoggedInUserResource { + return useContext(UserContext)!; +}