@lugg/maps 1.0.0-beta.0 → 1.0.0-beta.10

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.
Files changed (186) hide show
  1. package/README.md +4 -1
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/com/luggmaps/LuggCalloutView.kt +79 -0
  4. package/android/src/main/java/com/luggmaps/LuggCalloutViewManager.kt +39 -0
  5. package/android/src/main/java/com/luggmaps/LuggCircleView.kt +85 -0
  6. package/android/src/main/java/com/luggmaps/LuggCircleViewManager.kt +79 -0
  7. package/android/src/main/java/com/luggmaps/LuggGroundOverlayView.kt +81 -0
  8. package/android/src/main/java/com/luggmaps/LuggGroundOverlayViewManager.kt +82 -0
  9. package/android/src/main/java/com/luggmaps/LuggMapView.kt +49 -0
  10. package/android/src/main/java/com/luggmaps/LuggMapViewManager.kt +31 -0
  11. package/android/src/main/java/com/luggmaps/LuggMapWrapperView.kt +0 -11
  12. package/android/src/main/java/com/luggmaps/LuggMarkerView.kt +99 -51
  13. package/android/src/main/java/com/luggmaps/LuggMarkerViewManager.kt +13 -0
  14. package/android/src/main/java/com/luggmaps/LuggPackage.kt +11 -1
  15. package/android/src/main/java/com/luggmaps/LuggPolylineView.kt +1 -22
  16. package/android/src/main/java/com/luggmaps/LuggTileOverlayView.kt +92 -0
  17. package/android/src/main/java/com/luggmaps/LuggTileOverlayViewManager.kt +80 -0
  18. package/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt +628 -18
  19. package/android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt +14 -0
  20. package/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt +12 -7
  21. package/android/src/main/java/com/luggmaps/events/CirclePressEvent.kt +12 -0
  22. package/android/src/main/java/com/luggmaps/events/GroundOverlayPressEvent.kt +12 -0
  23. package/android/src/main/java/com/luggmaps/events/TileOverlayPressEvent.kt +12 -0
  24. package/android/src/main/java/com/luggmaps/extensions/ViewExtensions.kt +11 -0
  25. package/ios/LuggCalloutView.h +23 -0
  26. package/ios/LuggCalloutView.mm +155 -0
  27. package/ios/LuggCircleView.h +31 -0
  28. package/ios/LuggCircleView.mm +133 -0
  29. package/ios/LuggGroundOverlayView.h +30 -0
  30. package/ios/LuggGroundOverlayView.mm +125 -0
  31. package/ios/LuggMapView.mm +84 -2
  32. package/ios/LuggMarkerView.h +5 -0
  33. package/ios/LuggMarkerView.mm +40 -2
  34. package/ios/LuggTileOverlayView.h +31 -0
  35. package/ios/LuggTileOverlayView.mm +130 -0
  36. package/ios/core/AppleMapProvider.mm +838 -34
  37. package/ios/core/GMSPolylineAnimator.m +6 -3
  38. package/ios/core/GoogleMapProvider.mm +506 -19
  39. package/ios/core/LuggAnnotationView.h +12 -0
  40. package/ios/core/LuggAnnotationView.mm +55 -0
  41. package/ios/core/MapProviderDelegate.h +20 -1
  42. package/ios/events/CirclePressEvent.h +20 -0
  43. package/ios/events/GroundOverlayPressEvent.h +20 -0
  44. package/ios/events/TileOverlayPressEvent.h +20 -0
  45. package/lib/module/MapProvider.web.js +7 -2
  46. package/lib/module/MapProvider.web.js.map +1 -1
  47. package/lib/module/MapView.js +12 -1
  48. package/lib/module/MapView.js.map +1 -1
  49. package/lib/module/MapView.web.js +36 -20
  50. package/lib/module/MapView.web.js.map +1 -1
  51. package/lib/module/components/Circle.js +46 -0
  52. package/lib/module/components/Circle.js.map +1 -0
  53. package/lib/module/components/Circle.types.js +4 -0
  54. package/lib/module/components/Circle.types.js.map +1 -0
  55. package/lib/module/components/Circle.web.js +79 -0
  56. package/lib/module/components/Circle.web.js.map +1 -0
  57. package/lib/module/components/GeoJson.js +3 -3
  58. package/lib/module/components/GeoJson.js.map +1 -1
  59. package/lib/module/components/GroundOverlay.js +45 -0
  60. package/lib/module/components/GroundOverlay.js.map +1 -0
  61. package/lib/module/components/GroundOverlay.types.js +4 -0
  62. package/lib/module/components/GroundOverlay.types.js.map +1 -0
  63. package/lib/module/components/GroundOverlay.web.js +77 -0
  64. package/lib/module/components/GroundOverlay.web.js.map +1 -0
  65. package/lib/module/components/Marker.js +41 -6
  66. package/lib/module/components/Marker.js.map +1 -1
  67. package/lib/module/components/Marker.web.js +103 -26
  68. package/lib/module/components/Marker.web.js.map +1 -1
  69. package/lib/module/components/Polygon.web.js +3 -3
  70. package/lib/module/components/Polygon.web.js.map +1 -1
  71. package/lib/module/components/Polyline.web.js +6 -12
  72. package/lib/module/components/Polyline.web.js.map +1 -1
  73. package/lib/module/components/TileOverlay.js +44 -0
  74. package/lib/module/components/TileOverlay.js.map +1 -0
  75. package/lib/module/components/TileOverlay.types.js +4 -0
  76. package/lib/module/components/TileOverlay.types.js.map +1 -0
  77. package/lib/module/components/TileOverlay.web.js +69 -0
  78. package/lib/module/components/TileOverlay.web.js.map +1 -0
  79. package/lib/module/components/index.js +3 -0
  80. package/lib/module/components/index.js.map +1 -1
  81. package/lib/module/components/index.web.js +3 -0
  82. package/lib/module/components/index.web.js.map +1 -1
  83. package/lib/module/fabric/LuggCalloutViewNativeComponent.ts +20 -0
  84. package/lib/module/fabric/LuggCircleViewNativeComponent.ts +25 -0
  85. package/lib/module/fabric/LuggGroundOverlayViewNativeComponent.ts +29 -0
  86. package/lib/module/fabric/LuggMapViewNativeComponent.ts +13 -5
  87. package/lib/module/fabric/LuggMarkerViewNativeComponent.ts +14 -2
  88. package/lib/module/fabric/LuggTileOverlayViewNativeComponent.ts +30 -0
  89. package/lib/module/index.js +3 -0
  90. package/lib/module/index.js.map +1 -1
  91. package/lib/module/index.web.js +3 -0
  92. package/lib/module/index.web.js.map +1 -1
  93. package/lib/typescript/src/MapProvider.web.d.ts +9 -2
  94. package/lib/typescript/src/MapProvider.web.d.ts.map +1 -1
  95. package/lib/typescript/src/MapView.d.ts +1 -1
  96. package/lib/typescript/src/MapView.d.ts.map +1 -1
  97. package/lib/typescript/src/MapView.types.d.ts +36 -1
  98. package/lib/typescript/src/MapView.types.d.ts.map +1 -1
  99. package/lib/typescript/src/MapView.web.d.ts +1 -1
  100. package/lib/typescript/src/MapView.web.d.ts.map +1 -1
  101. package/lib/typescript/src/components/Circle.d.ts +10 -0
  102. package/lib/typescript/src/components/Circle.d.ts.map +1 -0
  103. package/lib/typescript/src/components/Circle.types.d.ts +33 -0
  104. package/lib/typescript/src/components/Circle.types.d.ts.map +1 -0
  105. package/lib/typescript/src/components/Circle.web.d.ts +3 -0
  106. package/lib/typescript/src/components/Circle.web.d.ts.map +1 -0
  107. package/lib/typescript/src/components/GeoJson.d.ts +2 -1
  108. package/lib/typescript/src/components/GeoJson.d.ts.map +1 -1
  109. package/lib/typescript/src/components/GeoJson.types.d.ts +11 -1
  110. package/lib/typescript/src/components/GeoJson.types.d.ts.map +1 -1
  111. package/lib/typescript/src/components/GroundOverlay.d.ts +10 -0
  112. package/lib/typescript/src/components/GroundOverlay.d.ts.map +1 -0
  113. package/lib/typescript/src/components/GroundOverlay.types.d.ts +35 -0
  114. package/lib/typescript/src/components/GroundOverlay.types.d.ts.map +1 -0
  115. package/lib/typescript/src/components/GroundOverlay.web.d.ts +3 -0
  116. package/lib/typescript/src/components/GroundOverlay.web.d.ts.map +1 -0
  117. package/lib/typescript/src/components/Marker.d.ts +6 -3
  118. package/lib/typescript/src/components/Marker.d.ts.map +1 -1
  119. package/lib/typescript/src/components/Marker.types.d.ts +40 -2
  120. package/lib/typescript/src/components/Marker.types.d.ts.map +1 -1
  121. package/lib/typescript/src/components/Marker.web.d.ts +3 -2
  122. package/lib/typescript/src/components/Marker.web.d.ts.map +1 -1
  123. package/lib/typescript/src/components/Polygon.web.d.ts +1 -1
  124. package/lib/typescript/src/components/Polygon.web.d.ts.map +1 -1
  125. package/lib/typescript/src/components/Polyline.web.d.ts +1 -1
  126. package/lib/typescript/src/components/Polyline.web.d.ts.map +1 -1
  127. package/lib/typescript/src/components/TileOverlay.d.ts +10 -0
  128. package/lib/typescript/src/components/TileOverlay.d.ts.map +1 -0
  129. package/lib/typescript/src/components/TileOverlay.types.d.ts +36 -0
  130. package/lib/typescript/src/components/TileOverlay.types.d.ts.map +1 -0
  131. package/lib/typescript/src/components/TileOverlay.web.d.ts +3 -0
  132. package/lib/typescript/src/components/TileOverlay.web.d.ts.map +1 -0
  133. package/lib/typescript/src/components/index.d.ts +7 -1
  134. package/lib/typescript/src/components/index.d.ts.map +1 -1
  135. package/lib/typescript/src/components/index.web.d.ts +7 -1
  136. package/lib/typescript/src/components/index.web.d.ts.map +1 -1
  137. package/lib/typescript/src/fabric/LuggCalloutViewNativeComponent.d.ts +13 -0
  138. package/lib/typescript/src/fabric/LuggCalloutViewNativeComponent.d.ts.map +1 -0
  139. package/lib/typescript/src/fabric/LuggCircleViewNativeComponent.d.ts +18 -0
  140. package/lib/typescript/src/fabric/LuggCircleViewNativeComponent.d.ts.map +1 -0
  141. package/lib/typescript/src/fabric/LuggGroundOverlayViewNativeComponent.d.ts +21 -0
  142. package/lib/typescript/src/fabric/LuggGroundOverlayViewNativeComponent.d.ts.map +1 -0
  143. package/lib/typescript/src/fabric/LuggMapViewNativeComponent.d.ts +10 -5
  144. package/lib/typescript/src/fabric/LuggMapViewNativeComponent.d.ts.map +1 -1
  145. package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts +8 -1
  146. package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts.map +1 -1
  147. package/lib/typescript/src/fabric/LuggTileOverlayViewNativeComponent.d.ts +21 -0
  148. package/lib/typescript/src/fabric/LuggTileOverlayViewNativeComponent.d.ts.map +1 -0
  149. package/lib/typescript/src/index.d.ts +10 -4
  150. package/lib/typescript/src/index.d.ts.map +1 -1
  151. package/lib/typescript/src/index.web.d.ts +9 -3
  152. package/lib/typescript/src/index.web.d.ts.map +1 -1
  153. package/lib/typescript/src/types.d.ts +0 -4
  154. package/lib/typescript/src/types.d.ts.map +1 -1
  155. package/package.json +6 -2
  156. package/src/MapProvider.web.tsx +15 -3
  157. package/src/MapView.tsx +12 -1
  158. package/src/MapView.types.ts +118 -1
  159. package/src/MapView.web.tsx +379 -322
  160. package/src/components/Circle.tsx +52 -0
  161. package/src/components/Circle.types.ts +33 -0
  162. package/src/components/Circle.web.tsx +95 -0
  163. package/src/components/GeoJson.tsx +3 -3
  164. package/src/components/GeoJson.types.ts +12 -1
  165. package/src/components/GroundOverlay.tsx +47 -0
  166. package/src/components/GroundOverlay.types.ts +36 -0
  167. package/src/components/GroundOverlay.web.tsx +81 -0
  168. package/src/components/Marker.tsx +59 -5
  169. package/src/components/Marker.types.ts +42 -2
  170. package/src/components/Marker.web.tsx +235 -99
  171. package/src/components/Polygon.web.tsx +93 -89
  172. package/src/components/Polyline.web.tsx +235 -235
  173. package/src/components/TileOverlay.tsx +44 -0
  174. package/src/components/TileOverlay.types.ts +37 -0
  175. package/src/components/TileOverlay.web.tsx +97 -0
  176. package/src/components/index.ts +11 -0
  177. package/src/components/index.web.ts +10 -1
  178. package/src/fabric/LuggCalloutViewNativeComponent.ts +20 -0
  179. package/src/fabric/LuggCircleViewNativeComponent.ts +25 -0
  180. package/src/fabric/LuggGroundOverlayViewNativeComponent.ts +29 -0
  181. package/src/fabric/LuggMapViewNativeComponent.ts +13 -5
  182. package/src/fabric/LuggMarkerViewNativeComponent.ts +14 -2
  183. package/src/fabric/LuggTileOverlayViewNativeComponent.ts +30 -0
  184. package/src/index.ts +14 -1
  185. package/src/index.web.ts +17 -1
  186. package/src/types.ts +0 -5
