label(fn (): string => __('filament-actions::create.single.label', ['label' => $this->getModelLabel()])); $this->modalHeading(fn (): string => __('filament-actions::create.single.modal.heading', ['label' => $this->getModelLabel()])); $this->modalSubmitActionLabel(__('filament-actions::create.single.modal.actions.create.label')); $this->extraModalFooterActions(function (): array { return $this->canCreateAnother() ? [ $this->makeModalSubmitAction('createAnother', ['another' => true]) ->label(__('filament-actions::create.single.modal.actions.create_another.label')), ] : []; }); $this->successNotificationTitle(__('filament-actions::create.single.notifications.created.title')); $this->action(function (array $arguments, Form $form, HasTable $livewire): void { $model = $this->getModel(); $record = $this->process(function (array $data, Table $table) use ($model): Model { $relationship = $table->getRelationship(); $pivotData = []; if ($relationship instanceof BelongsToMany) { $pivotColumns = $relationship->getPivotColumns(); $pivotData = Arr::only($data, $pivotColumns); $data = Arr::except($data, $pivotColumns); } if ($translatableContentDriver = $table->makeTranslatableContentDriver()) { $record = $translatableContentDriver->makeRecord($model, $data); } else { $record = new $model(); $record->fill($data); } if ( (! $relationship) || $relationship instanceof HasManyThrough ) { $record->save(); return $record; } if ($relationship instanceof BelongsToMany) { $relationship->save($record, $pivotData); return $record; } /** @phpstan-ignore-next-line */ $relationship->save($record); return $record; }); $this->record($record); $form->model($record)->saveRelationships(); $livewire->mountedTableActionRecord($record->getKey()); if ($arguments['another'] ?? false) { $this->callAfter(); $this->sendSuccessNotification(); $this->record(null); // Ensure that the form record is anonymized so that relationships aren't loaded. $form->model($model); $livewire->mountedTableActionRecord(null); $form->fill(); $this->halt(); return; } $this->success(); }); } public function createAnother(bool | Closure $condition = true): static { $this->canCreateAnother = $condition; return $this; } /** * @deprecated Use `createAnother()` instead. */ public function disableCreateAnother(bool | Closure $condition = true): static { $this->createAnother(fn (CreateAction $action): bool => ! $action->evaluate($condition)); return $this; } public function canCreateAnother(): bool { return (bool) $this->evaluate($this->canCreateAnother); } }