pythonasyncioapiasyncfastapiframeworkjsonjson-schemaopenapiopenapi3pydanticpython-typespython3redocreststarletteswaggerswagger-uiuvicornweb
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
876 B
37 lines
876 B
import { Flex, Spinner } from '@chakra-ui/react'
|
|
import { Outlet, createFileRoute, redirect } from '@tanstack/react-router'
|
|
|
|
import Sidebar from '../components/Common/Sidebar'
|
|
import UserMenu from '../components/Common/UserMenu'
|
|
import useAuth, { isLoggedIn } from '../hooks/useAuth'
|
|
|
|
export const Route = createFileRoute('/_layout')({
|
|
component: Layout,
|
|
beforeLoad: async () => {
|
|
if (!isLoggedIn()) {
|
|
throw redirect({
|
|
to: '/login',
|
|
})
|
|
}
|
|
},
|
|
})
|
|
|
|
function Layout() {
|
|
const { isLoading } = useAuth()
|
|
|
|
return (
|
|
<Flex maxW="large" h="auto" position="relative">
|
|
<Sidebar />
|
|
{isLoading ? (
|
|
<Flex justify="center" align="center" height="100vh" width="full">
|
|
<Spinner size="xl" color="ui.main" />
|
|
</Flex>
|
|
) : (
|
|
<Outlet />
|
|
)}
|
|
<UserMenu />
|
|
</Flex>
|
|
)
|
|
}
|
|
|
|
export default Layout
|
|
|