@@ -1,8 +1,11 @@
1
1
  #import "LuggMapView.h"
2
+ #import "LuggCircleView.h"
3
+ #import "LuggGroundOverlayView.h"
2
4
  #import "LuggMapWrapperView.h"
3
5
  #import "LuggMarkerView.h"
4
6
  #import "LuggPolygonView.h"
5
7
  #import "LuggPolylineView.h"
8
+ #import "LuggTileOverlayView.h"
6
9
  #import "core/AppleMapProvider.h"
7
10
  #import "core/GoogleMapProvider.h"
8
11
  #import "core/MapProviderDelegate.h"
@@ -37,11 +40,16 @@ using namespace luggmaps::events;
37
40
  BOOL _rotateEnabled;
38
41
  BOOL _pitchEnabled;
39
42
  BOOL _userLocationEnabled;
43
+ LuggMapViewMapType _mapType;
40
44
  LuggMapViewTheme _theme;
45
+ BOOL _poiEnabled;
46
+ LuggMapViewPoiFilterMode _poiFilterMode;
47
+ NSArray<NSString *> *_poiFilterCategories;
41
48
  double _minZoom;
42
49
  double _maxZoom;
43
50
  UIEdgeInsets _edgeInsets;
44
51
  UIEdgeInsets _oldEdgeInsets;
