components([ TextInput::make('email') ->label('Email') ->disabledOn(['edit']) ->required(), Select::make('role') ->options(Role::class) ->label('Role') ->rules([ 'required', 'string', Rule::enum(Role::class) ->except([Role::Owner, Role::Placeholder]), ]) ->required(), ]); } public function table(Table $table): Table { return $table ->recordTitleAttribute('email') ->modelLabel('Invitation') ->pluralModelLabel('Invitations') ->columns([ TextColumn::make('email'), TextColumn::make('role'), ]) ->headerActions([ CreateAction::make() ->icon('heroicon-s-plus') ->using(function (array $data, string $model): Model { /** @var Organization $ownerRecord */ $ownerRecord = $this->getOwnerRecord(); return app(InvitationService::class) ->inviteUser($ownerRecord, $data['email'], ($data['role'] instanceof Role ? $data['role'] : Role::from($data['role'])), auth()->user()); }), ]) ->recordActions([ Action::make('view') ->icon('heroicon-o-eye') ->color('gray') ->url(fn (OrganizationInvitation $record): string => OrganizationInvitationResource::getUrl('view', [ 'record' => $record->getKey(), ])), EditAction::make(), DeleteAction::make(), ]) ->toolbarActions([ BulkActionGroup::make([ DetachBulkAction::make(), ]), ]); } }