datastake-daf 0.6.146 → 0.6.147
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/dist/components/index.js
CHANGED
|
@@ -19463,16 +19463,46 @@ const useGlobe = ({
|
|
|
19463
19463
|
if (instance) {
|
|
19464
19464
|
setMapRef(instance);
|
|
19465
19465
|
|
|
19466
|
-
// Add
|
|
19466
|
+
// Add comprehensive resize detection for Mapbox GL JS responsiveness
|
|
19467
19467
|
const handleResize = () => {
|
|
19468
19468
|
if (instance && instance.resize) {
|
|
19469
|
-
|
|
19469
|
+
// Add a small delay to ensure DOM has updated
|
|
19470
|
+
setTimeout(() => {
|
|
19471
|
+
instance.resize();
|
|
19472
|
+
}, 100);
|
|
19470
19473
|
}
|
|
19471
19474
|
};
|
|
19475
|
+
|
|
19476
|
+
// Listen to window resize
|
|
19472
19477
|
window.addEventListener('resize', handleResize);
|
|
19473
19478
|
|
|
19474
|
-
//
|
|
19479
|
+
// Listen to container size changes using ResizeObserver
|
|
19480
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
19481
|
+
handleResize();
|
|
19482
|
+
});
|
|
19483
|
+
if (container.current) {
|
|
19484
|
+
resizeObserver.observe(container.current);
|
|
19485
|
+
}
|
|
19486
|
+
|
|
19487
|
+
// Store handlers for cleanup
|
|
19475
19488
|
instance._resizeHandler = handleResize;
|
|
19489
|
+
instance._resizeObserver = resizeObserver;
|
|
19490
|
+
|
|
19491
|
+
// Add IntersectionObserver to detect when globe becomes visible (handles sidenav scenarios)
|
|
19492
|
+
const intersectionObserver = new IntersectionObserver(entries => {
|
|
19493
|
+
entries.forEach(entry => {
|
|
19494
|
+
if (entry.isIntersecting && instance && instance.resize) {
|
|
19495
|
+
// Globe container is visible, force resize after a delay
|
|
19496
|
+
setTimeout(() => {
|
|
19497
|
+
instance.resize();
|
|
19498
|
+
}, 200);
|
|
19499
|
+
}
|
|
19500
|
+
});
|
|
19501
|
+
});
|
|
19502
|
+
if (container.current) {
|
|
19503
|
+
intersectionObserver.observe(container.current);
|
|
19504
|
+
}
|
|
19505
|
+
instance._intersectionObserver = intersectionObserver;
|
|
19476
19506
|
} else {
|
|
19477
19507
|
console.log('❌ [GLOBE HOOK] Failed to create map instance');
|
|
19478
19508
|
}
|
|
@@ -19553,6 +19583,33 @@ const useGlobe = ({
|
|
|
19553
19583
|
addAllDataToMap();
|
|
19554
19584
|
}
|
|
19555
19585
|
}, [data, mapRef, initialMarkerSetIsDone]);
|
|
19586
|
+
|
|
19587
|
+
// Add effect to handle layout changes (like sidenav opening/closing)
|
|
19588
|
+
React.useEffect(() => {
|
|
19589
|
+
if (mapRef) {
|
|
19590
|
+
// Force resize when component becomes visible or layout changes
|
|
19591
|
+
const handleLayoutChange = () => {
|
|
19592
|
+
if (mapRef && mapRef.resize) {
|
|
19593
|
+
setTimeout(() => {
|
|
19594
|
+
mapRef.resize();
|
|
19595
|
+
}, 150);
|
|
19596
|
+
}
|
|
19597
|
+
};
|
|
19598
|
+
|
|
19599
|
+
// Listen for visibility changes
|
|
19600
|
+
document.addEventListener('visibilitychange', handleLayoutChange);
|
|
19601
|
+
|
|
19602
|
+
// Listen for focus events (when user returns to tab)
|
|
19603
|
+
window.addEventListener('focus', handleLayoutChange);
|
|
19604
|
+
|
|
19605
|
+
// Store handlers for cleanup
|
|
19606
|
+
mapRef._layoutChangeHandler = handleLayoutChange;
|
|
19607
|
+
return () => {
|
|
19608
|
+
document.removeEventListener('visibilitychange', handleLayoutChange);
|
|
19609
|
+
window.removeEventListener('focus', handleLayoutChange);
|
|
19610
|
+
};
|
|
19611
|
+
}
|
|
19612
|
+
}, [mapRef]);
|
|
19556
19613
|
React.useEffect(() => {
|
|
19557
19614
|
if (activeMarker && mapRef) {
|
|
19558
19615
|
const marker = mapMarkers.find(m => m.data === activeMarker);
|
|
@@ -19568,10 +19625,20 @@ const useGlobe = ({
|
|
|
19568
19625
|
return () => {
|
|
19569
19626
|
isMounted.current = false;
|
|
19570
19627
|
|
|
19571
|
-
// Cleanup window resize listener for Mapbox GL JS
|
|
19628
|
+
// Cleanup window resize listener and ResizeObserver for Mapbox GL JS
|
|
19572
19629
|
if (mapRef && mapRef._resizeHandler) {
|
|
19573
19630
|
window.removeEventListener('resize', mapRef._resizeHandler);
|
|
19574
19631
|
}
|
|
19632
|
+
if (mapRef && mapRef._resizeObserver) {
|
|
19633
|
+
mapRef._resizeObserver.disconnect();
|
|
19634
|
+
}
|
|
19635
|
+
if (mapRef && mapRef._layoutChangeHandler) {
|
|
19636
|
+
document.removeEventListener('visibilitychange', mapRef._layoutChangeHandler);
|
|
19637
|
+
window.removeEventListener('focus', mapRef._layoutChangeHandler);
|
|
19638
|
+
}
|
|
19639
|
+
if (mapRef && mapRef._intersectionObserver) {
|
|
19640
|
+
mapRef._intersectionObserver.disconnect();
|
|
19641
|
+
}
|
|
19575
19642
|
|
|
19576
19643
|
// Defer unmounting to avoid race conditions
|
|
19577
19644
|
const rootsToUnmount = [...roots.current];
|
|
@@ -19669,12 +19736,22 @@ const useGlobe = ({
|
|
|
19669
19736
|
}),
|
|
19670
19737
|
handler: moveDownHandler
|
|
19671
19738
|
}], [zoomHandler, zoomOutHandler, recenterMap, moveUpHandler, moveDownHandler]);
|
|
19739
|
+
|
|
19740
|
+
// Expose a manual resize method for external triggers
|
|
19741
|
+
const forceResize = React.useCallback(() => {
|
|
19742
|
+
if (mapRef && mapRef.resize) {
|
|
19743
|
+
setTimeout(() => {
|
|
19744
|
+
mapRef.resize();
|
|
19745
|
+
}, 100);
|
|
19746
|
+
}
|
|
19747
|
+
}, [mapRef]);
|
|
19672
19748
|
return {
|
|
19673
19749
|
container,
|
|
19674
19750
|
activeMarker,
|
|
19675
19751
|
mapOptionsButtonsConfig,
|
|
19676
19752
|
emptyStateIsVisible,
|
|
19677
|
-
setEmptyStateIsVisible
|
|
19753
|
+
setEmptyStateIsVisible,
|
|
19754
|
+
forceResize
|
|
19678
19755
|
};
|
|
19679
19756
|
};
|
|
19680
19757
|
|
|
@@ -19722,7 +19799,8 @@ function Globe(_ref) {
|
|
|
19722
19799
|
const {
|
|
19723
19800
|
container,
|
|
19724
19801
|
activeMarker,
|
|
19725
|
-
mapOptionsButtonsConfig
|
|
19802
|
+
mapOptionsButtonsConfig,
|
|
19803
|
+
forceResize
|
|
19726
19804
|
} = useGlobe({
|
|
19727
19805
|
data: mappedData,
|
|
19728
19806
|
user,
|
|
@@ -19749,6 +19827,17 @@ function Globe(_ref) {
|
|
|
19749
19827
|
React.useEffect(() => {
|
|
19750
19828
|
onRender === null || onRender === void 0 || onRender();
|
|
19751
19829
|
}, [onRender]);
|
|
19830
|
+
|
|
19831
|
+
// Force resize when component becomes visible (handles sidenav open/close scenarios)
|
|
19832
|
+
React.useEffect(() => {
|
|
19833
|
+
if (forceResize) {
|
|
19834
|
+
// Trigger resize after component mounts
|
|
19835
|
+
const timer = setTimeout(() => {
|
|
19836
|
+
forceResize();
|
|
19837
|
+
}, 300);
|
|
19838
|
+
return () => clearTimeout(timer);
|
|
19839
|
+
}
|
|
19840
|
+
}, [forceResize]);
|
|
19752
19841
|
return /*#__PURE__*/jsxRuntime.jsx(ComponentWithFocus, {
|
|
19753
19842
|
children: /*#__PURE__*/jsxRuntime.jsxs(Style$z, {
|
|
19754
19843
|
className: formatClassname([showSider && activeMarker && "with-sider"]),
|
package/package.json
CHANGED
|
@@ -466,17 +466,49 @@ export const useGlobe = ({
|
|
|
466
466
|
if (instance) {
|
|
467
467
|
setMapRef(instance);
|
|
468
468
|
|
|
469
|
-
// Add
|
|
469
|
+
// Add comprehensive resize detection for Mapbox GL JS responsiveness
|
|
470
470
|
const handleResize = () => {
|
|
471
471
|
if (instance && instance.resize) {
|
|
472
|
-
|
|
472
|
+
// Add a small delay to ensure DOM has updated
|
|
473
|
+
setTimeout(() => {
|
|
474
|
+
instance.resize();
|
|
475
|
+
}, 100);
|
|
473
476
|
}
|
|
474
477
|
};
|
|
475
478
|
|
|
479
|
+
// Listen to window resize
|
|
476
480
|
window.addEventListener('resize', handleResize);
|
|
477
481
|
|
|
478
|
-
//
|
|
482
|
+
// Listen to container size changes using ResizeObserver
|
|
483
|
+
const resizeObserver = new ResizeObserver(() => {
|
|
484
|
+
handleResize();
|
|
485
|
+
});
|
|
486
|
+
|
|
487
|
+
if (container.current) {
|
|
488
|
+
resizeObserver.observe(container.current);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
// Store handlers for cleanup
|
|
479
492
|
instance._resizeHandler = handleResize;
|
|
493
|
+
instance._resizeObserver = resizeObserver;
|
|
494
|
+
|
|
495
|
+
// Add IntersectionObserver to detect when globe becomes visible (handles sidenav scenarios)
|
|
496
|
+
const intersectionObserver = new IntersectionObserver((entries) => {
|
|
497
|
+
entries.forEach((entry) => {
|
|
498
|
+
if (entry.isIntersecting && instance && instance.resize) {
|
|
499
|
+
// Globe container is visible, force resize after a delay
|
|
500
|
+
setTimeout(() => {
|
|
501
|
+
instance.resize();
|
|
502
|
+
}, 200);
|
|
503
|
+
}
|
|
504
|
+
});
|
|
505
|
+
});
|
|
506
|
+
|
|
507
|
+
if (container.current) {
|
|
508
|
+
intersectionObserver.observe(container.current);
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
instance._intersectionObserver = intersectionObserver;
|
|
480
512
|
} else {
|
|
481
513
|
console.log('❌ [GLOBE HOOK] Failed to create map instance');
|
|
482
514
|
}
|
|
@@ -565,6 +597,34 @@ export const useGlobe = ({
|
|
|
565
597
|
}
|
|
566
598
|
}, [data, mapRef, initialMarkerSetIsDone]);
|
|
567
599
|
|
|
600
|
+
// Add effect to handle layout changes (like sidenav opening/closing)
|
|
601
|
+
useEffect(() => {
|
|
602
|
+
if (mapRef) {
|
|
603
|
+
// Force resize when component becomes visible or layout changes
|
|
604
|
+
const handleLayoutChange = () => {
|
|
605
|
+
if (mapRef && mapRef.resize) {
|
|
606
|
+
setTimeout(() => {
|
|
607
|
+
mapRef.resize();
|
|
608
|
+
}, 150);
|
|
609
|
+
}
|
|
610
|
+
};
|
|
611
|
+
|
|
612
|
+
// Listen for visibility changes
|
|
613
|
+
document.addEventListener('visibilitychange', handleLayoutChange);
|
|
614
|
+
|
|
615
|
+
// Listen for focus events (when user returns to tab)
|
|
616
|
+
window.addEventListener('focus', handleLayoutChange);
|
|
617
|
+
|
|
618
|
+
// Store handlers for cleanup
|
|
619
|
+
mapRef._layoutChangeHandler = handleLayoutChange;
|
|
620
|
+
|
|
621
|
+
return () => {
|
|
622
|
+
document.removeEventListener('visibilitychange', handleLayoutChange);
|
|
623
|
+
window.removeEventListener('focus', handleLayoutChange);
|
|
624
|
+
};
|
|
625
|
+
}
|
|
626
|
+
}, [mapRef]);
|
|
627
|
+
|
|
568
628
|
useEffect(() => {
|
|
569
629
|
if (activeMarker && mapRef) {
|
|
570
630
|
const marker = mapMarkers.find((m) => m.data === activeMarker);
|
|
@@ -580,11 +640,24 @@ export const useGlobe = ({
|
|
|
580
640
|
return () => {
|
|
581
641
|
isMounted.current = false;
|
|
582
642
|
|
|
583
|
-
// Cleanup window resize listener for Mapbox GL JS
|
|
643
|
+
// Cleanup window resize listener and ResizeObserver for Mapbox GL JS
|
|
584
644
|
if (mapRef && mapRef._resizeHandler) {
|
|
585
645
|
window.removeEventListener('resize', mapRef._resizeHandler);
|
|
586
646
|
}
|
|
587
647
|
|
|
648
|
+
if (mapRef && mapRef._resizeObserver) {
|
|
649
|
+
mapRef._resizeObserver.disconnect();
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
if (mapRef && mapRef._layoutChangeHandler) {
|
|
653
|
+
document.removeEventListener('visibilitychange', mapRef._layoutChangeHandler);
|
|
654
|
+
window.removeEventListener('focus', mapRef._layoutChangeHandler);
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
if (mapRef && mapRef._intersectionObserver) {
|
|
658
|
+
mapRef._intersectionObserver.disconnect();
|
|
659
|
+
}
|
|
660
|
+
|
|
588
661
|
// Defer unmounting to avoid race conditions
|
|
589
662
|
const rootsToUnmount = [...roots.current];
|
|
590
663
|
roots.current = [];
|
|
@@ -669,11 +742,21 @@ export const useGlobe = ({
|
|
|
669
742
|
[zoomHandler, zoomOutHandler, recenterMap, moveUpHandler, moveDownHandler],
|
|
670
743
|
);
|
|
671
744
|
|
|
745
|
+
// Expose a manual resize method for external triggers
|
|
746
|
+
const forceResize = useCallback(() => {
|
|
747
|
+
if (mapRef && mapRef.resize) {
|
|
748
|
+
setTimeout(() => {
|
|
749
|
+
mapRef.resize();
|
|
750
|
+
}, 100);
|
|
751
|
+
}
|
|
752
|
+
}, [mapRef]);
|
|
753
|
+
|
|
672
754
|
return {
|
|
673
755
|
container,
|
|
674
756
|
activeMarker,
|
|
675
757
|
mapOptionsButtonsConfig,
|
|
676
758
|
emptyStateIsVisible,
|
|
677
759
|
setEmptyStateIsVisible,
|
|
760
|
+
forceResize,
|
|
678
761
|
};
|
|
679
762
|
};
|
|
@@ -130,7 +130,7 @@ function Globe({
|
|
|
130
130
|
);
|
|
131
131
|
|
|
132
132
|
// Use custom hook to configure globe functionality
|
|
133
|
-
const { container, activeMarker, mapOptionsButtonsConfig } = useGlobe({
|
|
133
|
+
const { container, activeMarker, mapOptionsButtonsConfig, forceResize } = useGlobe({
|
|
134
134
|
data: mappedData,
|
|
135
135
|
user,
|
|
136
136
|
polygon,
|
|
@@ -159,6 +159,18 @@ function Globe({
|
|
|
159
159
|
onRender?.();
|
|
160
160
|
}, [onRender]);
|
|
161
161
|
|
|
162
|
+
// Force resize when component becomes visible (handles sidenav open/close scenarios)
|
|
163
|
+
useEffect(() => {
|
|
164
|
+
if (forceResize) {
|
|
165
|
+
// Trigger resize after component mounts
|
|
166
|
+
const timer = setTimeout(() => {
|
|
167
|
+
forceResize();
|
|
168
|
+
}, 300);
|
|
169
|
+
|
|
170
|
+
return () => clearTimeout(timer);
|
|
171
|
+
}
|
|
172
|
+
}, [forceResize]);
|
|
173
|
+
|
|
162
174
|
return (
|
|
163
175
|
<ComponentWithFocus>
|
|
164
176
|
<Style className={formatClassname([showSider && activeMarker && "with-sider"])}>
|