Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 4x 5x 5x 5x 5x 5x 5x 1x 4x 4x 4x 99x 99x 99x 99x 99x 80x 249x 99x 82x 8x 8x 8x | import { QueryClient } from "@tanstack/react-query"; import { Plus as PlusIcon } from "lucide-react"; import { Link, Navigate, redirect } from "react-router"; import { UserRoles } from "shared-types"; import { isStateUser } from "shared-utils"; import { getUser, useGetUser, useGetUserDetails } from "@/api"; import { FilterDrawerProvider, LoadingSpinner, OsProvider, OsTab, Tabs, TabsContent, TabsList, TabsTrigger, useOsData, } from "@/components"; import { useLocalStorage } from "@/hooks/useLocalStorage"; import { SpasList } from "./Lists/spas"; import { WaiversList } from "./Lists/waivers"; const loader = (queryClient: QueryClient, loginFlag?: boolean) => { return async () => { Eif (!queryClient.getQueryData(["user"])) { await queryClient.fetchQuery({ queryKey: ["user"], queryFn: () => getUser(), }); } const isUser = queryClient.getQueryData(["user"]) as Awaited<ReturnType<typeof getUser>>; if (!isUser.user) { return redirect(loginFlag ? "/" : "/login"); } return isUser; }; }; export const dashboardLoader = loader; export const Dashboard = () => { const { data: userObj, isLoading } = useGetUser(); const { data: userDetails, isLoading: isUserDetailsLoading } = useGetUserDetails(); const osData = useOsData(); const [localStorageCol, setLocalStorageCol] = useLocalStorage("osDashboardData", { spas: { ...osData.state, tab: "spas" as OsTab }, waivers: { ...osData.state, tab: "waivers" as OsTab }, }); const isAbleToAccessDashboard = () => { return ( (userObj.user["custom:cms-roles"] || userObj.user["custom:ismemberof"]) && Object.values(UserRoles).some((role) => userObj.user.role === role) ); }; if (isLoading || isUserDetailsLoading || osData.tabLoading) { return <LoadingSpinner />; } if (!userObj?.user || !isAbleToAccessDashboard()) { return <Navigate to="/" />; } return ( <OsProvider value={{ data: osData.data, error: osData.error, isLoading: osData.isLoading, }} > <div> <FilterDrawerProvider> <div className="flex flex-col w-full self-center mx-auto max-w-screen-xl xs:flex-row justify-between p-4 lg:px-8"> <h1 className="text-xl font-bold mb-4 md:mb-0">Dashboard</h1> {isStateUser({ ...userObj.user, role: userDetails.role }) && ( <Link to="/new-submission" className="flex items-center text-white font-bold bg-primary border-none px-10 py-2 rounded cursor-pointer" > <span data-testid="new-sub-button" className="mr-2"> New Submission </span> <PlusIcon className="w-4 h-4" /> </Link> )} </div> <Tabs value={osData.state.tab} onValueChange={(tab) => { setLocalStorageCol((prev) => ({ ...prev, [osData.state.tab]: osData.state, })); osData.onSet( (prev) => ({ ...prev, ...localStorageCol[tab], }), true, ); }} > <div className="max-w-screen-xl mx-auto px-4 lg:px-8"> <TabsList> <TabsTrigger value="spas">SPAs</TabsTrigger> <TabsTrigger value="waivers">Waivers</TabsTrigger> </TabsList> </div> <TabsContent value="spas"> <SpasList /> </TabsContent> <TabsContent value="waivers"> <WaiversList /> </TabsContent> </Tabs> </FilterDrawerProvider> </div> </OsProvider> ); }; |