36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { AppContent } from '@/components/app-content';
|
|
import { AppShell } from '@/components/app-shell';
|
|
import { AppSidebar } from '@/components/app-sidebar';
|
|
import { AppSidebarHeader } from '@/components/app-sidebar-header';
|
|
import type { AppLayoutProps } from '@/types';
|
|
import { usePage } from '@inertiajs/react';
|
|
import { useEffect } from 'react';
|
|
import { Toaster, toast } from 'sonner';
|
|
|
|
/** Auto-show Laravel flash messages as Sonner toasts on every page visit */
|
|
function FlashToast() {
|
|
const { flash } = usePage<{ flash?: { success?: string; error?: string } }>().props;
|
|
useEffect(() => {
|
|
if (flash?.success) toast.success(flash.success);
|
|
if (flash?.error) toast.error(flash.error);
|
|
}, [flash]);
|
|
return null;
|
|
}
|
|
|
|
export default function AppSidebarLayout({
|
|
children,
|
|
breadcrumbs = [],
|
|
}: AppLayoutProps) {
|
|
return (
|
|
<AppShell variant="sidebar">
|
|
<AppSidebar />
|
|
<AppContent variant="sidebar" className="overflow-x-hidden">
|
|
<AppSidebarHeader breadcrumbs={breadcrumbs} />
|
|
<FlashToast />
|
|
{children}
|
|
</AppContent>
|
|
<Toaster richColors position="top-right" />
|
|
</AppShell>
|
|
);
|
|
}
|