DebasishDhal99 commited on
Commit
f86d829
·
1 Parent(s): 8db209d

Add slider to control zoom delay seconds in exploration mode

Browse files

- User controls zoom delay duration (0-5 sec, with step of 1)
- If delay>0, use `flyToBounds`, else use `fitBounds`

Files changed (1) hide show
  1. frontend/src/components/Map.js +36 -7
frontend/src/components/Map.js CHANGED
@@ -90,9 +90,10 @@ const Map = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmitt
90
  const [explorationMarkers, setExplorationMarkers] = useState([]);
91
  const [explorationSidebarOpen, setExplorationSidebarOpen] = useState(false);
92
  const [shouldZoom, setShouldZoom] = useState(false);
 
93
 
94
  // Using CenterMap component to handle centering (for summary/full apis) and for zooming (for wiki/nearby api)
95
- const CenterMap = ({ position, coordinates, shouldZoom, setShouldZoom }) => {
96
  const map = useMap();
97
  useEffect(() => {
98
  if (position && Array.isArray(position) && position.length === 2) {
@@ -104,14 +105,22 @@ const Map = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmitt
104
  useEffect(() => {
105
  if (coordinates && Array.isArray(coordinates) && coordinates.length > 1 && shouldZoom) {
106
  const bounds = L.latLngBounds(coordinates);
107
- map.flyToBounds(bounds, {
108
- padding: [50, 50],
109
- maxZoom: 16,
110
- duration: 3
111
- });
 
 
 
 
 
 
 
 
112
  setShouldZoom(false);
113
  }
114
- }, [coordinates, map, shouldZoom, setShouldZoom]);
115
 
116
  return null;
117
  };
@@ -616,6 +625,7 @@ const Map = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmitt
616
  coordinates={explorationMarkers.map((marker) => marker.position)}
617
  shouldZoom={shouldZoom}
618
  setShouldZoom={setShouldZoom}
 
619
  />
620
  {baseLayer === "satellite" && (
621
  <>
@@ -1042,6 +1052,25 @@ const Map = ( { onMapClick, searchQuery, contentType, setSearchQuery, setSubmitt
1042
  </div>
1043
  </div>
1044
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1045
  <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
1046
  <input
1047
  type="checkbox"
 
90
  const [explorationMarkers, setExplorationMarkers] = useState([]);
91
  const [explorationSidebarOpen, setExplorationSidebarOpen] = useState(false);
92
  const [shouldZoom, setShouldZoom] = useState(false);
93
+ const [zoomDelaySeconds, setZoomDelaySeconds] = useState(3); // Default zoom delay in seconds
94
 
95
  // Using CenterMap component to handle centering (for summary/full apis) and for zooming (for wiki/nearby api)
96
+ const CenterMap = ({ position, coordinates, shouldZoom, setShouldZoom, zoomDelaySeconds }) => {
97
  const map = useMap();
98
  useEffect(() => {
99
  if (position && Array.isArray(position) && position.length === 2) {
 
105
  useEffect(() => {
106
  if (coordinates && Array.isArray(coordinates) && coordinates.length > 1 && shouldZoom) {
107
  const bounds = L.latLngBounds(coordinates);
108
+ console.log("Delay:", zoomDelaySeconds);
109
+ if (zoomDelaySeconds > 0) {
110
+ map.flyToBounds(bounds, {
111
+ padding: [50, 50],
112
+ maxZoom: 16,
113
+ duration: zoomDelaySeconds
114
+ });
115
+ } else {
116
+ map.fitBounds(bounds, {
117
+ padding: [50, 50],
118
+ maxZoom: 16
119
+ });
120
+ }
121
  setShouldZoom(false);
122
  }
123
+ }, [coordinates, map, shouldZoom, setShouldZoom, zoomDelaySeconds]);
124
 
125
  return null;
126
  };
 
625
  coordinates={explorationMarkers.map((marker) => marker.position)}
626
  shouldZoom={shouldZoom}
627
  setShouldZoom={setShouldZoom}
628
+ zoomDelaySeconds={zoomDelaySeconds}
629
  />
630
  {baseLayer === "satellite" && (
631
  <>
 
1052
  </div>
1053
  </div>
1054
 
1055
+
1056
+ <div>
1057
+ <label style={{ fontWeight: 500, marginBottom: 8, display: 'block' }}>
1058
+ Zoom Delay (seconds):
1059
+ </label>
1060
+ <input
1061
+ type="range"
1062
+ min="0"
1063
+ max="5"
1064
+ step="1"
1065
+ value={zoomDelaySeconds}
1066
+ onChange={(e) => setZoomDelaySeconds(parseInt(e.target.value))}
1067
+ style={{ width: '100%' }}
1068
+ />
1069
+ <div style={{ textAlign: 'center', marginTop: 4 }}>
1070
+ {zoomDelaySeconds} sec. zoom duration
1071
+ </div>
1072
+ </div>
1073
+
1074
  <div style={{ display: 'flex', alignItems: 'center', gap: 8 }}>
1075
  <input
1076
  type="checkbox"