diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx new file mode 100644 index 0000000..a91fd31 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/DetailDialog.jsx @@ -0,0 +1,109 @@ +"use client"; + +import { + Button, + Dialog, + DialogActions, + DialogContent, + FormControl, + FormHelperText, + InputLabel, + OutlinedInput, +} from "@mui/material"; +import { object, string } from "yup"; +import useRequest from "@/lib/hooks/useRequest"; +import { useForm } from "react-hook-form"; +import { yupResolver } from "@hookform/resolvers/yup"; +import StyledForm from "@/core/components/StyledForm"; +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 DetailDialog = ({ taskModal, setTaskModal, rowId, mutate }) => { + const requestServer = useRequest({ auth: true }); + const defaultValues = { + description: "", + }; + const handleClose = () => { + setTaskModal(false); + }; + + const { + register, + handleSubmit, + formState: { isSubmitting, errors, touchedFields }, + } = useForm({ defaultValues, resolver: yupResolver(validationSchema), mode: "onBlur" }); + + const onSubmit = async (data) => { + const formData = new FormData(); + formData.append("description", data.description); + requestServer(`api-for-send-to-harim/${rowId}`, "post", { + data: formData, + }) + .then(() => { + handleClose(); + mutate(); + }) + .catch(() => {}); + }; + return ( + + + + + + + توضیحات + + + + {errors.description ? errors.description.message : null} + + + + + + + + + ); +}; +export default DetailDialog; diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/index.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/index.jsx new file mode 100644 index 0000000..24f6b31 --- /dev/null +++ b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/TaskDetail/index.jsx @@ -0,0 +1,26 @@ +"use client"; + +import { IconButton, Tooltip } from "@mui/material"; +import AssignmentIcon from "@mui/icons-material/Assignment"; +import DetailDialog from "./DetailDialog"; +import { useState } from "react"; + +const TaskDetail = ({ rowId, mutate }) => { + const [taskModal, setTaskModal] = useState(false); + + const openDetailDialog = () => { + setTaskModal(true); + }; + + return ( + <> + + + + + + + + ); +}; +export default TaskDetail; diff --git a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/index.jsx b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/index.jsx index 4cd1229..0b936c3 100644 --- a/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/index.jsx +++ b/src/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/index.jsx @@ -1,8 +1,15 @@ -import ReferForm from "@/components/dashboard/inquiryPrivacy/cityAdmin/zaminGov/RowActions/Refer"; +"use client"; + +import ReferForm from "./Refer"; +import TaskDetail from "./TaskDetail"; +import { Box } from "@mui/material"; const RowActions = ({ row, mutate }) => { return ( - //rowId should pass + + + + ); }; export default RowActions; diff --git a/src/core/components/ApplicantRequestDetail/DetailItem.jsx b/src/core/components/ApplicantRequestDetail/DetailItem.jsx new file mode 100644 index 0000000..099e955 --- /dev/null +++ b/src/core/components/ApplicantRequestDetail/DetailItem.jsx @@ -0,0 +1,52 @@ +"use client"; + +import { Box, Chip, Divider, Grid, Typography } from "@mui/material"; +import QrCode2Icon from "@mui/icons-material/QrCode2"; +import HomeWorkIcon from "@mui/icons-material/HomeWork"; +import DomainIcon from "@mui/icons-material/Domain"; +import CottageIcon from "@mui/icons-material/Cottage"; +import AccountTreeIcon from "@mui/icons-material/AccountTree"; +import HolidayVillageIcon from "@mui/icons-material/HolidayVillage"; +import CalendarMonthIcon from "@mui/icons-material/CalendarMonth"; +import FaxIcon from "@mui/icons-material/Fax"; +import FullscreenIcon from "@mui/icons-material/Fullscreen"; +import ArchitectureIcon from "@mui/icons-material/Architecture"; +import Diversity2Icon from "@mui/icons-material/Diversity2"; +import SubtitlesIcon from "@mui/icons-material/Subtitles"; +import FingerprintIcon from "@mui/icons-material/Fingerprint"; + +const findItem = { + id: { title: "کد یکتا", icon: }, + shomareh_darkhast: { title: "شماره درخواست", icon: }, + ostan: { title: "استان", icon: }, + shahr: { title: "شهر", icon: }, + shahrestan: { title: "شهرستان", icon: }, + bakhsh: { title: "بخش", icon: }, + roosta: { title: "روستا", icon: }, + tarikh_darkhast: { title: "تاریخ درخواست", icon: }, + sazman: { title: "سازمان", icon: }, + masahat_zamin: { title: "مساحت زمین", icon: }, + masahat_tarh: { title: "مساحت طرح", icon: }, + gorooh_tarh: { title: "گروه طرح", icon: }, + onvane_tarh: { title: "عنوان طرح", icon: }, +}; + +const DetailItem = ({ item }) => { + const currentItem = findItem[item.key]; + if (!currentItem) return null; + + return ( + + + + + {item.value} + + + ); +}; +export default DetailItem; diff --git a/src/core/components/ApplicantRequestDetail/DetailMap.jsx b/src/core/components/ApplicantRequestDetail/DetailMap.jsx new file mode 100644 index 0000000..902ec3a --- /dev/null +++ b/src/core/components/ApplicantRequestDetail/DetailMap.jsx @@ -0,0 +1,39 @@ +"use client"; + +import { Box } from "@mui/material"; +import dynamic from "next/dynamic"; +import MapLoading from "@/core/components/MapLayer/Loading"; +import FlyToPolyGon from "./FlyToPolygon"; + +const MapLayer = dynamic(() => import("@/core/components/MapLayer"), { + loading: () => , + ssr: false, +}); + +const DetailMap = ({ data }) => { + return ( + + + + + + + + ); +}; +export default DetailMap; diff --git a/src/core/components/ApplicantRequestDetail/FlyToPolygon.jsx b/src/core/components/ApplicantRequestDetail/FlyToPolygon.jsx new file mode 100644 index 0000000..4a39edd --- /dev/null +++ b/src/core/components/ApplicantRequestDetail/FlyToPolygon.jsx @@ -0,0 +1,22 @@ +"use client"; + +import { Polygon, useMap } from "react-leaflet"; +import { useEffect } from "react"; + +const purpleOptions = { color: "purple" }; + +const FlyToPolygon = ({ polygon }) => { + const map = useMap(); + + useEffect(() => { + if (map) { + const leafletPolygon = L.polygon(polygon); + const bounds = leafletPolygon.getBounds(); + map.flyToBounds(bounds, { padding: [50, 50] }); + } + }, [map, polygon]); + + return ; +}; + +export default FlyToPolygon; diff --git a/src/core/components/ApplicantRequestDetail/index.jsx b/src/core/components/ApplicantRequestDetail/index.jsx new file mode 100644 index 0000000..b97279a --- /dev/null +++ b/src/core/components/ApplicantRequestDetail/index.jsx @@ -0,0 +1,61 @@ +"use client"; + +import { Box, Button, Chip, Divider, Grid, Typography } from "@mui/material"; +import AttachFileIcon from "@mui/icons-material/AttachFile"; +import DownloadingIcon from "@mui/icons-material/Downloading"; +import DetailItem from "./DetailItem"; +import DetailMap from "./DetailMap"; +import ContactMailIcon from "@mui/icons-material/ContactMail"; + +const ApplicantRequestDetail = ({ data }) => { + return ( + <> + + + + + {Object.entries(data).map(([key, value]) => ( + + ))} + + + } + sx={{ fontSize: "12px", fontWeight: 500, pl: "5px" }} + label="فایل مصوب" + /> + + + + + + + + + } + label="آدرس" + /> + + + {data.address} + + + + + + ); +}; +export default ApplicantRequestDetail;