48 lines
1.1 KiB
TypeScript
48 lines
1.1 KiB
TypeScript
import { Outlet, redirect } from 'react-router'
|
|
|
|
import { getStaff } from '~/apis/admin/get-staff'
|
|
import { AUTH_PAGES } from '~/configs/pages'
|
|
import { AdminProvider } from '~/contexts/admin'
|
|
import { AdminDefaultLayout } from '~/layouts/admin/default'
|
|
import { handleCookie } from '~/libs/cookies'
|
|
|
|
import type { Route } from './+types/_admin.lg-admin'
|
|
|
|
export const loader = async ({ request }: Route.LoaderArgs) => {
|
|
const { staffToken } = await handleCookie(request)
|
|
const { pathname } = new URL(request.url)
|
|
const isAuthPage = AUTH_PAGES.includes(pathname)
|
|
let adminData
|
|
|
|
if (!isAuthPage && !staffToken) {
|
|
throw redirect('/lg-admin/login')
|
|
}
|
|
|
|
if (isAuthPage && staffToken) {
|
|
throw redirect('/lg-admin')
|
|
}
|
|
|
|
if (staffToken) {
|
|
const { data } = await getStaff({
|
|
accessToken: staffToken,
|
|
})
|
|
adminData = data
|
|
}
|
|
|
|
return {
|
|
adminData,
|
|
}
|
|
}
|
|
|
|
const AdminLayout = () => {
|
|
return (
|
|
<AdminProvider>
|
|
<AdminDefaultLayout>
|
|
<Outlet />
|
|
</AdminDefaultLayout>
|
|
</AdminProvider>
|
|
)
|
|
}
|
|
|
|
export default AdminLayout
|