diff --git a/jsconfig.json b/jsconfig.json index c136578..b51472a 100644 --- a/jsconfig.json +++ b/jsconfig.json @@ -1,27 +1,27 @@ // javascript for production -// { -// "compilerOptions": { -// "paths": { -// "@/*": ["./src/*"], -// "^/*": ["./public/*"] -// } -// } -// } - -// typescript for local development { "compilerOptions": { - "jsx": "react-jsx", - "noUnusedLocals": true, - "noImplicitAny": false, - "checkJs": true, - "allowJs": true, - "strict": true, - "baseUrl": ".", "paths": { "@/*": ["./src/*"], "^/*": ["./public/*"] } - }, - "exclude": ["node_modules"] + } } + +// typescript for local development +// { +// "compilerOptions": { +// "jsx": "react-jsx", +// "noUnusedLocals": true, +// "noImplicitAny": false, +// "checkJs": true, +// "allowJs": true, +// "strict": true, +// "baseUrl": ".", +// "paths": { +// "@/*": ["./src/*"], +// "^/*": ["./public/*"] +// } +// }, +// "exclude": ["node_modules"] +// } diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx index 4eaae92..34badf1 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx @@ -3,6 +3,7 @@ import DataTableWithAuth from "@/core/components/DataTableWithAuth"; import { Box } from "@mui/material"; import { useMemo } from "react"; import Toolbar from "./Toolbar"; +import RowActions from "./RowActions"; const MachinesReportsList = ({ data, specialFilter }) => { const columns = useMemo(() => { @@ -70,6 +71,8 @@ const MachinesReportsList = ({ data, specialFilter }) => { table_name={"roadMissionReportList"} enablePagination={false} specialFilter={specialFilter} + enableRowActions + RowActions={RowActions} /> ); diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx new file mode 100644 index 0000000..037aec7 --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/MachineMissionsDetailsDialog/MachineMissionsList/index.jsx @@ -0,0 +1,106 @@ +import DataTableWithAuth from "@/core/components/DataTableWithAuth"; +import { GET_MACHINE_MISSIONS_DETAILS } from "@/core/utils/routes"; +import { Box } from "@mui/material"; +import { useMemo } from "react"; + +const MachineMissionsList = ({ row }) => { + const columns = useMemo( + () => [ + { + accessorKey: "id", + header: "کد یکتا", + id: "id", + enableColumnFilter: true, + datatype: "text", + filterMode: "equals", + columnFilterModeOptions: ["equals", "contains"], + grow: false, + size: 80, + }, + { + accessorKey: "province_name", + header: "استان", + id: "province_name", + enableColumnFilter: true, + datatype: "text", + filterMode: "equals", + columnFilterModeOptions: ["equals", "contains"], + grow: false, + size: 100, + }, + { + accessorKey: "city_name", + header: "شهر", + id: "city_name", + enableColumnFilter: true, + datatype: "text", + filterMode: "equals", + columnFilterModeOptions: ["equals", "contains"], + grow: false, + size: 100, + }, + { + accessorKey: "station_name", + header: "راهدارخانه", + id: "station_name", + enableColumnFilter: true, + datatype: "text", + filterMode: "equals", + columnFilterModeOptions: ["equals", "contains"], + grow: false, + size: 100, + }, + { + accessorKey: "driver_name", + header: "راننده", + id: "driver_name", + enableColumnFilter: true, + datatype: "text", + filterMode: "equals", + columnFilterModeOptions: ["equals", "contains"], + grow: false, + size: 100, + }, + { + accessorKey: "km", + header: "کیلومتر شروع", + id: "km", + enableColumnFilter: true, + datatype: "text", + filterMode: "equals", + columnFilterModeOptions: ["equals", "contains"], + grow: false, + size: 100, + }, + { + accessorKey: "end_km", + header: "کیلومتر پایان", + id: "end_km", + enableColumnFilter: true, + datatype: "text", + filterMode: "equals", + columnFilterModeOptions: ["equals", "contains"], + grow: false, + size: 100, + }, + ], + [] + ); + + return ( + <> + + + + + ); +}; +export default MachineMissionsList; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/index.jsx new file mode 100644 index 0000000..5e79bfa --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/Form/index.jsx @@ -0,0 +1,27 @@ +import { Box, Button, DialogActions, DialogContent } from "@mui/material"; +import { Stack } from "@mui/system"; +import MachineMissionsList from "./MachineMissionsDetailsDialog/MachineMissionsList"; + +const MachineMissionsDetailsTable = ({ row, setOpenMachineMissionsDetails }) => { + return ( + <> + + + + + + + + + + + + + + + + ); +}; +export default MachineMissionsDetailsTable; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/index.jsx new file mode 100644 index 0000000..3b65c8f --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/index.jsx @@ -0,0 +1,47 @@ +import { Close, RemoveRedEye } from "@mui/icons-material"; +import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material"; +import { useState } from "react"; +import MachineMissionsDetailsTable from "./Form"; + +const MissionDetails = ({ row }) => { + const [openMachineMissionsDetails, setOpenMachineMissionsDetails] = useState(false); + + return ( + <> + + { + setOpenMachineMissionsDetails(true); + }} + > + + + + + setOpenMachineMissionsDetails(false)} + sx={(theme) => ({ + position: "absolute", + right: 8, + top: 8, + zIndex: 50, + color: theme.palette.grey[500], + })} + > + + + ریز گزارشات خودرو + {openMachineMissionsDetails && ( + + )} + + + ); +}; +export default MissionDetails; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/RouteDetail/ShowRoute.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/RouteDetail/ShowRoute.jsx new file mode 100644 index 0000000..5e1a4bd --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/RouteDetail/ShowRoute.jsx @@ -0,0 +1,46 @@ +import { useEffect, useRef } from "react"; +import { Marker, Polyline, useMap } from "react-leaflet"; +import L from "leaflet"; +import polyline from "@mapbox/polyline"; +import SourceIcon from "@/assets/images/source-icon.svg"; +import DestIcon from "@/assets/images/destination-icon.svg"; + +const ShowRoute = ({ area }) => { + const map = useMap(); + const defaultIconSize = [35, 35]; + + const createCustomIcon = (size, iconUrl) => { + return L.icon({ + iconUrl: iconUrl, + iconSize: size, + iconAnchor: [size[0] / 2, size[1]], + popupAnchor: [0, -size[1]], + }); + }; + + useEffect(() => { + if (coords.length > 0) { + map.flyToBounds(coords, { padding: [50, 50], duration: 1.5 }); + } + }, [area]); + const sourceIcon = createCustomIcon(defaultIconSize, SourceIcon.src); + const destIcon = createCustomIcon(defaultIconSize, DestIcon.src); + + if (!area) return null; + const coords = polyline.decode(area, 6); + + if (coords.length === 0) return null; + + const sourcePosition = coords[0]; + const destPosition = coords[coords.length - 1]; + + return ( + <> + + + + + ); +}; + +export default ShowRoute; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/RouteDetail/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/RouteDetail/index.jsx new file mode 100644 index 0000000..4501d35 --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/RouteDetail/index.jsx @@ -0,0 +1,57 @@ +import { Box, Button, Dialog, DialogActions, DialogTitle, IconButton, Tooltip } from "@mui/material"; +import { useState } from "react"; +import MapIcon from "@mui/icons-material/Map"; +import MapLayer from "@/core/components/MapLayer"; +import ShowRoute from "./ShowRoute"; + +const RouteDetail = ({ encoded_route }) => { + const [openRouteDetailDialog, setOpenRouteDetailDialog] = useState(false); + return ( + <> + + setOpenRouteDetailDialog(true)}> + + + + setOpenRouteDetailDialog(false)} + PaperProps={{ + sx: { + boxShadow: "rgba(60, 64, 67, 0.3) 0px 1px 16px 0px, rgba(60, 64, 67, 0.15) 0px 1px 10px 0px", + }, + }} + dir="rtl" + maxWidth={"sm"} + > + مسیر انتخابی + + + + + + + + + + + + + ); +}; +export default RouteDetail; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/index.jsx new file mode 100644 index 0000000..dbf9aa7 --- /dev/null +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/index.jsx @@ -0,0 +1,6 @@ +import MissionDetails from "./MissionDitails"; + +const RowActions = ({ row }) => { + return ; +}; +export default RowActions; diff --git a/src/core/utils/routes.js b/src/core/utils/routes.js index 2bac1c4..10a6117 100644 --- a/src/core/utils/routes.js +++ b/src/core/utils/routes.js @@ -291,3 +291,4 @@ export const GET_PROVINCES_LIST = api + "/api/v3/provinces/list"; export const GET_CITIES_LIST = api + "/api/v3/cities/list"; export const GET_STATIONS_LIST = api + "/api/v3/road_maintenance_station"; export const UPDATE_MACHINE_STATUS_AND_LOCATION = api + "/api/v3/cmms_machines"; +export const GET_MACHINE_MISSIONS_DETAILS = api + "/api/v3/missions/report_machine/machine_details_report";