schema([ 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([ Tables\Columns\TextColumn::make('email'), Tables\Columns\TextColumn::make('role'), ]) ->headerActions([ Tables\Actions\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'], Role::from($data['role']), auth()->user()); }), ]) ->actions([ Action::make('view') ->icon('heroicon-o-eye') ->color('gray') ->url(fn (OrganizationInvitation $record): string => OrganizationInvitationResource::getUrl('view', [ 'record' => $record->getKey(), ])), Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DetachBulkAction::make(), ]), ]); } }