import { User } from "@/interfaces/user"; import { sessionOptions } from "@/lib/session"; import { shouldRedirectHome } from "@/utils/navigation.disabled"; import { checkAccess } from "@/utils/permissions"; import { getUserPermissions } from "@/utils/permissions.be"; import { withIronSessionSsr } from "iron-session/next"; import dynamic from "next/dynamic"; import { useState, useEffect } from 'react'; export const getServerSideProps = withIronSessionSsr(async ({ req, res, query }) => { const user = req.session.user; if (!user) { return { redirect: { destination: "/login", permanent: false, }, }; } if (shouldRedirectHome(user) || !checkAccess(user, ["admin", "developer", "corporate", "teacher", "mastercorporate"])) { return { redirect: { destination: "/", permanent: false, }, }; } const permissions = await getUserPermissions(user.id); const {type, module} = query; return { props: { user, permissions, type, module }, }; }, sessionOptions); const Popout: React.FC<{ user: User; type: string, module: string }> = ({ user, type, module }) => { const [DynamicPopout, setDynamicPopout] = useState | null>(null); const [error, setError] = useState(null); useEffect(() => { const loadComponent = async () => { try { const sanitizedPopout = type.replace(/[^a-zA-Z0-9]/g, ''); const sanitizedModule = module.replace(/[^a-zA-Z0-9]/g, ''); const Component = dynamic(() => import(`@/components/Popouts/${sanitizedPopout}`), { loading: () => (
), }); setDynamicPopout(() => Component); } catch (err) { console.error("Error loading component:", err); setError("Failed to load the requested popout component."); } }; loadComponent(); }, [type, module]); if (error) { return
{error}
; } return (
{DynamicPopout ? : null}
); }; export default Popout;