55namespace App \Filament ;
66
77use App \Http \Middleware \EnsureUserIsAdmin ;
8+ use App \Models \Workspace ;
9+ use Filament \Actions \Action ;
10+ use Filament \Forms \Components \Select ;
811use Filament \Http \Middleware \Authenticate ;
912use Filament \Http \Middleware \AuthenticateSession ;
1013use Filament \Http \Middleware \DisableBladeIconComponents ;
1114use Filament \Http \Middleware \DispatchServingFilamentEvent ;
15+ use Filament \Pages ;
1216use Filament \Panel ;
1317use Filament \PanelProvider ;
14- use Filament \Pages ;
1518use Filament \Support \Colors \Color ;
1619use Illuminate \Cookie \Middleware \AddQueuedCookiesToResponse ;
1720use Illuminate \Cookie \Middleware \EncryptCookies ;
1821use Illuminate \Foundation \Http \Middleware \VerifyCsrfToken ;
22+ use Illuminate \Http \Request ;
1923use Illuminate \Routing \Middleware \SubstituteBindings ;
2024use Illuminate \Session \Middleware \StartSession ;
2125use Illuminate \View \Middleware \ShareErrorsFromSession ;
@@ -33,7 +37,8 @@ public function panel(Panel $panel): Panel
3337 'primary ' => Color::Indigo,
3438 ])
3539 ->middleware ([
36- 'web '
40+ 'web ' ,
41+ 'workspace ' ,
3742 // EncryptCookies::class,
3843 // AddQueuedCookiesToResponse::class,
3944 // StartSession::class,
@@ -48,7 +53,25 @@ public function panel(Panel $panel): Panel
4853 Authenticate::class,
4954 EnsureUserIsAdmin::class,
5055 ])
51- ->discoverWidgets (in: app_path ('Filament/Widgets ' ), for: 'App \\Filament \\Widgets ' )->discoverResources (in: app_path ('Filament/Resources ' ), for: 'App \\Filament \\Resources ' )
56+ ->userMenuItems ([
57+ Action::make ('workspace ' )
58+ ->label (fn (): string => currentWorkspace ()?->name ?? 'Workspace ' )
59+ ->icon ('heroicon-m-rectangle-stack ' )
60+ ->form ([
61+ Select::make ('workspace ' )
62+ ->label ('Workspace ' )
63+ ->options (fn (): array => auth ()->user ()?->account?->workspaces()?->pluck('name ' , 'slug ' )?->toArray() ?? [])
64+ ->default (fn (): ?string => session ('workspace ' )),
65+ ])
66+ ->action (function (array $ data , Request $ request ): void {
67+ $ workspace = Workspace::where ('slug ' , $ data ['workspace ' ])->first ();
68+ if ($ workspace !== null && $ workspace ->account_id === $ request ->user ()->account_id ) {
69+ $ request ->session ()->put ('workspace ' , $ workspace ->slug );
70+ }
71+ }),
72+ ])
73+ ->discoverWidgets (in: app_path ('Filament/Widgets ' ), for: 'App \\Filament \\Widgets ' )
74+ ->discoverResources (in: app_path ('Filament/Resources ' ), for: 'App \\Filament \\Resources ' )
5275 ->pages ([
5376 Pages \Dashboard::class,
5477 ]);
0 commit comments