1/** 2 * Copyright (c) 2015-present, Facebook, Inc. 3 * All rights reserved. 4 * 5 * This source code is licensed under the BSD-style license found in the 6 * LICENSE file in the root directory of this source tree. An additional grant 7 * of patent rights can be found in the PATENTS file in the same directory. 8 */ 9 10#import "AIRMapMarkerManager.h" 11 12#import <React/RCTConvert+CoreLocation.h> 13#import <React/RCTUIManager.h> 14#import <React/UIView+React.h> 15#import "AIRMapMarker.h" 16 17@interface AIRMapMarkerManager () <MKMapViewDelegate> 18 19@end 20 21@implementation AIRMapMarkerManager 22 23RCT_EXPORT_MODULE() 24 25- (UIView *)view 26{ 27 AIRMapMarker *marker = [AIRMapMarker new]; 28 [marker addTapGestureRecognizer]; 29 marker.bridge = self.bridge; 30 marker.isAccessibilityElement = YES; 31 marker.accessibilityElementsHidden = NO; 32 return marker; 33} 34 35RCT_EXPORT_VIEW_PROPERTY(identifier, NSString) 36RCT_REMAP_VIEW_PROPERTY(testID, accessibilityIdentifier, NSString) 37//RCT_EXPORT_VIEW_PROPERTY(reuseIdentifier, NSString) 38RCT_EXPORT_VIEW_PROPERTY(title, NSString) 39RCT_REMAP_VIEW_PROPERTY(description, subtitle, NSString) 40RCT_EXPORT_VIEW_PROPERTY(coordinate, CLLocationCoordinate2D) 41RCT_EXPORT_VIEW_PROPERTY(centerOffset, CGPoint) 42RCT_EXPORT_VIEW_PROPERTY(calloutOffset, CGPoint) 43RCT_REMAP_VIEW_PROPERTY(image, imageSrc, NSString) 44RCT_EXPORT_VIEW_PROPERTY(pinColor, UIColor) 45RCT_EXPORT_VIEW_PROPERTY(draggable, BOOL) 46RCT_EXPORT_VIEW_PROPERTY(zIndex, NSInteger) 47RCT_EXPORT_VIEW_PROPERTY(opacity, double) 48RCT_EXPORT_VIEW_PROPERTY(isPreselected, BOOL) 49 50RCT_EXPORT_VIEW_PROPERTY(onPress, RCTBubblingEventBlock) 51RCT_EXPORT_VIEW_PROPERTY(onSelect, RCTDirectEventBlock) 52RCT_EXPORT_VIEW_PROPERTY(onDeselect, RCTDirectEventBlock) 53RCT_EXPORT_VIEW_PROPERTY(onCalloutPress, RCTDirectEventBlock) 54RCT_EXPORT_VIEW_PROPERTY(onDragStart, RCTDirectEventBlock) 55RCT_EXPORT_VIEW_PROPERTY(onDrag, RCTDirectEventBlock) 56RCT_EXPORT_VIEW_PROPERTY(onDragEnd, RCTDirectEventBlock) 57 58 59RCT_EXPORT_METHOD(showCallout:(nonnull NSNumber *)reactTag) 60{ 61 [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { 62 id view = viewRegistry[reactTag]; 63 if (![view isKindOfClass:[AIRMapMarker class]]) { 64 RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view); 65 } else { 66 [(AIRMapMarker *) view showCalloutView]; 67 } 68 }]; 69} 70 71RCT_EXPORT_METHOD(hideCallout:(nonnull NSNumber *)reactTag) 72{ 73 [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { 74 id view = viewRegistry[reactTag]; 75 if (![view isKindOfClass:[AIRMapMarker class]]) { 76 RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view); 77 } else { 78 [(AIRMapMarker *) view hideCalloutView]; 79 } 80 }]; 81} 82 83RCT_EXPORT_METHOD(redrawCallout:(nonnull NSNumber *)reactTag) 84{ 85 [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, UIView *> *viewRegistry) { 86 id view = viewRegistry[reactTag]; 87 if (![view isKindOfClass:[AIRMapMarker class]]) { 88 RCTLogError(@"Invalid view returned from registry, expecting AIRMap, got: %@", view); 89 } else { 90 //no need to do anything here 91 } 92 }]; 93} 94 95@end 96