Skip to content

Commit bccc0a4

Browse files
authored
Merge pull request #25 from theafolayan/theafolayan/find-workspace-switching-in-filament-panel
Enable workspace switching in Filament panel
2 parents 0e0db7d + b687be0 commit bccc0a4

23 files changed

Lines changed: 421 additions & 7 deletions

app/Filament/AdminPanelProvider.php

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,21 @@
55
namespace App\Filament;
66

77
use App\Http\Middleware\EnsureUserIsAdmin;
8+
use App\Models\Workspace;
9+
use Filament\Actions\Action;
10+
use Filament\Forms\Components\Select;
811
use Filament\Http\Middleware\Authenticate;
912
use Filament\Http\Middleware\AuthenticateSession;
1013
use Filament\Http\Middleware\DisableBladeIconComponents;
1114
use Filament\Http\Middleware\DispatchServingFilamentEvent;
15+
use Filament\Pages;
1216
use Filament\Panel;
1317
use Filament\PanelProvider;
14-
use Filament\Pages;
1518
use Filament\Support\Colors\Color;
1619
use Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse;
1720
use Illuminate\Cookie\Middleware\EncryptCookies;
1821
use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken;
22+
use Illuminate\Http\Request;
1923
use Illuminate\Routing\Middleware\SubstituteBindings;
2024
use Illuminate\Session\Middleware\StartSession;
2125
use 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
]);

app/Filament/Resources/PushSettingResource.php

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,18 @@
11
<?php
22

3+
declare(strict_types=1);
4+
35
namespace App\Filament\Resources;
46

7+
use App\Filament\Resources\PushSettingResource\Pages\CreatePushSetting;
58
use App\Filament\Resources\PushSettingResource\Pages\EditPushSetting;
9+
use App\Filament\Resources\PushSettingResource\Pages\ListPushSettings;
610
use App\Models\PushSetting;
711
use Filament\Resources\Resource;
812
use Filament\Forms;
913
use Filament\Schemas\Schema;
14+
use Filament\Tables;
15+
use Filament\Tables\Table;
1016

1117

1218

@@ -34,10 +40,20 @@ public static function form(Schema $schema): Schema
3440
]);
3541
}
3642

43+
public static function table(Table $table): Table
44+
{
45+
return $table->columns([
46+
Tables\Columns\TextColumn::make('driver'),
47+
Tables\Columns\IconColumn::make('is_active')->boolean(),
48+
]);
49+
}
50+
3751
public static function getPages(): array
3852
{
3953
return [
40-
'edit' => EditPushSetting::route('/push-settings'),
54+
'index' => ListPushSettings::route('/push-settings'),
55+
'create' => CreatePushSetting::route('/push-settings/create'),
56+
'edit' => EditPushSetting::route('/push-settings/{record}/edit'),
4157
];
4258
}
4359
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\PushSettingResource\Pages;
6+
7+
use App\Filament\Resources\PushSettingResource;
8+
use Filament\Resources\Pages\CreateRecord;
9+
10+
class CreatePushSetting extends CreateRecord
11+
{
12+
protected static string $resource = PushSettingResource::class;
13+
14+
protected function mutateFormDataBeforeCreate(array $data): array
15+
{
16+
if (($data['api_key'] ?? '') !== '') {
17+
$data['api_key_encrypted'] = encrypt($data['api_key']);
18+
}
19+
20+
unset($data['api_key']);
21+
22+
return $data;
23+
}
24+
}
25+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\PushSettingResource\Pages;
6+
7+
use App\Filament\Resources\PushSettingResource;
8+
use Filament\Resources\Pages\ListRecords;
9+
10+
class ListPushSettings extends ListRecords
11+
{
12+
protected static string $resource = PushSettingResource::class;
13+
}
14+

app/Filament/Resources/SmtpSettingResource.php

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,16 @@
44

55
namespace App\Filament\Resources;
66

7+
use App\Filament\Resources\SmtpSettingResource\Pages\CreateSmtpSetting;
78
use App\Filament\Resources\SmtpSettingResource\Pages\EditSmtpSetting;
9+
use App\Filament\Resources\SmtpSettingResource\Pages\ListSmtpSettings;
810
use App\Models\SmtpSetting;
911
use Filament\Forms;
1012
use Filament\Forms\Form;
1113
use Filament\Resources\Resource;
1214
use Filament\Schemas\Schema;
15+
use Filament\Tables;
16+
use Filament\Tables\Table;
1317

