react-native-maps 1.21.0-alpha.7 → 1.21.0-alpha.71

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 (148) hide show
  1. package/android/build.gradle +38 -13
  2. package/android/generated/RCTAppDependencyProvider.h +25 -0
  3. package/android/generated/RCTAppDependencyProvider.mm +55 -0
  4. package/android/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  5. package/android/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  6. package/android/generated/RCTThirdPartyComponentsProvider.h +16 -0
  7. package/android/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  8. package/android/generated/ReactAppDependencyProvider.podspec +34 -0
  9. package/android/generated/java/com/facebook/fbreact/specs/NativeAirMapsModuleSpec.java +63 -0
  10. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerDelegate.java +35 -0
  11. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsCalloutManagerInterface.java +17 -0
  12. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerDelegate.java +200 -0
  13. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMapViewManagerInterface.java +71 -0
  14. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerDelegate.java +104 -0
  15. package/android/generated/java/com/facebook/react/viewmanagers/RNMapsMarkerManagerInterface.java +39 -0
  16. package/android/generated/jni/CMakeLists.txt +36 -0
  17. package/android/generated/jni/RNMapsSpecs-generated.cpp +68 -0
  18. package/android/generated/jni/RNMapsSpecs.h +31 -0
  19. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.cpp +26 -0
  20. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ComponentDescriptors.h +28 -0
  21. package/android/generated/jni/react/renderer/components/RNMapsSpecs/EventEmitters.cpp +918 -0
  22. package/android/generated/jni/react/renderer/components/RNMapsSpecs/EventEmitters.h +787 -0
  23. package/android/generated/jni/react/renderer/components/RNMapsSpecs/Props.cpp +154 -0
  24. package/android/generated/jni/react/renderer/components/RNMapsSpecs/Props.h +1058 -0
  25. package/android/generated/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI-generated.cpp +74 -0
  26. package/android/generated/jni/react/renderer/components/RNMapsSpecs/RNMapsSpecsJSI.h +268 -0
  27. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.cpp +21 -0
  28. package/android/generated/jni/react/renderer/components/RNMapsSpecs/ShadowNodes.h +76 -0
  29. package/android/generated/jni/react/renderer/components/RNMapsSpecs/States.cpp +16 -0
  30. package/android/generated/jni/react/renderer/components/RNMapsSpecs/States.h +77 -0
  31. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  32. package/android/src/main/java/com/rnmaps/fabric/CalloutManager.java +77 -0
  33. package/android/src/main/java/com/rnmaps/fabric/JSONUtil.java +86 -0
  34. package/android/src/main/java/com/rnmaps/fabric/MapViewManager.java +593 -0
  35. package/android/src/main/java/com/rnmaps/fabric/MarkerManager.java +259 -0
  36. package/android/src/main/java/com/rnmaps/fabric/NativeAirMapsModule.java +156 -4
  37. package/android/src/main/java/com/rnmaps/fabric/event/OnCalloutPressEvent.java +25 -0
  38. package/android/src/main/java/com/rnmaps/fabric/event/OnDeselectEvent.java +28 -0
  39. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEndEvent.java +28 -0
  40. package/android/src/main/java/com/rnmaps/fabric/event/OnDragEvent.java +28 -0
  41. package/android/src/main/java/com/rnmaps/fabric/event/OnDragStartEvent.java +28 -0
  42. package/android/src/main/java/com/rnmaps/fabric/event/OnLongPressEvent.java +28 -0
  43. package/android/src/main/java/com/rnmaps/fabric/event/OnMapLoadedEvent.java +29 -0
  44. package/android/src/main/java/com/rnmaps/fabric/event/OnMapReadyEvent.java +29 -0
  45. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDeselectEvent.java +28 -0
  46. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEndEvent.java +28 -0
  47. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragEvent.java +28 -0
  48. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerDragStartEvent.java +28 -0
  49. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerPressEvent.java +28 -0
  50. package/android/src/main/java/com/rnmaps/fabric/event/OnMarkerSelectEvent.java +28 -0
  51. package/android/src/main/java/com/rnmaps/fabric/event/OnPoiClickEvent.java +27 -0
  52. package/android/src/main/java/com/rnmaps/fabric/event/OnPressEvent.java +27 -0
  53. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeCompleteEvent.java +30 -0
  54. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeEvent.java +48 -0
  55. package/android/src/main/java/com/rnmaps/fabric/event/OnRegionChangeStartEvent.java +33 -0
  56. package/android/src/main/java/com/rnmaps/fabric/event/OnSelectEvent.java +28 -0
  57. package/android/src/main/java/com/rnmaps/fabric/event/OnUserLocationChangeEvent.java +28 -0
  58. package/android/src/main/java/com/rnmaps/maps/MapAirModulePackage.java +22 -2
  59. package/android/src/main/java/com/rnmaps/maps/MapCallout.java +18 -0
  60. package/android/src/main/java/com/rnmaps/maps/MapManager.java +14 -14
  61. package/android/src/main/java/com/rnmaps/maps/MapMarker.java +79 -3
  62. package/android/src/main/java/com/rnmaps/maps/MapModule.java +206 -206
  63. package/android/src/main/java/com/rnmaps/maps/MapView.java +1618 -1346
  64. package/ios/AirGoogleMaps/AIRGoogleMap.h +3 -2
  65. package/ios/AirGoogleMaps/AIRGoogleMap.m +153 -48
  66. package/ios/AirGoogleMaps/AIRGoogleMapCircle.m +23 -11
  67. package/ios/AirGoogleMaps/AIRGoogleMapManager.m +17 -28
  68. package/ios/AirGoogleMaps/AIRGoogleMapMarker.h +2 -0
  69. package/ios/AirGoogleMaps/AIRGoogleMapMarker.m +347 -243
  70. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.h +2 -1
  71. package/ios/AirGoogleMaps/AIRGoogleMapPolygon.m +30 -0
  72. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.h +0 -1
  73. package/ios/AirGoogleMaps/AIRGoogleMapPolyline.m +0 -7
  74. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.h +1 -1
  75. package/ios/AirGoogleMaps/AIRGoogleMapWMSTile.m +2 -2
  76. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.h +3 -0
  77. package/ios/AirGoogleMaps/RCTConvert+GMSMapViewType.m +2 -0
  78. package/ios/AirGoogleMaps/RNMapsGoogleMapView.h +3 -3
  79. package/ios/AirGoogleMaps/RNMapsGoogleMapView.mm +161 -61
  80. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.h +26 -0
  81. package/ios/AirGoogleMaps/RNMapsGooglePolygonView.mm +217 -0
  82. package/ios/AirGoogleMaps/RNMapsGooglePolygonViewManager.mm +25 -0
  83. package/ios/AirMaps/AIRMap.h +6 -3
  84. package/ios/AirMaps/AIRMap.m +289 -145
  85. package/ios/AirMaps/AIRMapManager.m +8 -17
  86. package/ios/AirMaps/AIRMapMarker.h +1 -0
  87. package/ios/AirMaps/AIRMapMarker.m +165 -103
  88. package/ios/AirMaps/Callout/SMCalloutView.m +1 -1
  89. package/ios/AirMaps/RCTConvert+AirMap.h +4 -0
  90. package/ios/AirMaps/RCTConvert+AirMap.m +2 -0
  91. package/ios/AirMaps/RNMapsAirModule.h +1 -1
  92. package/ios/AirMaps/RNMapsAirModule.mm +42 -172
  93. package/ios/AirMaps/RNMapsAirModuleDelegate.h +24 -0
  94. package/ios/AirMaps/RNMapsHostVewDelegate.h +17 -0
  95. package/ios/AirMaps/RNMapsMapView.h +3 -3
  96. package/ios/AirMaps/RNMapsMapView.mm +344 -307
  97. package/ios/AirMaps/RNMapsMarkerView.h +24 -0
  98. package/ios/AirMaps/RNMapsMarkerView.mm +430 -0
  99. package/ios/AirMaps/RNMapsMarkerViewManager.mm +21 -0
  100. package/ios/AirMaps/UIView +AirMap.m +20 -0
  101. package/ios/AirMaps/UIView+AirMap.h +11 -0
  102. package/ios/AirMaps.xcodeproj/project.pbxproj +60 -0
  103. package/ios/generated/RCTAppDependencyProvider.h +25 -0
  104. package/ios/generated/RCTAppDependencyProvider.mm +55 -0
  105. package/ios/generated/RCTModulesConformingToProtocolsProvider.h +18 -0
  106. package/ios/generated/RCTModulesConformingToProtocolsProvider.mm +33 -0
  107. package/ios/generated/RCTThirdPartyComponentsProvider.h +16 -0
  108. package/ios/generated/RCTThirdPartyComponentsProvider.mm +26 -0
  109. package/ios/generated/RNMapsSpecs/ComponentDescriptors.cpp +26 -0
  110. package/ios/generated/RNMapsSpecs/ComponentDescriptors.h +28 -0
  111. package/ios/generated/RNMapsSpecs/EventEmitters.cpp +918 -0
  112. package/ios/generated/RNMapsSpecs/EventEmitters.h +787 -0
  113. package/ios/generated/RNMapsSpecs/Props.cpp +154 -0
  114. package/ios/generated/RNMapsSpecs/Props.h +1058 -0
  115. package/ios/generated/RNMapsSpecs/RCTComponentViewHelpers.h +549 -0
  116. package/ios/generated/RNMapsSpecs/RNMapsSpecs-generated.mm +92 -0
  117. package/ios/generated/RNMapsSpecs/RNMapsSpecs.h +137 -0
  118. package/ios/generated/RNMapsSpecs/ShadowNodes.cpp +21 -0
  119. package/ios/generated/RNMapsSpecs/ShadowNodes.h +76 -0
  120. package/ios/generated/RNMapsSpecs/States.cpp +16 -0
  121. package/ios/generated/RNMapsSpecs/States.h +77 -0
  122. package/ios/generated/RNMapsSpecsJSI-generated.cpp +74 -0
  123. package/ios/generated/RNMapsSpecsJSI.h +268 -0
  124. package/ios/generated/ReactAppDependencyProvider.podspec +34 -0
  125. package/lib/MapCallout.js +1 -0
  126. package/lib/MapMarker.d.ts +15 -2
  127. package/lib/MapMarker.js +53 -9
  128. package/lib/MapMarkerNativeComponent.js +0 -2
  129. package/lib/MapOverlay.js +2 -8
  130. package/lib/MapPolyline.d.ts +1 -1
  131. package/lib/MapView.d.ts +7 -22
  132. package/lib/MapView.js +83 -94
  133. package/lib/{FabricMapView.d.ts → createFabricMap.d.ts} +7 -11
  134. package/lib/createFabricMap.js +175 -0
  135. package/lib/decorateMapComponent.js +22 -0
  136. package/lib/specs/NativeAirMapsModule.d.ts +2 -2
  137. package/lib/specs/NativeComponentCallout.d.ts +46 -0
  138. package/lib/specs/NativeComponentCallout.js +9 -0
  139. package/lib/specs/NativeComponentGoogleMapView.d.ts +12 -12
  140. package/lib/specs/NativeComponentGooglePolygon.d.ts +75 -0
  141. package/lib/specs/NativeComponentGooglePolygon.js +9 -0
  142. package/lib/specs/NativeComponentMapView.d.ts +19 -36
  143. package/lib/specs/NativeComponentMapView.js +1 -3
  144. package/lib/specs/NativeComponentMarker.d.ts +258 -0
  145. package/lib/specs/NativeComponentMarker.js +19 -0
  146. package/package.json +15 -10
  147. package/react-native-maps.podspec +2 -1
  148. package/lib/FabricMapView.js +0 -181
