recordTitleAttribute('name') ->columns([ Tables\Columns\TextColumn::make('name'), Tables\Columns\TextColumn::make('assignable.name') ->label('For') ->default('N/A'), ]) ->filters([ // ]) ->headerActions([ Tables\Actions\AttachAction::make() ->label('Assign Role') ->preloadRecordSelect() ->form(fn(Tables\Actions\AttachAction $action): array => [ $action->getRecordSelect() ->reactive(), Select::make('assignable_id') ->label(fn(Get $get): string => match (Role::find($get('recordId'))->assignable_type) { 'App\Models\Location' => 'Location', 'App\Models\Company' => 'Company', default => 'Assignable', }) ->options(function (Get $get) { $roleId = $get('recordId'); if (!$roleId) { return []; } $role = Role::find($roleId); if (!$role || !$role->assignable_type) { return []; } $modelClass = $role->assignable_type; return $modelClass::pluck('name', 'id'); }) ->searchable() ->preload() ->visible(fn(Get $get): bool => filled($get('recordId'))), ]) ->mutateFormDataUsing(function (array $data): array { if ($data['assignable_id']) { $role = Role::find($data['recordId']); $data['assignable_type'] = $role->assignable_type; } return $data; }) ]) ->actions([ Tables\Actions\DetachAction::make(), ]) ->bulkActions([ Tables\Actions\BulkActionGroup::make([ Tables\Actions\DeleteBulkAction::make(), ]), ]); } }