1418
class SmtpSettingResource extends Resource
1519
{
@@ -34,10 +38,20 @@ public static function form(Schema $schema): Schema
3438
]);
3539
}
3640

41+
public static function table(Table $table): Table
42+
{
43+
return $table->columns([
44+
Tables\Columns\TextColumn::make('from_email'),
45+
Tables\Columns\TextColumn::make('host'),
46+
]);
47+
}
48+
3749
public static function getPages(): array
3850
{
3951
return [
40-
'edit' => EditSmtpSetting::route('/smtp-settings'),
52+
'index' => ListSmtpSettings::route('/smtp-settings'),
53+
'create' => CreateSmtpSetting::route('/smtp-settings/create'),
54+
'edit' => EditSmtpSetting::route('/smtp-settings/{record}/edit'),
4155
];
4256
}
4357
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SmtpSettingResource\Pages;
6+
7+
use App\Filament\Resources\SmtpSettingResource;
8+
use Filament\Resources\Pages\CreateRecord;
9+
10+
class CreateSmtpSetting extends CreateRecord
11+
{
12+
protected static string $resource = SmtpSettingResource::class;
13+
14+
protected function mutateFormDataBeforeCreate(array $data): array
15+
{
16+
if (($data['password'] ?? '') !== '') {
17+
$data['password_encrypted'] = encrypt($data['password']);
18+
}
19+
20+
unset($data['password']);
21+
22+
return $data;
23+
}
24+
}
25+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\SmtpSettingResource\Pages;
6+
7+
use App\Filament\Resources\SmtpSettingResource;
8+
use Filament\Resources\Pages\ListRecords;
9+
10+
class ListSmtpSettings extends ListRecords
11+
{
12+
protected static string $resource = SmtpSettingResource::class;
13+
}
14+
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources;
6+
7+
use App\Filament\Resources\WorkspaceResource\Pages\CreateWorkspace;
8+
use App\Filament\Resources\WorkspaceResource\Pages\EditWorkspace;
9+
use App\Filament\Resources\WorkspaceResource\Pages\ListWorkspaces;
10+
use App\Models\Workspace;
11+
use Filament\Forms;
12+
use Filament\Resources\Resource;
13+
use Filament\Schemas\Schema;
14+
use Filament\Tables;
15+
use Illuminate\Database\Eloquent\Builder;
16+
17+
class WorkspaceResource extends Resource
18+
{
19+
protected static ?string $model = Workspace::class;
20+
21+
protected static string|\UnitEnum|null $navigationGroup = 'Settings';
22+
23+
public static function form(Schema $schema): Schema
24+
{
25+
return $schema->components([
26+
Forms\Components\TextInput::make('name')->required(),
27+
Forms\Components\TextInput::make('slug')->required(),
28+
]);
29+
}
30+
31+
public static function table(Tables\Table $table): Tables\Table
32+
{
33+
return $table->columns([
34+
Tables\Columns\TextColumn::make('name')->sortable()->searchable(),
35+
Tables\Columns\TextColumn::make('slug')->sortable()->searchable(),
36+
]);
37+
}
38+
39+
public static function getPages(): array
40+
{
41+
return [
42+
'index' => ListWorkspaces::route('/workspaces'),
43+
'create' => CreateWorkspace::route('/workspaces/create'),
44+
'edit' => EditWorkspace::route('/workspaces/{record}/edit'),
45+
];
46+
}
47+
48+
public static function getEloquentQuery(): Builder
49+
{
50+
return parent::getEloquentQuery()->where('account_id', auth()->user()->account_id);
51+
}
52+
}
53+
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\WorkspaceResource\Pages;
6+
7+
use App\Filament\Resources\WorkspaceResource;
8+
use Filament\Resources\Pages\CreateRecord;
9+
10+
class CreateWorkspace extends CreateRecord
11+
{
12+
protected static string $resource = WorkspaceResource::class;
13+
14+
protected function mutateFormDataBeforeCreate(array $data): array
15+
{
16+
$data['account_id'] = auth()->user()->account_id;
17+
18+
return $data;
19+
}
20+
}
21+
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace App\Filament\Resources\WorkspaceResource\Pages;
6+
7+
use App\Filament\Resources\WorkspaceResource;
8+
use Filament\Resources\Pages\EditRecord;
9+
10+
class EditWorkspace extends EditRecord
11+
{
12+
protected static string $resource = WorkspaceResource::class;
13+
}
14+

0 commit comments

Comments
 (0)