52
+ LuggMapViewInsetAdjustment _insetAdjustment;
45
53
  }
46
54
 
47
55
  + (ComponentDescriptorProvider)componentDescriptorProvider {
@@ -61,8 +69,13 @@ using namespace luggmaps::events;
61
69
  _rotateEnabled = YES;
62
70
  _pitchEnabled = YES;
63
71
  _userLocationEnabled = NO;
72
+ _poiEnabled = NO;
73
+ _poiFilterMode = LuggMapViewPoiFilterMode::Including;
74
+ _poiFilterCategories = @[];
75
+ _mapType = LuggMapViewMapType::Standard;
64
76
  _theme = LuggMapViewTheme::System;
65
77
  _edgeInsets = UIEdgeInsetsZero;
78
+ _insetAdjustment = LuggMapViewInsetAdjustment::Never;
66
79
  }
67
80
  return self;
68
81
  }
@@ -91,6 +104,23 @@ using namespace luggmaps::events;
91
104
  if (_provider) {
92
105
  [_provider addPolygonView:polygonView];
93
106
  }
107
+ } else if ([childComponentView isKindOfClass:[LuggCircleView class]]) {
108
+ LuggCircleView *circleView = (LuggCircleView *)childComponentView;
109
+ if (_provider) {
110
+ [_provider addCircleView:circleView];
111
+ }
112
+ } else if ([childComponentView isKindOfClass:[LuggGroundOverlayView class]]) {
113
+ LuggGroundOverlayView *groundOverlayView =
114
+ (LuggGroundOverlayView *)childComponentView;
115
+ if (_provider) {
116
+ [_provider addGroundOverlayView:groundOverlayView];
117
+ }
118
+ } else if ([childComponentView isKindOfClass:[LuggTileOverlayView class]]) {
119
+ LuggTileOverlayView *tileOverlayView =
120
+ (LuggTileOverlayView *)childComponentView;
121
+ if (_provider) {
122
+ [_provider addTileOverlayView:tileOverlayView];
123
+ }
94
124
  }
