mailwolt/app/Livewire/Ui/System/UserTable.php

51 lines
1.2 KiB
PHP

<?php
namespace App\Livewire\Ui\System;
use App\Enums\Role;
use App\Models\User;
use Livewire\Attributes\Layout;
use Livewire\Attributes\Title;
use Livewire\Attributes\Url;
use Livewire\Component;
#[Layout('layouts.dvx')]
#[Title('Benutzer · Mailwolt')]
class UserTable extends Component
{
#[Url(as: 'q', keep: true)]
public string $search = '';
#[Url(as: 'role', keep: true)]
public string $filterRole = '';
public function toggleActive(int $id): void
{
$user = User::findOrFail($id);
if ($user->id === auth()->id()) return;
$user->update(['is_active' => !$user->is_active]);
}
public function render()
{
$query = User::query()
->when($this->search !== '', fn($q) =>
$q->where(fn($q) =>
$q->where('name', 'like', "%{$this->search}%")
->orWhere('email', 'like', "%{$this->search}%")
)
)
->when($this->filterRole !== '', fn($q) =>
$q->where('role', $this->filterRole)
)
->orderBy('name');
$users = $query->get();
$roles = Role::cases();
return view('livewire.ui.system.user-table', compact('users', 'roles'));
}
}