@lugg/maps 0.2.0-alpha.7 → 0.2.0-alpha.8

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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
 
3
- import React from 'react';
3
+ import { Children, Component, isValidElement, useEffect, useRef } from 'react';
4
4
  import { View } from 'react-native';
5
5
  import { Map, useMap } from '@vis.gl/react-google-maps';
6
6
  import { Marker } from "./components/Marker.web.js";
@@ -30,11 +30,13 @@ function MapController({
30
30
  onMapReady,
31
31
  onCameraMove,
32
32
  onCameraIdle,
33
- onReady
33
+ onReady,
34
+ userLocationEnabled
34
35
  }) {
35
36
  const map = useMap();
36
- const readyFired = React.useRef(false);
37
- React.useEffect(() => {
37
+ const readyFired = useRef(false);
38
+ const userLocationMarker = useRef(null);
39
+ useEffect(() => {
38
40
  if (!map) return;
39
41
  onMapReady(map);
40
42
  if (!readyFired.current) {
@@ -42,7 +44,54 @@ function MapController({
42
44
  onReady?.();
43
45
  }
44
46
  }, [map, onMapReady, onReady]);
45
- React.useEffect(() => {
47
+ useEffect(() => {
48
+ if (!map || !userLocationEnabled) {
49
+ if (userLocationMarker.current) {
50
+ userLocationMarker.current.map = null;
51
+ userLocationMarker.current = null;
52
+ }
53
+ return;
54
+ }
55
+ let watchId = null;
56
+ const updateLocation = position => {
57
+ const {
58
+ latitude,
59
+ longitude
60
+ } = position.coords;
61
+ const pos = {
62
+ lat: latitude,
63
+ lng: longitude
64
+ };
65
+ if (!userLocationMarker.current) {
66
+ const dot = document.createElement('div');
67
+ dot.style.width = '16px';
68
+ dot.style.height = '16px';
69
+ dot.style.backgroundColor = '#4285F4';
70
+ dot.style.border = '2px solid white';
71
+ dot.style.borderRadius = '50%';
72
+ dot.style.boxShadow = '0 1px 4px rgba(0,0,0,0.3)';
73
+ userLocationMarker.current = new google.maps.marker.AdvancedMarkerElement({
74
+ map,
75
+ position: pos,
76
+ content: dot
77
+ });
78
+ } else {
79
+ userLocationMarker.current.position = pos;
80
+ }
81
+ };
82
+ navigator.geolocation.getCurrentPosition(updateLocation, () => {});
83
+ watchId = navigator.geolocation.watchPosition(updateLocation, () => {});
84
+ return () => {
85
+ if (watchId !== null) {
86
+ navigator.geolocation.clearWatch(watchId);
87
+ }
88
+ if (userLocationMarker.current) {
89
+ userLocationMarker.current.map = null;
90
+ userLocationMarker.current = null;
91
+ }
92
+ };
93
+ }, [map, userLocationEnabled]);
94
+ useEffect(() => {
46
95
  if (!map) return;
47
96
  const createPayload = gesture => {
48
97
  const center = map.getCenter();
@@ -77,9 +126,10 @@ function MapController({
77
126
  }, [map, onCameraMove, onCameraIdle]);
78
127
  return null;
79
128
  }
80
- export class MapView extends React.Component {
129
+ export class MapView extends Component {
81
130
  static defaultProps = {
82
131
  provider: 'google',
132
+ mapId: 'DEMO_MAP_ID',
83
133
  initialZoom: 10,
84
134
  zoomEnabled: true,
85
135
  scrollEnabled: true,
@@ -150,6 +200,7 @@ export class MapView extends React.Component {
150
200
  scrollEnabled,
151
201
  pitchEnabled,
152
202
  padding,
203
+ userLocationEnabled,
153
204
  onCameraMove,
154
205
  onCameraIdle,
155
206
  onReady,
@@ -165,8 +216,8 @@ export class MapView extends React.Component {
165
216
  // Separate map children (Marker, Polyline) from overlay children (regular Views)
166
217
  const mapChildren = [];
167
218
  const overlayChildren = [];
168
- React.Children.forEach(children, child => {
169
- if (! /*#__PURE__*/React.isValidElement(child)) return;
219
+ Children.forEach(children, child => {
220
+ if (! /*#__PURE__*/isValidElement(child)) return;
170
221
  if (isMapComponent(child)) {
171
222
  mapChildren.push(child);
172
223
  } else {
@@ -202,7 +253,8 @@ export class MapView extends React.Component {
202
253
  onMapReady: this.handleMapReady,
203
254
  onCameraMove: onCameraMove,
204
255
  onCameraIdle: onCameraIdle,
205
- onReady: onReady
256
+ onReady: onReady,
257
+ userLocationEnabled: userLocationEnabled
206
258
  }), mapChildren]
207
259
  })
208
260
  }), overlayChildren]
@@ -1 +1 @@
1
- {"version":3,"names":["React","View","Map","useMap","Marker","Polyline","jsx","_jsx","jsxs","_jsxs","MAP_COMPONENT_TYPES","Set","isMapComponent","child","has","type","createSyntheticEvent","nativeEvent","currentTarget","target","bubbles","cancelable","defaultPrevented","eventPhase","isTrusted","preventDefault","stopPropagation","isDefaultPrevented","isPropagationStopped","persist","timeStamp","Date","now","MapController","onMapReady","onCameraMove","onCameraIdle","onReady","map","readyFired","useRef","useEffect","current","createPayload","gesture","center","getCenter","coordinate","latitude","lat","longitude","lng","zoom","getZoom","isDragging","dragStartListener","addListener","dragEndListener","centerListener","idleListener","google","maps","event","removeListener","MapView","Component","defaultProps","provider","initialZoom","zoomEnabled","scrollEnabled","rotateEnabled","pitchEnabled","mapInstance","handleMapReady","moveCamera","options","duration","panTo","setZoom","setCenter","fitCoordinates","coordinates","first","padding","length","props","bounds","LatLngBounds","forEach","coord","extend","fitBounds","top","left","bottom","right","render","mapId","initialCoordinate","minZoom","maxZoom","children","style","gestureHandling","defaultCenter","undefined","mapChildren","overlayChildren","Children","isValidElement","push","mapContainerStyle","position","mapStyle","width","height","defaultZoom","disableDefaultUI","tilt"],"sourceRoot":"../../src","sources":["MapView.web.tsx"],"mappings":";;AAAA,OAAOA,KAAK,MAAM,OAAO;AAEzB,SAASC,IAAI,QAAQ,cAAc;AACnC,SAASC,GAAG,EAAEC,MAAM,QAAQ,2BAA2B;AACvD,SAASC,MAAM,QAAQ,4BAAyB;AAChD,SAASC,QAAQ,QAAQ,8BAA2B;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,IAAA,IAAAC,KAAA;AAWrD;AACA,MAAMC,mBAAmB,GAAG,IAAIC,GAAG,CAAC,CAACP,MAAM,EAAEC,QAAQ,CAAC,CAAC;AAEvD,MAAMO,cAAc,GAAIC,KAAyB,IAC/CH,mBAAmB,CAACI,GAAG,CAACD,KAAK,CAACE,IAAuC,CAAC;AAExE,MAAMC,oBAAoB,GAAQC,WAAc,KAC7C;EACCA,WAAW;EACXC,aAAa,EAAE,IAAI;EACnBC,MAAM,EAAE,IAAI;EACZC,OAAO,EAAE,KAAK;EACdC,UAAU,EAAE,KAAK;EACjBC,gBAAgB,EAAE,KAAK;EACvBC,UAAU,EAAE,CAAC;EACbC,SAAS,EAAE,IAAI;EACfC,cAAc,EAAEA,CAAA,KAAM,CAAC,CAAC;EACxBC,eAAe,EAAEA,CAAA,KAAM,CAAC,CAAC;EACzBC,kBAAkB,EAAEA,CAAA,KAAM,KAAK;EAC/BC,oBAAoB,EAAEA,CAAA,KAAM,KAAK;EACjCC,OAAO,EAAEA,CAAA,KAAM,CAAC,CAAC;EACjBC,SAAS,EAAEC,IAAI,CAACC,GAAG,CAAC,CAAC;EACrBjB,IAAI,EAAE;AACR,CAAC,CAAuC;AAS1C,SAASkB,aAAaA,CAAC;EACrBC,UAAU;EACVC,YAAY;EACZC,YAAY;EACZC;AACkB,CAAC,EAAE;EACrB,MAAMC,GAAG,GAAGnC,MAAM,CAAC,CAAC;EACpB,MAAMoC,UAAU,GAAGvC,KAAK,CAACwC,MAAM,CAAC,KAAK,CAAC;EAEtCxC,KAAK,CAACyC,SAAS,CAAC,MAAM;IACpB,IAAI,CAACH,GAAG,EAAE;IACVJ,UAAU,CAACI,GAAG,CAAC;IAEf,IAAI,CAACC,UAAU,CAACG,OAAO,EAAE;MACvBH,UAAU,CAACG,OAAO,GAAG,IAAI;MACzBL,OAAO,GAAG,CAAC;IACb;EACF,CAAC,EAAE,CAACC,GAAG,EAAEJ,UAAU,EAAEG,OAAO,CAAC,CAAC;EAE9BrC,KAAK,CAACyC,SAAS,CAAC,MAAM;IACpB,IAAI,CAACH,GAAG,EAAE;IAEV,MAAMK,aAAa,GAAIC,OAAgB,IAAyB;MAC9D,MAAMC,MAAM,GAAGP,GAAG,CAACQ,SAAS,CAAC,CAAC;MAC9B,OAAO;QACLC,UAAU,EAAE;UACVC,QAAQ,EAAEH,MAAM,EAAEI,GAAG,CAAC,CAAC,IAAI,CAAC;UAC5BC,SAAS,EAAEL,MAAM,EAAEM,GAAG,CAAC,CAAC,IAAI;QAC9B,CAAC;QACDC,IAAI,EAAEd,GAAG,CAACe,OAAO,CAAC,CAAC,IAAI,CAAC;QACxBT;MACF,CAAC;IACH,CAAC;IAED,IAAIU,UAAU,GAAG,KAAK;IAEtB,MAAMC,iBAAiB,GAAGjB,GAAG,CAACkB,WAAW,CAAC,WAAW,EAAE,MAAM;MAC3DF,UAAU,GAAG,IAAI;IACnB,CAAC,CAAC;IAEF,MAAMG,eAAe,GAAGnB,GAAG,CAACkB,WAAW,CAAC,SAAS,EAAE,MAAM;MACvDF,UAAU,GAAG,KAAK;IACpB,CAAC,CAAC;IAEF,MAAMI,cAAc,GAAGpB,GAAG,CAACkB,WAAW,CAAC,gBAAgB,EAAE,MAAM;MAC7DrB,YAAY,GAAGnB,oBAAoB,CAAC2B,aAAa,CAACW,UAAU,CAAC,CAAC,CAAC;IACjE,CAAC,CAAC;IAEF,MAAMK,YAAY,GAAGrB,GAAG,CAACkB,WAAW,CAAC,MAAM,EAAE,MAAM;MACjDpB,YAAY,GAAGpB,oBAAoB,CAAC2B,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC;IAEF,OAAO,MAAM;MACXiB,MAAM,CAACC,IAAI,CAACC,KAAK,CAACC,cAAc,CAACR,iBAAiB,CAAC;MACnDK,MAAM,CAACC,IAAI,CAACC,KAAK,CAACC,cAAc,CAACN,eAAe,CAAC;MACjDG,MAAM,CAACC,IAAI,CAACC,KAAK,CAACC,cAAc,CAACL,cAAc,CAAC;MAChDE,MAAM,CAACC,IAAI,CAACC,KAAK,CAACC,cAAc,CAACJ,YAAY,CAAC;IAChD,CAAC;EACH,CAAC,EAAE,CAACrB,GAAG,EAAEH,YAAY,EAAEC,YAAY,CAAC,CAAC;EAErC,OAAO,IAAI;AACb;AAEA,OAAO,MAAM4B,OAAO,SACVhE,KAAK,CAACiE,SAAS,CAEzB;EACE,OAAOC,YAAY,GAA0B;IAC3CC,QAAQ,EAAE,QAAQ;IAClBC,WAAW,EAAE,EAAE;IACfC,WAAW,EAAE,IAAI;IACjBC,aAAa,EAAE,IAAI;IACnBC,aAAa,EAAE,IAAI;IACnBC,YAAY,EAAE;EAChB,CAAC;EAEOC,WAAW,GAA2B,IAAI;EAE1CC,cAAc,GAAIpC,GAAoB,IAAK;IACjD,IAAI,CAACmC,WAAW,GAAGnC,GAAG;EACxB,CAAC;EAEDqC,UAAUA,CAAC5B,UAAsB,EAAE6B,OAA0B,EAAE;IAC7D,MAAMtC,GAAG,GAAG,IAAI,CAACmC,WAAW;IAC5B,IAAI,CAACnC,GAAG,EAAE;IAEV,MAAM;MAAEc,IAAI;MAAEyB,QAAQ,GAAG,CAAC;IAAE,CAAC,GAAGD,OAAO;IACvC,MAAM/B,MAAM,GAAG;MAAEI,GAAG,EAAEF,UAAU,CAACC,QAAQ;MAAEG,GAAG,EAAEJ,UAAU,CAACG;IAAU,CAAC;IAEtE,IAAI2B,QAAQ,GAAG,CAAC,EAAE;MAChBvC,GAAG,CAACwC,KAAK,CAACjC,MAAM,CAAC;MACjBP,GAAG,CAACyC,OAAO,CAAC3B,IAAI,CAAC;IACnB,CAAC,MAAM;MACLd,GAAG,CAAC0C,SAAS,CAACnC,MAAM,CAAC;MACrBP,GAAG,CAACyC,OAAO,CAAC3B,IAAI,CAAC;IACnB;EACF;EAEA6B,cAAcA,CAACC,WAAyB,EAAEN,OAA+B,EAAE;IACzE,MAAMtC,GAAG,GAAG,IAAI,CAACmC,WAAW;IAC5B,MAAMU,KAAK,GAAGD,WAAW,CAAC,CAAC,CAAC;IAC5B,IAAI,CAAC5C,GAAG,IAAI,CAAC6C,KAAK,EAAE;IAEpB,MAAM;MAAEC,OAAO;MAAEP,QAAQ,GAAG,CAAC;IAAE,CAAC,GAAGD,OAAO,IAAI,CAAC,CAAC;IAEhD,IAAIM,WAAW,CAACG,MAAM,KAAK,CAAC,EAAE;MAC5B,MAAMjC,IAAI,GAAG,IAAI,CAACkC,KAAK,CAAClB,WAAW,IAAI,EAAE;MACzC,IAAI,CAACO,UAAU,CAACQ,KAAK,EAAE;QAAE/B,IAAI;QAAEyB;MAAS,CAAC,CAAC;MAC1C;IACF;IAEA,MAAMU,MAAM,GAAG,IAAI3B,MAAM,CAACC,IAAI,CAAC2B,YAAY,CAAC,CAAC;IAC7CN,WAAW,CAACO,OAAO,CAAEC,KAAK,IAAK;MAC7BH,MAAM,CAACI,MAAM,CAAC;QAAE1C,GAAG,EAAEyC,KAAK,CAAC1C,QAAQ;QAAEG,GAAG,EAAEuC,KAAK,CAACxC;MAAU,CAAC,CAAC;IAC9D,CAAC,CAAC;IAEFZ,GAAG,CAACsD,SAAS,CAACL,MAAM,EAAE;MACpBM,GAAG,EAAET,OAAO,EAAES,GAAG,IAAI,CAAC;MACtBC,IAAI,EAAEV,OAAO,EAAEU,IAAI,IAAI,CAAC;MACxBC,MAAM,EAAEX,OAAO,EAAEW,MAAM,IAAI,CAAC;MAC5BC,KAAK,EAAEZ,OAAO,EAAEY,KAAK,IAAI;IAC3B,CAAC,CAAC;EACJ;EAEAC,MAAMA,CAAA,EAAG;IACP,MAAM;MACJC,KAAK;MACLC,iBAAiB;MACjB/B,WAAW;MACXgC,OAAO;MACPC,OAAO;MACPhC,WAAW;MACXC,aAAa;MACbE,YAAY;MACZY,OAAO;MACPjD,YAAY;MACZC,YAAY;MACZC,OAAO;MACPiE,QAAQ;MACRC;IACF,CAAC,GAAG,IAAI,CAACjB,KAAK;IAEd,MAAMkB,eAAe,GACnBlC,aAAa,KAAK,KAAK,IAAID,WAAW,KAAK,KAAK,GAC5C,MAAM,GACNC,aAAa,KAAK,KAAK,GACvB,MAAM,GACN,MAAM;IAEZ,MAAMmC,aAAa,GAAGN,iBAAiB,GACnC;MAAElD,GAAG,EAAEkD,iBAAiB,CAACnD,QAAQ;MAAEG,GAAG,EAAEgD,iBAAiB,CAACjD;IAAU,CAAC,GACrEwD,SAAS;;IAEb;IACA,MAAMC,WAA8B,GAAG,EAAE;IACzC,MAAMC,eAAkC,GAAG,EAAE;IAE7C5G,KAAK,CAAC6G,QAAQ,CAACpB,OAAO,CAACa,QAAQ,EAAGzF,KAAK,IAAK;MAC1C,IAAI,eAACb,KAAK,CAAC8G,cAAc,CAACjG,KAAK,CAAC,EAAE;MAClC,IAAID,cAAc,CAACC,KAAK,CAAC,EAAE;QACzB8F,WAAW,CAACI,IAAI,CAAClG,KAAK,CAAC;MACzB,CAAC,MAAM;QACL+F,eAAe,CAACG,IAAI,CAAClG,KAAK,CAAC;MAC7B;IACF,CAAC,CAAC;IAEF,MAAMmG,iBAA4B,GAAG;MACnCC,QAAQ,EAAE,UAAU;MACpBpB,GAAG,EAAET,OAAO,EAAES,GAAG,IAAI,CAAC;MACtBC,IAAI,EAAEV,OAAO,EAAEU,IAAI,IAAI,CAAC;MACxBE,KAAK,EAAEZ,OAAO,EAAEY,KAAK,IAAI,CAAC;MAC1BD,MAAM,EAAEX,OAAO,EAAEW,MAAM,IAAI;IAC7B,CAAC;IAED,MAAMmB,QAA6B,GAAG;MACpCC,KAAK,EAAE,MAAM;MACbC,MAAM,EAAE;IACV,CAAC;IAED,oBACE3G,KAAA,CAACR,IAAI;MAACsG,KAAK,EAAEA,KAAM;MAAAD,QAAA,gBACjB/F,IAAA,CAACN,IAAI;QAACsG,KAAK,EAAES,iBAAkB;QAAAV,QAAA,eAC7B7F,KAAA,CAACP,GAAG;UACFgG,KAAK,EAAEA,KAAM;UACbO,aAAa,EAAEA,aAAc;UAC7BY,WAAW,EAAEjD,WAAY;UACzBgC,OAAO,EAAEA,OAAQ;UACjBC,OAAO,EAAEA,OAAQ;UACjBG,eAAe,EAAEA,eAAgB;UACjCc,gBAAgB;UAChBC,IAAI,EAAE/C,YAAY,KAAK,KAAK,GAAG,CAAC,GAAGkC,SAAU;UAC7CH,KAAK,EAAEW,QAAS;UAAAZ,QAAA,gBAEhB/F,IAAA,CAAC0B,aAAa;YACZC,UAAU,EAAE,IAAI,CAACwC,cAAe;YAChCvC,YAAY,EAAEA,YAAa;YAC3BC,YAAY,EAAEA,YAAa;YAC3BC,OAAO,EAAEA;UAAQ,CAClB,CAAC,EACDsE,WAAW;QAAA,CACT;MAAC,CACF,CAAC,EACNC,eAAe;IAAA,CACZ,CAAC;EAEX;AACF","ignoreList":[]}
1
+ {"version":3,"names":["Children","Component","isValidElement","useEffect","useRef","View","Map","useMap","Marker","Polyline","jsx","_jsx","jsxs","_jsxs","MAP_COMPONENT_TYPES","Set","isMapComponent","child","has","type","createSyntheticEvent","nativeEvent","currentTarget","target","bubbles","cancelable","defaultPrevented","eventPhase","isTrusted","preventDefault","stopPropagation","isDefaultPrevented","isPropagationStopped","persist","timeStamp","Date","now","MapController","onMapReady","onCameraMove","onCameraIdle","onReady","userLocationEnabled","map","readyFired","userLocationMarker","current","watchId","updateLocation","position","latitude","longitude","coords","pos","lat","lng","dot","document","createElement","style","width","height","backgroundColor","border","borderRadius","boxShadow","google","maps","marker","AdvancedMarkerElement","content","navigator","geolocation","getCurrentPosition","watchPosition","clearWatch","createPayload","gesture","center","getCenter","coordinate","zoom","getZoom","isDragging","dragStartListener","addListener","dragEndListener","centerListener","idleListener","event","removeListener","MapView","defaultProps","provider","mapId","initialZoom","zoomEnabled","scrollEnabled","rotateEnabled","pitchEnabled","mapInstance","handleMapReady","moveCamera","options","duration","panTo","setZoom","setCenter","fitCoordinates","coordinates","first","padding","length","props","bounds","LatLngBounds","forEach","coord","extend","fitBounds","top","left","bottom","right","render","initialCoordinate","minZoom","maxZoom","children","gestureHandling","defaultCenter","undefined","mapChildren","overlayChildren","push","mapContainerStyle","mapStyle","defaultZoom","disableDefaultUI","tilt"],"sourceRoot":"../../src","sources":["MapView.web.tsx"],"mappings":"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","ignoreList":[]}
@@ -1,7 +1,7 @@
1
- import React from 'react';
1
+ import { Component } from 'react';
2
2
  import type { MapViewProps, MapViewRef, MoveCameraOptions, FitCoordinatesOptions } from './MapView.types';
3
3
  import type { Coordinate } from './types';
4
- export declare class MapView extends React.Component<MapViewProps> implements MapViewRef {
4
+ export declare class MapView extends Component<MapViewProps> implements MapViewRef {
5
5
  static defaultProps: Partial<MapViewProps>;
6
6
  private mapInstance;
7
7
  private handleMapReady;
@@ -1 +1 @@
1
- {"version":3,"file":"MapView.web.d.ts","sourceRoot":"","sources":["../../../src/MapView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAiG1C,qBAAa,OACX,SAAQ,KAAK,CAAC,SAAS,CAAC,YAAY,CACpC,YAAW,UAAU;IAErB,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAOxC;IAEF,OAAO,CAAC,WAAW,CAAgC;IAEnD,OAAO,CAAC,cAAc,CAEpB;IAEF,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB;IAgB7D,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB;IA0BzE,MAAM;CAkFP"}
1
+ {"version":3,"file":"MapView.web.d.ts","sourceRoot":"","sources":["../../../src/MapView.web.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,SAAS,EAOV,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EACV,YAAY,EACZ,UAAU,EACV,iBAAiB,EACjB,qBAAqB,EAEtB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAsJ1C,qBAAa,OAAQ,SAAQ,SAAS,CAAC,YAAY,CAAE,YAAW,UAAU;IACxE,MAAM,CAAC,YAAY,EAAE,OAAO,CAAC,YAAY,CAAC,CAQxC;IAEF,OAAO,CAAC,WAAW,CAAgC;IAEnD,OAAO,CAAC,cAAc,CAEpB;IAEF,UAAU,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,iBAAiB;IAgB7D,cAAc,CAAC,WAAW,EAAE,UAAU,EAAE,EAAE,OAAO,CAAC,EAAE,qBAAqB;IA0BzE,MAAM;CAoFP"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lugg/maps",
3
- "version": "0.2.0-alpha.7",
3
+ "version": "0.2.0-alpha.8",
4
4
  "description": "Universal maps for React Native.",
5
5
  "main": "./lib/module/index.js",
6
6
  "types": "./lib/typescript/src/index.d.ts",
@@ -1,4 +1,13 @@
1
- import React from 'react';
1
+ import {
2
+ Children,
3
+ Component,
4
+ isValidElement,
5
+ useEffect,
6
+ useRef,
7
+ type CSSProperties,
8
+ type ReactElement,
9
+ type ReactNode,
10
+ } from 'react';
2
11
  import type { NativeSyntheticEvent, ViewStyle } from 'react-native';
3
12
  import { View } from 'react-native';
4
13
  import { Map, useMap } from '@vis.gl/react-google-maps';
@@ -17,7 +26,7 @@ import type { Coordinate } from './types';
17
26
  // Map-specific component types that render inside the Google Map
18
27
  const MAP_COMPONENT_TYPES = new Set([Marker, Polyline]);
19
28
 
20
- const isMapComponent = (child: React.ReactElement): boolean =>
29
+ const isMapComponent = (child: ReactElement): boolean =>
21
30
  MAP_COMPONENT_TYPES.has(child.type as typeof Marker | typeof Polyline);
22
31
 
23
32
  const createSyntheticEvent = <T,>(nativeEvent: T): NativeSyntheticEvent<T> =>
@@ -44,6 +53,7 @@ interface MapControllerProps {
44
53
  onCameraMove?: (event: NativeSyntheticEvent<CameraEventPayload>) => void;
45
54
  onCameraIdle?: (event: NativeSyntheticEvent<CameraEventPayload>) => void;
46
55
  onReady?: () => void;
56
+ userLocationEnabled?: boolean;
47
57
  }
48
58
 
49
59
  function MapController({
@@ -51,11 +61,14 @@ function MapController({
51
61
  onCameraMove,
52
62
  onCameraIdle,
53
63
  onReady,
64
+ userLocationEnabled,
54
65
  }: MapControllerProps) {
55
66
  const map = useMap();
56
- const readyFired = React.useRef(false);
67
+ const readyFired = useRef(false);
68
+ const userLocationMarker =
69
+ useRef<google.maps.marker.AdvancedMarkerElement | null>(null);
57
70
 
58
- React.useEffect(() => {
71
+ useEffect(() => {
59
72
  if (!map) return;
60
73
  onMapReady(map);
61
74
 
@@ -65,7 +78,56 @@ function MapController({
65
78
  }
66
79
  }, [map, onMapReady, onReady]);
67
80
 
68
- React.useEffect(() => {
81
+ useEffect(() => {
82
+ if (!map || !userLocationEnabled) {
83
+ if (userLocationMarker.current) {
84
+ userLocationMarker.current.map = null;
85
+ userLocationMarker.current = null;
86
+ }
87
+ return;
88
+ }
89
+
90
+ let watchId: number | null = null;
91
+
92
+ const updateLocation = (position: GeolocationPosition) => {
93
+ const { latitude, longitude } = position.coords;
94
+ const pos = { lat: latitude, lng: longitude };
95
+
96
+ if (!userLocationMarker.current) {
97
+ const dot = document.createElement('div');
98
+ dot.style.width = '16px';
99
+ dot.style.height = '16px';
100
+ dot.style.backgroundColor = '#4285F4';
101
+ dot.style.border = '2px solid white';
102
+ dot.style.borderRadius = '50%';
103
+ dot.style.boxShadow = '0 1px 4px rgba(0,0,0,0.3)';
104
+
105
+ userLocationMarker.current =
106
+ new google.maps.marker.AdvancedMarkerElement({
107
+ map,
108
+ position: pos,
109
+ content: dot,
110
+ });
111
+ } else {
112
+ userLocationMarker.current.position = pos;
113
+ }
114
+ };
115
+
116
+ navigator.geolocation.getCurrentPosition(updateLocation, () => {});
117
+ watchId = navigator.geolocation.watchPosition(updateLocation, () => {});
118
+
119
+ return () => {
120
+ if (watchId !== null) {
121
+ navigator.geolocation.clearWatch(watchId);
122
+ }
123
+ if (userLocationMarker.current) {
124
+ userLocationMarker.current.map = null;
125
+ userLocationMarker.current = null;
126
+ }
127
+ };
128
+ }, [map, userLocationEnabled]);
129
+
130
+ useEffect(() => {
69
131
  if (!map) return;
70
132
 
71
133
  const createPayload = (gesture: boolean): CameraEventPayload => {
@@ -109,12 +171,10 @@ function MapController({
109
171
  return null;
110
172
  }
111
173
 
112
- export class MapView
113
- extends React.Component<MapViewProps>
114
- implements MapViewRef
115
- {
174
+ export class MapView extends Component<MapViewProps> implements MapViewRef {
116
175
  static defaultProps: Partial<MapViewProps> = {
117
176
  provider: 'google',
177
+ mapId: 'DEMO_MAP_ID',
118
178
  initialZoom: 10,
119
179
  zoomEnabled: true,
120
180
  scrollEnabled: true,
@@ -181,6 +241,7 @@ export class MapView
181
241
  scrollEnabled,
182
242
  pitchEnabled,
183
243
  padding,
244
+ userLocationEnabled,
184
245
  onCameraMove,
185
246
  onCameraIdle,
186
247
  onReady,
@@ -200,11 +261,11 @@ export class MapView
200
261
  : undefined;
201
262
 
202
263
  // Separate map children (Marker, Polyline) from overlay children (regular Views)
203
- const mapChildren: React.ReactNode[] = [];
204
- const overlayChildren: React.ReactNode[] = [];
264
+ const mapChildren: ReactNode[] = [];
265
+ const overlayChildren: ReactNode[] = [];
205
266
 
206
- React.Children.forEach(children, (child) => {
207
- if (!React.isValidElement(child)) return;
267
+ Children.forEach(children, (child) => {
268
+ if (!isValidElement(child)) return;
208
269
  if (isMapComponent(child)) {
209
270
  mapChildren.push(child);
210
271
  } else {
@@ -220,7 +281,7 @@ export class MapView
220
281
  bottom: padding?.bottom ?? 0,
221
282
  };
222
283
 
223
- const mapStyle: React.CSSProperties = {
284
+ const mapStyle: CSSProperties = {
224
285
  width: '100%',
225
286
  height: '100%',
226
287
  };
@@ -244,6 +305,7 @@ export class MapView
244
305
  onCameraMove={onCameraMove}
245
306
  onCameraIdle={onCameraIdle}
246
307
  onReady={onReady}
308
+ userLocationEnabled={userLocationEnabled}
247
309
  />
248
310
  {mapChildren}
249
311
  </Map>