*/ protected function getHeaderActions(): array { return [ Action::make('createWorkspace') ->label('Create workspace') ->modalHeading('Create workspace') ->form([ TextInput::make('name') ->required() ->maxLength(255), TextInput::make('slug') ->helperText('Optional. Used in URLs if set.') ->maxLength(255) ->rules(['nullable', 'string', 'max:255', 'alpha_dash', 'unique:workspaces,slug']) ->dehydrateStateUsing(fn ($state) => filled($state) ? $state : null) ->dehydrated(fn ($state) => filled($state)), ]) ->action(fn (array $data) => $this->createWorkspace($data)), ]; } /** * @param array{name: string, slug?: string|null} $data */ public function createWorkspace(array $data): void { $user = auth()->user(); if (! $user instanceof User) { abort(403); } $workspace = Workspace::query()->create([ 'name' => $data['name'], 'slug' => $data['slug'] ?? null, ]); WorkspaceMembership::query()->create([ 'workspace_id' => $workspace->getKey(), 'user_id' => $user->getKey(), 'role' => 'owner', ]); app(WorkspaceContext::class)->setCurrentWorkspace($workspace, $user, request()); Notification::make() ->title('Workspace created') ->success() ->send(); $this->redirect(ChooseTenant::getUrl()); } }