From 6fb17e73d6871843342f0dc05152a7976c70868e Mon Sep 17 00:00:00 2001 From: someone-here Date: Sat, 17 Feb 2024 20:21:41 +0530 Subject: [PATCH 1/8] Request location only when necessary in MapView --- src/components/MapView/MapView.tsx | 36 +++++++++++++--------- src/components/MapView/MapView.website.tsx | 36 +++++++++++++--------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx index a3178f642852..bbf727484bf9 100644 --- a/src/components/MapView/MapView.tsx +++ b/src/components/MapView/MapView.tsx @@ -32,6 +32,20 @@ const MapView = forwardRef( const [userInteractedWithMap, setUserInteractedWithMap] = useState(false); const hasAskedForLocationPermission = useRef(false); + // Determines if map can be panned to user's detected + // location without bothering the user. It will return + // false if user has already started dragging the map or + // if there are one or more waypoints present. + const shouldPanMapToCurrentPosition = useCallback(() => !userInteractedWithMap && (!waypoints || waypoints.length === 0), [userInteractedWithMap, waypoints]); + + const setCurrentPositionToInitialState = useCallback(() => { + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + if (cachedUserLocation || !initialState) { + return; + } + setCurrentPosition({longitude: initialState.location[0], latitude: initialState.location[1]}); + }, [initialState, setCurrentPosition, cachedUserLocation]); + useFocusEffect( useCallback(() => { if (isOffline) { @@ -42,6 +56,11 @@ const MapView = forwardRef( return; } + if (!shouldPanMapToCurrentPosition()) { + setCurrentPositionToInitialState(); + return; + } + hasAskedForLocationPermission.current = true; getCurrentPosition( (params) => { @@ -49,24 +68,11 @@ const MapView = forwardRef( setCurrentPosition(currentCoords); setUserLocation(currentCoords); }, - () => { - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - if (cachedUserLocation || !initialState) { - return; - } - - setCurrentPosition({longitude: initialState.location[0], latitude: initialState.location[1]}); - }, + setCurrentPositionToInitialState, ); - }, [cachedUserLocation, initialState, isOffline]), + }, [cachedUserLocation, initialState, isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), ); - // Determines if map can be panned to user's detected - // location without bothering the user. It will return - // false if user has already started dragging the map or - // if there are one or more waypoints present. - const shouldPanMapToCurrentPosition = useCallback(() => !userInteractedWithMap && (!waypoints || waypoints.length === 0), [userInteractedWithMap, waypoints]); - useEffect(() => { if (!currentPosition || !cameraRef.current) { return; diff --git a/src/components/MapView/MapView.website.tsx b/src/components/MapView/MapView.website.tsx index 289f7d0d62a8..fa4ffd9a28e8 100644 --- a/src/components/MapView/MapView.website.tsx +++ b/src/components/MapView/MapView.website.tsx @@ -55,6 +55,20 @@ const MapView = forwardRef( const setRef = useCallback((newRef: MapRef | null) => setMapRef(newRef), []); const hasAskedForLocationPermission = useRef(false); + // Determines if map can be panned to user's detected + // location without bothering the user. It will return + // false if user has already started dragging the map or + // if there are one or more waypoints present. + const shouldPanMapToCurrentPosition = useCallback(() => !userInteractedWithMap && (!waypoints || waypoints.length === 0), [userInteractedWithMap, waypoints]); + + const setCurrentPositionToInitialState = useCallback(() => { + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + if (cachedUserLocation || !initialState) { + return; + } + setCurrentPosition({longitude: initialState.location[0], latitude: initialState.location[1]}); + }, [initialState, setCurrentPosition, cachedUserLocation]); + useFocusEffect( useCallback(() => { if (isOffline) { @@ -65,6 +79,11 @@ const MapView = forwardRef( return; } + if (!shouldPanMapToCurrentPosition()) { + setCurrentPositionToInitialState(); + return; + } + hasAskedForLocationPermission.current = true; getCurrentPosition( (params) => { @@ -72,24 +91,11 @@ const MapView = forwardRef( setCurrentPosition(currentCoords); setUserLocation(currentCoords); }, - () => { - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing - if (cachedUserLocation || !initialState) { - return; - } - - setCurrentPosition({longitude: initialState.location[0], latitude: initialState.location[1]}); - }, + setCurrentPositionToInitialState, ); - }, [cachedUserLocation, initialState, isOffline]), + }, [cachedUserLocation, initialState, isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), ); - // Determines if map can be panned to user's detected - // location without bothering the user. It will return - // false if user has already started dragging the map or - // if there are one or more waypoints present. - const shouldPanMapToCurrentPosition = useCallback(() => !userInteractedWithMap && (!waypoints || waypoints.length === 0), [userInteractedWithMap, waypoints]); - useEffect(() => { if (!currentPosition || !mapRef) { return; From d1725f4f127ca1fcc7da1ea28dd4f4a1c70a2fc3 Mon Sep 17 00:00:00 2001 From: someone-here Date: Sat, 17 Feb 2024 20:35:45 +0530 Subject: [PATCH 2/8] Fix lint --- src/components/MapView/MapView.tsx | 2 +- src/components/MapView/MapView.website.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx index bbf727484bf9..eff316c4213f 100644 --- a/src/components/MapView/MapView.tsx +++ b/src/components/MapView/MapView.tsx @@ -70,7 +70,7 @@ const MapView = forwardRef( }, setCurrentPositionToInitialState, ); - }, [cachedUserLocation, initialState, isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), + }, [isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), ); useEffect(() => { diff --git a/src/components/MapView/MapView.website.tsx b/src/components/MapView/MapView.website.tsx index fa4ffd9a28e8..1175f0ad72f8 100644 --- a/src/components/MapView/MapView.website.tsx +++ b/src/components/MapView/MapView.website.tsx @@ -93,7 +93,7 @@ const MapView = forwardRef( }, setCurrentPositionToInitialState, ); - }, [cachedUserLocation, initialState, isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), + }, [isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), ); useEffect(() => { From 6c1924a3682a1b9928c93e7a395fae4f3501c1ae Mon Sep 17 00:00:00 2001 From: someone-here Date: Sun, 18 Feb 2024 18:55:43 +0530 Subject: [PATCH 3/8] Fix lint --- src/components/MapView/MapView.tsx | 13 +++++-------- src/components/MapView/MapView.website.tsx | 13 +++++-------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx index eff316c4213f..b936318fc061 100644 --- a/src/components/MapView/MapView.tsx +++ b/src/components/MapView/MapView.tsx @@ -62,14 +62,11 @@ const MapView = forwardRef( } hasAskedForLocationPermission.current = true; - getCurrentPosition( - (params) => { - const currentCoords = {longitude: params.coords.longitude, latitude: params.coords.latitude}; - setCurrentPosition(currentCoords); - setUserLocation(currentCoords); - }, - setCurrentPositionToInitialState, - ); + getCurrentPosition((params) => { + const currentCoords = {longitude: params.coords.longitude, latitude: params.coords.latitude}; + setCurrentPosition(currentCoords); + setUserLocation(currentCoords); + }, setCurrentPositionToInitialState); }, [isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), ); diff --git a/src/components/MapView/MapView.website.tsx b/src/components/MapView/MapView.website.tsx index 1175f0ad72f8..dfd0d58ba843 100644 --- a/src/components/MapView/MapView.website.tsx +++ b/src/components/MapView/MapView.website.tsx @@ -85,14 +85,11 @@ const MapView = forwardRef( } hasAskedForLocationPermission.current = true; - getCurrentPosition( - (params) => { - const currentCoords = {longitude: params.coords.longitude, latitude: params.coords.latitude}; - setCurrentPosition(currentCoords); - setUserLocation(currentCoords); - }, - setCurrentPositionToInitialState, - ); + getCurrentPosition((params) => { + const currentCoords = {longitude: params.coords.longitude, latitude: params.coords.latitude}; + setCurrentPosition(currentCoords); + setUserLocation(currentCoords); + }, setCurrentPositionToInitialState); }, [isOffline, shouldPanMapToCurrentPosition, setCurrentPositionToInitialState]), ); From 59cb60b2829ffa55af5e5d3c5573c469e44ef9c7 Mon Sep 17 00:00:00 2001 From: Esh Tanya Gupta <77237602+esh-g@users.noreply.github.com> Date: Mon, 19 Feb 2024 20:05:55 +0530 Subject: [PATCH 4/8] Update src/components/MapView/MapView.tsx Co-authored-by: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> --- src/components/MapView/MapView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx index b936318fc061..38b8d1e7c360 100644 --- a/src/components/MapView/MapView.tsx +++ b/src/components/MapView/MapView.tsx @@ -44,7 +44,7 @@ const MapView = forwardRef( return; } setCurrentPosition({longitude: initialState.location[0], latitude: initialState.location[1]}); - }, [initialState, setCurrentPosition, cachedUserLocation]); + }, [initialState, cachedUserLocation]); useFocusEffect( useCallback(() => { From 1faec43b4f632c7eeff56357477db63e4399b424 Mon Sep 17 00:00:00 2001 From: someone-here Date: Tue, 20 Feb 2024 22:09:11 +0530 Subject: [PATCH 5/8] Remove unecessary dependency --- src/components/MapView/MapView.website.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MapView/MapView.website.tsx b/src/components/MapView/MapView.website.tsx index dfd0d58ba843..1cc663ef2b7a 100644 --- a/src/components/MapView/MapView.website.tsx +++ b/src/components/MapView/MapView.website.tsx @@ -67,7 +67,7 @@ const MapView = forwardRef( return; } setCurrentPosition({longitude: initialState.location[0], latitude: initialState.location[1]}); - }, [initialState, setCurrentPosition, cachedUserLocation]); + }, [initialState, cachedUserLocation]); useFocusEffect( useCallback(() => { From fde1898cba6f17b0a39d71277712ee65ed90ac9e Mon Sep 17 00:00:00 2001 From: someone-here Date: Tue, 20 Feb 2024 22:19:04 +0530 Subject: [PATCH 6/8] Rename current position --- src/components/MapView/MapView.tsx | 7 ++++--- src/components/MapView/MapView.website.tsx | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx index 38b8d1e7c360..9d8a1e6dd6f8 100644 --- a/src/components/MapView/MapView.tsx +++ b/src/components/MapView/MapView.tsx @@ -30,7 +30,7 @@ const MapView = forwardRef( const [isIdle, setIsIdle] = useState(false); const [currentPosition, setCurrentPosition] = useState(cachedUserLocation); const [userInteractedWithMap, setUserInteractedWithMap] = useState(false); - const hasAskedForLocationPermission = useRef(false); + const shouldInitializeCurrentPosition = useRef(true); // Determines if map can be panned to user's detected // location without bothering the user. It will return @@ -52,16 +52,17 @@ const MapView = forwardRef( return; } - if (hasAskedForLocationPermission.current) { + if (!shouldInitializeCurrentPosition.current) { return; } + shouldInitializeCurrentPosition.current = true; + if (!shouldPanMapToCurrentPosition()) { setCurrentPositionToInitialState(); return; } - hasAskedForLocationPermission.current = true; getCurrentPosition((params) => { const currentCoords = {longitude: params.coords.longitude, latitude: params.coords.latitude}; setCurrentPosition(currentCoords); diff --git a/src/components/MapView/MapView.website.tsx b/src/components/MapView/MapView.website.tsx index 1cc663ef2b7a..05be6d6409e8 100644 --- a/src/components/MapView/MapView.website.tsx +++ b/src/components/MapView/MapView.website.tsx @@ -53,7 +53,7 @@ const MapView = forwardRef( const [userInteractedWithMap, setUserInteractedWithMap] = useState(false); const [shouldResetBoundaries, setShouldResetBoundaries] = useState(false); const setRef = useCallback((newRef: MapRef | null) => setMapRef(newRef), []); - const hasAskedForLocationPermission = useRef(false); + const shouldInitializeCurrentPosition = useRef(true); // Determines if map can be panned to user's detected // location without bothering the user. It will return @@ -75,16 +75,17 @@ const MapView = forwardRef( return; } - if (hasAskedForLocationPermission.current) { + if (!shouldInitializeCurrentPosition.current) { return; } + shouldInitializeCurrentPosition.current = false; + if (!shouldPanMapToCurrentPosition()) { setCurrentPositionToInitialState(); return; } - hasAskedForLocationPermission.current = true; getCurrentPosition((params) => { const currentCoords = {longitude: params.coords.longitude, latitude: params.coords.latitude}; setCurrentPosition(currentCoords); From 75a173f7f272aca2cb1b0a5ebd671d2d533114f7 Mon Sep 17 00:00:00 2001 From: someone-here Date: Tue, 20 Feb 2024 22:26:02 +0530 Subject: [PATCH 7/8] =?UTF-8?q?Prettify=20=F0=9F=92=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/MapView/MapView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx index 9d8a1e6dd6f8..a471e854c9da 100644 --- a/src/components/MapView/MapView.tsx +++ b/src/components/MapView/MapView.tsx @@ -57,7 +57,7 @@ const MapView = forwardRef( } shouldInitializeCurrentPosition.current = true; - + if (!shouldPanMapToCurrentPosition()) { setCurrentPositionToInitialState(); return; From b2f2dacb12f17d0072beb4fe603582d6d906e71b Mon Sep 17 00:00:00 2001 From: Esh Tanya Gupta <77237602+esh-g@users.noreply.github.com> Date: Tue, 20 Feb 2024 22:29:17 +0530 Subject: [PATCH 8/8] Update src/components/MapView/MapView.tsx Co-authored-by: Abdelhafidh Belalia <16493223+s77rt@users.noreply.github.com> --- src/components/MapView/MapView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/MapView/MapView.tsx b/src/components/MapView/MapView.tsx index a471e854c9da..77447f13644c 100644 --- a/src/components/MapView/MapView.tsx +++ b/src/components/MapView/MapView.tsx @@ -56,7 +56,7 @@ const MapView = forwardRef( return; } - shouldInitializeCurrentPosition.current = true; + shouldInitializeCurrentPosition.current = false; if (!shouldPanMapToCurrentPosition()) { setCurrentPositionToInitialState();