Skip to content

Commit 2a3c216

Browse files
committed
wip
1 parent 7d878db commit 2a3c216

9 files changed

Lines changed: 147 additions & 26 deletions

File tree

config/backstage/users.php

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,15 @@
33
// config for Backstage/UserManagement
44

55
use Backstage\UserManagement\Models;
6+
use Backstage\UserManagement\Resources\UserResource;
7+
use Backstage\UserManagement\Resources\UsersTagResource;
68

79
return [
10+
'resources' => [
11+
'users' => UserResource::class,
12+
'users-tags' => UsersTagResource::class
13+
],
14+
815
'eloquent' => [
916
'users' => [
1017
'model' => Models\User::class,
@@ -21,5 +28,7 @@
2128
'record' => [
2229
'user_logins' => true,
2330
'user_traffic' => true,
31+
'user_must_verify' => true,
32+
'can_toggle_sub_navigation' => true,
2433
],
2534
];
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<div wire:click="toggleSubNavigationType" class="cursor-pointer">
2+
<x-filament::icon :icon="$icon" class="w-6 h-auto fi-icon-btn-icon text-gray-400"
3+
x-tooltip.raw="{{ __('Toggle subnavigation, current: :current', ['current' => $current])}}"/>
4+
</div>

resources/views/mail/login-with-magic-link-mail.blade.php

Lines changed: 0 additions & 12 deletions
This file was deleted.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
<?php
2+
3+
namespace Backstage\UserManagement\Components;
4+
5+
use Filament\Actions\Concerns\InteractsWithActions;
6+
use Filament\Actions\Contracts\HasActions;
7+
use Filament\Facades\Filament;
8+
use Filament\Forms\Concerns\InteractsWithForms;
9+
use Filament\Forms\Contracts\HasForms;
10+
use Livewire\Component;
11+
12+
class ToggleSubNavigationType extends Component implements HasForms, HasActions
13+
{
14+
use InteractsWithActions;
15+
use InteractsWithForms;
16+
17+
public $icon = 'heroicon-o-adjustments-horizontal';
18+
19+
public $current;
20+
21+
public function render()
22+
{
23+
$this->current = $this->getCurrentSubNavigationType();
24+
25+
return view('backstage.users::components.toggle-sub-navigation-type');
26+
}
27+
28+
public function getCurrentSubNavigationType()
29+
{
30+
return Filament::auth()->user()->sub_navigation_preference;
31+
}
32+
33+
public function toggleSubNavigationType()
34+
{
35+
dd();
36+
}
37+
}

src/Concerns/Conditionals/HasConditionals.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
trait HasConditionals
66
{
77
use UserIsVerified;
8+
use HasSubNavigationPreference;
89
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
namespace Backstage\UserManagement\Concerns\Conditionals;
4+
5+
use Filament\Pages\SubNavigationPosition;
6+
7+
trait HasSubNavigationPreference
8+
{
9+
public function getSubNavigationPreference()
10+
{
11+
return match($this->sub_navigation_preference) {
12+
'top' => SubNavigationPosition::Top,
13+
'start' => SubNavigationPosition::Start,
14+
'end' => SubNavigationPosition::End,
15+
default => null,
16+
};
17+
18+
return '';
19+
}
20+
21+
public function isSubNavigationPreference($type)
22+
{
23+
return $this->getSubNavigationPreference() === $type;
24+
}
25+
}

src/UserManagementPlugin.php

Lines changed: 40 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22

33
namespace Backstage\UserManagement;
44

5+
use Filament\Panel;
6+
use Livewire\Livewire;
7+
use Filament\Contracts\Plugin;
8+
use Filament\Navigation\MenuItem;
9+
use Filament\View\PanelsRenderHook;
10+
use Illuminate\Support\Facades\Blade;
11+
use Filament\Actions\Modal\Actions\Action;
12+
use Filament\Support\Facades\FilamentView;
513
use Backstage\UserManagement\Http\Middleware\DetectUserTraffic;
14+
use Backstage\UserManagement\Components\ToggleSubNavigationType;
615
use Backstage\UserManagement\Http\Middleware\RedirectUnverifiedUsers;
7-
use Filament\Contracts\Plugin;
8-
use Filament\Panel;
916

1017
class UserManagementPlugin implements Plugin
1118
{
@@ -17,23 +24,36 @@ public function getId(): string
1724
public function register(Panel $panel): void
1825
{
1926
$panel->resources([
20-
Resources\UserResource::class,
21-
Resources\UsersTagResource::class,
27+
config('backstage.users.resources.users', Resources\UserResource::class),
28+
29+
config('backstage.users.resources.users-tags', Resources\UsersTagResource::class),
2230
]);
2331

24-
$panel->middleware([
25-
DetectUserTraffic::class,
2632

27-
RedirectUnverifiedUsers::class,
28-
]);
33+
$middleware = [];
34+
35+
if (config('backstage.users.record.user_must_verify', false)) {
36+
$panel->emailVerification();
2937

30-
$panel->emailVerification();
38+
$panel->requiresEmailVerification();
3139

32-
$panel->requiresEmailVerification();
40+
$panel->emailVerificationRoutePrefix('email-verification');
41+
$panel->emailVerificationPromptRouteSlug('prompt');
42+
$panel->emailVerificationRouteSlug('verify');
3343

34-
$panel->emailVerificationRoutePrefix('email-verification');
35-
$panel->emailVerificationPromptRouteSlug('prompt');
36-
$panel->emailVerificationRouteSlug('verify');
44+
$middleware[] = RedirectUnverifiedUsers::class;
45+
}
46+
47+
if (config('backstage.users.record.user_traffic', true)) {
48+
$middleware[] = DetectUserTraffic::class;
49+
}
50+
51+
if (config('backstage.users.record.can_toggle_sub_navigation', true)) {
52+
$this->initSubNavigationToggle($panel);
53+
}
54+
55+
56+
$panel->middleware($middleware);
3757

3858
$panel->authGuard('web');
3959

@@ -59,4 +79,11 @@ public static function get(): static
5979

6080
return $plugin;
6181
}
82+
83+
protected function initSubNavigationToggle(Panel $panel)
84+
{
85+
$panel->renderHook(PanelsRenderHook::GLOBAL_SEARCH_AFTER, function () {
86+
return Livewire::mount(ToggleSubNavigationType::class);
87+
});
88+
}
6289
}

src/UserManagementServiceProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class UserManagementServiceProvider extends PackageServiceProvider
3434
{
3535
public static string $name = 'backstage:users';
3636

37-
public static string $viewNamespace = 'backstage/users';
37+
public static string $viewNamespace = 'backstage.users';
3838

3939
public function configurePackage(Package $package): void
4040
{
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
use Illuminate\Database\Migrations\Migration;
4+
use Illuminate\Database\Schema\Blueprint;
5+
use Illuminate\Support\Facades\Schema;
6+
7+
return new class extends Migration
8+
{
9+
/**
10+
* Run the migrations.
11+
*/
12+
public function up(): void
13+
{
14+
Schema::table('users', function (Blueprint $table) {
15+
$table->enum('subnavigation_preference', ['start', 'end', 'top'])
16+
->default('top')
17+
->after('email_verified_at');
18+
});
19+
}
20+
21+
/**
22+
* Reverse the migrations.
23+
*/
24+
public function down(): void
25+
{
26+
Schema::table('users', function (Blueprint $table) {
27+
$table->dropColumn('subnavigation_preference');
28+
});
29+
}
30+
};

0 commit comments

Comments
 (0)