From dc8680d977e090bbbbf39b1e508242e42f4b855f Mon Sep 17 00:00:00 2001 From: joshikannan Date: Wed, 10 Apr 2024 19:50:40 +0530 Subject: [PATCH] createorder --- package-lock.json | 49 ++++ package.json | 2 + src/pages/nearle/orders/createorder1.js | 298 ++++++++++++++-------- src/pages/nearle/reports/mapWithRoute.js | 75 ++++++ src/pages/nearle/reports/ordersDetails.js | 94 ++++++- yarn.lock | 17 ++ 6 files changed, 419 insertions(+), 116 deletions(-) create mode 100644 src/pages/nearle/reports/mapWithRoute.js diff --git a/package-lock.json b/package-lock.json index 4209b7b..27475a8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -34,6 +34,7 @@ "geolib": "^3.3.4", "jsonwebtoken": "^9.0.0", "jwt-decode": "^3.1.2", + "leaflet": "^1.9.4", "lodash": "^4.17.21", "mui-daterange-picker": "^1.0.5", "notistack": "^3.0.1", @@ -50,6 +51,7 @@ "react-google-autocomplete": "^2.7.3", "react-icons": "^4.12.0", "react-intl": "^6.4.1", + "react-leaflet": "^4.2.1", "react-loading-icons": "^1.1.0", "react-phone-number-input": "^3.3.10", "react-redux": "^8.0.5", @@ -4109,6 +4111,16 @@ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" }, + "node_modules/@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/@reduxjs/toolkit": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", @@ -13458,6 +13470,11 @@ "language-subtag-registry": "~0.3.2" } }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -16944,6 +16961,19 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "node_modules/react-leaflet": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", + "dependencies": { + "@react-leaflet/core": "^2.1.0" + }, + "peerDependencies": { + "leaflet": "^1.9.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + } + }, "node_modules/react-loading-icons": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-loading-icons/-/react-loading-icons-1.1.0.tgz", @@ -23201,6 +23231,12 @@ "resolved": "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz", "integrity": "sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA==" }, + "@react-leaflet/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz", + "integrity": "sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==", + "requires": {} + }, "@reduxjs/toolkit": { "version": "1.9.5", "resolved": "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz", @@ -30032,6 +30068,11 @@ "language-subtag-registry": "~0.3.2" } }, + "leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==" + }, "leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -32350,6 +32391,14 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==" }, + "react-leaflet": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz", + "integrity": "sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q==", + "requires": { + "@react-leaflet/core": "^2.1.0" + } + }, "react-loading-icons": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/react-loading-icons/-/react-loading-icons-1.1.0.tgz", diff --git a/package.json b/package.json index 40135cc..f69a7ab 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "geolib": "^3.3.4", "jsonwebtoken": "^9.0.0", "jwt-decode": "^3.1.2", + "leaflet": "^1.9.4", "lodash": "^4.17.21", "mui-daterange-picker": "^1.0.5", "notistack": "^3.0.1", @@ -45,6 +46,7 @@ "react-google-autocomplete": "^2.7.3", "react-icons": "^4.12.0", "react-intl": "^6.4.1", + "react-leaflet": "^4.2.1", "react-loading-icons": "^1.1.0", "react-phone-number-input": "^3.3.10", "react-redux": "^8.0.5", diff --git a/src/pages/nearle/orders/createorder1.js b/src/pages/nearle/orders/createorder1.js index 715927e..0851456 100644 --- a/src/pages/nearle/orders/createorder1.js +++ b/src/pages/nearle/orders/createorder1.js @@ -29,7 +29,9 @@ import { Switch, CardHeader, Card, - OutlinedInput + OutlinedInput, + FormGroup, + FormControlLabel } from '@mui/material'; import CloseIcon from '@mui/icons-material/Close'; import { Empty } from 'antd'; @@ -387,6 +389,7 @@ const Createorder1 = () => { const [stafflist, setStafflist] = useState([]); const [loading2, setLoading2] = useState(false); const [loading, setLoading] = useState(false); + const [btnLoading, setBtnLoading] = useState(false); const [shiftarr, setShiftarr] = useState([]); const [shiftarr1, setShiftarr1] = useState([]); const [orderarr, setOrderarr] = useState([]); @@ -433,6 +436,14 @@ const Createorder1 = () => { const [appLocaLat, setAppLocaLat] = useState(); const [appLocaLng, setAppLocaLng] = useState(); const [appLocaRadius, setAppLocaRadius] = useState(); + const [isNumChange1, setIsNumChange1] = useState(0); + const [isNumChange2, setIsNumChange2] = useState(0); + const [showCheck1, setShowCheck1] = useState(0); + const [showCheck2, setShowCheck2] = useState(0); + const [pickNum, setPickNum] = useState(); + const [dropNum, setdropNum] = useState(); + const [numErr1, setNumErr1] = useState(false); + const [numErr2, setNumErr2] = useState(false); const [isSms, setIsSms] = useState(0); useEffect(() => { @@ -801,13 +812,13 @@ const Createorder1 = () => { cancellled: '', categoryid: +tenant.categoryid, configid: +localStorage.getItem('configid'), - customerid: +pickCust.customerid || 0, + customerid: isNumChange1 == 0 ? +pickCust.customerid || 0 : 0, deliveryaddress: dropCust.address || '', deliverycharge: +totalCharge.toFixed(2) || 0, deliverycity: dropCust.city || '', deliverycontactno: dropCust.contactno || '', deliverycustomer: dropCust.firstname || '', - deliveryid: dropCust.customerid || 0, + deliveryid: isNumChange2 == 0 ? +dropCust.customerid || 0 : 0, deliverylandmark: dropCust.landmark || '', deliverylat: dropCust.latitude.toString(), deliverylocation: dropCust.suburb || '', @@ -859,7 +870,7 @@ const Createorder1 = () => { configid: parseInt(localStorage.getItem('configid')), contactno: pickCust.contactno || '', customertoken: '', - customerid: pickCust.customerid || 0, + customerid: isNumChange1 == 0 ? pickCust.customerid || 0 : 0, devicetype: '', deviceid: '', dialcode: '+91', @@ -885,7 +896,7 @@ const Createorder1 = () => { configid: parseInt(localStorage.getItem('configid')), contactno: dropCust.contactno || '', customertoken: '', - customerid: dropCust.customerid || 0, + customerid: isNumChange2 == 0 ? dropCust.customerid || 0 : 0, devicetype: '', deviceid: '', dialcode: '+91', @@ -906,33 +917,37 @@ const Createorder1 = () => { }; console.log('createsubmitobj2', arr); if (!pickCust.firstname) { - opentoast('Enter Pickup Contact Name ', 'warning'); + opentoast('Enter Pickup Contact Name ', 'warning', 2000); } else if (!pickCust.contactno) { - opentoast('Enter Pickup Contact Number ', 'warning'); + opentoast('Enter Pickup Contact Number ', 'warning', 2000); + } else if (pickCust.contactno.length != 10) { + opentoast('Check Pickup Contact Number ', 'error', 2000); } else if (!pickCust.suburb) { - opentoast('Enter Pickup Location ', 'warning'); + opentoast('Enter Pickup Location ', 'warning', 2000); } else if (!pickCust.city) { - opentoast('Enter Pickup City ', 'warning'); + opentoast('Enter Pickup City ', 'warning', 2000); } else if (!pickCust.postcode) { - opentoast('Enter Pickup Postcode ', 'warning'); + opentoast('Enter Pickup Postcode ', 'warning', 2000); } else if (!pickCust.landmark) { - opentoast('Enter Pickup Landmark ', 'warning'); + opentoast('Enter Pickup Landmark ', 'warning', 2000); } else if (!dropCust.firstname) { - opentoast('Enter Drop Contact Name ', 'warning'); + opentoast('Enter Drop Contact Name ', 'warning', 2000); } else if (!dropCust.contactno) { - opentoast('Enter Drop Contact Number', 'warning'); + opentoast('Enter Drop Contact Number', 'warning', 2000); + } else if (dropCust.contactno.length !== 10) { + opentoast('Check Drop Contact Number ', 'error', 2000); } else if (!dropCust.suburb) { - opentoast('Enter Drop Suburb ', 'warning'); + opentoast('Enter Drop Suburb ', 'warning', 2000); } else if (!dropCust.city) { - opentoast('Enter Drop City ', 'warning'); + opentoast('Enter Drop City ', 'warning', 2000); } else if (!dropCust.postcode) { - opentoast('Enter Drop postcode ', 'warning'); + opentoast('Enter Drop postcode ', 'warning', 2000); } else if (!dropCust.landmark) { - opentoast('Enter Drop Landmark ', 'warning'); + opentoast('Enter Drop Landmark ', 'warning', 2000); } else if (!selectedtime) { - opentoast('Choose deliverytime ', 'warning'); + opentoast('Choose deliverytime ', 'warning', 2000); } else if (!setSubCatId) { - opentoast('Choose SubCategory ', 'warning'); + opentoast('Choose SubCategory ', 'warning', 2000); } else { try { const createRes = await axios.post(`${process.env.REACT_APP_URL2}/orders/createorder`, arr); @@ -1392,7 +1407,7 @@ const Createorder1 = () => { setIsCustomerOpen(true); setpickordrop(1); setPickCust({}); - setAddId1(1); + setInputValue2(''); setSearchCustList(''); } @@ -1464,32 +1479,6 @@ const Createorder1 = () => { - {/* ====================================== ||Contact Number(pick) || ====================================== */} - - - - - ) - }} - variant="outlined" - label="Contact Number" - value={pickCust.contactno} - onChange={(e) => { - if (e.target.value.length <= 10) { - setPickCust({ ...pickCust, contactno: e.target.value }); - } - }} - /> - {/* ====================================== ||Contact Name (pick) || ====================================== */} { }} /> - + {/* ====================================== ||Contact Number(pick) || ====================================== */} + + + + + ) + }} + variant="outlined" + label="Contact Number" + value={pickCust.contactno} + onChange={(e) => { + if (e.target.value.length <= 10) { + setPickCust({ ...pickCust, contactno: e.target.value }); + } + if (pickNum == e.target.value) { + setShowCheck1(0); + } else { + setShowCheck1(1); + } + if (e.target.value.length < 10) { + setNumErr1(true); + } else { + setNumErr1(false); + } + }} + /> + {/* ====================================== || Address (pick) || ====================================== */} - {addId1 == 0 ? ( @@ -1691,6 +1715,24 @@ const Createorder1 = () => { }} /> + {/* ====================================== ||Checkbox save for later (pick) || ====================================== */} + {showCheck1 == 1 && ( + + + { + setIsNumChange1(e.target.checked ? 1 : 0); + }} + /> + } + label="Save For Later" + /> + + + )} {/* { } else { setIsCustomerOpen(true); setpickordrop(2); - setAddId2(1); + setInputValue3(''); setSearchCustList(''); } @@ -1831,29 +1873,6 @@ const Createorder1 = () => { - {/* ====================================== ||Contact Number (drop) || ====================================== */} - - - - - ) - }} - value={dropCust.contactno} - onChange={(e) => { - if (e.target.value.length <= 10) { - setDropCust({ ...dropCust, contactno: e.target.value }); - } - }} - /> - {/* ====================================== ||Contact Name (drop) || ====================================== */} { }} /> - + {/* ====================================== ||Contact Number (drop) || ====================================== */} + + + + + ) + }} + value={dropCust.contactno} + onChange={(e) => { + if (e.target.value.length <= 10) { + setDropCust({ ...dropCust, contactno: e.target.value }); + } + if (dropNum == e.target.value) { + setShowCheck2(0); + } else { + setShowCheck2(1); + } + if (e.target.value.length < 10) { + setNumErr2(true); + } else { + setNumErr2(false); + } + }} + /> + {addId2 == 0 ? ( @@ -2054,6 +2106,24 @@ const Createorder1 = () => { }} /> + {/* ====================================== ||Checkbox save for later (drop) || ====================================== */} + {showCheck2 == 1 && ( + + + { + setIsNumChange2(e.target.checked ? 1 : 0); + }} + /> + } + label="Save For Later" + /> + + + )} {/* { {/* ================================================= || Time || ================================================= */} - + Date @@ -2185,46 +2255,36 @@ const Createorder1 = () => { - + {showDistance && ( - Distance - - Charges )} - - SMS Delivery - { - setIsSms(e.target.checked ? 1 : 0); + + Category + `${option.subcategoryname}` || ''} + sx={{ my: 2, zIndex: '100' }} + fullWidth + renderInput={(params) => } + onChange={(event, value, reason) => { + if (value) { + console.log(value); + setSubCatName(value.subcategoryname); + setSubCatId(value.subcategoryid); + } }} /> - Category - `${option.subcategoryname}` || ''} - sx={{ my: 2, zIndex: '100' }} - fullWidth - renderInput={(params) => } - onChange={(event, value, reason) => { - if (value) { - console.log(value); - setSubCatName(value.subcategoryname); - setSubCatId(value.subcategoryid); - } - }} - /> Weight { }} /> + + SMS Delivery + { + setIsSms(e.target.checked ? 1 : 0); + }} + /> + @@ -2284,24 +2353,26 @@ const Createorder1 = () => { @@ -2429,13 +2500,16 @@ const Createorder1 = () => { setIsCustomerOpen(false); if (pickordrop === 1) { console.log('PickupClient', address); - + setAddId1(1); setStartPoint({ latitude: address.latitude, longitude: address.longitude }); setPickCust(address); + setPickNum(address.contactno); } else { console.log('DropClient', address); - setDropCust(address); + setAddId2(1); setEndPoint({ latitude: address.latitude, longitude: address.longitude }); + setDropCust(address); + setdropNum(address.contactno); } }} disabled={pickCust.customerid === address.customerid} diff --git a/src/pages/nearle/reports/mapWithRoute.js b/src/pages/nearle/reports/mapWithRoute.js new file mode 100644 index 0000000..edef456 --- /dev/null +++ b/src/pages/nearle/reports/mapWithRoute.js @@ -0,0 +1,75 @@ +import React, { useEffect, useRef } from 'react'; +import { MapContainer, TileLayer, Marker, Popup, Polyline, Tooltip } from 'react-leaflet'; +import dayjs from 'dayjs'; +var utc = require('dayjs/plugin/utc'); +dayjs.extend(utc); + +const MapWithRoute = ({ coordinates, additionalProps }) => { + console.log(additionalProps.riderStart); + console.log(additionalProps.riderEnd); + const mapRef = useRef(null); + + useEffect(() => { + if (mapRef.current && coordinates.length > 0) { + const bounds = calculateBounds(coordinates); + mapRef.current.fitBounds(bounds); + } + }, [coordinates]); + + const calculateBounds = (coords) => { + const latitudes = coords.map((coord) => coord.lat); + const longitudes = coords.map((coord) => coord.lng); + const minLat = Math.min(...latitudes); + const maxLat = Math.max(...latitudes); + const minLng = Math.min(...longitudes); + const maxLng = Math.max(...longitudes); + return [ + [minLat, minLng], + [maxLat, maxLng] + ]; + }; + + const limeOptions = { color: 'blue', weight: 10 }; + const length = coordinates.length; + const midlenght = Math.round(coordinates.length / 2); + const start = coordinates[0]; + const end = coordinates[length - 1]; + const center = coordinates[midlenght]; + + return ( + coordinates && + coordinates.length > 0 && ( +
+ + + + + {`Pickup Point: ${dayjs(additionalProps.riderStart).utc().format('DD-MM-YYYY')} (${dayjs(additionalProps.riderStart) + .utc() + .format('hh:mm A')})`} + + {/* {`Pickup Point ${dayjs(additionalProps.riderStart).utc().format('DD-MM-YYYY')} (${dayjs(additionalProps.riderStart) + .utc() + .format('hh:mm A')}) `} */} + + + + {`Drop Point: ${dayjs(additionalProps.riderEnd).utc().format('DD-MM-YYYY')} (${dayjs(additionalProps.riderEnd) + .utc() + .format('hh:mm A')})`} + + {/* {`Drop Point ${dayjs(additionalProps.riderEnd).utc().format('DD-MM-YYYY')} (${dayjs(additionalProps.riderEnd) + .utc() + .format('hh:mm A')}) `} */} + + {/* + Center Point + */} + + +
+ ) + ); +}; + +export default MapWithRoute; diff --git a/src/pages/nearle/reports/ordersDetails.js b/src/pages/nearle/reports/ordersDetails.js index 33ddb7b..684cb9a 100644 --- a/src/pages/nearle/reports/ordersDetails.js +++ b/src/pages/nearle/reports/ordersDetails.js @@ -7,6 +7,9 @@ import { Empty } from 'antd'; import ClearIcon from '@mui/icons-material/Clear'; import { TableVirtuoso } from 'react-virtuoso'; import { useTheme } from '@mui/material/styles'; +import { SlLocationPin } from 'react-icons/sl'; +import MapWithRoute from './mapWithRoute'; +import { enqueueSnackbar } from 'notistack'; // material-ui import { @@ -107,6 +110,12 @@ const headCells = [ disablePadding: false, label: '#' }, + // { + // id: 'map', + // disablePadding: false, + // label: '^' + // }, + { id: 'tenantname', disablePadding: false, @@ -196,6 +205,8 @@ export default function ordersDetails() { const [startdate, setStartdate] = useState(dayjs().format('YYYY-MM-DD')); const [enddate, setEnddate] = useState(dayjs().format('YYYY-MM-DD')); const [open, setOpen] = useState(false); + const [open1, setOpen1] = useState(false); + const [dateselect, setDateselect] = useState('select'); const [tabstatus1, setTabstatus1] = useState('Today'); const [datestatus, setDatestatus] = useState('Today'); @@ -211,6 +222,38 @@ export default function ordersDetails() { const [searchword, setSearchword] = useState(''); const [count, setCount] = useState(0); const theme = useTheme(); + const [riderCoordinates, setRiderCoordinates] = useState([]); + const [riderStart, setRiderStart] = useState(); + const [riderEnd, setRiderEnd] = useState(); + + const getdeliverylogs = async (id) => { + console.log('deliveryid', id); + try { + const res = await axios.get(`${process.env.REACT_APP_URL}/deliveries/getdeliverylogs/?deliveryid=${id}`); + console.log('getdeliverylogs', res.data.details); + const datas = res.data.details; + if (datas.length != 0) { + setRiderStart(datas[0].logdate); + setRiderEnd(datas[datas.length - 1].logdate); + const coData = datas.map((data) => ({ lat: data.latitude, lng: data.longitude })); + console.log('coData', coData); + setRiderCoordinates(coData); + setOpen1(true); + } else { + opentoast('No Logs Found ', 'error', 2000); + } + } catch (error) { + console.log('getdeliverylogs', error); + } + }; + + const opentoast = (message, variant, time) => { + enqueueSnackbar(message, { + variant: variant, + anchorOrigin: { vertical: 'top', horizontal: 'right' }, + autoHideDuration: time ? time : 1500 + }); + }; // ==============================|| textFieldRef (cmd+k)||============================== // useEffect(() => { @@ -424,7 +467,6 @@ export default function ordersDetails() { return ( <> - @@ -664,7 +706,8 @@ export default function ordersDetails() { if (typeof row === 'number') return null; const isItemSelected = isSelected(row.name); const labelId = `enhanced-table-checkbox-${index}`; - console.log('rows.length', rows.length); + // console.log('rows.length', rows.length); + console.log('filteredOrders', filteredOrders); return ( filteredOrders.length !== 0 && ( */} {index + 1} - + {/* { + console.log('row', row); + getdeliverylogs(row.deliveryid); + }} + > + {} + */}
+ {/* ========================================= || MapWithRoute || ========================================= */} + {/* { + setOpen1(false); + }} + maxWidth={'lg'} + fullWidth + > + + Rider Route + + + {riderCoordinates && ( +
+ +
+ )} +
*/} ); } diff --git a/yarn.lock b/yarn.lock index c1ad203..6f70c5a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2069,6 +2069,11 @@ resolved "https://registry.npmjs.org/@react-dnd/shallowequal/-/shallowequal-4.0.2.tgz" integrity sha512-/RVXdLvJxLg4QKvMoM5WlwNR9ViO9z8B/qPcc+C0Sa/teJY7QG7kJ441DwzOjMYEY7GmU4dj5EcGHIkKZiQZCA== +"@react-leaflet/core@^2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz" + integrity sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg== + "@reduxjs/toolkit@^1.9.5": version "1.9.5" resolved "https://registry.npmjs.org/@reduxjs/toolkit/-/toolkit-1.9.5.tgz" @@ -7221,6 +7226,11 @@ language-tags@=1.0.5: dependencies: language-subtag-registry "~0.3.2" +leaflet@^1.9.0, leaflet@^1.9.4: + version "1.9.4" + resolved "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz" + integrity sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA== + leven@^3.1.0: version "3.1.0" resolved "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz" @@ -9255,6 +9265,13 @@ react-is@^18.2.0: resolved "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" integrity sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== +react-leaflet@^4.2.1: + version "4.2.1" + resolved "https://registry.npmjs.org/react-leaflet/-/react-leaflet-4.2.1.tgz" + integrity sha512-p9chkvhcKrWn/H/1FFeVSqLdReGwn2qmiobOQGO3BifX+/vV/39qhY8dGqbdcPh1e6jxh/QHriLXr7a4eLFK4Q== + dependencies: + "@react-leaflet/core" "^2.1.0" + react-loading-icons@^1.1.0: version "1.1.0" resolved "https://registry.npmjs.org/react-loading-icons/-/react-loading-icons-1.1.0.tgz"