Skip to content

Commit ee24751

Browse files
committed
wip
1 parent 5259afd commit ee24751

File tree

12 files changed

+230
-91
lines changed

12 files changed

+230
-91
lines changed

config/backstage/users.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
'record' => [
1818
'can_toggle_sub_navigation' => true,
19+
'can_toggle_width' => true,
1920
'manage-api-tokens' => false,
2021
],
2122
];
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
3+
use Illuminate\Support\Facades\Schema;
4+
use Filament\Pages\SubNavigationPosition;
5+
use Illuminate\Database\Schema\Blueprint;
6+
use Illuminate\Database\Migrations\Migration;
7+
8+
return new class extends Migration
9+
{
10+
/**
11+
* Run the migrations.
12+
*/
13+
public function up(): void
14+
{
15+
Schema::table(config('users.eloquent.user.table', 'users'), function (Blueprint $table) {
16+
$table->enum('width_preference', ['full', '7xl'])
17+
->default('7xl')
18+
->after('remember_token')
19+
->comment('The user\'s preference for the content width. The default is 7xl.');
20+
});
21+
}
22+
23+
/**
24+
* Reverse the migrations.
25+
*/
26+
public function down(): void
27+
{
28+
Schema::table(config('users.eloquent.user.table', 'users'), function (Blueprint $table) {
29+
$table->dropColumn('width_preference');
30+
});
31+
}
32+
};

resources/views/components/toggle-sub-navigation-type.blade.php

Lines changed: 0 additions & 4 deletions
This file was deleted.

src/Components/ToggleSubNavigationType.php

Lines changed: 0 additions & 49 deletions
This file was deleted.

src/Concerns/Conditionals/HasSubNavigationPreference.php

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,8 @@ trait HasSubNavigationPreference
88
{
99
public function getSubNavigationPreference()
1010
{
11-
return match ($this->sub_navigation_preference) {
12-
'top' => SubNavigationPosition::Top,
13-
'start' => SubNavigationPosition::Start,
14-
'end' => SubNavigationPosition::End,
15-
default => null,
16-
};
11+
$preference = $this->sub_navigation_preference ?? SubNavigationPosition::Top;
1712

18-
return '';
13+
return $preference;
1914
}
2015
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
<?php
2+
3+
namespace Backstage\Filament\Users\Concerns\Conditionals;
4+
5+
use Filament\Pages\Enums\SubNavigationPosition;
6+
use Filament\Support\Enums\Width;
7+
8+
trait HasWidthPreference
9+
{
10+
public function getWidthPreference(): ?Width
11+
{
12+
$preference = $this->width_preference;
13+
14+
return $preference;
15+
}
16+
}

src/Concerns/Resources/HasSubNavigationPosition.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ public static function getSubNavigationPosition(): SubNavigationPosition
1414
*/
1515
$user = Filament::auth()->user();
1616

17+
1718
return $user->getSubNavigationPreference();
1819
}
1920
}

src/Models/User.php

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,24 @@
33
namespace Backstage\Filament\Users\Models;
44

55
use Backstage\Filament\Users\Concerns\Conditionals\HasSubNavigationPreference;
6+
use Backstage\Filament\Users\Concerns\Conditionals\HasWidthPreference;
67
use Backstage\Filament\Users\Events\FilamentUserCreated;
78
use Backstage\Laravel\Users\Eloquent\Models\User as BaseUser;
89
use Filament\Models\Contracts\FilamentUser;
10+
use Filament\Pages\Enums\SubNavigationPosition;
911
use Filament\Panel;
12+
use Filament\Support\Enums\Width;
1013

