diff --git a/app/Livewire/Buttons/CreateUser.php b/app/Livewire/Buttons/CreateUser.php index a04ebb9..c2e6971 100644 --- a/app/Livewire/Buttons/CreateUser.php +++ b/app/Livewire/Buttons/CreateUser.php @@ -48,6 +48,7 @@ class CreateUser extends Component { $token = Session::get('user')['access_token'] ?? null; + if (!$token) { $this->addError('users', 'No access token found.'); @@ -64,6 +65,9 @@ class CreateUser extends Component 'password' => $this->default_password, ]); + // dd($response->json()); + + //handle backend response if ($response->status() === 422) { $errors = $response->json('data'); diff --git a/app/Livewire/Components/Table.php b/app/Livewire/Components/Table.php index e9dde99..b803c2e 100644 --- a/app/Livewire/Components/Table.php +++ b/app/Livewire/Components/Table.php @@ -45,6 +45,23 @@ class Table extends Component public $showModal = false; public $modalMode = 'view'; public $modalData = []; + public $confirmingDeleteId = null; + + public function confirmDelete($id) +{ + $this->confirmingDeleteId = $id; +} + +public function deleteConfirmed() +{ + if (!$this->confirmingDeleteId) return; + + $this->deleteRow($this->confirmingDeleteId); + + // Reset the confirmation state + $this->confirmingDeleteId = null; +} + public function mount($columns, $rows, $addRoute = null, $rowKey = 'id') { @@ -74,30 +91,53 @@ class Table extends Component $this->showModal = true; } -public function saveRow() -{ - $token = Session::get('user')['access_token'] ?? null; + public function saveRow() + { + $token = Session::get('user')['access_token'] ?? null; - $url = rtrim(config('services.backend_api.url'), '/') . '/' . $this->updateEndpoint . '/' . $this->modalData[$this->rowKey]; + $url = rtrim(config('services.backend_api.url'), '/') . '/' . $this->updateEndpoint . '/' . $this->modalData[$this->rowKey]; - try { - $response = Http::withToken($token)->put($url, $this->modalData); + try { + $response = Http::withToken($token)->put($url, $this->modalData); - if ($response->successful()) { - $this->closeModal(); - $this->fetchData(); - } else { - $errors = $response->json('errors') ?? []; + if ($response->successful()) { + $this->closeModal(); + $this->fetchData(); + } else { + $errors = $response->json('errors') ?? []; - foreach ($errors as $field => $messages) { - $this->addError("modalData.$field", is_array($messages) ? $messages[0] : $messages); + foreach ($errors as $field => $messages) { + $this->addError("modalData.$field", is_array($messages) ? $messages[0] : $messages); + } } + } catch (\Exception $e) { + logger()->error('SaveRow error: ' . $e->getMessage()); + $this->addError('modalData', 'Something went wrong. Please try again.'); + } + } + + public function deleteRow($id) + { + $token = Session::get('user')['access_token'] ?? null; + + $url = rtrim(config('services.backend_api.url'), '/') . '/' . $this->deleteEndpoint . '/' . $id; + + try { + $response = Http::withToken($token)->delete($url); + + if ($response->successful()) { + $this->fetchData(); + } else { + $errors = $response->json('errors') ?? []; + foreach ($errors as $field => $messages) { + $this->addError("modalData.$field", is_array($messages) ? $messages[0] : $messages); + } + } + } catch (\Exception $e) { + logger()->error('DeleteRow error: ' . $e->getMessage()); + $this->addError('modalData', 'Something went wrong. Please try again.'); } - } catch (\Exception $e) { - logger()->error('SaveRow error: ' . $e->getMessage()); - $this->addError('modalData', 'Something went wrong. Please try again.'); } -} diff --git a/app/Livewire/UserManagement.php b/app/Livewire/UserManagement.php index 3918ba6..9619d08 100644 --- a/app/Livewire/UserManagement.php +++ b/app/Livewire/UserManagement.php @@ -12,36 +12,37 @@ class UserManagement extends Component public function mount() { - $this->loadUsers(); + $this->loadUsers(); } public function loadUsers() { try { $token = Session::get('user')['access_token'] ?? null; - + if (!$token) { $this->addError('users', 'No access token found.'); return; } - + $response = Http::withToken($token) ->get(config('services.backend_api.url') . '/api/cms/admin'); - - // dd($response->json()); + + // dd($response->json()); if ($response->successful()) { // Properly use collect to handle the response data - $this->users = collect($response->json()['data'])->map(function ($user) { - return [ - 'admin_uuid' => $user['admin_uuid'], - 'username' => $user['username'], - 'firstname' => $user['firstname'], - 'lastname' => $user['lastname'], - 'email' => $user['email'], - 'role' => $user['role'], - 'status' => $user['status'], - ]; - }); + $this->users = collect($response->json()['data'])->map(function ($user) { + return [ + 'admin_uuid' => $user['admin_uuid'], + 'username' => $user['username'], + 'firstname' => $user['firstname'], + 'lastname' => $user['lastname'], + 'email' => $user['email'], + 'role' => $user['role'], + 'status' => $user['status'], + ]; + }); + } else { $this->addError('users', 'Failed to load users.'); } @@ -57,4 +58,3 @@ class UserManagement extends Component ]); } } - diff --git a/docker-compose.yml b/docker-compose.yml index aa15443..1fe23ba 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -20,7 +20,7 @@ services: timeout: 10s retries: 10 networks: - - app_network + - unioil-network db_mysql: @@ -40,14 +40,14 @@ services: timeout: 10s retries: 5 networks: - - app_network + - unioil-network nginx: image: nginx:alpine container_name: unioil-nginx restart: unless-stopped ports: - - "8000:80" + - "8000:81" volumes: - .:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro @@ -55,7 +55,7 @@ services: app: condition: service_healthy networks: - - app_network + - unioil-network volumes: mysql-data: @@ -63,5 +63,5 @@ volumes: driver: local networks: - app_network: + unioil-network: driver: bridge \ No newline at end of file diff --git a/docker/nginx/default.conf b/docker/nginx/default.conf index b7a0c78..1b805de 100644 --- a/docker/nginx/default.conf +++ b/docker/nginx/default.conf @@ -1,5 +1,5 @@ server { - listen 80; + listen 81; server_name localhost; root /var/www/html/public; diff --git a/package-lock.json b/package-lock.json index c073b36..587267d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "unioil-cms-fe", + "name": "html", "lockfileVersion": 3, "requires": true, "packages": { diff --git a/resources/views/livewire/components/table.blade.php b/resources/views/livewire/components/table.blade.php index e6052a7..c307d30 100644 --- a/resources/views/livewire/components/table.blade.php +++ b/resources/views/livewire/components/table.blade.php @@ -31,19 +31,19 @@ @endif - @if ($hasAddButton ?? true) + @if ($hasAddButton ?? true) - + + Add - @elseif ($hasExportButton ?? false) + @elseif ($hasExportButton ?? false) - @else + @else - @endif + @endif @@ -87,9 +87,9 @@ @if ($hasCheckbox) - @endif @@ -115,7 +115,7 @@ - @endif @@ -196,9 +196,18 @@ + @if ($modalMode === 'edit') - + @foreach ($column['options'] as $key => $label) + + @endforeach + + @else + + @endif @else
{{ $modalData[$column['field']] ?? '' }} @@ -211,7 +220,7 @@ @if ($modalMode === 'edit')
-
@@ -219,5 +228,26 @@
@endif + + + @if ($confirmingDeleteId) +
+
+

