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 = []; } }; ?>
{{-- Header --}}
{{ __('Users Management') }} {{ __('Manage users and their roles in your application') }}
{{ __('Create User') }}
{{-- Statistics --}}
{{ __('Total Users') }} {{ $totalUsers }}
{{ __('Verified Users') }} {{ $verifiedUsers }}
{{ __('Active Roles') }} {{ $availableRoles->count() }}
{{-- Filters --}}
{{ __('All Roles') }} @foreach($availableRoles as $role) {{ $role->display_name ?? $role->name }} @endforeach @if($search || $roleFilter) {{ __('Clear Filters') }} @endif
{{-- Users Table --}}
{{ __('User') }} @if($sortField === 'name') @endif
{{ __('Email') }} @if($sortField === 'email') @endif
{{ __('Roles') }} {{ __('Status') }} {{ __('Actions') }}
@forelse($users as $user)
{{ $user->initials() }}
{{ $user->name }}
{{ __('ID:') }} {{ $user->id }}
{{ $user->email }}
@if($user->email_verified_at) {{ __('Verified') }} @else {{ __('Unverified') }} @endif
@empty
{{ __('No users found') }} @if($search || $roleFilter) {{ __('Try adjusting your filters.') }} @else {{ __('Get started by creating a new user.') }} @endif
@endforelse
{{-- Pagination --}} @if($users->hasPages())
{{ $users->links() }}
@endif
{{-- Role Assignment Modal --}}
{{ __('Assign Roles') }} @if($selectedUser) {{ __('Managing roles for') }} {{ $selectedUser->name }} @endif
{{ __('Roles') }} {{ __('Select one or multiple roles for this user') }}
@foreach($availableRoles as $role) @endforeach
@if(!empty($selectedRoles))
{{ __('Selected Roles:') }}
@foreach($selectedRoles as $roleName) @php $roleObj = $availableRoles->firstWhere('name', $roleName); @endphp {{ $roleName }} @endforeach
@endif
{{ __('Cancel') }} {{ __('Save Roles') }}
{{-- Success Message --}} @if (session()->has('message')) {{ session('message') }} @endif