95
125
  }
96
126
 
@@ -112,6 +142,23 @@ using namespace luggmaps::events;
112
142
  if (_provider) {
113
143
  [_provider removePolygonView:polygonView];
114
144
  }
145
+ } else if ([childComponentView isKindOfClass:[LuggCircleView class]]) {
146
+ LuggCircleView *circleView = (LuggCircleView *)childComponentView;
147
+ if (_provider) {
148
+ [_provider removeCircleView:circleView];
149
+ }
150
+ } else if ([childComponentView isKindOfClass:[LuggGroundOverlayView class]]) {
151
+ LuggGroundOverlayView *groundOverlayView =
152
+ (LuggGroundOverlayView *)childComponentView;
153
+ if (_provider) {
154
+ [_provider removeGroundOverlayView:groundOverlayView];
155
+ }
156
+ } else if ([childComponentView isKindOfClass:[LuggTileOverlayView class]]) {
157
+ LuggTileOverlayView *tileOverlayView =
158
+ (LuggTileOverlayView *)childComponentView;
159
+ if (_provider) {
160
+ [_provider removeTileOverlayView:tileOverlayView];
161
+ }
115
162
  }
116
163
 
117
164
  [super unmountChildComponentView:childComponentView index:index];
@@ -179,6 +226,12 @@ using namespace luggmaps::events;
179
226
  [_provider addPolylineView:(LuggPolylineView *)subview];
