126 lines
3.2 KiB
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']);
|
|
}
|
|
}
|