maps icon indicating copy to clipboard operation
maps copied to clipboard

[Bug]: Setting 'defaultSettings' on '<Mapbox.Camera />' showing the wrong location on very first render of the app

Open sagarshakya opened this issue 1 year ago • 3 comments

Mapbox Implementation

Mapbox

Mapbox Version

default

React Native Version

0.72.4

Platform

Android

@rnmapbox/maps version

10.1.19

Standalone component to reproduce

import React from 'react';
import { StyleSheet, View } from "react-native";

import Mapbox from "@rnmapbox/maps";

Mapbox.setAccessToken("XXX");

export default function App() {
  return (
    <View style={styles.page}>
      <View style={styles.container}>
        <Mapbox.MapView style={styles.map}>
          <Mapbox.Camera
            defaultSettings={{
              centerCoordinate: [13.404684, 52.519254],
              zoomLevel: 14.5,
            }}
          />
        </Mapbox.MapView>
      </View>
    </View>
  );
}
const styles = StyleSheet.create({
  page: {
    flex: 1,
    justifyContent: "center",
    alignItems: "center",
  },
  container: {
    height: "100%",
    width: "100%",
  },
  map: {
    flex: 1,
  },
});

Observed behavior and steps to reproduce

On the very first render of the map component, when you set the defaultSettings prop on <Mapbox.Camera />, the map shows the wrong location. After you reload the app (or close and open the app), the issue is fixed. The issue occurs only on the very first render. On all subsequent renders, the map shows the correct location as set with defaultSettings.

If you clear the app storage and open the app again, the issue persists.

https://github.com/rnmapbox/maps/assets/66957698/d870e171-141d-4bd2-93f2-1731ab26d700

Expected behavior

The map should show the value set as defaultSettings on <Mapbox.Camera /> component correctly.

Notes / preliminary analysis

No response

Additional links and references

No response

sagarshakya avatar Apr 10 '24 11:04 sagarshakya

Same for me on IOS. When using a created Mapbox studio style, the location used when the app first open is the default location configured for the style in "Default map position" on Mapbox studio.

McFly78 avatar Apr 29 '24 18:04 McFly78

For me using "@rnmapbox/maps": "10.1.28" it works on IOS.

On Android I have to do a fix:

const defaultSettings = {
  zoomLevel: 5.55,
  centerCoordinate: [16.5, 44.47],
};

let firstRender = true;

class CameraController extends React.PureComponent {
  static propTypes = {...};

  componentDidMount() {
    if (firstRender && Platform.OS === 'android') {
      // https://github.com/rnmapbox/maps/issues/3449
      this.cameraRef.setCamera(defaultSettings);
    }

    firstRender = false;
  }

  render() {
    return (
      <MapboxGL.Camera
        defaultSettings={defaultSettings}
        ref={component => (this.cameraRef = component)}
      />
    );
  }

yossarin avatar Aug 09 '24 13:08 yossarin

Any progress on this issue? We're waiting for a long time ...

SoheilKhorram avatar Apr 10 '25 12:04 SoheilKhorram