180
227
  } else if ([subview isKindOfClass:[LuggPolygonView class]]) {
181
228
  [_provider addPolygonView:(LuggPolygonView *)subview];
229
+ } else if ([subview isKindOfClass:[LuggCircleView class]]) {
230
+ [_provider addCircleView:(LuggCircleView *)subview];
231
+ } else if ([subview isKindOfClass:[LuggGroundOverlayView class]]) {
232
+ [_provider addGroundOverlayView:(LuggGroundOverlayView *)subview];
233
+ } else if ([subview isKindOfClass:[LuggTileOverlayView class]]) {
234
+ [_provider addTileOverlayView:(LuggTileOverlayView *)subview];
182
235
  }
183
236
  }
184
237
  }
@@ -229,9 +282,14 @@ using namespace luggmaps::events;
229
282
  [_provider setRotateEnabled:_rotateEnabled];
230
283
  [_provider setPitchEnabled:_pitchEnabled];
231
284
  [_provider setUserLocationEnabled:_userLocationEnabled];
232
- [_provider setTheme:(NSInteger)_theme];
285
+ [_provider setMapType:_mapType];
286
+ [_provider setTheme:_theme];
287
+ [_provider setPoiEnabled:_poiEnabled];
288
+ [_provider setPoiFilterMode:_poiFilterMode];
289
+ [_provider setPoiFilterCategories:_poiFilterCategories];
233
290
  [_provider setMinZoom:_minZoom];
234
291
  [_provider setMaxZoom:_maxZoom];
292
+ [_provider setInsetAdjustment:_insetAdjustment];
235
293
  }
236
294
 
237
295
  - (void)updateProps:(Props::Shared const &)props
@@ -269,6 +327,26 @@ using namespace luggmaps::events;
269
327
  _userLocationEnabled = newViewProps.userLocationEnabled;
270
328
  [_provider setUserLocationEnabled:_userLocationEnabled];
271
329
  }
330
+ if (newViewProps.poiEnabled != prevViewProps.poiEnabled) {
331
+ _poiEnabled = newViewProps.poiEnabled;
332
+ [_provider setPoiEnabled:_poiEnabled];
333
+ }
334
+ if (newViewProps.poiFilterMode != prevViewProps.poiFilterMode) {
335
+ _poiFilterMode = newViewProps.poiFilterMode;
336
+ [_provider setPoiFilterMode:_poiFilterMode];
337
+ }
338
+ if (newViewProps.poiFilterCategories != prevViewProps.poiFilterCategories) {
339
+ NSMutableArray<NSString *> *categories = [NSMutableArray array];
340
+ for (const auto &category : newViewProps.poiFilterCategories) {
341
+ [categories addObject:[NSString stringWithUTF8String:category.c_str()]];
342
+ }
343
+ _poiFilterCategories = [categories copy];
344
+ [_provider setPoiFilterCategories:_poiFilterCategories];
345
+ }
346
+ if (newViewProps.mapType != prevViewProps.mapType) {
347
+ _mapType = newViewProps.mapType;
348
+ [_provider setMapType:_mapType];
349
+ }
272
350
  if (newViewProps.minZoom != prevViewProps.minZoom) {
273
351
  _minZoom = newViewProps.minZoom;
274
352
  [_provider setMinZoom:_minZoom];
@@ -279,7 +357,11 @@ using namespace luggmaps::events;
279
357
  }
