From 6219f5032dd764ced6eb335117fdf243798dd5ea Mon Sep 17 00:00:00 2001 From: Yoga Pangestu Date: Thu, 25 Jun 2026 21:54:42 +0700 Subject: [PATCH] refactor: enhance error handling in form submissions across various Vue components to improve user feedback and maintainability --- resources/js/components/LoginForm.vue | 11 +- .../js/pages/admin/account/Appearance.vue | 6 +- resources/js/pages/admin/account/Password.vue | 8 +- resources/js/pages/admin/account/Profile.vue | 16 +- .../cash/form/CashTransactionFormModal.vue | 12 +- .../form/EmployeeAdvanceFormModal.vue | 8 +- .../form/RejectEmployeeAdvanceModal.vue | 8 +- .../table/data-table-actions.vue | 14 +- .../expenses/form/ExpenseFormModal.vue | 8 +- .../payroll/form/PayrollAdjustmentModal.vue | 18 +- .../form/AttendanceWebcamModal.vue | 68 +-- .../admin/hr/employees/form/EmployeeForm.vue | 6 +- .../hr/employees/form/ResetPasswordDialog.vue | 17 +- .../hr/employees/table/data-table-actions.vue | 12 +- .../table/employee-status-toggle.vue | 16 +- .../form/LeaveRequestFormModal.vue | 8 +- .../form/RejectLeaveRequestModal.vue | 13 +- .../table/data-table-actions.vue | 8 +- .../manage/cuttings/form/CuttingPosForm.vue | 470 +++++------------- .../cuttings/table/data-table-actions.vue | 201 +++----- .../js/pages/admin/manage/orders/Show.vue | 96 ++-- .../admin/manage/orders/form/OrderPosForm.vue | 18 +- .../orders/table/data-table-actions.vue | 36 +- .../table/data-table-actions.vue | 63 +-- .../manage/purchases/form/PurchasePosForm.vue | 8 +- .../stocks/table/data-table-actions.vue | 122 ++--- .../categories/form/CategoryFormModal.vue | 8 +- .../customers/form/CustomerFormModal.vue | 8 +- .../master/products/form/ProductForm.vue | 6 +- .../products/table/product-status-toggle.vue | 9 +- .../raw-materials/form/RawMaterialForm.vue | 6 +- .../table/raw-material-status-toggle.vue | 9 +- .../suppliers/form/SupplierFormModal.vue | 12 +- .../admin/system/roles/form/RoleForm.vue | 8 +- .../system/setting/form/HomepageSection.vue | 11 +- .../admin/system/setting/form/HrSection.vue | 8 +- .../setting/form/MarketplaceSection.vue | 8 +- .../setting/form/SocialMediaSection.vue | 8 +- .../system/setting/form/SystemSection.vue | 8 +- 39 files changed, 534 insertions(+), 846 deletions(-) diff --git a/resources/js/components/LoginForm.vue b/resources/js/components/LoginForm.vue index 5b0a4bf..eb33031 100644 --- a/resources/js/components/LoginForm.vue +++ b/resources/js/components/LoginForm.vue @@ -33,13 +33,10 @@ const form = useForm({ function submit() { form.post('/auth/login', { - onError: (errors) => { - const message = - errors.login ?? - errors.password ?? - 'Gagal masuk. Periksa kembali data Anda.'; - - toast.error(message); + onError: (errors: any) => { + if (errors.system) { + toast.error(errors.system); + } }, }); } diff --git a/resources/js/pages/admin/account/Appearance.vue b/resources/js/pages/admin/account/Appearance.vue index e1e911d..88e043a 100644 --- a/resources/js/pages/admin/account/Appearance.vue +++ b/resources/js/pages/admin/account/Appearance.vue @@ -66,8 +66,10 @@ function onAppearanceChange(value: AcceptableValue) { function submit() { form.put(update.url(), { - onError: () => { - toast.error('Gagal menyimpan tampilan.'); + onError: (errors: any) => { + if (errors.system) { + toast.error(errors.system); + } }, }); } diff --git a/resources/js/pages/admin/account/Password.vue b/resources/js/pages/admin/account/Password.vue index 5d6c38f..c92dd74 100644 --- a/resources/js/pages/admin/account/Password.vue +++ b/resources/js/pages/admin/account/Password.vue @@ -15,9 +15,9 @@ import { import { InputGroup, InputGroupInput, InputGroupAddon, InputGroupButton } from '@/components/ui/input-group'; import AccountLayout from '@/layouts/AccountLayout.vue'; import { formErrors } from '@/lib/form'; +import { update } from '@/routes/admin/account/password'; import type { PasswordFormData } from '@/types/account'; -import { update } from '@/routes/admin/account/password'; const form = useForm({ current_password: '', @@ -34,8 +34,10 @@ function submit() { onSuccess: () => { form.reset(); }, - onError: () => { - toast.error('Gagal memperbarui kata sandi. Periksa kembali formulir.'); + onError: (errors: any) => { + if (errors.system) { + toast.error(errors.system); + } }, }); } diff --git a/resources/js/pages/admin/account/Profile.vue b/resources/js/pages/admin/account/Profile.vue index e287c5a..a378642 100644 --- a/resources/js/pages/admin/account/Profile.vue +++ b/resources/js/pages/admin/account/Profile.vue @@ -19,13 +19,13 @@ import { Textarea } from '@/components/ui/textarea'; import AccountLayout from '@/layouts/AccountLayout.vue'; import { FIELD_LIMITS } from '@/lib/field-limits'; import { formErrors } from '@/lib/form'; +import { update } from '@/routes/admin/account/profile'; import type { EnumOption, ProfileFormData, ProfileUser, } from '@/types/account'; -import { update } from '@/routes/admin/account/profile'; const props = defineProps<{ user: ProfileUser; @@ -45,8 +45,10 @@ const form = useForm({ function submit() { form.put(update.url(), { preserveScroll: true, - onError: () => { - toast.error('Gagal menyimpan profil. Periksa kembali formulir.'); + onError: (errors: any) => { + if (errors.system) { + toast.error(errors.system); + } }, }); } @@ -76,8 +78,8 @@ function submit() { Username - + @@ -126,8 +128,8 @@ function submit() { Alamat -