From 9798150994d7b307c243657fa8ed48bcf3259fd3 Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 11 Jun 2026 18:01:12 +0700 Subject: [PATCH] Add user account management features including Appearance, Password, and Profile controllers for handling user preferences. Implement corresponding requests for validation and create views for each setting. Update routes for new account functionality and enhance UI components for user navigation in the account layout. --- .../{Setting => Account}/AppearanceController.php | 8 ++++---- .../Admin/{Setting => Account}/PasswordController.php | 8 ++++---- .../Admin/{Setting => Account}/ProfileController.php | 10 +++++----- .../{Setting => Account}/UpdateAppearanceRequest.php | 2 +- .../{Setting => Account}/UpdatePasswordRequest.php | 2 +- .../{Setting => Account}/UpdateProfileRequest.php | 2 +- app/Services/{Setting => Account}/ProfileService.php | 2 +- resources/js/components/UserNav.vue | 2 +- resources/js/composables/useAppearance.ts | 2 +- .../layouts/{SettingsLayout.vue => AccountLayout.vue} | 10 +++++----- .../js/pages/admin/{setting => account}/Appearance.vue | 10 +++++----- .../js/pages/admin/{setting => account}/Password.vue | 10 +++++----- .../js/pages/admin/{setting => account}/Profile.vue | 10 +++++----- resources/js/types/{settings.ts => account.ts} | 0 routes/web.php | 8 ++++---- 15 files changed, 43 insertions(+), 43 deletions(-) rename app/Http/Controllers/Admin/{Setting => Account}/AppearanceController.php (79%) rename app/Http/Controllers/Admin/{Setting => Account}/PasswordController.php (71%) rename app/Http/Controllers/Admin/{Setting => Account}/ProfileController.php (72%) rename app/Http/Requests/Admin/{Setting => Account}/UpdateAppearanceRequest.php (89%) rename app/Http/Requests/Admin/{Setting => Account}/UpdatePasswordRequest.php (91%) rename app/Http/Requests/Admin/{Setting => Account}/UpdateProfileRequest.php (95%) rename app/Services/{Setting => Account}/ProfileService.php (96%) rename resources/js/layouts/{SettingsLayout.vue => AccountLayout.vue} (89%) rename resources/js/pages/admin/{setting => account}/Appearance.vue (96%) rename resources/js/pages/admin/{setting => account}/Password.vue (94%) rename resources/js/pages/admin/{setting => account}/Profile.vue (97%) rename resources/js/types/{settings.ts => account.ts} (100%) diff --git a/app/Http/Controllers/Admin/Setting/AppearanceController.php b/app/Http/Controllers/Admin/Account/AppearanceController.php similarity index 79% rename from app/Http/Controllers/Admin/Setting/AppearanceController.php rename to app/Http/Controllers/Admin/Account/AppearanceController.php index 7ebeba5..4af6862 100644 --- a/app/Http/Controllers/Admin/Setting/AppearanceController.php +++ b/app/Http/Controllers/Admin/Account/AppearanceController.php @@ -1,9 +1,9 @@ request()->cookie('appearance', 'system'), ]); } @@ -25,7 +25,7 @@ public function update(UpdateAppearanceRequest $request): RedirectResponse Inertia::flash('success', 'Tampilan berhasil diperbarui.'); return redirect() - ->route('admin.setting.appearance') + ->route('admin.account.appearance') ->withCookie(Cookie::create('appearance') ->withValue($appearance) ->withExpires(now()->addYear()) diff --git a/app/Http/Controllers/Admin/Setting/PasswordController.php b/app/Http/Controllers/Admin/Account/PasswordController.php similarity index 71% rename from app/Http/Controllers/Admin/Setting/PasswordController.php rename to app/Http/Controllers/Admin/Account/PasswordController.php index 8c7e46e..3cabce1 100644 --- a/app/Http/Controllers/Admin/Setting/PasswordController.php +++ b/app/Http/Controllers/Admin/Account/PasswordController.php @@ -1,9 +1,9 @@ route('admin.setting.password'); + return redirect()->route('admin.account.password'); } } diff --git a/app/Http/Controllers/Admin/Setting/ProfileController.php b/app/Http/Controllers/Admin/Account/ProfileController.php similarity index 72% rename from app/Http/Controllers/Admin/Setting/ProfileController.php rename to app/Http/Controllers/Admin/Account/ProfileController.php index 8779ddd..554f1c0 100644 --- a/app/Http/Controllers/Admin/Setting/ProfileController.php +++ b/app/Http/Controllers/Admin/Account/ProfileController.php @@ -1,11 +1,11 @@ user()->load('profile'); - return Inertia::render('admin/setting/Profile', [ + return Inertia::render('admin/account/Profile', [ 'genders' => Gender::selectOptions(), 'user' => $user, ]); @@ -32,6 +32,6 @@ public function update(UpdateProfileRequest $request): RedirectResponse Inertia::flash('success', 'Profil berhasil diperbarui.'); - return redirect()->route('admin.setting.profile'); + return redirect()->route('admin.account.profile'); } } diff --git a/app/Http/Requests/Admin/Setting/UpdateAppearanceRequest.php b/app/Http/Requests/Admin/Account/UpdateAppearanceRequest.php similarity index 89% rename from app/Http/Requests/Admin/Setting/UpdateAppearanceRequest.php rename to app/Http/Requests/Admin/Account/UpdateAppearanceRequest.php index cb8af1c..605c86a 100644 --- a/app/Http/Requests/Admin/Setting/UpdateAppearanceRequest.php +++ b/app/Http/Requests/Admin/Account/UpdateAppearanceRequest.php @@ -1,6 +1,6 @@ - + Profil diff --git a/resources/js/composables/useAppearance.ts b/resources/js/composables/useAppearance.ts index 3223e79..f6db0e1 100644 --- a/resources/js/composables/useAppearance.ts +++ b/resources/js/composables/useAppearance.ts @@ -1,4 +1,4 @@ -import type { AppearanceMode } from '@/types/settings'; +import type { AppearanceMode } from '@/types/account'; export function applyAppearance(mode: AppearanceMode): void { const root = document.documentElement; diff --git a/resources/js/layouts/SettingsLayout.vue b/resources/js/layouts/AccountLayout.vue similarity index 89% rename from resources/js/layouts/SettingsLayout.vue rename to resources/js/layouts/AccountLayout.vue index fffc84a..acaf1f2 100644 --- a/resources/js/layouts/SettingsLayout.vue +++ b/resources/js/layouts/AccountLayout.vue @@ -11,17 +11,17 @@ const currentPath = computed(() => page.url.split('?')[0]); const navItems = [ { - href: '/admin/setting/profile', + href: '/admin/account/profile', label: 'Profil', icon: User, }, { - href: '/admin/setting/password', + href: '/admin/account/password', label: 'Kata Sandi', icon: KeyRound, }, { - href: '/admin/setting/appearance', + href: '/admin/account/appearance', label: 'Tampilan', icon: Palette, }, @@ -29,11 +29,11 @@ const navItems = [ diff --git a/resources/js/pages/admin/setting/Password.vue b/resources/js/pages/admin/account/Password.vue similarity index 94% rename from resources/js/pages/admin/setting/Password.vue rename to resources/js/pages/admin/account/Password.vue index f1f99ad..cfca036 100644 --- a/resources/js/pages/admin/setting/Password.vue +++ b/resources/js/pages/admin/account/Password.vue @@ -12,8 +12,8 @@ import { FieldSet, } from '@/components/ui/field'; import { Input } from '@/components/ui/input'; -import SettingsLayout from '@/layouts/SettingsLayout.vue'; -import type { PasswordFormData } from '@/types/settings'; +import AccountLayout from '@/layouts/AccountLayout.vue'; +import type { PasswordFormData } from '@/types/account'; const form = useForm({ current_password: '', @@ -22,7 +22,7 @@ const form = useForm({ }); function submit() { - form.put('/admin/setting/password', { + form.put('/admin/account/password', { onSuccess: () => { form.reset(); }, @@ -37,7 +37,7 @@ function submit() { - +
@@ -85,5 +85,5 @@ function submit() {
-
+ diff --git a/resources/js/pages/admin/setting/Profile.vue b/resources/js/pages/admin/account/Profile.vue similarity index 97% rename from resources/js/pages/admin/setting/Profile.vue rename to resources/js/pages/admin/account/Profile.vue index 9e5f16e..d01889c 100644 --- a/resources/js/pages/admin/setting/Profile.vue +++ b/resources/js/pages/admin/account/Profile.vue @@ -16,8 +16,8 @@ import { Input } from '@/components/ui/input'; import { PhoneNumberInput } from '@/components/ui/phone-number-input'; import { RadioGroup, RadioGroupItem } from '@/components/ui/radio-group'; import { Textarea } from '@/components/ui/textarea'; -import SettingsLayout from '@/layouts/SettingsLayout.vue'; -import type { EnumOption, ProfileFormData, ProfileUser } from '@/types/settings'; +import AccountLayout from '@/layouts/AccountLayout.vue'; +import type { EnumOption, ProfileFormData, ProfileUser } from '@/types/account'; const props = defineProps<{ user: ProfileUser; @@ -35,7 +35,7 @@ const form = useForm({ }); function submit() { - form.put('/admin/setting/profile', { + form.put('/admin/account/profile', { onError: () => { toast.error('Gagal menyimpan profil. Periksa kembali formulir.'); }, @@ -47,7 +47,7 @@ function submit() { - +
@@ -133,5 +133,5 @@ function submit() {
-
+ diff --git a/resources/js/types/settings.ts b/resources/js/types/account.ts similarity index 100% rename from resources/js/types/settings.ts rename to resources/js/types/account.ts diff --git a/routes/web.php b/routes/web.php index 9133237..4f54134 100644 --- a/routes/web.php +++ b/routes/web.php @@ -1,6 +1,9 @@ name('setting.')->group(function () { + Route::prefix('account')->name('account.')->group(function () { Route::get('profile', [ProfileController::class, 'edit'])->name('profile'); Route::put('profile', [ProfileController::class, 'update'])->name('profile.update');