From 18674a5b7577771e99064ac337c4a0be02f7f9a2 Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 15 Jun 2026 11:48:23 +0330 Subject: [PATCH 1/3] add delay to show routes --- .../Create/Form/Area/Routing/ShowRoute.jsx | 25 +++++++++++++----- .../RowActions/RouteDetail/ShowRoute.jsx | 26 ++++++++++++++----- 2 files changed, 37 insertions(+), 14 deletions(-) diff --git a/src/components/dashboard/roadMissions/operator/Actions/Create/Form/Area/Routing/ShowRoute.jsx b/src/components/dashboard/roadMissions/operator/Actions/Create/Form/Area/Routing/ShowRoute.jsx index 7d47ba8..b05cc6a 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Create/Form/Area/Routing/ShowRoute.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Create/Form/Area/Routing/ShowRoute.jsx @@ -1,4 +1,4 @@ -import { useEffect, useRef } from "react"; +import { useEffect, useRef, useState } from "react"; import { Marker, Polyline, useMap } from "react-leaflet"; import L from "leaflet"; import polyline from "@mapbox/polyline"; @@ -18,14 +18,24 @@ const ShowRoute = ({ area }) => { }); }; - 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); + const [showRoute, setShowRoute] = useState(false); + useEffect(() => { + if (!coords.length) return; + + setShowRoute(false); + + map.flyToBounds(coords, { + padding: [50, 50], + duration: 1.5, + }); + + map.once("moveend", () => { + setShowRoute(true); + }); + }, [area]); if (!area) return null; const coords = polyline.decode(area, 6); @@ -36,7 +46,8 @@ const ShowRoute = ({ area }) => { return ( <> - + {showRoute && } + diff --git a/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx b/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx index 7d47ba8..3998a2f 100644 --- a/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx +++ b/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx @@ -1,4 +1,4 @@ -import { useEffect, useRef } from "react"; +import { useEffect, useRef, useState } from "react"; import { Marker, Polyline, useMap } from "react-leaflet"; import L from "leaflet"; import polyline from "@mapbox/polyline"; @@ -18,14 +18,24 @@ const ShowRoute = ({ area }) => { }); }; - 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); + const [showRoute, setShowRoute] = useState(false); + useEffect(() => { + if (!coords.length) return; + + setShowRoute(false); + + map.flyToBounds(coords, { + padding: [50, 50], + duration: 1.5, + }); + + map.once("moveend", () => { + setShowRoute(true); + }); + }, [area]); if (!area) return null; const coords = polyline.decode(area, 6); @@ -34,9 +44,11 @@ const ShowRoute = ({ area }) => { const sourcePosition = coords[0]; const destPosition = coords[coords.length - 1]; + return ( <> - + {showRoute && } + From f42a4ff63b7646f6e5f927a62017cb558e19fb0f Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 15 Jun 2026 15:00:28 +0330 Subject: [PATCH 2/3] send filter data for reports --- .../Form/GetDateTime/MissionDates/index.jsx | 141 +++++++++--------- .../diverReports/DriverReportsList.jsx | 5 +- .../DriverDetailsDialog/DriverList/index.jsx | 3 +- .../RowActions/DriverDetails/Form/index.jsx | 4 +- .../RowActions/DriverDetails/index.jsx | 8 +- .../reports/diverReports/RowActions/index.jsx | 4 +- .../reports/diverReports/index.jsx | 8 +- .../machinesReports/MachinesReportsList.jsx | 5 +- .../MachineMissionsList/index.jsx | 3 +- .../RowActions/MissionDitails/Form/index.jsx | 4 +- .../RowActions/MissionDitails/index.jsx | 3 +- .../machinesReports/RowActions/index.jsx | 4 +- .../reports/machinesReports/index.jsx | 8 +- 13 files changed, 105 insertions(+), 95 deletions(-) diff --git a/src/components/dashboard/roadMissions/operator/Actions/Create/Form/GetDateTime/MissionDates/index.jsx b/src/components/dashboard/roadMissions/operator/Actions/Create/Form/GetDateTime/MissionDates/index.jsx index 02813c2..6cbcf33 100644 --- a/src/components/dashboard/roadMissions/operator/Actions/Create/Form/GetDateTime/MissionDates/index.jsx +++ b/src/components/dashboard/roadMissions/operator/Actions/Create/Form/GetDateTime/MissionDates/index.jsx @@ -6,107 +6,107 @@ import { Controller, useWatch } from "react-hook-form"; const MissionDates = ({ control }) => { const type = useWatch({ control, name: "type" }); + const start_date = useWatch({ control, name: "start_date" }); const end_date = useWatch({ control, name: "end_date" }); + const start_time = useWatch({ control, name: "start_time" }); const end_time = useWatch({ control, name: "end_time" }); - const startDateTime = makeDateTime(start_date, start_time); - const endDateTime = makeDateTime(end_date, end_time); const now = new Date(); + const startDateTime = start_date && start_time ? makeDateTime(start_date, start_time) : null; + + const endDateTime = end_date && end_time ? makeDateTime(end_date, end_time) : null; + + const isSameDay = + start_date && end_date && new Date(start_date).toDateString() === new Date(end_date).toDateString(); + + const isToday = start_date && new Date(start_date).toDateString() === now.toDateString(); + return ( type && ( <> { - return ( - field.onChange(value || [])} - helperText={error ? error.message : null} - /> - ); - }} + name="start_date" + render={({ field, fieldState: { error } }) => ( + field.onChange(value || null)} + helperText={error?.message} + /> + )} /> + {type == 1 && ( { - return ( - field.onChange(value || null)} - helperText={error ? error.message : null} - /> - ); - }} + name="start_time" + render={({ field, fieldState: { error } }) => ( + field.onChange(value || null)} + helperText={error?.message} + /> + )} /> )} + { - return ( - field.onChange(value || [])} - helperText={error ? error.message : null} - /> - ); - }} + name="end_date" + render={({ field, fieldState: { error } }) => ( + field.onChange(value || null)} + helperText={error?.message} + /> + )} /> + {type == 1 && ( { - return ( - field.onChange(value || null)} - helperText={error ? error.message : null} - /> - ); - }} + name="end_time" + render={({ field, fieldState: { error } }) => ( + field.onChange(value || null)} + helperText={error?.message} + /> + )} /> )} @@ -114,4 +114,5 @@ const MissionDates = ({ control }) => { ) ); }; + export default MissionDates; diff --git a/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx b/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx index a279dc4..bca2edf 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/DriverReportsList.jsx @@ -50,7 +50,8 @@ const DriverReportsList = ({ data, specialFilter }) => { }, ]; }, []); - + const cleanedData = specialFilter.filter((item) => !(item.id === "province_id" && item.value === "-1")); + const RowActionsWithRowData = (props) => ; return ( { enablePagination={false} specialFilter={specialFilter} enableRowActions - RowActions={RowActions} + RowActions={RowActionsWithRowData} /> ); diff --git a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx index 2d13661..8237b24 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/Form/DriverDetailsDialog/DriverList/index.jsx @@ -3,7 +3,7 @@ import { GET_DRIVER_DETAILS } from "@/core/utils/routes"; import { Box } from "@mui/material"; import { useMemo } from "react"; -const DriverList = ({ row }) => { +const DriverList = ({ row, specialFilter }) => { const columns = useMemo( () => [ { @@ -93,6 +93,7 @@ const DriverList = ({ row }) => { { +const DriverDetailsTable = ({ row, setOpenDriverDetails, specialFilter }) => { return ( <> - + diff --git a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/index.jsx index 9e32458..bcec116 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/index.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/DriverDetails/index.jsx @@ -3,7 +3,7 @@ import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material"; import { useState } from "react"; import DriverDetailsTable from "./Form"; -const DriverDetails = ({ row }) => { +const DriverDetails = ({ row, specialFilter }) => { const [openDriverDetails, setOpenDriverDetails] = useState(false); return ( @@ -35,7 +35,11 @@ const DriverDetails = ({ row }) => { ریز گزارشات راننده {openDriverDetails && ( - + )} diff --git a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/index.jsx index f37d403..e7aba26 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/RowActions/index.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/RowActions/index.jsx @@ -1,6 +1,6 @@ import DriverDetails from "./DriverDetails"; -const RowActions = ({ row }) => { - return ; +const RowActions = ({ row, specialFilter }) => { + return ; }; export default RowActions; diff --git a/src/components/dashboard/roadMissions/reports/diverReports/index.jsx b/src/components/dashboard/roadMissions/reports/diverReports/index.jsx index 967a8a6..1c14e4a 100644 --- a/src/components/dashboard/roadMissions/reports/diverReports/index.jsx +++ b/src/components/dashboard/roadMissions/reports/diverReports/index.jsx @@ -27,8 +27,8 @@ const DriverReportsPage = () => { }; const defaultFilter = [ { value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${defaultValues.from_date}`, datatype: "date", id: "from_date", fn: "between" }, - { value: `${defaultValues.date_to}`, datatype: "date", id: "date_to", fn: "between" }, + { value: `${defaultValues.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" }, + { value: `${defaultValues.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" }, ]; const [specialFilter, setSpecialFilter] = useState(defaultFilter); @@ -38,8 +38,8 @@ const DriverReportsPage = () => { params.set("date_to", `${data.date_to} 23:59:59`); setSpecialFilter([ { value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${data.from_date}`, datatype: "date", id: "from_date", fn: "between" }, - { value: `${data.date_to}`, datatype: "date", id: "date_to", fn: "between" }, + { value: `${data.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" }, + { value: `${data.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" }, ]); if (data.province_id === "-1") { try { diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx index 363c85f..ca50d9c 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/MachinesReportsList.jsx @@ -60,7 +60,8 @@ const MachinesReportsList = ({ data, specialFilter }) => { }, ]; }, []); - + const cleanedData = specialFilter.filter((item) => !(item.id === "province_id" && item.value === "-1")); + const RowActionsWithRowData = (props) => ; return ( { enablePagination={false} specialFilter={specialFilter} enableRowActions - RowActions={RowActions} + RowActions={RowActionsWithRowData} /> ); 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 index 36d781a..d026fba 100644 --- 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 @@ -3,7 +3,7 @@ import { GET_MACHINE_MISSIONS_DETAILS } from "@/core/utils/routes"; import { Box } from "@mui/material"; import { useMemo } from "react"; -const MachineMissionsList = ({ row }) => { +const MachineMissionsList = ({ row, specialFilter }) => { const columns = useMemo( () => [ { @@ -91,6 +91,7 @@ const MachineMissionsList = ({ row }) => { <> { +const MachineMissionsDetailsTable = ({ row, setOpenMachineMissionsDetails, specialFilter }) => { return ( <> - + diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/index.jsx index f3ef62e..0ec167e 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/MissionDitails/index.jsx @@ -3,7 +3,7 @@ import { Dialog, DialogTitle, IconButton, Tooltip } from "@mui/material"; import { useState } from "react"; import MachineMissionsDetailsTable from "./Form"; -const MissionDetails = ({ row }) => { +const MissionDetails = ({ row, specialFilter }) => { const [openMachineMissionsDetails, setOpenMachineMissionsDetails] = useState(false); return ( @@ -36,6 +36,7 @@ const MissionDetails = ({ row }) => { ریز گزارشات خودرو {openMachineMissionsDetails && ( diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/index.jsx index 5cb6a4d..95b11aa 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/RowActions/index.jsx @@ -1,6 +1,6 @@ import MissionDetails from "./MissionDitails"; -const RowActions = ({ row }) => { - return ; +const RowActions = ({ row, specialFilter }) => { + return ; }; export default RowActions; diff --git a/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx b/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx index 655944d..af47ba9 100644 --- a/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx +++ b/src/components/dashboard/roadMissions/reports/machinesReports/index.jsx @@ -27,8 +27,8 @@ const MachinesReportsPage = () => { }; const defaultFilter = [ { value: `${defaultValues.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${defaultValues.from_date}`, datatype: "date", id: "from_date", fn: "between" }, - { value: `${defaultValues.date_to}`, datatype: "date", id: "date_to", fn: "between" }, + { value: `${defaultValues.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" }, + { value: `${defaultValues.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" }, ]; const [specialFilter, setSpecialFilter] = useState(defaultFilter); @@ -38,8 +38,8 @@ const MachinesReportsPage = () => { params.set("date_to", `${data.date_to} 23:59:59`); setSpecialFilter([ { value: `${data.province_id}`, datatype: "numeric", id: "province_id", fn: "equals" }, - { value: `${data.from_date}`, datatype: "date", id: "from_date", fn: "between" }, - { value: `${data.date_to}`, datatype: "date", id: "date_to", fn: "between" }, + { value: `${data.from_date} 00:00:00`, datatype: "date", id: "start_time", fn: "greaterThan" }, + { value: `${data.date_to} 23:59:59`, datatype: "date", id: "finish_time", fn: "lessThan" }, ]); if (data.province_id === "-1") { try { From 3745206604bbc58b3535701b08860d263a8aedef Mon Sep 17 00:00:00 2001 From: AminGhasempoor Date: Mon, 15 Jun 2026 15:01:34 +0330 Subject: [PATCH 3/3] build and format --- .../transportation/RowActions/RouteDetail/ShowRoute.jsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx b/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx index 3998a2f..b05cc6a 100644 --- a/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx +++ b/src/components/dashboard/roadMissions/transportation/RowActions/RouteDetail/ShowRoute.jsx @@ -44,7 +44,6 @@ const ShowRoute = ({ area }) => { const sourcePosition = coords[0]; const destPosition = coords[coords.length - 1]; - return ( <> {showRoute && }