mirror of
https://github.com/filamentphp/filament.git
synced 2026-09-24 15:42:09 +08:00
Merge pull request #12155 from binaryfire/add-unique-action-modal-class
Add `extraModalWindowAttributes`
This commit is contained in:
@@ -552,3 +552,12 @@ Action::make('create')
|
||||
->modalHidden(fn (): bool => $this->role !== 'admin')
|
||||
->modalContent(view('filament.pages.actions.create'))
|
||||
```
|
||||
|
||||
## Adding extra attributes to the modal window
|
||||
|
||||
You may also pass extra HTML attributes to the modal window using `extraModalWindowAttributes()`:
|
||||
|
||||
```php
|
||||
Action::make('updateAuthor')
|
||||
->extraModalWindowAttributes(['class' => 'update-author-modal'])
|
||||
```
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
:close-by-clicking-away="$action?->isModalClosedByClickingAway()"
|
||||
:description="$action?->getModalDescription()"
|
||||
display-classes="block"
|
||||
:extra-modal-window-attribute-bag="$action?->getExtraModalWindowAttributeBag()"
|
||||
:footer-actions="$action?->getVisibleModalFooterActions()"
|
||||
:footer-actions-alignment="$action?->getModalFooterActionsAlignment()"
|
||||
:heading="$action?->getModalHeading()"
|
||||
@@ -69,6 +70,7 @@
|
||||
:close-by-clicking-away="$action?->isModalClosedByClickingAway()"
|
||||
:description="$action?->getModalDescription()"
|
||||
display-classes="block"
|
||||
:extra-modal-window-attribute-bag="$action?->getExtraModalWindowAttributeBag()"
|
||||
:footer-actions="$action?->getVisibleModalFooterActions()"
|
||||
:footer-actions-alignment="$action?->getModalFooterActionsAlignment()"
|
||||
:heading="$action?->getModalHeading()"
|
||||
@@ -122,6 +124,7 @@
|
||||
:close-by-clicking-away="$action?->isModalClosedByClickingAway()"
|
||||
:description="$action?->getModalDescription()"
|
||||
display-classes="block"
|
||||
:extra-modal-window-attribute-bag="$action?->getExtraModalWindowAttributeBag()"
|
||||
:footer-actions="$action?->getVisibleModalFooterActions()"
|
||||
:footer-actions-alignment="$action?->getModalFooterActionsAlignment()"
|
||||
:heading="$action?->getModalHeading()"
|
||||
@@ -181,6 +184,7 @@
|
||||
:close-by-clicking-away="$action?->isModalClosedByClickingAway()"
|
||||
:description="$action?->getModalDescription()"
|
||||
display-classes="block"
|
||||
:extra-modal-window-attribute-bag="$action?->getExtraModalWindowAttributeBag()"
|
||||
:footer-actions="$action?->getVisibleModalFooterActions()"
|
||||
:footer-actions-alignment="$action?->getModalFooterActionsAlignment()"
|
||||
:heading="$action?->getModalHeading()"
|
||||
@@ -240,6 +244,7 @@
|
||||
:close-by-clicking-away="$action?->isModalClosedByClickingAway()"
|
||||
:description="$action?->getModalDescription()"
|
||||
display-classes="block"
|
||||
:extra-modal-window-attribute-bag="$action?->getExtraModalWindowAttributeBag()"
|
||||
:footer-actions="$action?->getVisibleModalFooterActions()"
|
||||
:footer-actions-alignment="$action?->getModalFooterActionsAlignment()"
|
||||
:heading="$action?->getModalHeading()"
|
||||
|
||||
@@ -0,0 +1,47 @@
|
||||
<?php
|
||||
|
||||
namespace Filament\Actions\Concerns;
|
||||
|
||||
use Closure;
|
||||
use Illuminate\View\ComponentAttributeBag;
|
||||
|
||||
trait HasExtraModalWindowAttributes
|
||||
{
|
||||
/**
|
||||
* @var array<array<mixed> | Closure>
|
||||
*/
|
||||
protected array $extraModalWindowAttributes = [];
|
||||
|
||||
/**
|
||||
* @param array<mixed> | Closure $attributes
|
||||
*/
|
||||
public function extraModalWindowAttributes(array | Closure $attributes, bool $merge = false): static
|
||||
{
|
||||
if ($merge) {
|
||||
$this->extraModalWindowAttributes[] = $attributes;
|
||||
} else {
|
||||
$this->extraModalWindowAttributes = [$attributes];
|
||||
}
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array<mixed>
|
||||
*/
|
||||
public function getExtraModalWindowAttributes(): array
|
||||
{
|
||||
$temporaryAttributeBag = new ComponentAttributeBag();
|
||||
|
||||
foreach ($this->extraModalWindowAttributes as $extraModalWindowAttributes) {
|
||||
$temporaryAttributeBag = $temporaryAttributeBag->merge($this->evaluate($extraModalWindowAttributes));
|
||||
}
|
||||
|
||||
return $temporaryAttributeBag->getAttributes();
|
||||
}
|
||||
|
||||
public function getExtraModalWindowAttributeBag(): ComponentAttributeBag
|
||||
{
|
||||
return new ComponentAttributeBag($this->getExtraModalWindowAttributes());
|
||||
}
|
||||
}
|
||||
@@ -16,6 +16,7 @@ abstract class MountableAction extends StaticAction implements HasLivewire
|
||||
use Concerns\CanRedirect;
|
||||
use Concerns\CanRequireConfirmation;
|
||||
use Concerns\CanUseDatabaseTransactions;
|
||||
use Concerns\HasExtraModalWindowAttributes;
|
||||
use Concerns\HasForm;
|
||||
use Concerns\HasInfolist;
|
||||
use Concerns\HasLifecycleHooks;
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
'closeEventName' => 'close-modal',
|
||||
'description' => null,
|
||||
'displayClasses' => 'inline-block',
|
||||
'extraModalWindowAttributeBag' => null,
|
||||
'footer' => null,
|
||||
'footerActions' => [],
|
||||
'footerActionsAlignment' => Alignment::Start,
|
||||
@@ -47,6 +48,8 @@
|
||||
}
|
||||
|
||||
$closeEventHandler = filled($id) ? '$dispatch(' . \Illuminate\Support\Js::from($closeEventName) . ', { id: ' . \Illuminate\Support\Js::from($id) . ' })' : 'close()';
|
||||
|
||||
$modalWindowAttributes = $extraModalWindowAttributeBag ?? new \Illuminate\View\ComponentAttributeBag();
|
||||
@endphp
|
||||
|
||||
<div
|
||||
@@ -170,7 +173,7 @@
|
||||
x-transition:leave-start="scale-100 opacity-100"
|
||||
x-transition:leave-end="scale-95 opacity-0"
|
||||
@endif
|
||||
@class([
|
||||
{{ $modalWindowAttributes->class([
|
||||
'fi-modal-window pointer-events-auto relative row-start-2 flex w-full cursor-default flex-col bg-white shadow-xl ring-1 ring-gray-950/5 dark:bg-gray-900 dark:ring-white/10',
|
||||
'fi-modal-slide-over-window ms-auto overflow-y-auto' => $slideOver,
|
||||
// Using an arbitrary value instead of the h-dvh class that was added in Tailwind CSS v3.4.0
|
||||
@@ -203,7 +206,7 @@
|
||||
MaxWidth::Screen => 'fixed inset-0',
|
||||
default => $width,
|
||||
},
|
||||
])
|
||||
]) }}
|
||||
>
|
||||
@if ($heading || $header)
|
||||
<div
|
||||
|
||||
Reference in New Issue
Block a user