@@ -13,10 +13,10 @@
13
13
  #import <GoogleMaps/GoogleMaps.h>
14
14
  #import <MapKit/MapKit.h>
15
15
  #import "AIRGMSMarker.h"
16
-
16
+ #import "RNMapsAirModuleDelegate.h"
17
17
  #import "AIRGoogleMapCoordinate.h"
18
18
 
19
- @interface AIRGoogleMap : GMSMapView
19
+ @interface AIRGoogleMap : GMSMapView <RNMapsAirModuleDelegate>
20
20
 
21
21
  // TODO: don't use MK region?
22
22
  @property (nonatomic, weak) RCTBridge *bridge;
@@ -67,6 +67,7 @@
67
67
  @property (nonatomic, assign) BOOL showsIndoorLevelPicker;
68
68
  @property (nonatomic, assign) NSString *kmlSrc;
69
69
 
70
+ - (BOOL) isReady;
70
71
  - (void)didPrepareMap;
71
72
  - (void)mapViewDidFinishTileRendering;
72
73
  - (BOOL)didTapMarker:(GMSMarker *)marker;
@@ -69,6 +69,7 @@ id regionAsJSON(MKCoordinateRegion region) {
69
69
  BOOL _didPrepareMap;
70
70
  BOOL _didCallOnMapReady;
71
71
  BOOL _zoomTapEnabled;
72
+ BOOL _isAnimating;
72
73
  NSString* _googleMapId;
73
74
  }
