From 930d6f1434cbbabf3f63e0d7ed1682f104fb41e6 Mon Sep 17 00:00:00 2001 From: bagusajisaputroo Date: Fri, 9 May 2025 11:41:20 +0700 Subject: [PATCH] change form reseponse on manage position --- .../user/manage-position/blocks/AddDialog.tsx | 76 +++++++++++++------ .../manage-position/blocks/EditDialog.tsx | 58 ++++++++++---- 2 files changed, 94 insertions(+), 40 deletions(-) diff --git a/src/pages/settings/user/manage-position/blocks/AddDialog.tsx b/src/pages/settings/user/manage-position/blocks/AddDialog.tsx index 654bb4b..a0ea607 100644 --- a/src/pages/settings/user/manage-position/blocks/AddDialog.tsx +++ b/src/pages/settings/user/manage-position/blocks/AddDialog.tsx @@ -17,6 +17,7 @@ import { toast } from 'sonner'; import { useCallApi } from '@/hooks'; import { Checkbox } from '@/components/ui/checkbox'; import { doSaveLogActivity } from '@/actions/GlobalActions'; +import { set } from 'date-fns'; const API_URL = apiConfig.service_dashboard; @@ -74,7 +75,7 @@ const AddDialog = () => { }); const [selectMenus, setSelectMenus] = useState([]); const [formField, setFormField] = useState(initialState); - + const [errors, setErrors] = useState>({}); /* actions */ const handleCheckboxChange = useCallback((key: string) => { setSelectMenus((prev) => @@ -82,21 +83,48 @@ const AddDialog = () => { ); }, []); + const [isSubmitting, setIsSubmitting] = useState(false); + const resetForm = () => { setFormField(() => ({ name: '' })); - setAlert({ show: false, message: '' }); + setErrors(() => ({})); setSelectMenus([]); }; + const validateForm = () => { + const requiredFields = [{ key: 'name', label: 'Position Name' }]; + const newErrors: Record = {}; + let isValid = true; + requiredFields.forEach(({ key, label }) => { + if ( + formField[key as keyof typeof formField] === '' || + formField[key as keyof typeof formField] === null || + formField[key as keyof typeof formField] === undefined + ) { + newErrors[key] = `${label} is required`; + toast.error(`${label} is required`); + isValid = false; + } + }); + setErrors(newErrors); + return isValid; + }; + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + setIsSubmitting(true); + if (!validateForm()) { + setIsSubmitting(false); + return; + } + + doCreatePosition(e); + }; + const doCreatePosition = useCallback( async (e: React.FormEvent) => { e.preventDefault(); - if (formField.name.trim() === '') { - setAlert({ show: true, message: 'Please fill in all required fields.' }); - return; - } - const response = await PostData(`${API_URL}/user_role/create`, { name: formField.name, roles: selectMenus, @@ -150,29 +178,29 @@ const AddDialog = () => { Close - {alert.show && ( -
- -

{alert.message}

-
-
- )}
-
+
- - - setFormField((prev) => ({ ...prev, name: target.value })) - } - /> + +
+ + setFormField((prev) => ({ ...prev, name: target.value })) + } + /> + {errors.name && ( + {errors.name} + )} +
diff --git a/src/pages/settings/user/manage-position/blocks/EditDialog.tsx b/src/pages/settings/user/manage-position/blocks/EditDialog.tsx index f0dc3db..0bcc443 100644 --- a/src/pages/settings/user/manage-position/blocks/EditDialog.tsx +++ b/src/pages/settings/user/manage-position/blocks/EditDialog.tsx @@ -81,7 +81,35 @@ const EditDialog = () => { name: '', status: '' }); + const [errors, setErrors] = useState>({}); + const validateForm = () => { + const requiredFields = [{ key: 'name', label: 'Position Name' }]; + const newErrors: Record = {}; + let isValid = true; + requiredFields.forEach(({ key, label }) => { + if ( + formField[key as keyof typeof formField] === '' || + formField[key as keyof typeof formField] === null || + formField[key as keyof typeof formField] === undefined + ) { + newErrors[key] = `${label} is required`; + toast.error(`${label} is required`); + isValid = false; + } + }); + setErrors(newErrors); + return isValid; + }; + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + setIsSubmitting(true); + if (!validateForm()) { + setIsSubmitting(false); + return; + } + doEditPosition(e); + }; /* actions */ const handleCheckboxChange = useCallback((key: string) => { setSelectMenus((prev) => @@ -94,11 +122,6 @@ const EditDialog = () => { e.preventDefault(); setIsSubmitting(true); - if (formField.name.trim() === '') { - setAlert((prev) => ({ ...prev, show: true, message: 'Please fill name field.' })); - return; - } - if (!selectedPosition) { toast.success('Please Select Position'); return; @@ -164,29 +187,32 @@ const EditDialog = () => {
- {alert.show && ( + {/* {alert.show && (

{alert.message}

- )} + )} */}
- +
- - setFormField((prev) => ({ ...prev, name: target.value })) - } - /> +
+ + setFormField((prev) => ({ ...prev, name: target.value })) + } + /> + {errors.name && {errors.name}} +