280
358
  if (newViewProps.theme != prevViewProps.theme) {
281
359
  _theme = newViewProps.theme;
282
- [_provider setTheme:(NSInteger)_theme];
360
+ [_provider setTheme:_theme];
361
+ }
362
+ if (newViewProps.insetAdjustment != prevViewProps.insetAdjustment) {
363
+ _insetAdjustment = newViewProps.insetAdjustment;
364
+ [_provider setInsetAdjustment:_insetAdjustment];
283
365
  }
284
366
 
285
367
  UIEdgeInsets newEdgeInsets = UIEdgeInsetsMake(
@@ -5,11 +5,14 @@
5
5
  NS_ASSUME_NONNULL_BEGIN
6
6
 
7
7
  @class LuggMarkerView;
8
+ @class LuggCalloutView;
8
9
 
9
10
  @protocol LuggMarkerViewDelegate <NSObject>
10
11
  @optional
11
12
  - (void)markerViewDidLayout:(LuggMarkerView *)markerView;
12
13
  - (void)markerViewDidUpdate:(LuggMarkerView *)markerView;
14
+ - (void)showCalloutForMarkerView:(LuggMarkerView *)markerView;
15
+ - (void)hideCalloutForMarkerView:(LuggMarkerView *)markerView;
13
16
  @end
14
17
 
15
18
  @interface LuggMarkerView : RCTViewComponentView
@@ -23,10 +26,12 @@ NS_ASSUME_NONNULL_BEGIN
23
26
  @property(nonatomic, readonly) CLLocationDegrees rotate;
24
27
  @property(nonatomic, readonly) CGFloat scale;
25
28
  @property(nonatomic, readonly) BOOL rasterize;
29
+ @property(nonatomic, readonly) BOOL centerOnPress;
26
30
  @property(nonatomic, readonly) BOOL draggable;
27
31
  @property(nonatomic, readonly) BOOL hasCustomView;
28
32
  @property(nonatomic, readonly) BOOL didLayout;
29
33
  @property(nonatomic, readonly) UIView *iconView;
34
+ @property(nonatomic, readonly, nullable) LuggCalloutView *calloutView;
30
35
  @property(nonatomic, weak, nullable) id<LuggMarkerViewDelegate> delegate;
31
36
  @property(nonatomic, strong, nullable) NSObject *marker;
32
37
 
@@ -1,4 +1,5 @@
1
1
  #import "LuggMarkerView.h"
2
+ #import "LuggCalloutView.h"
2
3
  #import "events/MarkerDragEvent.h"
3
4
  #import "events/MarkerPressEvent.h"
4
5
 
@@ -25,9 +26,11 @@ using namespace luggmaps::events;
25
26
  CLLocationDegrees _rotate;
26
27
  CGFloat _scale;
27
28
  BOOL _rasterize;
29
+ BOOL _centerOnPress;
28
30
  BOOL _draggable;
29
31
  BOOL _didLayout;
30
32
  UIView *_iconView;
33
+ LuggCalloutView *_calloutView;
31
34
  }
32
35
 
33
36
  + (ComponentDescriptorProvider)componentDescriptorProvider {
@@ -47,6 +50,7 @@ using namespace luggmaps::events;
47
50
  _rotate = 0;
48
51
  _scale = 1;
49
52
  _rasterize = YES;
53
+ _centerOnPress = YES;
50
54
  _didLayout = NO;
51
55
 
52
56
  _iconView = [[UIView alloc] init];
@@ -76,6 +80,7 @@ using namespace luggmaps::events;
76
80
  _rotate = newViewProps.rotate;
77
81
  _scale = newViewProps.scale;
78
82
  _rasterize = newViewProps.rasterize;
83
+ _centerOnPress = newViewProps.centerOnPress;
79
84
  _draggable = newViewProps.draggable;
80
85
  }
81
86
 
@@ -92,14 +97,22 @@ using namespace luggmaps::events;
92
97
  - (void)mountChildComponentView:
93
98
  (UIView<RCTComponentViewProtocol> *)childComponentView
94
99
  index:(NSInteger)index {
95
- [_iconView insertSubview:childComponentView atIndex:index];
100
+ if ([childComponentView isKindOfClass:[LuggCalloutView class]]) {
101
+ _calloutView = (LuggCalloutView *)childComponentView;
102
+ } else {
103
+ [_iconView insertSubview:childComponentView atIndex:index];
104
+ }
96
105
  _didLayout = NO;
97
106
  }
98
107
 
99
108
  - (void)unmountChildComponentView:
100
109
  (UIView<RCTComponentViewProtocol> *)childComponentView