74
75
 
@@ -146,6 +147,10 @@ id regionAsJSON(MKCoordinateRegion region) {
146
147
  };
147
148
  }
148
149
 
150
+ - (BOOL) isReady {
151
+ return _didPrepareMap;
152
+ }
153
+
149
154
  -(void) fitToCoordinates:(NSArray<AIRGoogleMapCoordinate *> *) coordinates withEdgePadding:(NSDictionary*) edgePadding animated:(BOOL)animated
150
155
  {
151
156
  CLLocationCoordinate2D myLocation = coordinates.firstObject.coordinate;
@@ -235,12 +240,17 @@ id regionAsJSON(MKCoordinateRegion region) {
235
240
  // This is where we intercept them and do the appropriate underlying mapview action.
236
241
  if ([subview isKindOfClass:[AIRGoogleMapMarker class]]) {
237
242
  AIRGoogleMapMarker *marker = (AIRGoogleMapMarker*)subview;
238
- marker.realMarker.map = self;
243
+ [marker didInsertInMap:self];
239
244
  [self.markers addObject:marker];
240
245
  } else if ([subview isKindOfClass:[AIRGoogleMapPolygon class]]) {
241
246
  AIRGoogleMapPolygon *polygon = (AIRGoogleMapPolygon*)subview;
242
- polygon.polygon.map = self;
247
+ [polygon didInsertInMap:self];
243
248
  [self.polygons addObject:polygon];
249
+
250
+ } else if ([NSStringFromClass([subview class]) isEqualToString:@"RNMapsGooglePolygonView"]){
251
+ // RNMapsGooglePolygonView *polygon = (RNMapsGooglePolygonView*)subview;
252
+ // [polygon didInsertInMap:self];
253
+ [self.polygons addObject:subview];
244
254
  } else if ([subview isKindOfClass:[AIRGoogleMapPolyline class]]) {
245
255
  AIRGoogleMapPolyline *polyline = (AIRGoogleMapPolyline*)subview;
246
256
  polyline.polyline.map = self;
@@ -285,7 +295,9 @@ id regionAsJSON(MKCoordinateRegion region) {
285
295
  AIRGoogleMapMarker *marker = (AIRGoogleMapMarker*)subview;
286
296
  marker.realMarker.map = nil;
287
297
  [self.markers removeObject:marker];
288
- } else if ([subview isKindOfClass:[AIRGoogleMapPolygon class]]) {
298
+ } else if ([NSStringFromClass([subview class]) isEqualToString:@"RNMapsGooglePolygonView"]) {
299
+ [self.polygons removeObject:subview];
300
+ } else if ([subview isKindOfClass:[AIRGoogleMapPolygon class]]) {
289
301
  AIRGoogleMapPolygon *polygon = (AIRGoogleMapPolygon*)subview;
290
302
  polygon.polygon.map = nil;
291
303
  [self.polygons removeObject:polygon];
@@ -350,6 +362,19 @@ id regionAsJSON(MKCoordinateRegion region) {
350
362
  ];
351
363
  }
352
364
 
365
+ - (NSDictionary *) getCameraDic {
366
+ GMSCameraPosition *camera = [self camera];
367
+ return @{
368
+ @"center": @{
369
+ @"latitude": @(camera.target.latitude),
370
+ @"longitude": @(camera.target.longitude),
371
+ },
372
+ @"pitch": @(camera.viewingAngle),
373
+ @"heading": @(camera.bearing),
374
+ @"zoom": @(camera.zoom),
375
+ };
376
+ }
377
+
353
378
  - (void)layoutSubviews {
354
379
  [super layoutSubviews];
355
380
  if(_didLayoutSubviews) return;
@@ -386,7 +411,7 @@ id regionAsJSON(MKCoordinateRegion region) {
386
411
  }
387
412
 
388
413
  - (void)setRegion:(MKCoordinateRegion)region {
389
- // TODO: The JS component is repeatedly setting region unnecessarily. We might want to deal with that in here.
414
+ if (_isAnimating || !CLLocationCoordinate2DIsValid(region.center)) return;
390
415
  _region = region;
391
416
  if(_didLayoutSubviews) {
392
417
  self.camera = [AIRGoogleMap makeGMSCameraPositionFromMap:self andMKCoordinateRegion:region];
@@ -406,6 +431,7 @@ id regionAsJSON(MKCoordinateRegion region) {
406
431
  }
407
432
 
408
433
  - (void)setCameraProp:(GMSCameraPosition*)camera {
434
+ if (_isAnimating || !CLLocationCoordinate2DIsValid([camera target])) return;
409
435
  _initialCamera = camera;
410
436
  if(_didLayoutSubviews) {
411
437
  self.camera = camera;
@@ -487,6 +513,7 @@ id regionAsJSON(MKCoordinateRegion region) {
487
513
  }
488
514
 
489
515
  - (void)willMove:(BOOL)gesture {
516
+ _isAnimating = YES;
490
517
  id event = @{@"isGesture": [NSNumber numberWithBool:gesture]};
491
518
  if (self.onRegionChangeStart) self.onRegionChangeStart(event);
492
519
  }
@@ -520,6 +547,7 @@ id regionAsJSON(MKCoordinateRegion region) {
520
547
  @"isGesture": [NSNumber numberWithBool:isGesture],
521
548
  };
522
549
  if (self.onChange) self.onChange(event); // complete
550
+ _isAnimating = NO;
523
551
  }
524
552
 
525
553
  - (void)setMapPadding:(UIEdgeInsets)mapPadding {
@@ -748,6 +776,63 @@ id regionAsJSON(MKCoordinateRegion region) {
748
776
  return [map cameraForBounds:bounds insets:UIEdgeInsetsZero];
749
777
  }
750
778
 
779
+ #pragma mark - RNMapsAirModuleDelegate
780
+
781
+ - (NSDictionary *) getCoordinatesForPoint:(CGPoint)point
782
+ {
783
+ CLLocationCoordinate2D coordinate = [self.projection coordinateForPoint:point];
784
+ return @{
785
+ @"latitude": @(coordinate.latitude),
786
+ @"longitude": @(coordinate.longitude),
787
+ };
788
+ }
789
+
790
+ - (NSDictionary *) getPointForCoordinates:(CLLocationCoordinate2D)location
791
+ {
792
+ CGPoint touchPoint = [self.projection pointForCoordinate:location];
793
+ return @{
794
+ @"x": @(touchPoint.x),
795
+ @"y": @(touchPoint.y),
796
+ };
797
+ }
798
+
799
+ -(void) takeSnapshotWithConfig:(NSDictionary *)config success:(RCTPromiseResolveBlock)success error:(RCTPromiseRejectBlock)error {
800
+ /* unused
801
+ NSNumber *width = [config objectForKey:@"width"];
802
+ NSNumber *height = [config objectForKey:@"height"];
803
+ */
804
+ NSNumber *quality = [config objectForKey:@"quality"];
805
+
806
+ NSString *format = [config objectForKey:@"format"];
807
+ NSString *result = [config objectForKey:@"result"];
808
+ NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970];
809
+ NSString *pathComponent = [NSString stringWithFormat:@"Documents/snapshot-%.20lf.%@", timeStamp, format];
810
+ NSString *filePath = [NSHomeDirectory() stringByAppendingPathComponent: pathComponent];
811
+
812
+ // TODO: currently we are ignoring width, height, region
813
+
814
+ UIGraphicsBeginImageContextWithOptions(self.frame.size, YES, 0.0f);
815
+ [self.layer renderInContext:UIGraphicsGetCurrentContext()];
816
+ UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
817
+
818
+ NSData *data;
819
+ if ([format isEqualToString:@"png"]) {
820
+ data = UIImagePNGRepresentation(image);
821
+
822
+ } else if([format isEqualToString:@"jpg"]) {
823
+ data = UIImageJPEGRepresentation(image, quality.floatValue);
824
+ }
825
+
826
+ if ([result isEqualToString:@"file"]) {
827
+ [data writeToFile:filePath atomically:YES];
828
+ success(filePath);
829
+ } else if ([result isEqualToString:@"base64"]) {
830
+ success([data base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithCarriageReturn]);
831
+ }
832
+
833
+ UIGraphicsEndImageContext();
834
+ }
835
+
751
836
  #pragma mark - Utils
752
837
 
753
838
  - (CGRect) frameForMarker:(AIRGoogleMapMarker*) mrkView {
@@ -1002,6 +1087,51 @@ id regionAsJSON(MKCoordinateRegion region) {
1002
1087
  return _kmlSrc;
1003
1088
  }
1004
1089
 
1090
+ - (void) setKMLData:(NSData *) urlData {
1091
+ GMUKMLParser *parser = [[GMUKMLParser alloc] initWithData:urlData];
1092
+ [parser parse];
1093
+
1094
+ NSUInteger index = 0;
1095
+ NSMutableArray *markers = [[NSMutableArray alloc]init];
1096
+
1097
+ for (GMUPlacemark *place in parser.placemarks) {
1098
+
1099
+ CLLocationCoordinate2D location =((GMUPoint *) place.geometry).coordinate;
1100
+
1101
+ AIRGoogleMapMarker *marker = (AIRGoogleMapMarker *)[[AIRGoogleMapMarkerManager alloc] view];
1102
+ if (!marker.bridge) {
1103
+ marker.bridge = _bridge;
1104
+ }
1105
+ marker.identifier = place.title;
1106
+ marker.coordinate = location;
1107
+ marker.title = place.title;
1108
+ marker.subtitle = place.snippet;
1109
+ marker.pinColor = place.style.fillColor;
1110
+ marker.imageSrc = [AIRGoogleMap GetIconUrl:place parser:parser];
1111
+ marker.layer.backgroundColor = [UIColor clearColor].CGColor;
1112
+ marker.layer.position = CGPointZero;
1113
+
1114
+ [self insertReactSubview:(UIView *) marker atIndex:index];
1115
+
1116
+ [markers addObject:@{@"id": marker.identifier,
1117
+ @"title": marker.title,
1118
+ @"description": marker.subtitle,
1119
+ @"coordinate": @{
1120
+ @"latitude": @(location.latitude),
1121
+ @"longitude": @(location.longitude)
1122
+ }
1123
+ }];
1124
+
1125
+ index++;
1126
+ }
1127
+
1128
+ id event = @{@"markers": markers};
1129
+ if (self.onKmlReady) self.onKmlReady(event);
1130
+ #else
1131
+ REQUIRES_GOOGLE_MAPS_UTILS();
1132
+ #endif
1133
+ }
1134
+
1005
1135
  - (void)setKmlSrc:(NSString *)kmlUrl {
1006
1136
  #ifdef HAVE_GOOGLE_MAPS_UTILS
1007
1137
 
@@ -1011,53 +1141,28 @@ id regionAsJSON(MKCoordinateRegion region) {
1011
1141
  NSData *urlData = nil;
1012
1142
 
1013
1143
  if ([url isFileURL]) {
1014
- urlData = [NSData dataWithContentsOfURL:url];
1144
+ [self setKMLData:[NSData dataWithContentsOfURL:url]];
1015
1145
  } else {
1016
- urlData = [[NSFileManager defaultManager] contentsAtPath:kmlUrl];
1146
+ __weak AIRGoogleMap *weakSelf = self;
1147
+
1148
+ NSURLSession *session = [NSURLSession sharedSession];
1149
+ NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url
1150
+ completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
1151
+ if (error) {
1152
+ NSLog(@"Error fetching data: %@", error.localizedDescription);
1153
+ return;
1154
+ } else {
1155
+ dispatch_async(dispatch_get_main_queue(), ^{
1156
+ AIRGoogleMap *strongSelf = weakSelf;
1157
+ [strongSelf setKMLData:data];
1158
+ });
1159
+
1160
+ }
1161
+ }];
1162
+ [dataTask resume];
1017
1163
  }
1018
1164
 
1019
- GMUKMLParser *parser = [[GMUKMLParser alloc] initWithData:urlData];
1020
- [parser parse];
1021
-
1022
- NSUInteger index = 0;
1023
- NSMutableArray *markers = [[NSMutableArray alloc]init];
1024
-
1025
- for (GMUPlacemark *place in parser.placemarks) {
1026
-
1027
- CLLocationCoordinate2D location =((GMUPoint *) place.geometry).coordinate;
1028
-
1029
- AIRGoogleMapMarker *marker = (AIRGoogleMapMarker *)[[AIRGoogleMapMarkerManager alloc] view];
1030
- if (!marker.bridge) {
1031
- marker.bridge = _bridge;
1032
- }
1033
- marker.identifier = place.title;
1034
- marker.coordinate = location;
1035
- marker.title = place.title;
1036
- marker.subtitle = place.snippet;
1037
- marker.pinColor = place.style.fillColor;
1038
- marker.imageSrc = [AIRGoogleMap GetIconUrl:place parser:parser];
1039
- marker.layer.backgroundColor = [UIColor clearColor].CGColor;
1040
- marker.layer.position = CGPointZero;
1041
-
1042
- [self insertReactSubview:(UIView *) marker atIndex:index];
1043
-
1044
- [markers addObject:@{@"id": marker.identifier,
1045
- @"title": marker.title,
1046
- @"description": marker.subtitle,
1047
- @"coordinate": @{
1048
- @"latitude": @(location.latitude),
1049
- @"longitude": @(location.longitude)
1050
- }
1051
- }];
1052
-
1053
- index++;
1054
- }
1055
-
1056
- id event = @{@"markers": markers};
1057
- if (self.onKmlReady) self.onKmlReady(event);
1058
- #else
1059
- REQUIRES_GOOGLE_MAPS_UTILS();
1060
- #endif
1165
+
1061
1166
  }
1062
1167
 
1063
1168
 
@@ -25,20 +25,32 @@
25
25
  }
26
26
  return self;
27
27
  }
28
+ - (void) prepare
29
+ {
30
+ if(_didMoveToWindow) return;
31
+ _didMoveToWindow = true;
32
+ if(_fillColor) {
33
+ _circle.fillColor = _fillColor;
34
+ }
35
+ if(_strokeColor) {
36
+ _circle.strokeColor = _strokeColor;
37
+ }
38
+ if(_strokeWidth) {
39
+ _circle.strokeWidth = _strokeWidth;
40
+ }
41
+ if (_zIndex) {
42
+ _circle.zIndex = _zIndex;
43
+ }
44
+ }
45
+ - (void) didMoveToSuperview
46
+ {
47
+ [super didMoveToSuperview];
48
+ [self prepare];
49
+ }
28
50
 
29
51
  - (void)didMoveToWindow {
30
52
  [super didMoveToWindow];
31
- if(_didMoveToWindow) return;
32
- _didMoveToWindow = true;
33
- if(_fillColor) {
34
- _circle.fillColor = _fillColor;
35
- }
36
- if(_strokeColor) {
37
- _circle.strokeColor = _strokeColor;
38
- }
39
- if(_strokeWidth) {
40
- _circle.strokeWidth = _strokeWidth;
41
- }
53
+ [self prepare];
42
54
  }
43
55
 
44
56
  - (void)setRadius:(double)radius
@@ -253,7 +253,7 @@ RCT_EXPORT_METHOD(takeSnapshot:(nonnull NSNumber *)reactTag
253
253
  format:(nonnull NSString *)format
254
254
  quality:(nonnull NSNumber *)quality
255
255
  result:(nonnull NSString *)result
256
- withCallback:(RCTResponseSenderBlock)callback)
256
+ withCallback:(RCTPromiseResolveBlock)callback)
257
257
  {
258
258
  NSTimeInterval timeStamp = [[NSDate date] timeIntervalSince1970];
259
259
  NSString *pathComponent = [NSString stringWithFormat:@"Documents/snapshot-%.20lf.%@", timeStamp, format];
@@ -264,7 +264,19 @@ RCT_EXPORT_METHOD(takeSnapshot:(nonnull NSNumber *)reactTag
264
264
  if (![view isKindOfClass:[AIRGoogleMap class]]) {
265
265
  RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view);
266
266
  } else {
267
- AIRGoogleMap *mapView = (AIRGoogleMap *)view;
267
+ AIRGoogleMap *mapView = (AIRGoogleMap *)view;
268
+ NSMutableDictionary* config = [NSMutableDictionary new];
269
+
270
+ [mapView takeSnapshotWithConfig:config success:callback error:^(NSString *code, NSString *message, NSError *error) {
271
+ callback(@[error]);
272
+ }];
273
+
274
+ [config setObject:width forKey:@"width"];
275
+ [config setObject:height forKey:@"height"];
276
+ [config setObject:format forKey:@"format"];
277
+ [config setObject:quality forKey:@"quality"];
278
+ [config setObject:result forKey:@"result"];
279
+ [config setObject:filePath forKey:@"filePath"];
268
280
 
269
281
  // TODO: currently we are ignoring width, height, region
270
282
 
@@ -310,13 +322,7 @@ RCT_EXPORT_METHOD(pointForCoordinate:(nonnull NSNumber *)reactTag
310
322
  RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view);
311
323
  } else {
312
324
  AIRGoogleMap *mapView = (AIRGoogleMap *)view;
313
-
314
- CGPoint touchPoint = [mapView.projection pointForCoordinate:coord];
315
-
316
- resolve(@{
317
- @"x": @(touchPoint.x),
318
- @"y": @(touchPoint.y),
319
- });
325
+ resolve([mapView getPointForCoordinates:coord]);
320
326
  }
321
327
  }];
322
328
  }
@@ -337,13 +343,7 @@ RCT_EXPORT_METHOD(coordinateForPoint:(nonnull NSNumber *)reactTag
337
343
  RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view);
338
344
  } else {
339
345
  AIRGoogleMap *mapView = (AIRGoogleMap *)view;
340
-
341
- CLLocationCoordinate2D coordinate = [mapView.projection coordinateForPoint:pt];
342
-
343
- resolve(@{
344
- @"latitude": @(coordinate.latitude),
345
- @"longitude": @(coordinate.longitude),
346
- });
346
+ resolve([view getCoordinatesForPoint:pt]);
347
347
  }
348
348
  }];