1114
class User extends BaseUser implements FilamentUser
1215
{
1316
use HasSubNavigationPreference;
17+
use HasWidthPreference;
1418

15-
protected function casts(): array
19+
public function getCasts(): array
1620
{
17-
return [
18-
'email_verified_at' => 'datetime',
19-
'password' => 'hashed',
21+
return parent::getCasts() + [
22+
'width_preference' => Width::class,
23+
'sub_navigation_preference' => SubNavigationPosition::class,
2024
];
2125
}
2226

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
<?php
2+
3+
namespace Backstage\Filament\Users\Plugin\Actions;
4+
5+
use BackedEnum;
6+
use Filament\Actions\Action;
7+
use Filament\Facades\Filament;
8+
use Filament\Support\Enums\Width;
9+
use Filament\Support\Icons\Heroicon;
10+
use Illuminate\Http\RedirectResponse;
11+
use Backstage\Filament\Users\Models\User;
12+
use Filament\Pages\Enums\SubNavigationPosition;
13+
use Livewire\Features\SupportRedirects\Redirector;
14+
15+
class ToggleSubnavigationTypeAction extends Action
16+
{
17+
protected function setUp(): void
18+
{
19+
$this->visible(fn(): bool => config('backstage.users.record.can_toggle_sub_navigation', true));
20+
21+
$this->label(fn(): string => __('Toggle Sub Navigation Type'));
22+
23+
$this->icon(fn(): BackedEnum => Heroicon::OutlinedAdjustmentsHorizontal);
24+
25+
$this->action(function (): RedirectResponse|Redirector {
26+
/**
27+
* @var User $user
28+
*/
29+
$user = Filament::auth()->user();
30+
31+
/**
32+
* @var SubNavigationPosition $current
33+
*/
34+
$currentPosition = $user->getSubNavigationPreference();
35+
36+
/**
37+
* @var SubNavigationPosition $current
38+
*/
39+
if ($currentPosition === SubNavigationPosition::Top) {
40+
$currentPosition = SubNavigationPosition::End;
41+
} elseif ($currentPosition === SubNavigationPosition::End) {
42+
$currentPosition = SubNavigationPosition::Top;
43+
}
44+
45+
$user->update(['sub_navigation_preference' => $currentPosition->value]);
46+
47+
$referer = request()->header('referer', '/');
48+
49+
/**
50+
* @var RedirectResponse $redirectTo
51+
*/
52+
$redirectTo = redirect()->to($referer);
53+
54+
return $redirectTo;
55+
});
56+
}
57+
58+
public static function getDefaultName(): ?string
59+
{
60+
return 'toggle_sub_navigation_type';
61+
}
62+
}
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
<?php
2+
3+
namespace Backstage\Filament\Users\Plugin\Actions;
4+
5+
use BackedEnum;
6+
use Filament\Actions\Action;
7+
use Filament\Facades\Filament;
8+
use Filament\Support\Enums\Width;
9+
use Filament\Support\Icons\Heroicon;
10+
use Illuminate\Http\RedirectResponse;
11+
use Backstage\Filament\Users\Models\User;
12+
use Livewire\Features\SupportRedirects\Redirector;
13+
14+
class ToggleWidthAction extends Action
15+
{
16+
protected function setUp(): void
17+
{
18+
$this->visible(fn(): bool => config('backstage.users.record.can_toggle_width', true));
19+
20+
$this->label(fn(): string => __('Toggle width'));
21+
22+
$this->icon(fn(): BackedEnum => Heroicon::OutlinedAdjustmentsHorizontal);
23+
24+
$this->action(function (): RedirectResponse|Redirector {
25+
/**
26+
* @var User $user
27+
*/
28+
$user = Filament::auth()->user();
29+
30+
/**
31+
* @var Width $currentWidth
32+
*/
33+
$currentWidth = $user->getWidthPreference();
34+
35+
/**
36+
* @var Width $width
37+
*/
38+
$width = $currentWidth === Width::Full ? Width::SevenExtraLarge : Width::Full;
39+
40+
/**
41+
* @var User $user
42+
*/
43+
$user = Filament::auth()->user();
44+
45+
$user->update(['width_preference' => $width->value]);
46+
47+
/**
48+
* @var string $referer
49+
*/
50+
$referer = request()->header('referer', '/');
51+
52+
/**
53+
* @var RedirectResponse $redirectTo
54+
*/
55+
$redirectTo = redirect()->to($referer);
56+
57+
return $redirectTo;
58+
});
59+
}
60+
61+
public static function getDefaultName(): ?string
62+
{
63+
return 'toggle_width';
64+
}
65+
}

0 commit comments

Comments
 (0)