records(fn (?string $search, ?string $sortColumn, ?string $sortDirection, int|string $page, int|string $recordsPerPage) => $service->paginate( search: $search, sortColumn: $sortColumn, sortDirection: $sortDirection, page: (int) $page, perPage: (int) $recordsPerPage, )) ->columns([ TextColumn::make('name')->label('Nama')->weight(FontWeight::SemiBold), TextColumn::make('email')->label('Email'), TextColumn::make('role') ->label('Role') ->badge() ->color(fn (string $state): string => $state === 'admin' ? 'danger' : 'info'), IconColumn::make('is_active')->label('Aktif')->boolean(), ]) ->recordActions([ Action::make('role') ->label('Ubah Role') ->schema(fn (Schema $schema): Schema => $schema->components([ Select::make('role')->label('Role')->options(['admin' => 'Admin', 'operator' => 'Operator'])->required(), ])) ->fillForm(fn (array $record): array => ['role' => $record['role']]) ->action(function (array $data, array $record): void { app(UserAdminService::class)->setRole($record['id'], $data['role'], auth()->user()); Notification::make()->title('Role diperbarui.')->success()->send(); }), Action::make('toggle_aktif') ->label(fn (array $record): string => ($record['is_active'] ?? false) ? 'Nonaktifkan' : 'Aktifkan') ->color(fn (array $record): bool|string => ($record['is_active'] ?? false) ? 'danger' : 'success') ->requiresConfirmation() ->action(function (array $record): void { app(UserAdminService::class)->setActive($record['id'], ! ($record['is_active'] ?? false), auth()->user()); Notification::make()->title('Status user diperbarui.')->success()->send(); }), ]) ->headerActions([ CreateAction::make() ->label('Tambah User') ->schema(fn (Schema $schema): Schema => $schema->components([ TextInput::make('name')->label('Nama')->required(), TextInput::make('email')->label('Email')->email()->required(), TextInput::make('password')->label('Password')->password()->minLength(8)->required(), Select::make('role')->label('Role')->options(['operator' => 'Operator', 'admin' => 'Admin'])->default('operator')->required(), ])) ->using(function (array $data): void { app(UserAdminService::class)->createUser($data, auth()->user()); Notification::make()->title('User dibuat & terverifikasi.')->success()->send(); }), ]) ->paginated([10, 25]); } public function content(Schema $schema): Schema { return $schema ->components([ EmbeddedTable::make(), ]); } }