349
349
  }
@@ -373,18 +373,7 @@ RCT_EXPORT_METHOD(getMapBoundaries:(nonnull NSNumber *)reactTag
373
373
  if (![view isKindOfClass:[AIRGoogleMap class]]) {
374
374
  RCTLogError(@"Invalid view returned from registry, expecting AIRGoogleMap, got: %@", view);
375
375
  } else {
376
- NSArray *boundingBox = [view getMapBoundaries];
377
-
378
- resolve(@{
379
- @"northEast" : @{
380
- @"longitude" : boundingBox[0][0],
381
- @"latitude" : boundingBox[0][1]
382
- },
383
- @"southWest" : @{
384
- @"longitude" : boundingBox[1][0],
385
- @"latitude" : boundingBox[1][1]
386
- }
387
- });
376
+ resolve([view getMapBoundaries]);
388
377
  }
389
378
  }];
390
379
  }
@@ -53,6 +53,8 @@
53
53
  - (void)didDragMarker:(AIRGMSMarker *)marker;
54
54
  - (id)makeEventData;
55
55
  - (id)makeEventData:(NSString *)action;
56
+ - (UIView *) iconView;
57
+ - (void) didInsertInMap:(AIRGoogleMap *) map;
56
58
  @end
57
59
 
58
60
  #endif