From da9404507c5406faee88d22ff034b20021541b7c Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Wed, 28 Feb 2024 11:42:07 +0000 Subject: [PATCH] clean up and docs --- packages/panels/docs/06-navigation.md | 12 ++++++++++++ packages/panels/docs/11-tenancy.md | 12 ++++++++++++ .../resources/views/components/tenant-menu.blade.php | 10 ++++++++-- .../resources/views/components/user-menu.blade.php | 10 +++++----- packages/panels/src/Navigation/MenuItem.php | 10 +++++----- 5 files changed, 42 insertions(+), 12 deletions(-) diff --git a/packages/panels/docs/06-navigation.md b/packages/panels/docs/06-navigation.md index 3efad6efcb..3730d7742c 100644 --- a/packages/panels/docs/06-navigation.md +++ b/packages/panels/docs/06-navigation.md @@ -486,6 +486,18 @@ MenuItem::make() ->hidden(fn (): bool => ! auth()->user()->can('viewAny', Payment::class)) ``` +### Sending a `POST` HTTP request from a user menu item + +You can send a `POST` HTTP request from a user menu item by passing a URL to the `postAction()` method: + +```php +use Filament\Navigation\MenuItem; + +MenuItem::make() + ->label('Lock session') + ->postAction(fn (): string => route('lock-session')) +``` + ## Disabling breadcrumbs The default layout will show breadcrumbs to indicate the location of the current page within the hierarchy of the app. diff --git a/packages/panels/docs/11-tenancy.md b/packages/panels/docs/11-tenancy.md index 9c23a614e2..7c41371367 100644 --- a/packages/panels/docs/11-tenancy.md +++ b/packages/panels/docs/11-tenancy.md @@ -435,6 +435,18 @@ MenuItem::make() ->hidden(fn (): bool => ! auth()->user()->can('manage-team')) ``` +### Sending a `POST` HTTP request from a tenant menu item + +You can send a `POST` HTTP request from a tenant menu item by passing a URL to the `postAction()` method: + +```php +use Filament\Navigation\MenuItem; + +MenuItem::make() + ->label('Lock session') + ->postAction(fn (): string => route('lock-session')) +``` + ### Hiding the tenant menu You can hide the tenant menu by using the `tenantMenu(false)` diff --git a/packages/panels/resources/views/components/tenant-menu.blade.php b/packages/panels/resources/views/components/tenant-menu.blade.php index 8d3dd02753..e8f2d3ebfb 100644 --- a/packages/panels/resources/views/components/tenant-menu.blade.php +++ b/packages/panels/resources/views/components/tenant-menu.blade.php @@ -116,12 +116,18 @@ @if (count($items)) @foreach ($items as $item) + @php + $itemPostAction = $item->getPostAction(); + @endphp + {{ $item->getLabel() }} diff --git a/packages/panels/resources/views/components/user-menu.blade.php b/packages/panels/resources/views/components/user-menu.blade.php index a72a0ed9e9..a14456121e 100644 --- a/packages/panels/resources/views/components/user-menu.blade.php +++ b/packages/panels/resources/views/components/user-menu.blade.php @@ -68,16 +68,16 @@ @foreach ($items as $key => $item) @php - $itemAction = $item->getAction(); + $itemPostAction = $item->getPostAction(); @endphp - + {{ $item->getLabel() }} diff --git a/packages/panels/src/Navigation/MenuItem.php b/packages/panels/src/Navigation/MenuItem.php index 964fea9303..20ccc2c130 100644 --- a/packages/panels/src/Navigation/MenuItem.php +++ b/packages/panels/src/Navigation/MenuItem.php @@ -8,6 +8,8 @@ use Laravel\SerializableClosure\Serializers\Native; class MenuItem extends Component { + protected string | Closure | null $postAction = null; + /** * @var string | array{50: string, 100: string, 200: string, 300: string, 400: string, 500: string, 600: string, 700: string, 800: string, 900: string, 950: string} | Closure | null */ @@ -21,8 +23,6 @@ class MenuItem extends Component protected string | Closure | Native | null $url = null; - protected string | Closure | null $action = null; - protected bool | Closure $shouldOpenUrlInNewTab = false; protected bool | Closure $isHidden = false; @@ -82,7 +82,7 @@ class MenuItem extends Component public function postAction(string | Closure | null $action): static { - $this->action = $action; + $this->postAction = $action; return $this; } @@ -150,9 +150,9 @@ class MenuItem extends Component return $this->evaluate($this->url); } - public function getAction(): ?string + public function getPostAction(): ?string { - return $this->evaluate($this->action); + return $this->evaluate($this->postAction); } public function shouldOpenUrlInNewTab(): bool