1// 2// AIRGoogleMapMarkerManager.m 3// AirMaps 4// 5// Created by Gil Birman on 9/2/16. 6// 7 8#ifdef HAVE_GOOGLE_MAPS 9 10#import "AIRGoogleMapMarkerManager.h" 11#import "AIRGoogleMapMarker.h" 12#import <MapKit/MapKit.h> 13#import <React/RCTUIManager.h> 14#import "RCTConvert+AirMap.h" 15 16@implementation AIRGoogleMapMarkerManager 17 18RCT_EXPORT_MODULE() 19 20- (UIView *)view 21{ 22 AIRGoogleMapMarker *marker = [AIRGoogleMapMarker new]; 23// UITapGestureRecognizer *tapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_handleTap:)]; 24// // setting this to NO allows the parent MapView to continue receiving marker selection events 25// tapGestureRecognizer.cancelsTouchesInView = NO; 26// [marker addGestureRecognizer:tapGestureRecognizer]; 27 marker.bridge = self.bridge; 28 marker.isAccessibilityElement = YES; 29 marker.accessibilityElementsHidden = NO; 30 return marker; 31} 32 33RCT_EXPORT_VIEW_PROPERTY(identifier, NSString) 34RCT_EXPORT_VIEW_PROPERTY(coordinate, CLLocationCoordinate2D) 35RCT_EXPORT_VIEW_PROPERTY(rotation, CLLocationDegrees) 36RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock) 37RCT_REMAP_VIEW_PROPERTY(image, imageSrc, NSString) 38RCT_REMAP_VIEW_PROPERTY(icon, iconSrc, NSString) 39RCT_EXPORT_VIEW_PROPERTY(title, NSString) 40RCT_REMAP_VIEW_PROPERTY(testID, accessibilityIdentifier, NSString) 41RCT_REMAP_VIEW_PROPERTY(description, subtitle, NSString) 42RCT_EXPORT_VIEW_PROPERTY(pinColor, UIColor) 43RCT_EXPORT_VIEW_PROPERTY(anchor, CGPoint) 44RCT_EXPORT_VIEW_PROPERTY(calloutAnchor, CGPoint) 45RCT_EXPORT_VIEW_PROPERTY(zIndex, NSInteger) 46RCT_EXPORT_VIEW_PROPERTY(draggable, BOOL) 47RCT_EXPORT_VIEW_PROPERTY(tappable, BOOL) 48RCT_EXPORT_VIEW_PROPERTY(flat, BOOL) 49RCT_EXPORT_VIEW_PROPERTY(tracksViewChanges, BOOL) 50RCT_EXPORT_VIEW_PROPERTY(tracksInfoWindowChanges, BOOL) 51RCT_EXPORT_VIEW_PROPERTY(opacity, double) 52RCT_EXPORT_VIEW_PROPERTY(onDragStart, RCTDirectEventBlock) 53RCT_EXPORT_VIEW_PROPERTY(onDrag, RCTDirectEventBlock) 54RCT_EXPORT_VIEW_PROPERTY(onDragEnd, RCTDirectEventBlock) 55 56RCT_EXPORT_METHOD(showCallout:(nonnull NSNumber *)reactTag) 57{ 58 [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { 59 id view = viewRegistry[reactTag]; 60 if (![view isKindOfClass:[AIRGoogleMapMarker class]]) { 61 RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view); 62 } else { 63 [(AIRGoogleMapMarker *) view showCalloutView]; 64 } 65 }]; 66} 67 68RCT_EXPORT_METHOD(hideCallout:(nonnull NSNumber *)reactTag) 69{ 70 [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { 71 id view = viewRegistry[reactTag]; 72 if (![view isKindOfClass:[AIRGoogleMapMarker class]]) { 73 RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view); 74 } else { 75 [(AIRGoogleMapMarker *) view hideCalloutView]; 76 } 77 }]; 78} 79 80RCT_EXPORT_METHOD(redrawCallout:(nonnull NSNumber *)reactTag) 81{ 82 [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { 83 id view = viewRegistry[reactTag]; 84 if (![view isKindOfClass:[AIRGoogleMapMarker class]]) { 85 RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view); 86 } else { 87 AIRGoogleMapMarker* marker = (AIRGoogleMapMarker *) view; 88 89 [NSTimer scheduledTimerWithTimeInterval:0.0 90 target:[NSBlockOperation blockOperationWithBlock:^{ 91 [marker hideCalloutView]; 92 [marker showCalloutView]; 93 }] 94 selector:@selector(main) 95 userInfo:nil 96 repeats:NO 97 ]; 98 } 99 }]; 100} 101 102RCT_EXPORT_METHOD(redraw:(nonnull NSNumber *)reactTag) 103{ 104 [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { 105 id view = viewRegistry[reactTag]; 106 if (![view isKindOfClass:[AIRGoogleMapMarker class]]) { 107 RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view); 108 } else { 109 [(AIRGoogleMapMarker *) view redraw]; 110 } 111 }]; 112} 113@end 114 115#endif 116