Confirm Delete

+

Are you sure you want to delete this item? This action cannot be undone.

+ +
+ + +
+
+
+ @endif + + \ No newline at end of file diff --git a/resources/views/livewire/user-management/user-management.blade.php b/resources/views/livewire/user-management/user-management.blade.php index ef3742c..2111dff 100644 --- a/resources/views/livewire/user-management/user-management.blade.php +++ b/resources/views/livewire/user-management/user-management.blade.php @@ -1,36 +1,42 @@
@include('livewire.user-management.top-nav.user-management') -@if (session()->has('success')) -
has('success')) +
+ class="text-2xl text-green-700 px-4 py-2 rounded mb-4"> ✅ {{ session('success') }}
-@endif + @endif - 'Username', 'field' => 'username', 'type' => 'text'], + ['label' => 'First Name', 'field' => 'firstname', 'type' => 'text'], + ['label' => 'Last Name', 'field' => 'lastname', 'type' => 'text'], + ['label' => 'Email', 'field' => 'email', 'type' => 'text'], + ['label' => 'Role', 'field' => 'role', 'type' => 'select', 'options' => [ + 1 => 'Admin', + 0 => 'Marketing Personnel' + ]], + ['label' => 'Status', 'field' => 'status', 'type' => 'select', 'options' =>[ + 'active' => 'Active', + 'inactive' => 'Inactive' + ]], + ]" + :rows="$users" + :addRoute="route('user-create')" :hasAddButton="true" :hasCheckbox="true" :hasActions="true" :isViewPage="false" :rowKey="'admin_uuid'" - :updateEndpoint="'api/cms/admin'" - /> -
+ :updateEndpoint="'api/cms/admin'" + :deleteEndpoint="'api/cms/admin'" + /> +
\ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 3ea42a0..44efc1c 100644 --- a/routes/web.php +++ b/routes/web.php @@ -24,13 +24,13 @@ use Illuminate\Support\Facades\Route; //laravel page -// Route::get('/', function () { -// return redirect()->route('login'); -// }); -// Route::get('/login', function () { -// return view('auth.log-in'); -// })->name('login'); -Route::get('/login', LoginForm::class)->name('login'); +Route::get('/', function () { + return redirect()->route('login'); +}); +Route::get('/login', function () { + return view('auth.log-in'); +})->name('login'); +// Route::get('/login', LoginForm::class)->name('login'); // // Route::get('/login', LoginForm::class)->name('layouts.app');