mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-03-21 18:04:39 -05:00
Logged in user via Provider
This commit is contained in:
parent
1d5ce2d7d3
commit
2f92e857fa
9
App.tsx
9
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 (
|
||||
<Router>
|
||||
<Layout>
|
||||
<Routes />
|
||||
</Layout>
|
||||
<UserProvider>
|
||||
<Layout>
|
||||
<Routes />
|
||||
</Layout>
|
||||
</UserProvider>
|
||||
</Router>
|
||||
);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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 (
|
||||
<Show
|
||||
|
|
|
|||
35
utils/UserContext.tsx
Normal file
35
utils/UserContext.tsx
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
import {
|
||||
createContext,
|
||||
useContext,
|
||||
createResource,
|
||||
JSXElement,
|
||||
Resource,
|
||||
} from "solid-js";
|
||||
import { trpcClient } from "./trpc-client";
|
||||
|
||||
const fetchLoggedInUser = async () => {
|
||||
return trpcClient.query("layout.getLoggedInUser");
|
||||
};
|
||||
|
||||
type LoggedInUserResource = Resource<
|
||||
| {
|
||||
id: number;
|
||||
discordId: string;
|
||||
discordAvatar?: string | undefined;
|
||||
}
|
||||
| undefined
|
||||
>;
|
||||
|
||||
const UserContext = createContext<LoggedInUserResource>();
|
||||
|
||||
export function UserProvider(props: { children: JSXElement }) {
|
||||
const [user] = createResource(fetchLoggedInUser);
|
||||
|
||||
return (
|
||||
<UserContext.Provider value={user}>{props.children}</UserContext.Provider>
|
||||
);
|
||||
}
|
||||
|
||||
export function useUser(): LoggedInUserResource {
|
||||
return useContext(UserContext)!;
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user