* Impersonate UI * Depracates Old admin required * Move permission container to features * Remove logic from dumb components * Fix export from v2 * Fix type cast - add tab filter * Redirect on authed pages * Add key back Co-authored-by: Joe Au-Yeung <65426560+joeauyeung@users.noreply.github.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Omar López <zomars@me.com>
33 lines
989 B
TypeScript
33 lines
989 B
TypeScript
import { useSession } from "next-auth/react";
|
|
import { useRouter } from "next/router";
|
|
import React, { ComponentProps, useEffect } from "react";
|
|
|
|
import Shell from "../Shell";
|
|
import SettingsLayout from "./SettingsLayout";
|
|
import { UserPermissionRole } from ".prisma/client";
|
|
|
|
export default function AdminLayout({
|
|
children,
|
|
...rest
|
|
}: { children: React.ReactNode } & ComponentProps<typeof Shell>) {
|
|
const session = useSession();
|
|
const router = useRouter();
|
|
|
|
// Force redirect on component level
|
|
useEffect(() => {
|
|
if (session.data?.user.role !== UserPermissionRole.ADMIN) {
|
|
router.replace("/settings");
|
|
}
|
|
}, [session, router]);
|
|
|
|
return (
|
|
<SettingsLayout {...rest}>
|
|
<div className="mx-auto flex max-w-4xl flex-row divide-y divide-gray-200 md:px-12">
|
|
<div className="flex flex-1 [&>*]:flex-1">{children}</div>
|
|
</div>
|
|
</SettingsLayout>
|
|
);
|
|
}
|
|
|
|
export const getLayout = (page: React.ReactElement) => <AdminLayout>{page}</AdminLayout>;
|