adt-js-components 1.10.0 → 1.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/Map/index.js +80 -17
package/package.json
CHANGED
package/src/Map/index.js
CHANGED
|
@@ -139,6 +139,7 @@ async function run(options) {
|
|
|
139
139
|
enableRectangleSelection(map, onSelectionChange, showSelectionOrder);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
+
/** @type {RouteSetting} */
|
|
142
143
|
const markerOptions = {};
|
|
143
144
|
const customMarkerOptions = {};
|
|
144
145
|
const normalImg = customMarkers.normal || markerImg;
|
|
@@ -346,11 +347,25 @@ function addMarkers(map, markers, options, selectedOptions, position, selectable
|
|
|
346
347
|
}
|
|
347
348
|
|
|
348
349
|
function checkAndApplyPreselection(map, markers, showSelectionOrder, onSelectionChange, selectable) {
|
|
349
|
-
if (
|
|
350
|
+
if (showSelectionOrder) {
|
|
350
351
|
applyPreselectedMarkers(map, markers, showSelectionOrder, onSelectionChange);
|
|
352
|
+
} else if (!selectable) {
|
|
353
|
+
applyPreselectedMarkersVisualOnly(map, markers);
|
|
351
354
|
}
|
|
352
355
|
}
|
|
353
356
|
|
|
357
|
+
function applyPreselectedMarkersVisualOnly(map, markersData) {
|
|
358
|
+
const markerMap = markerInstances.get(map);
|
|
359
|
+
const preselected = markersData.filter(m => m.selected === true);
|
|
360
|
+
|
|
361
|
+
preselected.forEach((markerData) => {
|
|
362
|
+
const markerInstance = markerMap.get(markerData.id);
|
|
363
|
+
if (markerInstance && markerInstance._selectedIcon) {
|
|
364
|
+
markerInstance.setIcon(markerInstance._selectedIcon);
|
|
365
|
+
}
|
|
366
|
+
});
|
|
367
|
+
}
|
|
368
|
+
|
|
354
369
|
function createMarker(marker, options, selectedOptions, cluster = null, selectable = false, onSelectionChange = null, map = null, showSelectionOrder = false, markerInfoCallback = null) {
|
|
355
370
|
const mapMarker = L.marker(marker.position, {...options, id: marker.id});
|
|
356
371
|
mapMarker._normalIcon = options.icon;
|
|
@@ -426,6 +441,11 @@ function createMarker(marker, options, selectedOptions, cluster = null, selectab
|
|
|
426
441
|
async function selectMarker(marker, map, showSelectionOrder) {
|
|
427
442
|
const selected = selectedMarkers.get(map);
|
|
428
443
|
const order = selectionOrder.get(map);
|
|
444
|
+
|
|
445
|
+
if (selected.has(marker.options.id)) {
|
|
446
|
+
return;
|
|
447
|
+
}
|
|
448
|
+
|
|
429
449
|
selected.add(marker.options.id);
|
|
430
450
|
const maxOrder = order.size > 0 ? Math.max(...order.values()) : 0;
|
|
431
451
|
const newOrder = maxOrder + 1;
|
|
@@ -512,21 +532,21 @@ async function createMarkerIcon(map, iconUrl, orderNumber, color = null) {
|
|
|
512
532
|
});
|
|
513
533
|
}
|
|
514
534
|
|
|
515
|
-
function applyPreselectedMarkers(map, markersData, showSelectionOrder, onSelectionChange) {
|
|
535
|
+
async function applyPreselectedMarkers(map, markersData, showSelectionOrder, onSelectionChange) {
|
|
516
536
|
const markerMap = markerInstances.get(map);
|
|
517
537
|
const order = selectionOrder.get(map);
|
|
518
538
|
const preselected = markersData
|
|
519
539
|
.filter(m => m.selected === true)
|
|
520
540
|
.sort((a, b) => (a.selectionOrder || 0) - (b.selectionOrder || 0));
|
|
521
541
|
|
|
522
|
-
|
|
542
|
+
for (const markerData of preselected) {
|
|
523
543
|
const markerInstance = markerMap.get(markerData.id);
|
|
524
544
|
if (markerInstance) {
|
|
525
|
-
selectMarker(markerInstance, map, showSelectionOrder);
|
|
545
|
+
await selectMarker(markerInstance, map, showSelectionOrder);
|
|
526
546
|
} else {
|
|
527
547
|
console.warn('Marker instance NOT found for ID:', markerData.id);
|
|
528
548
|
}
|
|
529
|
-
}
|
|
549
|
+
}
|
|
530
550
|
|
|
531
551
|
if (onSelectionChange && window[onSelectionChange] && order.size > 0) {
|
|
532
552
|
const orderedIds = Array.from(order.entries()).sort((a, b) => a[1] - b[1]).map(e => e[0]);
|
|
@@ -534,7 +554,8 @@ function applyPreselectedMarkers(map, markersData, showSelectionOrder, onSelecti
|
|
|
534
554
|
}
|
|
535
555
|
|
|
536
556
|
const settings = routeSettingsMap.get(map);
|
|
537
|
-
|
|
557
|
+
const hasDepot = settings?.startPoint !== null && settings?.startPoint !== undefined || settings?.endPoint !== null && settings?.endPoint !== undefined;
|
|
558
|
+
if (settings && settings.enabled && order.size >= (hasDepot ? 1 : 2)) {
|
|
538
559
|
calculateRoute(map);
|
|
539
560
|
}
|
|
540
561
|
}
|
|
@@ -568,7 +589,7 @@ async function calculateRoute(map) {
|
|
|
568
589
|
const orderedIds = Array.from(order.entries()).sort((a, b) => a[1] - b[1]).map(e => e[0]);
|
|
569
590
|
const routeMarkers = orderedIds.map(id => markers.find(m => m.id === id)).filter(m => m !== undefined);
|
|
570
591
|
|
|
571
|
-
if (routeMarkers.length < 2) return;
|
|
592
|
+
if (routeMarkers.length < (hasCustomStart || hasCustomEnd ? 1 : 2)) return;
|
|
572
593
|
|
|
573
594
|
const beforeCallback = onBeforeRouteCalculationMap.get(map);
|
|
574
595
|
if (beforeCallback && window[beforeCallback]) {
|
|
@@ -586,7 +607,7 @@ async function calculateRoute(map) {
|
|
|
586
607
|
if (isHere) {
|
|
587
608
|
await calculateRouteHere({ routeMarkers, startPoint, endPoint, routeSettings, allCoords, allParts });
|
|
588
609
|
} else {
|
|
589
|
-
await
|
|
610
|
+
await calculateRouteMapyCz({ routeMarkers, startPoint, endPoint, routeSettings, allCoords, allParts });
|
|
590
611
|
}
|
|
591
612
|
} catch (error) {
|
|
592
613
|
console.error('Error calculating route:', error);
|
|
@@ -604,6 +625,7 @@ async function calculateRoute(map) {
|
|
|
604
625
|
opacity: routeSettings.opacity
|
|
605
626
|
}).addTo(map);
|
|
606
627
|
routePolylines.set(map, polyline);
|
|
628
|
+
map.fitBounds(polyline.getBounds(), { padding: [32, 32] });
|
|
607
629
|
}
|
|
608
630
|
|
|
609
631
|
const totalDuration = allParts.reduce((s, p) => s + (p.duration || 0), 0);
|
|
@@ -622,7 +644,7 @@ async function calculateRoute(map) {
|
|
|
622
644
|
}
|
|
623
645
|
}
|
|
624
646
|
|
|
625
|
-
async function
|
|
647
|
+
async function calculateRouteMapyCz({ routeMarkers, startPoint, endPoint, routeSettings, allCoords, allParts }) {
|
|
626
648
|
const WAYPOINTS_LIMIT = 15;
|
|
627
649
|
|
|
628
650
|
const chunks = [];
|
|
@@ -738,7 +760,7 @@ function clearSelection(mapElement) {
|
|
|
738
760
|
order.clear();
|
|
739
761
|
}
|
|
740
762
|
|
|
741
|
-
function toggleMarker(mapElement, markerId, selected) {
|
|
763
|
+
async function toggleMarker(mapElement, markerId, selected, recalculate = true) {
|
|
742
764
|
const map = mapInstances.get(mapElement);
|
|
743
765
|
const markers = markerInstances.get(map);
|
|
744
766
|
const marker = markers?.get(markerId);
|
|
@@ -748,7 +770,7 @@ function toggleMarker(mapElement, markerId, selected) {
|
|
|
748
770
|
const isSelected = selectedSet.has(markerId);
|
|
749
771
|
|
|
750
772
|
if (selected && !isSelected) {
|
|
751
|
-
selectMarker(marker, map, true);
|
|
773
|
+
await selectMarker(marker, map, true);
|
|
752
774
|
} else if (!selected && isSelected) {
|
|
753
775
|
deselectMarker(marker, map, true);
|
|
754
776
|
} else {
|
|
@@ -761,7 +783,7 @@ function toggleMarker(mapElement, markerId, selected) {
|
|
|
761
783
|
}
|
|
762
784
|
|
|
763
785
|
const settings = routeSettingsMap.get(map);
|
|
764
|
-
if (settings && settings.enabled) {
|
|
786
|
+
if (recalculate && settings && settings.enabled) {
|
|
765
787
|
calculateRoute(map);
|
|
766
788
|
}
|
|
767
789
|
}
|
|
@@ -793,13 +815,51 @@ function onAfterRouteCalculation(mapElement, callbackName) {
|
|
|
793
815
|
|
|
794
816
|
function recalculateRoute(mapElement) {
|
|
795
817
|
const map = mapInstances.get(mapElement);
|
|
818
|
+
|
|
796
819
|
if (!map) return;
|
|
820
|
+
|
|
797
821
|
calculateRoute(map);
|
|
798
822
|
}
|
|
799
823
|
|
|
824
|
+
function removeMarker(mapElement, markerId) {
|
|
825
|
+
const map = mapInstances.get(mapElement);
|
|
826
|
+
if (!map) return;
|
|
800
827
|
|
|
801
|
-
|
|
828
|
+
const markers = markerInstances.get(map);
|
|
829
|
+
const marker = markers?.get(markerId);
|
|
830
|
+
if (!marker) return;
|
|
831
|
+
|
|
832
|
+
const cluster = markerClusters.get(map);
|
|
833
|
+
if (cluster) {
|
|
834
|
+
cluster.removeLayer(marker);
|
|
835
|
+
} else {
|
|
836
|
+
map.removeLayer(marker);
|
|
837
|
+
}
|
|
838
|
+
|
|
839
|
+
markers.delete(markerId);
|
|
840
|
+
|
|
841
|
+
const selected = selectedMarkers.get(map);
|
|
842
|
+
const order = selectionOrder.get(map);
|
|
843
|
+
if (selected.has(markerId)) {
|
|
844
|
+
const removedOrder = order.get(markerId);
|
|
845
|
+
selected.delete(markerId);
|
|
846
|
+
order.delete(markerId);
|
|
847
|
+
order.forEach((value, key) => { if (value > removedOrder) order.set(key, value - 1); });
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
const markersData = markersDataMap.get(map);
|
|
851
|
+
const idx = markersData.findIndex(m => m.id === markerId);
|
|
852
|
+
if (idx !== -1) markersData.splice(idx, 1);
|
|
853
|
+
|
|
854
|
+
const settings = routeSettingsMap.get(map);
|
|
855
|
+
if (settings?.enabled) {
|
|
856
|
+
calculateRoute(map);
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
function addMarkerAndSelect(mapElement, markerData, recalculate = true) {
|
|
802
861
|
const map = mapInstances.get(mapElement);
|
|
862
|
+
|
|
803
863
|
if (!map) return;
|
|
804
864
|
|
|
805
865
|
const markers = markerInstances.get(map);
|
|
@@ -841,13 +901,15 @@ function addMarkerAndSelect(mapElement, markerData) {
|
|
|
841
901
|
};
|
|
842
902
|
};
|
|
843
903
|
|
|
844
|
-
loadSelectedIcon((selectedIcon) => {
|
|
904
|
+
loadSelectedIcon(async (selectedIcon) => {
|
|
905
|
+
const mapConfig = JSON.parse(mapElement.dataset.adtMap ?? '{}');
|
|
906
|
+
const selectable = mapConfig.selectable ?? false;
|
|
845
907
|
const newMarker = createMarker(
|
|
846
908
|
markerData,
|
|
847
909
|
{ icon: normalIcon },
|
|
848
910
|
{ icon: selectedIcon },
|
|
849
911
|
cluster || null,
|
|
850
|
-
|
|
912
|
+
selectable,
|
|
851
913
|
onSelectionChangeMap.get(map),
|
|
852
914
|
map,
|
|
853
915
|
true,
|
|
@@ -859,9 +921,9 @@ function addMarkerAndSelect(mapElement, markerData) {
|
|
|
859
921
|
}
|
|
860
922
|
|
|
861
923
|
markersData.push(markerData);
|
|
862
|
-
selectMarker(newMarker, map, true);
|
|
924
|
+
await selectMarker(newMarker, map, true);
|
|
863
925
|
|
|
864
|
-
if (routeSettings?.enabled) {
|
|
926
|
+
if (recalculate && routeSettings?.enabled) {
|
|
865
927
|
calculateRoute(map);
|
|
866
928
|
}
|
|
867
929
|
});
|
|
@@ -877,4 +939,5 @@ export default {
|
|
|
877
939
|
onAfterRouteCalculation,
|
|
878
940
|
recalculateRoute,
|
|
879
941
|
addMarkerAndSelect,
|
|
942
|
+
removeMarker,
|
|
880
943
|
}
|