import StyledForm from "@/core/components/StyledForm";
import {
GET_CITIES_LIST,
GET_PROVINCES_LIST,
GET_STATIONS_LIST,
UPDATE_MACHINE_STATUS_AND_LOCATION,
} from "@/core/utils/routes";
import useRequest from "@/lib/hooks/useRequest";
import { yupResolver } from "@hookform/resolvers/yup";
import { Beenhere, ExitToApp } from "@mui/icons-material";
import {
Button,
CircularProgress,
DialogActions,
DialogContent,
DialogTitle,
FormControl,
InputLabel,
MenuItem,
Select,
Stack,
} from "@mui/material";
import { DialogHeader } from "next/dist/client/components/react-dev-overlay/internal/components/Dialog";
import { useEffect, useState } from "react";
import { Controller, useForm, useWatch } from "react-hook-form";
import { number, object } from "yup";
const statusOptions = [
{ value: 1, label: "آماده" },
{ value: 2, label: "رزرو" },
{ value: 3, label: "در ماموریت" },
{ value: 4, label: "خارج از رده" },
{ value: 5, label: "در تعمیر" },
{ value: 6, label: "فروخته شده" },
{ value: 7, label: "نیاز به تعمیر" },
];
const validationSchema = object({
status: number().required("انتخاب وضعیت الزامی است"),
province_id: number().required("انتخاب استان الزامی است"),
city_id: number().required("انتخاب شهر الزامی است"),
station_id: number().required("انتخاب راهداری الزامی است"),
});
const EditFormContent = ({ row, rowId, mutate, setOpen }) => {
const requestServer = useRequest();
const [provinces, setProvinces] = useState([]);
const [cities, setCities] = useState([]);
const [stations, setStations] = useState([]);
const [loadingProvinces, setLoadingProvinces] = useState(false);
const [loadingCities, setLoadingCities] = useState(false);
const [loadingStations, setLoadingStations] = useState(false);
const {
control,
handleSubmit,
setValue,
formState: { isSubmitting },
} = useForm({
defaultValues: {
status: row.original.status,
province_id: row.original.province_id,
city_id: row.original.city_id,
station_id: row.original.station_id,
},
resolver: yupResolver(validationSchema),
mode: "all",
});
const provinceId = useWatch({
control,
name: "province_id",
});
const cityId = useWatch({
control,
name: "city_id",
});
const loadProvinces = async () => {
try {
setLoadingProvinces(true);
const response = await requestServer(GET_PROVINCES_LIST, "get");
setProvinces(response.data?.data || []);
} finally {
setLoadingProvinces(false);
}
};
const loadCities = async (provinceId) => {
if (!provinceId) return;
try {
setLoadingCities(true);
const response = await requestServer(`${GET_CITIES_LIST}?province_id=${provinceId}`, "get");
setCities(response.data?.data || []);
} finally {
setLoadingCities(false);
}
};
const loadStations = async (cityId) => {
if (!cityId) return;
try {
setLoadingStations(true);
const response = await requestServer(`${GET_STATIONS_LIST}/search_by_city?city_id=${cityId}`, "get");
setStations(response.data?.data || []);
} finally {
setLoadingStations(false);
}
};
useEffect(() => {
loadProvinces();
}, []);
/**
* Initial edit mode loading
*/
useEffect(() => {
if (row.original.province_id) {
loadCities(row.original.province_id);
}
if (row.original.city_id) {
loadStations(row.original.city_id);
}
}, []);
useEffect(() => {
if (!provinceId) return;
loadCities(provinceId);
if (provinceId !== row.original.province_id) {
setValue("city_id", "");
setValue("station_id", "");
setStations([]);
}
}, [provinceId]);
useEffect(() => {
if (!cityId) return;
loadStations(cityId);
if (cityId !== row.original.city_id) {
setValue("station_id", "");
}
}, [cityId]);
const onSubmit = async (data) => {
const formData = new FormData();
formData.append("status", String(data.status));
formData.append("province_id", String(data.province_id));
formData.append("city_id", String(data.city_id));
formData.append("station_id", String(data.station_id));
try {
await requestServer(`${UPDATE_MACHINE_STATUS_AND_LOCATION}/${rowId}`, "post", {
data: formData,
});
mutate();
setOpen(false);
} catch (error) {}
};
return (
<>
ویرایش ماشین
(
استان
)}
/>
(
شهر
)}
/>
(
راهداری
)}
/>
(
وضعیت
)}
/>
{(loadingCities || loadingStations) && (
)}
}
>
{isSubmitting ? "در حال ویرایش" : "ویرایش ماشین"}
>
);
};
export default EditFormContent;