Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion app/Http/Middleware/HandleInertiaRequests.php
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,8 @@ public function share(Request $request): array
'ziggy' => fn (): array => [
...(new Ziggy)->toArray(),
'location' => $request->url(),
]
],
'sidebarOpen' => $request->cookie('sidebar_state') === 'true',
];
}
}
1 change: 1 addition & 0 deletions app/Providers/AppServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace App\Providers;

use Illuminate\Cookie\Middleware\EncryptCookies;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
Expand Down
2 changes: 1 addition & 1 deletion bootstrap/app.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
health: '/up',
)
->withMiddleware(function (Middleware $middleware) {
$middleware->encryptCookies(except: ['appearance']);
$middleware->encryptCookies(except: ['appearance', 'sidebar_state']);

$middleware->web(append: [
HandleAppearance::class,
Expand Down
19 changes: 4 additions & 15 deletions resources/js/components/app-shell.tsx
Original file line number Diff line number Diff line change
@@ -1,29 +1,18 @@
import { SidebarProvider } from '@/components/ui/sidebar';
import { useState } from 'react';
import { SharedData } from '@/types';
import { usePage } from '@inertiajs/react';

interface AppShellProps {
children: React.ReactNode;
variant?: 'header' | 'sidebar';
}

export function AppShell({ children, variant = 'header' }: AppShellProps) {
const [isOpen, setIsOpen] = useState(() => (typeof window !== 'undefined' ? localStorage.getItem('sidebar') !== 'false' : true));

const handleSidebarChange = (open: boolean) => {
setIsOpen(open);

if (typeof window !== 'undefined') {
localStorage.setItem('sidebar', String(open));
}
};
const isOpen = usePage<SharedData>().props.sidebarOpen;

if (variant === 'header') {
return <div className="flex min-h-screen w-full flex-col">{children}</div>;
}

return (
<SidebarProvider defaultOpen={isOpen} open={isOpen} onOpenChange={handleSidebarChange}>
{children}
</SidebarProvider>
);
return <SidebarProvider defaultOpen={isOpen}>{children}</SidebarProvider>;
}
1 change: 1 addition & 0 deletions resources/js/types/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ export interface SharedData {
quote: { message: string; author: string };
auth: Auth;
ziggy: Config & { location: string };
sidebarOpen: boolean;
[key: string]: unknown;
}

Expand Down