visgl / react-map-gl

React friendly API wrapper around MapboxGL JS
http://visgl.github.io/react-map-gl/
Other
7.88k stars 1.35k forks source link

[Feat] Expose props mapping to `disableRotation()` on the touch-zoom-rotate handler #2284

Open mz8i opened 1 year ago

mz8i commented 1 year ago

Target Use Case

Currently it's not possible to enable touch zoom but disable touch rotate.

The touch zoom+rotate handlers for both Maplibre and Mapbox expose a disableRotation() method, so that sort of granularity is allowed by the base libraries.

Proposal

There are different ways the API could look, but an example (that I believe was the case with older versions of this library) is: expose an additional touchRotate prop that, if false, will cause calling disableRotation() on the touch-zoom-rotate handler.

mz8i commented 1 year ago

Current workaround is to use a ref function:

const mapRefFn = useCallback((refObj) => {
  refObj?.getMap()?.touchZoomRotate?.disableRotation();
}, []);

return (<Map ref={mapRefFn} touchZoomRotate={true}>
   {/* ... */}
</Map>);
csdiehl commented 1 year ago

I have also run into a need for this! Happy to take this on, if help is needed.