27 lines
761 B
TypeScript
27 lines
761 B
TypeScript
import { useEffect, useState, type JSX } from "react";
|
|
import { Navigate, useLocation } from "react-router-dom";
|
|
import { getCurrentUser } from "../helper/auth";
|
|
|
|
export const RequireAdmin = ({ children }: { children: JSX.Element }) => {
|
|
const [isAdmin, setIsAdmin] = useState<boolean | null>(null);
|
|
const [loading, setLoading] = useState(true);
|
|
const location = useLocation();
|
|
|
|
useEffect(() => {
|
|
const checkAdmin = async () => {
|
|
const user = await getCurrentUser();
|
|
setIsAdmin(user.isAdmin);
|
|
setLoading(false);
|
|
};
|
|
checkAdmin();
|
|
}, []);
|
|
|
|
if (loading) return <div>Checking permissions...</div>;
|
|
|
|
if (!isAdmin) {
|
|
return <Navigate to="/unauthorized" state={{ from: location }} replace />;
|
|
}
|
|
|
|
return children;
|
|
};
|