diff --git a/src/app/api/fake-prev-state-opinion/route.js b/src/app/api/fake-prev-state-opinion/route.js new file mode 100644 index 0000000..abd03e4 --- /dev/null +++ b/src/app/api/fake-prev-state-opinion/route.js @@ -0,0 +1,9 @@ +export async function GET() { + return Response.json({ + message: + "به موجب این نامه، به استحضار جنابعالی می رساند، این‌ جانب ……… از تاریخ ……… افتخار همکاری\n" + + "با مجموعه ……… را دارم. اما متاسفانه، به علت ………، تقاضای استعفای خود را از تاریخ ………\n" + + "اعلام میدارم. ضمن تشکر پیشاپیش از همکاری شما خواهشمند است، دستور اقدامات لازم در این\n" + + "زمینه را صادر فرمایید.", + }); +} diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx new file mode 100644 index 0000000..49ffa3c --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx @@ -0,0 +1,29 @@ +import { FormControl, FormHelperText, InputLabel, OutlinedInput, Stack } from "@mui/material"; + +const DescriptionForm = ({ errors, register }) => { + return ( + + + + توضیحات + + + + {errors.description ? errors.description.message : null} + + + + ); +}; +export default DescriptionForm; diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx new file mode 100644 index 0000000..a515950 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx @@ -0,0 +1,15 @@ +import { Button } from "@mui/material"; + +const ManagerOrAssistantSubmit = ({ isSubmitting }) => { + return ( + <> + + + + ); +}; +export default ManagerOrAssistantSubmit; diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx new file mode 100644 index 0000000..6197267 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx @@ -0,0 +1,25 @@ +import { Card, CardContent, CardHeader, CircularProgress, Divider, Stack, Typography } from "@mui/material"; + +const PrevCartableOpinion = ({ message, loadingMessage, errorMessage }) => { + return ( + + + + + {errorMessage ? ( + خطا در دریافت اطلاعات !!! + ) : loadingMessage ? ( + + + درحال دریافت اطلاعات + + ) : ( + {message} + )} + + + + + ); +}; +export default PrevCartableOpinion; diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx new file mode 100644 index 0000000..f0be54c --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx @@ -0,0 +1,35 @@ +import {Card, CardContent, FormControl, FormLabel, Stack, Typography} from "@mui/material"; + +const QuestionSafetyForm = () => { + return ( + + + + + + + آیا ایمنی راه این طرح مورد تایید است ؟ + + + + + دفتر حریم راه :{" "} + + + بله + + + + + + + ); +}; +export default QuestionSafetyForm; diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx new file mode 100644 index 0000000..64fbdb9 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx @@ -0,0 +1,82 @@ +import { DialogActions, DialogContent, Stack } from "@mui/material"; +import StyledForm from "@/core/components/StyledForm"; +import useRequest from "@/lib/hooks/useRequest"; +import { useForm } from "react-hook-form"; +import { yupResolver } from "@hookform/resolvers/yup"; +import { object, string } from "yup"; +import { SUBMIT_ROAD_SAFETY_FORM } from "@/core/utils/routes"; +import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion"; +import QuestionSafetyForm from "./QuestionSafetyForm"; +import PrevCartableOpinion from "./PrevCartableOpinion"; +import DescriptionForm from "./DescriptionForm"; +import ManagerOrAssistantSubmit from "./ManagerOrAssistantSubmit"; +import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail"; +const fakeData = { + id: 1, + shomareh_darkhast: "2124", + ostan: "ostan", + shahr: "shahr", + shahrestan: "shahrestan", + bakhsh: "bakhsh", + roosta: "roosta", + tarikh_darkhast: "tarikh_darkhast", + sazman: "sazman", + masahat_zamin: "masahat_zamin", + masahat_tarh: "masahat_tarh", + gorooh_tarh: "gorooh_tarh", + onvane_tarh: "onvane_tarh", + address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر", + file_mosavab: "file", + polygon: [ + [51.515, -0.09], + [51.52, -0.1], + [51.52, -0.12], + ], +}; +const validationSchema = object({ + description: string().required("وارد کردن توضیحات الزامیست!"), +}); +const RoadSafetyFormContext = ({ rowId, mutate, setOpenRoadSafetyForm }) => { + const defaultValues = { + description: "", + }; + const requestServer = useRequest({ notification : {success : true, show : true} }); + const { message, loadingMessage, errorMessage } = usePrevStateOpinion(); + const { + register, + handleSubmit, + formState: { isSubmitting, errors }, + } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "onBlur" }); + const onSubmit = async (data) => { + const formData = new FormData(); + formData.append("description", data.description); + requestServer(`${SUBMIT_ROAD_SAFETY_FORM}/${rowId}`, "post", { + data: formData, + }) + .then(() => { + setOpenRoadSafetyForm(false); + mutate(); + }) + .catch(() => {}); + }; + return ( + + + + + + + + + + + + + + ); +}; +export default RoadSafetyFormContext; diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/index.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/index.jsx new file mode 100644 index 0000000..9c57473 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/RoadSafetyForm/index.jsx @@ -0,0 +1,52 @@ +import { Dialog, IconButton, Stack, Tooltip } from "@mui/material"; +import EngineeringIcon from "@mui/icons-material/Engineering"; +import DialogTransition from "@/core/components/DialogTransition"; +import { useState } from "react"; +import { Close } from "@mui/icons-material"; +import RoadSafetyFormContext from "./RoadSafetyFormContext"; + +const RoadSafetyForm = ({ rowId, mutate }) => { + const [openRoadSafetyForm, setOpenRoadSafetyForm] = useState(false); + return ( + + + { + setOpenRoadSafetyForm(true); + }} + > + + + + + setOpenRoadSafetyForm(false)} + sx={{ + position: "absolute", + right: 8, + top: 8, + zIndex: 10, + color: (theme) => theme.palette.grey[500], + }} + > + + + + + + ); +}; +export default RoadSafetyForm; diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/index.jsx index c2b1970..b7434f8 100644 --- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/RowActions/index.jsx @@ -1,10 +1,12 @@ import TaskDetail from "./TaskDetail"; import { Box } from "@mui/material"; +import RoadSafetyForm from "./RoadSafetyForm"; const RowActions = ({ row, mutate }) => { return ( + ); }; diff --git a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/TaskList.jsx index 82a4786..8f158d9 100644 --- a/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/TaskList.jsx +++ b/src/components/dashboard/inquiryPrivacy/assistant/zaminGov/TaskList.jsx @@ -8,6 +8,14 @@ import RowActions from "./RowActions"; const TaskList = () => { const columns = useMemo( () => [ + { + accessorKey: "id", + header: "کد یکتا", + id: "id", + enableColumnFilter: false, + datatype: "text", + filterFn: "notEquals", + }, { accessorKey: "aplication_number", header: "شماره درخواست", @@ -32,6 +40,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "township", + header: "شهرستان", + id: "township", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, { accessorKey: "city", header: "شهر", @@ -96,6 +112,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "state", + header: "وضعیت درخواست", + id: "state", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, ], [] ); @@ -112,7 +136,7 @@ const TaskList = () => { table_name={"assistantZaminGovList"} enableRowActions positionActionsColumn={"last"} - renderRowActions={({ row }) => } + RowActions={RowActions} /> diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx index eea9c34..7c1b0aa 100644 --- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx +++ b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx @@ -31,7 +31,7 @@ const ReferFormContext = ({ setOpenReferDialog, rowId, mutate }) => { city: "", }; const { cities, loadingCities, errorCities } = useCities(); - const requestServer = useRequest({ auth: true }); + const requestServer = useRequest({notification : {show : true, success : true}}); const { control, register, diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/TaskList.jsx index fbb62cd..83e2f6c 100644 --- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/TaskList.jsx +++ b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/TaskList.jsx @@ -40,6 +40,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "township", + header: "شهرستان", + id: "township", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, { accessorKey: "city", header: "شهر", @@ -104,6 +112,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "state", + header: "وضعیت درخواست", + id: "state", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, ], [] ); diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx new file mode 100644 index 0000000..49ffa3c --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx @@ -0,0 +1,29 @@ +import { FormControl, FormHelperText, InputLabel, OutlinedInput, Stack } from "@mui/material"; + +const DescriptionForm = ({ errors, register }) => { + return ( + + + + توضیحات + + + + {errors.description ? errors.description.message : null} + + + + ); +}; +export default DescriptionForm; diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx new file mode 100644 index 0000000..a515950 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/ManagerOrAssistantSubmit.jsx @@ -0,0 +1,15 @@ +import { Button } from "@mui/material"; + +const ManagerOrAssistantSubmit = ({ isSubmitting }) => { + return ( + <> + + + + ); +}; +export default ManagerOrAssistantSubmit; diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx new file mode 100644 index 0000000..d2587c5 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx @@ -0,0 +1,26 @@ +import { Card, CardContent, CardHeader, CircularProgress, Divider, Stack, Typography } from "@mui/material"; +import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion"; + +const PrevCartableOpinion = ({ message, loadingMessage, errorMessage }) => { + return ( + + + + + {errorMessage ? ( + خطا در دریافت اطلاعات !!! + ) : loadingMessage ? ( + + + درحال دریافت اطلاعات + + ) : ( + {message} + )} + + + + + ); +}; +export default PrevCartableOpinion; diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx new file mode 100644 index 0000000..f0be54c --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx @@ -0,0 +1,35 @@ +import {Card, CardContent, FormControl, FormLabel, Stack, Typography} from "@mui/material"; + +const QuestionSafetyForm = () => { + return ( + + + + + + + آیا ایمنی راه این طرح مورد تایید است ؟ + + + + + دفتر حریم راه :{" "} + + + بله + + + + + + + ); +}; +export default QuestionSafetyForm; diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx new file mode 100644 index 0000000..ba31373 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/RoadSafetyFormContext.jsx @@ -0,0 +1,82 @@ +import { DialogActions, DialogContent, Stack } from "@mui/material"; +import StyledForm from "@/core/components/StyledForm"; +import useRequest from "@/lib/hooks/useRequest"; +import { useForm } from "react-hook-form"; +import { yupResolver } from "@hookform/resolvers/yup"; +import { object, string } from "yup"; +import { SUBMIT_ROAD_SAFETY_FORM } from "@/core/utils/routes"; +import QuestionSafetyForm from "./QuestionSafetyForm"; +import PrevCartableOpinion from "./PrevCartableOpinion"; +import DescriptionForm from "./DescriptionForm"; +import ManagerOrAssistantSubmit from "./ManagerOrAssistantSubmit"; +import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion"; +import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail"; +const fakeData = { + id: 1, + shomareh_darkhast: "2124", + ostan: "ostan", + shahr: "shahr", + shahrestan: "shahrestan", + bakhsh: "bakhsh", + roosta: "roosta", + tarikh_darkhast: "tarikh_darkhast", + sazman: "sazman", + masahat_zamin: "masahat_zamin", + masahat_tarh: "masahat_tarh", + gorooh_tarh: "gorooh_tarh", + onvane_tarh: "onvane_tarh", + address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر", + file_mosavab: "file", + polygon: [ + [51.515, -0.09], + [51.52, -0.1], + [51.52, -0.12], + ], +}; +const validationSchema = object({ + description: string().required("وارد کردن توضیحات الزامیست!"), +}); +const RoadSafetyFormContext = ({ rowId, mutate, setOpenRoadSafetyForm }) => { + const defaultValues = { + description: "", + }; + const requestServer = useRequest({ notification : {success : true, show : true} }); + const { message, loadingMessage, errorMessage } = usePrevStateOpinion(); + const { + register, + handleSubmit, + formState: { isSubmitting, errors }, + } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "onBlur" }); + const onSubmit = async (data) => { + const formData = new FormData(); + formData.append("description", data.description); + requestServer(`${SUBMIT_ROAD_SAFETY_FORM}/${rowId}`, "post", { + data: formData, + }) + .then(() => { + setOpenRoadSafetyForm(false); + mutate(); + }) + .catch(() => {}); + }; + return ( + + + + + + + + + + + + + + ); +}; +export default RoadSafetyFormContext; diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/index.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/index.jsx new file mode 100644 index 0000000..9c57473 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/RoadSafetyForm/index.jsx @@ -0,0 +1,52 @@ +import { Dialog, IconButton, Stack, Tooltip } from "@mui/material"; +import EngineeringIcon from "@mui/icons-material/Engineering"; +import DialogTransition from "@/core/components/DialogTransition"; +import { useState } from "react"; +import { Close } from "@mui/icons-material"; +import RoadSafetyFormContext from "./RoadSafetyFormContext"; + +const RoadSafetyForm = ({ rowId, mutate }) => { + const [openRoadSafetyForm, setOpenRoadSafetyForm] = useState(false); + return ( + + + { + setOpenRoadSafetyForm(true); + }} + > + + + + + setOpenRoadSafetyForm(false)} + sx={{ + position: "absolute", + right: 8, + top: 8, + zIndex: 10, + color: (theme) => theme.palette.grey[500], + }} + > + + + + + + ); +}; +export default RoadSafetyForm; diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/index.jsx index c2b1970..b7434f8 100644 --- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/RowActions/index.jsx @@ -1,10 +1,12 @@ import TaskDetail from "./TaskDetail"; import { Box } from "@mui/material"; +import RoadSafetyForm from "./RoadSafetyForm"; const RowActions = ({ row, mutate }) => { return ( + ); }; diff --git a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/TaskList.jsx index 396cffc..92f500b 100644 --- a/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/TaskList.jsx +++ b/src/components/dashboard/inquiryPrivacy/generalManager/zaminGov/TaskList.jsx @@ -8,6 +8,14 @@ import RowActions from "./RowActions"; const TaskList = () => { const columns = useMemo( () => [ + { + accessorKey: "id", + header: "کد یکتا", + id: "id", + enableColumnFilter: false, + datatype: "text", + filterFn: "notEquals", + }, { accessorKey: "aplication_number", header: "شماره درخواست", @@ -32,6 +40,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "township", + header: "شهرستان", + id: "township", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, { accessorKey: "city", header: "شهر", @@ -96,6 +112,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "state", + header: "وضعیت درخواست", + id: "state", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, ], [] ); @@ -112,7 +136,7 @@ const TaskList = () => { table_name={"generalManagerZaminGovList"} enableRowActions positionActionsColumn={"last"} - renderRowActions={({ row }) => } + RowActions={RowActions} /> diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx index df3ccaf..fdf9278 100644 --- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/Refer/ReferFormContext.jsx @@ -31,7 +31,7 @@ const ReferFormContext = ({ setOpenReferDialog, rowId, mutate }) => { province: "", }; const { provinces, loadingProvinces, errorProvinces } = useProvinces(); - const requestServer = useRequest({ auth: true }); + const requestServer = useRequest({notification : {show : true, success : true}}); const { control, register, diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx new file mode 100644 index 0000000..49ffa3c --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/DescriptionForm.jsx @@ -0,0 +1,29 @@ +import { FormControl, FormHelperText, InputLabel, OutlinedInput, Stack } from "@mui/material"; + +const DescriptionForm = ({ errors, register }) => { + return ( + + + + توضیحات + + + + {errors.description ? errors.description.message : null} + + + + ); +}; +export default DescriptionForm; diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx new file mode 100644 index 0000000..8d14fd0 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/PrevCartableOpinion.jsx @@ -0,0 +1,27 @@ +import { Card, CardContent, CardHeader, CircularProgress, Divider, Stack, Typography } from "@mui/material"; +import usePrevStateOpinion from "@/lib/hooks/usePrevStateopinion"; + +const PrevCartableOpinion = () => { + const { message, loadingMessage, errorMessage } = usePrevStateOpinion(); + return ( + + + + + {errorMessage ? ( + خطا در دریافت اطلاعات !!! + ) : loadingMessage ? ( + + + درحال دریافت اطلاعات + + ) : ( + {message} + )} + + + + + ); +}; +export default PrevCartableOpinion; diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx new file mode 100644 index 0000000..4c5faae --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/QuestionSafetyForm.jsx @@ -0,0 +1,57 @@ +import { + Card, + CardContent, + FormControl, + FormControlLabel, + FormLabel, + RadioGroup, + Stack, + Typography, +} from "@mui/material"; +import Radio from "@mui/material/Radio"; + +const QuestionSafetyForm = ({ register, errors }) => { + return ( + + + + + + + آیا ایمنی راه این طرح مورد تایید است ؟ + + + + + } + label="بله" + {...register("RadioGroup")} + /> + } + label="خیر" + {...register("RadioGroup")} + /> + + + {errors.RadioGroup && ( + + {errors.RadioGroup.message} + + )} + + + + + ); +}; +export default QuestionSafetyForm; diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/RoadSaftyFormContext.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/RoadSaftyFormContext.jsx new file mode 100644 index 0000000..64ab7c7 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/RoadSaftyFormContext.jsx @@ -0,0 +1,80 @@ +import { DialogActions, DialogContent, Stack } from "@mui/material"; +import StyledForm from "@/core/components/StyledForm"; +import useRequest from "@/lib/hooks/useRequest"; +import { useForm } from "react-hook-form"; +import { yupResolver } from "@hookform/resolvers/yup"; +import { object, string } from "yup"; +import QuestionSafetyForm from "./QuestionSafetyForm"; +import PrevCartableOpinion from "./PrevCartableOpinion"; +import DescriptionForm from "./DescriptionForm"; +import SubmitButtonsAdmin from "./SubmitButtonsAdmin"; +import { SUBMIT_ROAD_SAFETY_FORM } from "@/core/utils/routes"; +import ApplicantRequestDetail from "@/core/components/ApplicantRequestDetail"; +const fakeData = { + id: 1, + shomareh_darkhast: "2124", + ostan: "ostan", + shahr: "shahr", + shahrestan: "shahrestan", + bakhsh: "bakhsh", + roosta: "roosta", + tarikh_darkhast: "tarikh_darkhast", + sazman: "sazman", + masahat_zamin: "masahat_zamin", + masahat_tarh: "masahat_tarh", + gorooh_tarh: "gorooh_tarh", + onvane_tarh: "onvane_tarh", + address: "کرج - فلان جا - جنب پاساژ - نزدیک اونجا - اونور خیابون - زیر رو گذر - روی زیر گذر", + file_mosavab: "file", + polygon: [ + [51.515, -0.09], + [51.52, -0.1], + [51.52, -0.12], + ], +}; +const validationSchema = object({ + description: string().required("وارد کردن توضیحات الزامیست!"), + RadioGroup: string().required("تاییدیه ایمنی راه ضروریست!"), +}); +const RoadSafetyFormContext = ({ rowId, mutate, setOpenRoadSafetyForm }) => { + const defaultValues = { + description: "", + RadioGroup: "", + }; + const requestServer = useRequest({ notification : {success : true, show : true} }); + const { + register, + handleSubmit, + formState: { isSubmitting, errors }, + } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "onBlur" }); + const onSubmit = async (data) => { + const formData = new FormData(); + formData.append("description", data.description); + formData.append("provinceId", data.RadioGroup); + + requestServer(`${SUBMIT_ROAD_SAFETY_FORM}/${rowId}`, "post", { + data: formData, + }) + .then(() => { + setOpenRoadSafetyForm(false); + mutate(); + }) + .catch(() => {}); + }; + return ( + + + + + + + + + + + + + + ); +}; +export default RoadSafetyFormContext; diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/SubmitButtonsAdmin.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/SubmitButtonsAdmin.jsx new file mode 100644 index 0000000..6b46447 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/SubmitButtonsAdmin.jsx @@ -0,0 +1,21 @@ +import { Button } from "@mui/material"; + +const SubmitButtonsAdmin = ({ setOpenRoadSafetyForm, isSubmitting }) => { + return ( + <> + + + + ); +}; +export default SubmitButtonsAdmin; diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/index.jsx new file mode 100644 index 0000000..652e809 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/RoadSafetyForm/index.jsx @@ -0,0 +1,52 @@ +import { Dialog, IconButton, Stack, Tooltip } from "@mui/material"; +import EngineeringIcon from "@mui/icons-material/Engineering"; +import DialogTransition from "@/core/components/DialogTransition"; +import { useState } from "react"; +import RoadSafetyFormContext from "./RoadSaftyFormContext"; +import { Close } from "@mui/icons-material"; + +const RoadSafetyForm = ({ rowId, mutate }) => { + const [openRoadSafetyForm, setOpenRoadSafetyForm] = useState(false); + return ( + + + { + setOpenRoadSafetyForm(true); + }} + > + + + + + setOpenRoadSafetyForm(false)} + sx={{ + position: "absolute", + right: 8, + top: 8, + zIndex: 10, + color: (theme) => theme.palette.grey[500], + }} + > + + + + + + ); +}; +export default RoadSafetyForm; diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/index.jsx index cd07b61..8da978b 100644 --- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/RowActions/index.jsx @@ -1,12 +1,14 @@ import ReferForm from "./Refer"; import TaskDetail from "./TaskDetail"; import { Box } from "@mui/material"; +import RoadSafetyForm from "./RoadSafetyForm"; const RowActions = ({ row, mutate }) => { return ( + ); }; diff --git a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/TaskList.jsx b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/TaskList.jsx index 2a7e7ec..550e152 100644 --- a/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/TaskList.jsx +++ b/src/components/dashboard/inquiryPrivacy/provinceAdmin/zaminGov/TaskList.jsx @@ -40,6 +40,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "township", + header: "شهرستان", + id: "township", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, { accessorKey: "city", header: "شهر", @@ -104,6 +112,14 @@ const TaskList = () => { datatype: "text", filterFn: "equals", }, + { + accessorKey: "state", + header: "وضعیت درخواست", + id: "state", + enableColumnFilter: false, + datatype: "text", + filterFn: "equals", + }, ], [] ); @@ -120,7 +136,7 @@ const TaskList = () => { table_name={"provinceAdminZaminGovList"} enableRowActions positionActionsColumn={"last"} - renderRowActions={({ row }) => } + RowActions={RowActions} /> diff --git a/src/core/components/Toasts/success.jsx b/src/core/components/Toasts/success.jsx index 36023c6..fc11759 100644 --- a/src/core/components/Toasts/success.jsx +++ b/src/core/components/Toasts/success.jsx @@ -16,7 +16,7 @@ export const successToast = (toastContainer) => - {"Your operation was successful"} + {"عملیات با موفقیت انجام شد"} diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index a980707..14bf801 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -10,3 +10,5 @@ export const REFER_ADMIN_PROVINCE = "/v3/api/fake-submit"; export const REFER_ADMIN_CITY = "/v3/api/fake-submit"; export const GET_CITY_LISTS = "/v3/api/fake-cities"; export const GET_PROVINCE_LISTS = "/v3/api/fake-provinces"; +export const GET_PREV_STATE_OPINION = "/v3/api/fake-prev-state-opinion"; +export const SUBMIT_ROAD_SAFETY_FORM = "/v3/api/fake-submit"; diff --git a/src/lib/hooks/useCities.js b/src/lib/hooks/useCities.js index e4012b7..47bf99b 100644 --- a/src/lib/hooks/useCities.js +++ b/src/lib/hooks/useCities.js @@ -1,8 +1,10 @@ import { useState, useEffect } from "react"; import axios from "axios"; import { GET_CITY_LISTS } from "@/core/utils/routes"; +import useRequest from "@/lib/hooks/useRequest"; const useCities = () => { + const requestServer = useRequest() const [cities, setCities] = useState([]); const [loadingCities, setLoadingCities] = useState(true); const [errorCities, setErrorCities] = useState(null); @@ -10,7 +12,7 @@ const useCities = () => { useEffect(() => { const fetchCities = async () => { try { - const response = await axios.get(`${GET_CITY_LISTS}`); + const response = await requestServer(`${GET_CITY_LISTS}`); setCities(response.data.data); setLoadingCities(false); } catch (e) { diff --git a/src/lib/hooks/usePrevStateopinion.js b/src/lib/hooks/usePrevStateopinion.js new file mode 100644 index 0000000..f7c0d47 --- /dev/null +++ b/src/lib/hooks/usePrevStateopinion.js @@ -0,0 +1,31 @@ +import { useState, useEffect } from "react"; +import axios from "axios"; +import { GET_PREV_STATE_OPINION } from "@/core/utils/routes"; +import useRequest from "@/lib/hooks/useRequest"; + +const usePrevStateOpinion = () => { + const requestServer = useRequest() + const [message, setMessage] = useState([]); + const [loadingMessage, setLoadingMessage] = useState(true); + const [errorMessage, setErrorMessage] = useState(null); + + useEffect(() => { + const fetchCities = async () => { + try { + const response = await requestServer(`${GET_PREV_STATE_OPINION}`); + setMessage(response.data.message); + setLoadingMessage(false); + } catch (e) { + console.error("Error fetching cities:", e); + setErrorMessage(e); + setLoadingMessage(false); + } + }; + + fetchCities(); + }, []); + + return { message, loadingMessage, errorMessage }; +}; + +export default usePrevStateOpinion; diff --git a/src/lib/hooks/useProvince.js b/src/lib/hooks/useProvince.js index 699b462..b0a7dc9 100644 --- a/src/lib/hooks/useProvince.js +++ b/src/lib/hooks/useProvince.js @@ -1,8 +1,10 @@ import { useState, useEffect } from "react"; import axios from "axios"; import { GET_PROVINCE_LISTS } from "@/core/utils/routes"; +import useRequest from "@/lib/hooks/useRequest"; const useProvinces = () => { + const requestServer = useRequest() const [provinces, setProvinces] = useState([]); const [loadingProvinces, setLoadingProvinces] = useState(true); const [errorProvinces, setErrorProvinces] = useState(null); @@ -10,7 +12,7 @@ const useProvinces = () => { useEffect(() => { const fetchCities = async () => { try { - const response = await axios.get(`${GET_PROVINCE_LISTS}`); // Fetch the cities from the API + const response = await requestServer(`${GET_PROVINCE_LISTS}`); // Fetch the cities from the API setProvinces(response.data.data); // Set the cities data setLoadingProvinces(false); // Set loading to false after successful fetch } catch (e) {