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, 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(), 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(), 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) => { setOpenUpdateDialog(false); mutate(); }) .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;