101
110
  index:(NSInteger)index {
102
- [childComponentView removeFromSuperview];
111
+ if ([childComponentView isKindOfClass:[LuggCalloutView class]]) {
112
+ _calloutView = nil;
113
+ } else {
114
+ [childComponentView removeFromSuperview];
115
+ }
103
116
  _didLayout = NO;
104
117
  }
105
118
 
@@ -164,6 +177,10 @@ using namespace luggmaps::events;
164
177
  return _rasterize;
165
178
  }
166
179
 
180
+ - (BOOL)centerOnPress {
181
+ return _centerOnPress;
182
+ }
183
+
167
184
  - (BOOL)draggable {
168
185
  return _draggable;
169
186
  }
@@ -180,6 +197,10 @@ using namespace luggmaps::events;
180
197
  return _iconView;
181
198
  }
182
199
 
200
+ - (LuggCalloutView *)calloutView {
201
+ return _calloutView;
202
+ }
203
+
183
204
  - (UIImage *)createIconImage {
184
205
  CGSize size = _iconView.bounds.size;
185
206
  if (size.width <= 0 || size.height <= 0) {
@@ -268,9 +289,26 @@ using namespace luggmaps::events;
268
289
  _iconView.bounds.size.height);
269
290
  }
270
291
 
292
+ - (void)showCallout {
293
+ if ([self.delegate respondsToSelector:@selector(showCalloutForMarkerView:)]) {
294
+ [self.delegate showCalloutForMarkerView:self];
295
+ }
296
+ }
297
+
298
+ - (void)hideCallout {
299
+ if ([self.delegate respondsToSelector:@selector(hideCalloutForMarkerView:)]) {
300
+ [self.delegate hideCalloutForMarkerView:self];
301
+ }
302
+ }
303
+
304
+ - (void)handleCommand:(const NSString *)commandName args:(const NSArray *)args {
305
+ RCTLuggMarkerViewHandleCommand(self, commandName, args);
306
+ }
307
+
271
308
  - (void)prepareForRecycle {
272
309
  [super prepareForRecycle];
273
310
  _didLayout = NO;
311
+ _calloutView = nil;
274
312
  self.marker = nil;
275
313
  self.delegate = nil;
276
314
  [self resetIconViewTransform];
@@ -0,0 +1,31 @@
1
+ #import <CoreLocation/CoreLocation.h>
2
+ #import <React/RCTViewComponentView.h>
3
+ #import <UIKit/UIKit.h>
4
+
5
+ NS_ASSUME_NONNULL_BEGIN
6
+
7
+ @class LuggTileOverlayView;
8
+
9
+ @protocol LuggTileOverlayViewDelegate <NSObject>
10
+ @optional
11
+ - (void)tileOverlayViewDidUpdate:(LuggTileOverlayView *)tileOverlayView;
12
+ @end
13
+
14
+ @interface LuggTileOverlayView : RCTViewComponentView
15
+
16
+ @property(nonatomic, readonly) NSString *urlTemplate;
17
+ @property(nonatomic, readonly) NSInteger tileSize;
18
+ @property(nonatomic, readonly) CGFloat opacity;
19
+ @property(nonatomic, readonly) BOOL hasBounds;
20
+ @property(nonatomic, readonly) CLLocationCoordinate2D northeast;
21
+ @property(nonatomic, readonly) CLLocationCoordinate2D southwest;
22
+ @property(nonatomic, readonly) NSInteger zIndex;
23
+ @property(nonatomic, readonly) BOOL tappable;
24
+ @property(nonatomic, weak, nullable) id<LuggTileOverlayViewDelegate> delegate;
25
+ @property(nonatomic, strong, nullable) NSObject *overlay;
26
+
27
+ - (void)emitPressEvent;
28
+
29
+ @end
30
+
31
+ NS_ASSUME_NONNULL_END
@@ -0,0 +1,130 @@
1
+ #import "LuggTileOverlayView.h"
2
+ #import "events/TileOverlayPressEvent.h"
3
+
4
+ #import <react/renderer/components/RNMapsSpec/ComponentDescriptors.h>
5
+ #import <react/renderer/components/RNMapsSpec/EventEmitters.h>
6
+ #import <react/renderer/components/RNMapsSpec/Props.h>
7
+ #import <react/renderer/components/RNMapsSpec/RCTComponentViewHelpers.h>
8
+
9
+ #import "RCTFabricComponentsPlugins.h"
10
+
11
+ using namespace facebook::react;
12
+ using namespace luggmaps::events;
13
+
14
+ @interface LuggTileOverlayView () <RCTLuggTileOverlayViewViewProtocol>
15
+ @end
16
+
17
+ @implementation LuggTileOverlayView {
18
+ NSString *_urlTemplate;
19
+ NSInteger _tileSize;
20
+ CGFloat _opacity;
21
+ BOOL _hasBounds;
22
+ CLLocationCoordinate2D _northeast;
23
+ CLLocationCoordinate2D _southwest;
24
+ NSInteger _zIndex;
25
+ BOOL _tappable;
26
+ }
27
+
28
+ + (ComponentDescriptorProvider)componentDescriptorProvider {
29
+ return concreteComponentDescriptorProvider<
30
+ LuggTileOverlayViewComponentDescriptor>();
31
+ }
32
+
33
+ - (instancetype)initWithFrame:(CGRect)frame {
34
+ if (self = [super initWithFrame:frame]) {
35
+ static const auto defaultProps =
36
+ std::make_shared<const LuggTileOverlayViewProps>();
37
+ _props = defaultProps;
38
+
39
+ _urlTemplate = @"";
40
+ _tileSize = 256;
41
+ _opacity = 1.0;
42
+
43
+ self.hidden = YES;
44
+ }
45
+
46
+ return self;
47
+ }
48
+
49
+ - (void)updateProps:(Props::Shared const &)props
50
+ oldProps:(Props::Shared const &)oldProps {
51
+ [super updateProps:props oldProps:oldProps];
52
+ const auto &newViewProps =
53
+ *std::static_pointer_cast<LuggTileOverlayViewProps const>(props);
54
+
55
+ _urlTemplate =
56
+ [NSString stringWithUTF8String:newViewProps.urlTemplate.c_str()];
57
+ _tileSize = newViewProps.tileSize;
58
+ _opacity = newViewProps.opacity;
59
+
60
+ auto ne = newViewProps.bounds.northeast;
61
+ auto sw = newViewProps.bounds.southwest;
62
+ _hasBounds = (ne.latitude != 0 || ne.longitude != 0 || sw.latitude != 0 ||
63
+ sw.longitude != 0);
64
+ if (_hasBounds) {
65
+ _northeast = CLLocationCoordinate2DMake(ne.latitude, ne.longitude);
66
+ _southwest = CLLocationCoordinate2DMake(sw.latitude, sw.longitude);
67
+ }
68
+
69
+ _zIndex = newViewProps.zIndex.value_or(0);
70
+ _tappable = newViewProps.tappable;
71
+ }
72
+
73
+ - (void)finalizeUpdates:(RNComponentViewUpdateMask)updateMask {
74
+ [super finalizeUpdates:updateMask];
75
+
76
+ if (updateMask & RNComponentViewUpdateMaskProps) {
77
+ if ([self.delegate
78
+ respondsToSelector:@selector(tileOverlayViewDidUpdate:)]) {
79
+ [self.delegate tileOverlayViewDidUpdate:self];
80
+ }
81
+ }
82
+ }
83
+
84
+ - (NSString *)urlTemplate {
85
+ return _urlTemplate;
86
+ }
87
+
88
+ - (NSInteger)tileSize {
89
+ return _tileSize;
90
+ }
91
+
92
+ - (CGFloat)opacity {
93
+ return _opacity;
94
+ }
95
+
96
+ - (BOOL)hasBounds {
97
+ return _hasBounds;
98
+ }
99
+
100
+ - (CLLocationCoordinate2D)northeast {
101
+ return _northeast;
102
+ }
103
+
104
+ - (CLLocationCoordinate2D)southwest {
105
+ return _southwest;
106
+ }
107
+
108
+ - (NSInteger)zIndex {
109
+ return _zIndex;
110
+ }
111
+
112
+ - (BOOL)tappable {
113
+ return _tappable;
114
+ }
115
+
116
+ - (void)emitPressEvent {
117
+ TileOverlayPressEvent::emit<LuggTileOverlayViewEventEmitter>(_eventEmitter);
118
+ }
119
+
120
+ - (void)prepareForRecycle {
121
+ [super prepareForRecycle];
122
+ self.overlay = nil;
123
+ self.delegate = nil;
124
+ }
125
+
126
+ Class<RCTComponentViewProtocol> LuggTileOverlayViewCls(void) {
127
+ return LuggTileOverlayView.class;
128
+ }
129
+
130
+ @end