schema([ Forms\Components\TextInput::make('email') ->disabledOn(['edit']) ->required() ->email() ->unique(table: TeamInvitation::class, ignoreRecord: true), Forms\Components\Select::make('role_id') ->label('Role') ->required() ->searchable() ->options(function (): array { $team = Auth::user()->currentTeam; \assert($team instanceof Team); $groups = $team ->roles() ->get() ->groupBy('team_id') ->values(); if ($groups->count() !== 2) { throw new \LogicException('More than two groups of roles generated.'); } $defaultRoles = $groups->first()->keyBy('id')->map->name; $customRoles = $groups->last()->keyBy('id')->map->name; return [ 'Custom Roles' => $customRoles->toArray(), 'Default Roles' => $defaultRoles->toArray(), ]; }), ]); } public static function table(Table $table): Table { return $table ->columns([ Tables\Columns\TextColumn::make('email') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('role.name') ->searchable() ->sortable(), Tables\Columns\TextColumn::make('created_at') ->dateTime() ->sortable(), ]) ->filters([ ]) ->actions([ Tables\Actions\Action::make('Resend') ->icon('heroicon-o-envelope') ->tooltip('Resends the invitation email') ->action(function (TeamInvitation $teamInvitation, Tables\Actions\Action $action): void { $teamInvitation->sendEmail(); Notification::make() ->title("Invitation resent to {$teamInvitation->email} successfully") ->success() ->send(); }), Tables\Actions\EditAction::make(), Tables\Actions\DeleteAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]) ->emptyStateActions([ Tables\Actions\CreateAction::make(), ]); } public static function getPages(): array { return [ 'index' => Pages\ManageTeamInvitations::route('/'), ]; } }