51 lines
1.2 KiB
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'));
|
|
}
|
|
}
|