when($this->search, fn($q, $search) => $q->where('name', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%") ) ->when($this->roleFilter, fn($q, $role) => $q->whereHas('roles', fn($roleQuery) => $roleQuery->where('name', $role) ) ); return [ 'users' => $query->orderBy($this->sortField, $this->sortDirection)->paginate(15), 'totalUsers' => User::count(), 'verifiedUsers' => User::whereNotNull('email_verified_at')->count(), 'availableRoles' => \Spatie\Permission\Models\Role::orderBy('name')->get(), 'selectedUser' => $this->selectedUserId ? User::find($this->selectedUserId) : null, ]; } public function sortBy(string $field): void { if ($this->sortField === $field) { $this->sortDirection = $this->sortDirection === 'asc' ? 'desc' : 'asc'; } else { $this->sortField = $field; $this->sortDirection = 'asc'; } } public function updatingSearch(): void { $this->resetPage(); } public function updatingRoleFilter(): void { $this->resetPage(); } public function openRoleModal(int $userId): void { $user = User::with('roles')->findOrFail($userId); $this->selectedUserId = $userId; $this->selectedRoles = $user->roles->pluck('name')->toArray(); $this->showRoleModal = true; } public function saveRoles(): void { if (!$this->selectedUserId) { return; } $user = User::findOrFail($this->selectedUserId); $user->syncRoles($this->selectedRoles); $this->showRoleModal = false; $this->selectedUserId = null; $this->selectedRoles = []; // Optional: Flash message session()->flash('message', __('Roles updated successfully!')); } public function closeRoleModal(): void { $this->showRoleModal = false; $this->selectedUserId = null; $this->selectedRoles = []; } }; ?>