70 lines
2.1 KiB
PHP
70 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace Filament\Actions;
|
|
|
|
use Closure;
|
|
use Filament\Actions\Concerns\CanCustomizeProcess;
|
|
use Filament\Actions\Contracts\HasActions;
|
|
use Filament\Support\Facades\FilamentIcon;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
class EditAction extends Action
|
|
{
|
|
use CanCustomizeProcess;
|
|
|
|
protected ?Closure $mutateRecordDataUsing = null;
|
|
|
|
public static function getDefaultName(): ?string
|
|
{
|
|
return 'edit';
|
|
}
|
|
|
|
protected function setUp(): void
|
|
{
|
|
parent::setUp();
|
|
|
|
$this->label(__('filament-actions::edit.single.label'));
|
|
|
|
$this->modalHeading(fn (): string => __('filament-actions::edit.single.modal.heading', ['label' => $this->getRecordTitle()]));
|
|
|
|
$this->modalSubmitActionLabel(__('filament-actions::edit.single.modal.actions.save.label'));
|
|
|
|
$this->successNotificationTitle(__('filament-actions::edit.single.notifications.saved.title'));
|
|
|
|
$this->groupedIcon(FilamentIcon::resolve('actions::edit-action.grouped') ?? 'heroicon-m-pencil-square');
|
|
|
|
$this->fillForm(function (HasActions $livewire, Model $record): array {
|
|
if ($translatableContentDriver = $livewire->makeFilamentTranslatableContentDriver()) {
|
|
$data = $translatableContentDriver->getRecordAttributesToArray($record);
|
|
} else {
|
|
$data = $record->attributesToArray();
|
|
}
|
|
|
|
if ($this->mutateRecordDataUsing) {
|
|
$data = $this->evaluate($this->mutateRecordDataUsing, ['data' => $data]);
|
|
}
|
|
|
|
return $data;
|
|
});
|
|
|
|
$this->action(function (): void {
|
|
$this->process(function (array $data, HasActions $livewire, Model $record) {
|
|
if ($translatableContentDriver = $livewire->makeFilamentTranslatableContentDriver()) {
|
|
$translatableContentDriver->updateRecord($record, $data);
|
|
} else {
|
|
$record->update($data);
|
|
}
|
|
});
|
|
|
|
$this->success();
|
|
});
|
|
}
|
|
|
|
public function mutateRecordDataUsing(?Closure $callback): static
|
|
{
|
|
$this->mutateRecordDataUsing = $callback;
|
|
|
|
return $this;
|
|
}
|
|
}
|