gitscope
← marzneshin / v0.7.1 / dashboard/src/routes/_dashboard/admins/$adminId.tsx
https://dev.kronoz.win/r/marzneshin.git
dashboard/src/routes/_dashboard/admins/$adminId.tsx · TypeScript
Blame Raw
 1import {
 2    createFileRoute,
 3    Outlet,
 4} from "@tanstack/react-router";
 5import { useSuspenseQuery } from "@tanstack/react-query";
 6import { queryClient } from "@marzneshin/common/utils";
 7import {
 8    RouterAdminContext,
 9    adminQueryOptions,
10} from "@marzneshin/modules/admins";
11import { Suspense, useMemo } from "react";
12import {
13    AlertDialog,
14    AlertDialogContent,
15} from "@marzneshin/common/components";
16
17const AdminProvider = () => {
18    const { username } = Route.useLoaderData()
19    const { data: admin, isPending } = useSuspenseQuery(adminQueryOptions({ username }))
20    const value = useMemo(() => ({ admin, isPending }), [admin, isPending])
21    return (
22        <RouterAdminContext.Provider value={value}>
23            <Suspense>
24                <Outlet />
25            </Suspense>
26        </RouterAdminContext.Provider>
27    )
28}
29
30export const Route = createFileRoute('/_dashboard/admins/$adminId')({
31    loader: async ({ params }) => {
32        queryClient.ensureQueryData(adminQueryOptions({ username: params.adminId }))
33        return { username: params.adminId };
34    },
35    errorComponent: () => (
36        <AlertDialog open={true}>
37            <AlertDialogContent>Admin not found</AlertDialogContent>
38        </AlertDialog>
39    ),
40    component: AdminProvider,
41})