app/app/Livewire/Users/UsersList.php

126 lines
3.2 KiB
PHP

<?php
namespace App\Livewire\Users;
use App\Models\User;
use App\Actions\User\CreateUserAction;
use App\Actions\User\DeleteUserAction;
use App\Actions\User\EditUserAction;
use Exception;
use Illuminate\Contracts\View\View;
use Livewire\Component;
use Livewire\WithPagination;
class UsersList extends Component
{
use WithPagination;
public bool $showCreateModal = false;
public bool $showEditModal = false;
public bool $showDeleteModal = false;
public ?User $editingUser = null;
public ?User $deletingUser = null;
// Form fields
public string $name = '';
protected array $rules = [
'name' => 'required|string|max:255',
];
public function render(): View
{
$users = User::where('planner_id', auth()->id())
->orderBy('name')
->paginate(10);
return view('livewire.users.users-list', [
'users' => $users
]);
}
public function create(): void
{
$this->reset(['name']);
$this->resetValidation();
$this->showCreateModal = true;
}
public function store(): void
{
$this->validate();
try {
(new CreateUserAction())->execute([
'name' => $this->name,
'planner_id' => auth()->id(),
]);
$this->showCreateModal = false;
$this->reset(['name']);
session()->flash('success', 'User created successfully.');
} catch (Exception $e) {
session()->flash('error', 'Failed to create user: ' . $e->getMessage());
}
}
public function edit(User $user): void
{
$this->editingUser = $user;
$this->name = $user->name;
$this->resetValidation();
$this->showEditModal = true;
}
public function update(): void
{
$this->validate();
try {
(new EditUserAction())->execute($this->editingUser, ['name' => $this->name]);
$this->showEditModal = false;
$this->reset(['name', 'editingUser']);
session()->flash('success', 'User updated successfully.');
// Force component to re-render with fresh data
$this->resetPage();
} catch (Exception $e) {
session()->flash('error', 'Failed to update user: ' . $e->getMessage());
}
}
public function confirmDelete(User $user): void
{
$this->deletingUser = $user;
$this->showDeleteModal = true;
}
public function delete(): void
{
try {
(new DeleteUserAction())->execute($this->deletingUser);
$this->showDeleteModal = false;
$this->deletingUser = null;
session()->flash('success', 'User deleted successfully.');
// Force component to re-render with fresh data
$this->resetPage();
} catch (Exception $e) {
session()->flash('error', 'Failed to delete user: ' . $e->getMessage());
}
}
public function cancel(): void
{
$this->showCreateModal = false;
$this->showEditModal = false;
$this->showDeleteModal = false;
$this->reset(['name', 'editingUser', 'deletingUser']);
}
}