import {useTranslations} from "next-intl"; import { Box, Button, Chip, DialogActions, DialogContent, Divider, FormControl, FormHelperText, Grid, InputLabel, MenuItem, Select, TextField } from "@mui/material"; import {useEffect, useState} from "react"; import {useFormik} from "formik"; import {GET_CITY_LIST, UPDATE_EXPERT_MANAGEMENT} from "@/core/data/apiRoutes"; import * as Yup from "yup"; import useRequest from "@/lib/app/hooks/useRequest"; import useProvince from "@/lib/app/hooks/useProvince"; import useRole from "@/lib/app/hooks/useRole"; const UpdateContent = ({row, fetchUrl, mutate, setOpenUpdateDialog}) => { const t = useTranslations(); const requestServer = useRequest(); const [cityList, setCityList] = useState([]); const [citiesExist, setCitiesExist] = useState(false); const [cityTextField, setCityTextField] = useState(t("ExpertMangement.text_field_please_select_province")); const {provinceList, isLoadingProvinceList, errorProvinceList} = useProvince(); const {roleList, isLoadingRoleList, errorRoleList} = useRole(); function getCities(province_id) { formik.setFieldTouched("city_id", false, false); citiesExist && formik.setFieldValue("city_id", "") setCityTextField(t("ExpertMangement.text_field_loading_cities_list")) requestServer(`${GET_CITY_LIST}?province_id=${province_id}`, "get", {auth: true, notification: false}) .then(({data}) => { const result = data.data; const formattedData = result.map((city, index) => ({ id: index, name: city.name, value: city.id, })); setCitiesExist(true); setCityList(formattedData); setCityTextField(t("ExpertMangement.text_field_city_id")) }).catch(() => { setCityTextField(t("ExpertMangement.text_field_error_fetching_cities")) }); } const validationSchema = Yup.object().shape({ name: Yup.string().required(t("ExpertMangement.error_message_name")), username: Yup.string().required(t("ExpertMangement.error_message_username")), email: Yup.string().required(t("ExpertMangement.error_message_email")), phone_number: Yup.string().required(t("ExpertMangement.error_message_phone_number")), national_id: Yup.string().required(t("ExpertMangement.error_message_national_id")), position: Yup.string().required(t("ExpertMangement.error_message_position")), province_id: Yup.string().required(t("ExpertMangement.error_message_province_id")), city_id: Yup.string().required(t("ExpertMangement.error_message_city_id")), role_id: Yup.string().required(t("ExpertMangement.error_message_role_id")) }); const formik = useFormik({ initialValues: { name: row.original.name, username: row.original.username, email: row.original.email, phone_number: row.original.phone_number, national_id: row.original.national_id, position: row.original.position, province_id: row.original.province_id, city_id: row.original.city_id, role_id: row.original.roles[0].id }, validationSchema, onSubmit: (values, {setSubmitting}) => { const formData = new FormData(); formData.append("name", values.name); formData.append("national_id", values.national_id); formData.append("phone_number", values.phone_number); formData.append("email", values.email); formData.append("username", values.username); formData.append("province_id", values.province_id); formData.append("city_id", values.city_id); formData.append("position", values.position); formData.append("role_id", values.role_id); requestServer(`${UPDATE_EXPERT_MANAGEMENT}/${row.original.id}`, 'post', {auth: true, data: formData}) .then((response) => { mutate(fetchUrl) }).catch(() => { }).finally(() => { setSubmitting(false); }); }, }); useEffect(() => { getCities(formik.values.province_id); }, [formik.values.province_id]); return ( <> {t("ExpertMangement.text_field_province_id")} {formik.touched.province_id && formik.errors.province_id ? formik.errors.province_id : ""} {cityTextField} {formik.touched.city_id && formik.errors.city_id ? formik.errors.city_id : ""} {t("ExpertMangement.text_field_role_id")} {formik.touched.role_id && formik.errors.role_id ? formik.errors.role_id : ""} ); }; export default UpdateContent;