diff --git a/src/pages/dashboards/home/DashboardHomePage.tsx b/src/pages/dashboards/home/DashboardHomePage.tsx index bd9047a..b10125f 100644 --- a/src/pages/dashboards/home/DashboardHomePage.tsx +++ b/src/pages/dashboards/home/DashboardHomePage.tsx @@ -234,6 +234,12 @@ const DashboardHomePage = () => { ); + const number: number = responseStatisticCard?.data.total_cash_in ?? 0; + const formattedNumber: number = parseFloat(number.toFixed(2)); + + const numbercashout: number = responseStatisticCard?.data.total_cash_out ?? 0; + const formattedNumbercashout: number = parseFloat(numbercashout.toFixed(2)); + return ( <> @@ -266,14 +272,14 @@ const DashboardHomePage = () => { /> { show: false, message: '' }); - const initialState = { + const initialState: { + name: string; + sucosId: number | null; + created_by: string; + created_at: string; + } = { name: '', - sucosId: 0, + sucosId: null, created_by: '', created_at: '' }; + const [errors, setErrors] = useState>({}); const [formField, setFormField] = useState(initialState); const created_time = new Date(); const formattedTime = created_time.toISOString().slice(0, 19).replace('T', ' '); @@ -59,9 +65,32 @@ const AddDialog = () => { const resetForm = () => { setFormField(initialState); - setAlert({ show: false, message: '' }); + setErrors({}); }; + const validateForm = () => { + const requiredFields = [ + { key: 'name', label: 'Aldeia Name' }, + { key: 'sucosId', label: 'Sucos ID' } + ]; + 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 doCreateAldeias = useCallback( async (e: React.FormEvent) => { e.preventDefault(); @@ -117,14 +146,12 @@ const AddDialog = () => { const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - if (formField.name === '' || formField.sucosId === 0) { - setAlert({ show: true, message: 'Please fill in all required fields.' }); + setIsSubmitting(true); + if (!validateForm()) { + setIsSubmitting(false); return; } - doCreateAldeias(e); - console.log(formField); - setAlert({ show: false, message: '' }); }; useEffect(() => { @@ -169,12 +196,20 @@ const AddDialog = () => { - setFormField({ ...formField, name: e.target.value })} - /> +
+ { + setFormField((prev) => ({ ...prev, name: target.value })); + if (target.value) { + setErrors((prev) => ({ ...prev, name: '' })); + } + }} + /> + {errors.name && {errors.name}} +
@@ -183,46 +218,50 @@ const AddDialog = () => { - - - + + e.stopPropagation()} > - {sucos.find((suco) => suco.id === formField.sucosId)?.name || - 'Select Sucos'} - - - e.stopPropagation()} - > - - - - No Sucos found. - - {sucos.map((suco) => ( - { - setFormField({ - ...formField, - sucosId: suco.id - }); - setOpen(false); - }} - > - {suco.name} - - ))} - - - - - + + + + No Sucos found. + + {sucos.map((suco) => ( + { + setFormField({ + ...formField, + sucosId: suco.id + }); + setOpen(false); + setErrors((prev) => ({ ...prev, sucosId: '' })); + }} + > + {suco.name} + + ))} + + + + + + {errors.sucosId && {errors.sucosId}} + diff --git a/src/pages/master/aldeias/blocks/EditDialog.tsx b/src/pages/master/aldeias/blocks/EditDialog.tsx index 502a6c2..4f5f2d9 100644 --- a/src/pages/master/aldeias/blocks/EditDialog.tsx +++ b/src/pages/master/aldeias/blocks/EditDialog.tsx @@ -56,12 +56,35 @@ const EditDialog = () => { const created_time = new Date(); const formattedTime = created_time.toISOString().slice(0, 19).replace('T', ' '); const [isSubmitting, setIsSubmitting] = useState(false); - + const [errors, setErrors] = useState>({}); const resetForm = () => { setFormField(initialState); - setAlert({ show: false, message: '' }); + setErrors({}); }; + const validateForm = () => { + const requiredFields = [ + { key: 'name', label: 'Aldeia Name' }, + { key: 'sucosId', label: 'Sucos ID' } + ]; + 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 doUpdateAldeias = useCallback( async (e: React.FormEvent) => { e.preventDefault(); @@ -139,15 +162,13 @@ const EditDialog = () => { const handleUpdate = (e: React.FormEvent) => { e.preventDefault(); - - if (formField.name === '' || formField.sucosId === 0) { - setAlert({ show: true, message: 'Please fill in all required fields.' }); + setIsSubmitting(true); + if (!validateForm()) { + setIsSubmitting(false); return; } doUpdateAldeias(e); - console.log(formField); - setAlert({ show: false, message: '' }); }; useEffect(() => { @@ -212,12 +233,19 @@ const EditDialog = () => { - setFormField({ ...formField, name: e.target.value })} - /> +
+ { + setFormField((prev) => ({ ...prev, name: target.value })); + if (target.value) { + setErrors((prev) => ({ ...prev, name: '' })); + } + }} /> + {errors.name && {errors.name}} +
@@ -226,6 +254,7 @@ const EditDialog = () => { +
diff --git a/src/pages/master/municipios/blocks/AddDialog.tsx b/src/pages/master/municipios/blocks/AddDialog.tsx index ca2f96b..bd0cee5 100644 --- a/src/pages/master/municipios/blocks/AddDialog.tsx +++ b/src/pages/master/municipios/blocks/AddDialog.tsx @@ -41,10 +41,30 @@ const AddDialog = () => { const created_time = new Date(); const formattedTime = created_time.toISOString().slice(0, 19).replace('T', ' '); const [isSubmitting, setIsSubmitting] = useState(false); - + const [errors, setErrors] = useState>({}); const resetForm = () => { setFormField(initialState); - setAlert({ show: false, message: '' }); + setErrors({}); + }; + const validateForm = () => { + const requiredFields = [{ key: 'name', label: 'Municipio 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 doCreateMunicipio = useCallback( @@ -82,16 +102,17 @@ const AddDialog = () => { const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - - if (formField.name.trim() === '') { - setAlert({ show: true, message: 'Please fill name field.' }); + setIsSubmitting(true); + if(!validateForm()) { + setIsSubmitting(false); return; } + doCreateMunicipio(e); - console.log(parsedUser.email); - console.log(formField); - setAlert({ show: false, message: '' }); + // console.log(parsedUser.email); + // console.log(formField); + // setAlert({ show: false, message: '' }); }; const handleReset = () => { @@ -133,21 +154,29 @@ const AddDialog = () => {
-
+
setFormField({ ...formField, name: e.target.value })} + onChange={({target})=>{ + setFormField((prev) => ({...prev,name:target.value})) + if (target.value){ + setErrors((prev)=> ({...prev,name: ''})) + } + } + } /> + {errors.name && {errors.name}}
-
) : ( - +
-
-
- +
+
+ +
setFormField({ ...formField, name: e.target.value })} + onChange={({ target }) => { + setFormField((prev) => ({ ...prev, name: target.value })); + if (target.value) { + setErrors((prev) => ({ ...prev, name: '' })); + } + }} /> + {errors.name && ( + {errors.name} + )}
+