@lugg/maps 0.2.0-alpha.9 → 1.0.0-beta.1
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.
- package/README.md +21 -20
- package/android/build.gradle +1 -1
- package/android/src/main/java/com/luggmaps/LuggCalloutView.kt +74 -0
- package/android/src/main/java/com/luggmaps/LuggCalloutViewManager.kt +38 -0
- package/android/src/main/java/com/luggmaps/LuggMapView.kt +290 -0
- package/android/src/main/java/com/luggmaps/{LuggGoogleMapViewManager.kt → LuggMapViewManager.kt} +99 -36
- package/android/src/main/java/com/luggmaps/LuggMapWrapperView.kt +11 -14
- package/android/src/main/java/com/luggmaps/LuggMarkerView.kt +187 -21
- package/android/src/main/java/com/luggmaps/LuggMarkerViewManager.kt +28 -0
- package/android/src/main/java/com/luggmaps/LuggPackage.kt +8 -4
- package/android/src/main/java/com/luggmaps/LuggPolygonView.kt +85 -0
- package/android/src/main/java/com/luggmaps/LuggPolygonViewManager.kt +100 -0
- package/android/src/main/java/com/luggmaps/LuggPolylineView.kt +16 -0
- package/android/src/main/java/com/luggmaps/LuggPolylineViewManager.kt +22 -0
- package/android/src/main/java/com/luggmaps/core/GoogleMapProvider.kt +874 -0
- package/android/src/main/java/com/luggmaps/core/MapProviderDelegate.kt +60 -0
- package/android/src/main/java/com/luggmaps/core/PolylineAnimator.kt +89 -24
- package/android/src/main/java/com/luggmaps/events/LongPressEvent.kt +29 -0
- package/android/src/main/java/com/luggmaps/events/MarkerDragEvent.kt +41 -0
- package/android/src/main/java/com/luggmaps/events/MarkerPressEvent.kt +34 -0
- package/android/src/main/java/com/luggmaps/events/PolygonPressEvent.kt +12 -0
- package/android/src/main/java/com/luggmaps/events/PressEvent.kt +29 -0
- package/ios/LuggCalloutView.h +23 -0
- package/ios/LuggCalloutView.mm +145 -0
- package/ios/LuggMapView.h +9 -0
- package/ios/LuggMapView.mm +343 -0
- package/ios/LuggMarkerView.h +15 -0
- package/ios/LuggMarkerView.mm +136 -2
- package/ios/LuggPolygonView.h +31 -0
- package/ios/LuggPolygonView.mm +151 -0
- package/ios/LuggPolylineView.h +4 -0
- package/ios/LuggPolylineView.mm +23 -0
- package/ios/core/AppleMapProvider.h +15 -0
- package/ios/core/AppleMapProvider.mm +1173 -0
- package/ios/core/GMSPolylineAnimator.h +3 -0
- package/ios/core/GMSPolylineAnimator.m +101 -15
- package/ios/core/GoogleMapProvider.h +13 -0
- package/ios/core/GoogleMapProvider.mm +798 -0
- package/ios/core/LuggAnnotationView.h +12 -0
- package/ios/core/LuggAnnotationView.mm +55 -0
- package/ios/core/MKPolylineAnimator.h +4 -0
- package/ios/core/MKPolylineAnimator.m +167 -42
- package/ios/core/MapProviderDelegate.h +84 -0
- package/ios/core/PolylineAnimatorBase.h +24 -1
- package/ios/core/PolylineAnimatorBase.m +82 -19
- package/ios/events/LongPressEvent.h +29 -0
- package/ios/events/MarkerDragEvent.h +69 -0
- package/ios/events/MarkerPressEvent.h +29 -0
- package/ios/events/PolygonPressEvent.h +20 -0
- package/ios/events/PressEvent.h +29 -0
- package/ios/extensions/MKMapView+Zoom.h +2 -0
- package/ios/extensions/MKMapView+Zoom.m +14 -4
- package/lib/module/MapProvider.js +2 -4
- package/lib/module/MapProvider.js.map +1 -1
- package/lib/module/MapProvider.web.js +14 -7
- package/lib/module/MapProvider.web.js.map +1 -1
- package/lib/module/MapView.js +33 -16
- package/lib/module/MapView.js.map +1 -1
- package/lib/module/MapView.web.js +296 -181
- package/lib/module/MapView.web.js.map +1 -1
- package/lib/module/components/GeoJson.js +159 -0
- package/lib/module/components/GeoJson.js.map +1 -0
- package/lib/module/components/GeoJson.types.js +4 -0
- package/lib/module/components/GeoJson.types.js.map +1 -0
- package/lib/module/components/Marker.js +49 -8
- package/lib/module/components/Marker.js.map +1 -1
- package/lib/module/components/Marker.types.js +4 -0
- package/lib/module/components/Marker.types.js.map +1 -0
- package/lib/module/components/Marker.web.js +159 -24
- package/lib/module/components/Marker.web.js.map +1 -1
- package/lib/module/components/Polygon.js +46 -0
- package/lib/module/components/Polygon.js.map +1 -0
- package/lib/module/components/Polygon.types.js +4 -0
- package/lib/module/components/Polygon.types.js.map +1 -0
- package/lib/module/components/Polygon.web.js +87 -0
- package/lib/module/components/Polygon.web.js.map +1 -0
- package/lib/module/components/Polyline.js +17 -4
- package/lib/module/components/Polyline.js.map +1 -1
- package/lib/module/components/Polyline.types.js +4 -0
- package/lib/module/components/Polyline.types.js.map +1 -0
- package/lib/module/components/Polyline.web.js +108 -31
- package/lib/module/components/Polyline.web.js.map +1 -1
- package/lib/module/components/index.js +4 -2
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/components/index.web.js +2 -0
- package/lib/module/components/index.web.js.map +1 -1
- package/lib/module/fabric/LuggCalloutViewNativeComponent.ts +20 -0
- package/lib/module/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +43 -7
- package/lib/module/fabric/LuggMarkerViewNativeComponent.ts +49 -1
- package/lib/module/fabric/LuggPolygonViewNativeComponent.ts +25 -0
- package/lib/module/fabric/LuggPolylineViewNativeComponent.ts +8 -0
- package/lib/module/index.js +4 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js +4 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/typescript/src/MapProvider.d.ts +1 -1
- package/lib/typescript/src/MapProvider.d.ts.map +1 -1
- package/lib/typescript/src/MapProvider.web.d.ts +23 -1
- package/lib/typescript/src/MapProvider.web.d.ts.map +1 -1
- package/lib/typescript/src/MapView.d.ts +4 -4
- package/lib/typescript/src/MapView.d.ts.map +1 -1
- package/lib/typescript/src/MapView.types.d.ts +35 -9
- package/lib/typescript/src/MapView.types.d.ts.map +1 -1
- package/lib/typescript/src/MapView.web.d.ts +2 -11
- package/lib/typescript/src/MapView.web.d.ts.map +1 -1
- package/lib/typescript/src/components/GeoJson.d.ts +4 -0
- package/lib/typescript/src/components/GeoJson.d.ts.map +1 -0
- package/lib/typescript/src/components/GeoJson.types.d.ts +89 -0
- package/lib/typescript/src/components/GeoJson.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Marker.d.ts +6 -33
- package/lib/typescript/src/components/Marker.d.ts.map +1 -1
- package/lib/typescript/src/components/Marker.types.d.ts +100 -0
- package/lib/typescript/src/components/Marker.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Marker.web.d.ts +2 -5
- package/lib/typescript/src/components/Marker.web.d.ts.map +1 -1
- package/lib/typescript/src/components/Polygon.d.ts +10 -0
- package/lib/typescript/src/components/Polygon.d.ts.map +1 -0
- package/lib/typescript/src/components/Polygon.types.d.ts +33 -0
- package/lib/typescript/src/components/Polygon.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Polygon.web.d.ts +3 -0
- package/lib/typescript/src/components/Polygon.web.d.ts.map +1 -0
- package/lib/typescript/src/components/Polyline.d.ts +6 -21
- package/lib/typescript/src/components/Polyline.d.ts.map +1 -1
- package/lib/typescript/src/components/Polyline.types.d.ts +53 -0
- package/lib/typescript/src/components/Polyline.types.d.ts.map +1 -0
- package/lib/typescript/src/components/Polyline.web.d.ts +2 -5
- package/lib/typescript/src/components/Polyline.web.d.ts.map +1 -1
- package/lib/typescript/src/components/index.d.ts +8 -2
- package/lib/typescript/src/components/index.d.ts.map +1 -1
- package/lib/typescript/src/components/index.web.d.ts +6 -2
- package/lib/typescript/src/components/index.web.d.ts.map +1 -1
- package/lib/typescript/src/fabric/LuggCalloutViewNativeComponent.d.ts +13 -0
- package/lib/typescript/src/fabric/LuggCalloutViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/{LuggGoogleMapViewNativeComponent.d.ts → LuggMapViewNativeComponent.d.ts} +30 -4
- package/lib/typescript/src/fabric/LuggMapViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts +45 -1
- package/lib/typescript/src/fabric/LuggMarkerViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/fabric/LuggPolygonViewNativeComponent.d.ts +18 -0
- package/lib/typescript/src/fabric/LuggPolygonViewNativeComponent.d.ts.map +1 -0
- package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts +7 -0
- package/lib/typescript/src/fabric/LuggPolylineViewNativeComponent.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +11 -3
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/index.web.d.ts +9 -1
- package/lib/typescript/src/index.web.d.ts.map +1 -1
- package/lib/typescript/src/types.d.ts +11 -0
- package/lib/typescript/src/types.d.ts.map +1 -1
- package/package.json +11 -9
- package/src/MapProvider.tsx +1 -3
- package/src/MapProvider.web.tsx +22 -3
- package/src/MapView.tsx +32 -26
- package/src/MapView.types.ts +43 -9
- package/src/MapView.web.tsx +368 -210
- package/src/components/GeoJson.tsx +221 -0
- package/src/components/GeoJson.types.ts +118 -0
- package/src/components/Marker.tsx +75 -38
- package/src/components/Marker.types.ts +102 -0
- package/src/components/Marker.web.tsx +197 -19
- package/src/components/Polygon.tsx +52 -0
- package/src/components/Polygon.types.ts +33 -0
- package/src/components/Polygon.web.tsx +104 -0
- package/src/components/Polyline.tsx +23 -22
- package/src/components/Polyline.types.ts +55 -0
- package/src/components/Polyline.web.tsx +151 -37
- package/src/components/index.ts +17 -2
- package/src/components/index.web.ts +6 -2
- package/src/fabric/LuggCalloutViewNativeComponent.ts +20 -0
- package/src/fabric/{LuggGoogleMapViewNativeComponent.ts → LuggMapViewNativeComponent.ts} +43 -7
- package/src/fabric/LuggMarkerViewNativeComponent.ts +49 -1
- package/src/fabric/LuggPolygonViewNativeComponent.ts +25 -0
- package/src/fabric/LuggPolylineViewNativeComponent.ts +8 -0
- package/src/index.ts +30 -1
- package/src/index.web.ts +16 -1
- package/src/types.ts +13 -0
- package/android/src/main/java/com/luggmaps/LuggGoogleMapView.kt +0 -511
- package/ios/LuggAppleMapView.h +0 -16
- package/ios/LuggAppleMapView.mm +0 -592
- package/ios/LuggGoogleMapView.h +0 -13
- package/ios/LuggGoogleMapView.mm +0 -455
- package/lib/module/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
- package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts +0 -54
- package/lib/typescript/src/fabric/LuggAppleMapViewNativeComponent.d.ts.map +0 -1
- package/lib/typescript/src/fabric/LuggGoogleMapViewNativeComponent.d.ts.map +0 -1
- package/src/fabric/LuggAppleMapViewNativeComponent.ts +0 -83
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
#import "LuggMapView.h"
|
|
2
|
+
#import "LuggMapWrapperView.h"
|
|
3
|
+
#import "LuggMarkerView.h"
|
|
4
|
+
#import "LuggPolygonView.h"
|
|
5
|
+
#import "LuggPolylineView.h"
|
|
6
|
+
#import "core/AppleMapProvider.h"
|
|
7
|
+
#import "core/GoogleMapProvider.h"
|
|
8
|
+
#import "core/MapProviderDelegate.h"
|
|
9
|
+
#import "events/CameraIdleEvent.h"
|
|
10
|
+
#import "events/CameraMoveEvent.h"
|
|
11
|
+
#import "events/LongPressEvent.h"
|
|
12
|
+
#import "events/PressEvent.h"
|
|
13
|
+
#import "events/ReadyEvent.h"
|
|
14
|
+
|
|
15
|
+
#import <react/renderer/components/RNMapsSpec/ComponentDescriptors.h>
|
|
16
|
+
#import <react/renderer/components/RNMapsSpec/EventEmitters.h>
|
|
17
|
+
#import <react/renderer/components/RNMapsSpec/Props.h>
|
|
18
|
+
#import <react/renderer/components/RNMapsSpec/RCTComponentViewHelpers.h>
|
|
19
|
+
|
|
20
|
+
#import "RCTFabricComponentsPlugins.h"
|
|
21
|
+
|
|
22
|
+
using namespace facebook::react;
|
|
23
|
+
using namespace luggmaps::events;
|
|
24
|
+
|
|
25
|
+
@interface LuggMapView () <RCTLuggMapViewViewProtocol, MapProviderDelegate>
|
|
26
|
+
@end
|
|
27
|
+
|
|
28
|
+
@implementation LuggMapView {
|
|
29
|
+
id<MapProvider> _provider;
|
|
30
|
+
LuggMapWrapperView *_mapWrapperView;
|
|
31
|
+
LuggMapViewProvider _providerType;
|
|
32
|
+
NSString *_mapId;
|
|
33
|
+
BOOL _initialized;
|
|
34
|
+
// Cached props to apply after content creation
|
|
35
|
+
BOOL _zoomEnabled;
|
|
36
|
+
BOOL _scrollEnabled;
|
|
37
|
+
BOOL _rotateEnabled;
|
|
38
|
+
BOOL _pitchEnabled;
|
|
39
|
+
BOOL _userLocationEnabled;
|
|
40
|
+
LuggMapViewTheme _theme;
|
|
41
|
+
double _minZoom;
|
|
42
|
+
double _maxZoom;
|
|
43
|
+
UIEdgeInsets _edgeInsets;
|
|
44
|
+
UIEdgeInsets _oldEdgeInsets;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
+ (ComponentDescriptorProvider)componentDescriptorProvider {
|
|
48
|
+
return concreteComponentDescriptorProvider<LuggMapViewComponentDescriptor>();
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
- (instancetype)initWithFrame:(CGRect)frame {
|
|
52
|
+
if (self = [super initWithFrame:frame]) {
|
|
53
|
+
static const auto defaultProps = std::make_shared<const LuggMapViewProps>();
|
|
54
|
+
_props = defaultProps;
|
|
55
|
+
|
|
56
|
+
_initialized = NO;
|
|
57
|
+
_mapId = @"";
|
|
58
|
+
_providerType = LuggMapViewProvider::Google;
|
|
59
|
+
_zoomEnabled = YES;
|
|
60
|
+
_scrollEnabled = YES;
|
|
61
|
+
_rotateEnabled = YES;
|
|
62
|
+
_pitchEnabled = YES;
|
|
63
|
+
_userLocationEnabled = NO;
|
|
64
|
+
_theme = LuggMapViewTheme::System;
|
|
65
|
+
_edgeInsets = UIEdgeInsetsZero;
|
|
66
|
+
}
|
|
67
|
+
return self;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
#pragma mark - View Lifecycle
|
|
71
|
+
|
|
72
|
+
- (void)mountChildComponentView:
|
|
73
|
+
(UIView<RCTComponentViewProtocol> *)childComponentView
|
|
74
|
+
index:(NSInteger)index {
|
|
75
|
+
[super mountChildComponentView:childComponentView index:index];
|
|
76
|
+
|
|
77
|
+
if ([childComponentView isKindOfClass:[LuggMapWrapperView class]]) {
|
|
78
|
+
_mapWrapperView = (LuggMapWrapperView *)childComponentView;
|
|
79
|
+
} else if ([childComponentView isKindOfClass:[LuggMarkerView class]]) {
|
|
80
|
+
LuggMarkerView *markerView = (LuggMarkerView *)childComponentView;
|
|
81
|
+
if (_provider) {
|
|
82
|
+
[_provider addMarkerView:markerView];
|
|
83
|
+
}
|
|
84
|
+
} else if ([childComponentView isKindOfClass:[LuggPolylineView class]]) {
|
|
85
|
+
LuggPolylineView *polylineView = (LuggPolylineView *)childComponentView;
|
|
86
|
+
if (_provider) {
|
|
87
|
+
[_provider addPolylineView:polylineView];
|
|
88
|
+
}
|
|
89
|
+
} else if ([childComponentView isKindOfClass:[LuggPolygonView class]]) {
|
|
90
|
+
LuggPolygonView *polygonView = (LuggPolygonView *)childComponentView;
|
|
91
|
+
if (_provider) {
|
|
92
|
+
[_provider addPolygonView:polygonView];
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
- (void)unmountChildComponentView:
|
|
98
|
+
(UIView<RCTComponentViewProtocol> *)childComponentView
|
|
99
|
+
index:(NSInteger)index {
|
|
100
|
+
if ([childComponentView isKindOfClass:[LuggMarkerView class]]) {
|
|
101
|
+
LuggMarkerView *markerView = (LuggMarkerView *)childComponentView;
|
|
102
|
+
if (_provider) {
|
|
103
|
+
[_provider removeMarkerView:markerView];
|
|
104
|
+
}
|
|
105
|
+
} else if ([childComponentView isKindOfClass:[LuggPolylineView class]]) {
|
|
106
|
+
LuggPolylineView *polylineView = (LuggPolylineView *)childComponentView;
|
|
107
|
+
if (_provider) {
|
|
108
|
+
[_provider removePolylineView:polylineView];
|
|
109
|
+
}
|
|
110
|
+
} else if ([childComponentView isKindOfClass:[LuggPolygonView class]]) {
|
|
111
|
+
LuggPolygonView *polygonView = (LuggPolygonView *)childComponentView;
|
|
112
|
+
if (_provider) {
|
|
113
|
+
[_provider removePolygonView:polygonView];
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
[super unmountChildComponentView:childComponentView index:index];
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
- (void)didMoveToWindow {
|
|
121
|
+
[super didMoveToWindow];
|
|
122
|
+
if (self.window) {
|
|
123
|
+
if (!_provider && _mapWrapperView) {
|
|
124
|
+
[self initializeProvider];
|
|
125
|
+
}
|
|
126
|
+
[_provider resumeAnimations];
|
|
127
|
+
} else {
|
|
128
|
+
[_provider pauseAnimations];
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
- (void)prepareForRecycle {
|
|
133
|
+
[super prepareForRecycle];
|
|
134
|
+
|
|
135
|
+
[_provider destroy];
|
|
136
|
+
_provider = nil;
|
|
137
|
+
_mapWrapperView = nil;
|
|
138
|
+
_initialized = NO;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
#pragma mark - Provider Initialization
|
|
142
|
+
|
|
143
|
+
- (void)initializeProvider {
|
|
144
|
+
if (_provider || !_mapWrapperView)
|
|
145
|
+
return;
|
|
146
|
+
|
|
147
|
+
const auto &viewProps =
|
|
148
|
+
*std::static_pointer_cast<LuggMapViewProps const>(_props);
|
|
149
|
+
|
|
150
|
+
if (_providerType == LuggMapViewProvider::Apple) {
|
|
151
|
+
_provider = [[AppleMapProvider alloc] init];
|
|
152
|
+
} else {
|
|
153
|
+
GoogleMapProvider *google = [[GoogleMapProvider alloc] init];
|
|
154
|
+
google.mapId = _mapId;
|
|
155
|
+
_provider = google;
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
_provider.delegate = self;
|
|
159
|
+
|
|
160
|
+
CLLocationCoordinate2D coordinate =
|
|
161
|
+
CLLocationCoordinate2DMake(viewProps.initialCoordinate.latitude,
|
|
162
|
+
viewProps.initialCoordinate.longitude);
|
|
163
|
+
|
|
164
|
+
[_provider initializeMapInView:_mapWrapperView
|
|
165
|
+
initialCoordinate:coordinate
|
|
166
|
+
initialZoom:viewProps.initialZoom];
|
|
167
|
+
|
|
168
|
+
// Apply cached props after map view is created
|
|
169
|
+
[self applyProps];
|
|
170
|
+
[_provider setEdgeInsets:_edgeInsets oldEdgeInsets:UIEdgeInsetsZero];
|
|
171
|
+
|
|
172
|
+
_initialized = YES;
|
|
173
|
+
|
|
174
|
+
// Flush any children that were mounted before content was created
|
|
175
|
+
for (UIView *subview in self.subviews) {
|
|
176
|
+
if ([subview isKindOfClass:[LuggMarkerView class]]) {
|
|
177
|
+
[_provider addMarkerView:(LuggMarkerView *)subview];
|
|
178
|
+
} else if ([subview isKindOfClass:[LuggPolylineView class]]) {
|
|
179
|
+
[_provider addPolylineView:(LuggPolylineView *)subview];
|
|
180
|
+
} else if ([subview isKindOfClass:[LuggPolygonView class]]) {
|
|
181
|
+
[_provider addPolygonView:(LuggPolygonView *)subview];
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
#pragma mark - MapProviderDelegate
|
|
187
|
+
|
|
188
|
+
- (void)mapProviderDidReady {
|
|
189
|
+
ReadyEvent::emit<LuggMapViewEventEmitter>(_eventEmitter);
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
- (void)mapProviderDidMoveCamera:(double)latitude
|
|
193
|
+
longitude:(double)longitude
|
|
194
|
+
zoom:(double)zoom
|
|
195
|
+
gesture:(BOOL)gesture {
|
|
196
|
+
CameraMoveEvent{latitude, longitude, zoom, static_cast<bool>(gesture)}
|
|
197
|
+
.emit<LuggMapViewEventEmitter>(_eventEmitter);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
- (void)mapProviderDidIdleCamera:(double)latitude
|
|
201
|
+
longitude:(double)longitude
|
|
202
|
+
zoom:(double)zoom
|
|
203
|
+
gesture:(BOOL)gesture {
|
|
204
|
+
CameraIdleEvent{latitude, longitude, zoom, static_cast<bool>(gesture)}
|
|
205
|
+
.emit<LuggMapViewEventEmitter>(_eventEmitter);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
- (void)mapProviderDidPress:(double)latitude
|
|
209
|
+
longitude:(double)longitude
|
|
210
|
+
x:(double)x
|
|
211
|
+
y:(double)y {
|
|
212
|
+
PressEvent{latitude, longitude, x, y}.emit<LuggMapViewEventEmitter>(
|
|
213
|
+
_eventEmitter);
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
- (void)mapProviderDidLongPress:(double)latitude
|
|
217
|
+
longitude:(double)longitude
|
|
218
|
+
x:(double)x
|
|
219
|
+
y:(double)y {
|
|
220
|
+
LongPressEvent{latitude, longitude, x, y}.emit<LuggMapViewEventEmitter>(
|
|
221
|
+
_eventEmitter);
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
#pragma mark - Property Setters
|
|
225
|
+
|
|
226
|
+
- (void)applyProps {
|
|
227
|
+
[_provider setZoomEnabled:_zoomEnabled];
|
|
228
|
+
[_provider setScrollEnabled:_scrollEnabled];
|
|
229
|
+
[_provider setRotateEnabled:_rotateEnabled];
|
|
230
|
+
[_provider setPitchEnabled:_pitchEnabled];
|
|
231
|
+
[_provider setUserLocationEnabled:_userLocationEnabled];
|
|
232
|
+
[_provider setTheme:(NSInteger)_theme];
|
|
233
|
+
[_provider setMinZoom:_minZoom];
|
|
234
|
+
[_provider setMaxZoom:_maxZoom];
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
- (void)updateProps:(Props::Shared const &)props
|
|
238
|
+
oldProps:(Props::Shared const &)oldProps {
|
|
239
|
+
const auto &newViewProps =
|
|
240
|
+
*std::static_pointer_cast<LuggMapViewProps const>(props);
|
|
241
|
+
const auto &prevViewProps =
|
|
242
|
+
*std::static_pointer_cast<LuggMapViewProps const>(_props);
|
|
243
|
+
|
|
244
|
+
_providerType = newViewProps.provider;
|
|
245
|
+
|
|
246
|
+
NSString *newMapId =
|
|
247
|
+
[NSString stringWithUTF8String:newViewProps.mapId.c_str()];
|
|
248
|
+
if (newMapId.length > 0) {
|
|
249
|
+
_mapId = newMapId;
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
if (newViewProps.zoomEnabled != prevViewProps.zoomEnabled) {
|
|
253
|
+
_zoomEnabled = newViewProps.zoomEnabled;
|
|
254
|
+
[_provider setZoomEnabled:_zoomEnabled];
|
|
255
|
+
}
|
|
256
|
+
if (newViewProps.scrollEnabled != prevViewProps.scrollEnabled) {
|
|
257
|
+
_scrollEnabled = newViewProps.scrollEnabled;
|
|
258
|
+
[_provider setScrollEnabled:_scrollEnabled];
|
|
259
|
+
}
|
|
260
|
+
if (newViewProps.rotateEnabled != prevViewProps.rotateEnabled) {
|
|
261
|
+
_rotateEnabled = newViewProps.rotateEnabled;
|
|
262
|
+
[_provider setRotateEnabled:_rotateEnabled];
|
|
263
|
+
}
|
|
264
|
+
if (newViewProps.pitchEnabled != prevViewProps.pitchEnabled) {
|
|
265
|
+
_pitchEnabled = newViewProps.pitchEnabled;
|
|
266
|
+
[_provider setPitchEnabled:_pitchEnabled];
|
|
267
|
+
}
|
|
268
|
+
if (newViewProps.userLocationEnabled != prevViewProps.userLocationEnabled) {
|
|
269
|
+
_userLocationEnabled = newViewProps.userLocationEnabled;
|
|
270
|
+
[_provider setUserLocationEnabled:_userLocationEnabled];
|
|
271
|
+
}
|
|
272
|
+
if (newViewProps.minZoom != prevViewProps.minZoom) {
|
|
273
|
+
_minZoom = newViewProps.minZoom;
|
|
274
|
+
[_provider setMinZoom:_minZoom];
|
|
275
|
+
}
|
|
276
|
+
if (newViewProps.maxZoom != prevViewProps.maxZoom) {
|
|
277
|
+
_maxZoom = newViewProps.maxZoom;
|
|
278
|
+
[_provider setMaxZoom:_maxZoom];
|
|
279
|
+
}
|
|
280
|
+
if (newViewProps.theme != prevViewProps.theme) {
|
|
281
|
+
_theme = newViewProps.theme;
|
|
282
|
+
[_provider setTheme:(NSInteger)_theme];
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
UIEdgeInsets newEdgeInsets = UIEdgeInsetsMake(
|
|
286
|
+
newViewProps.edgeInsets.top, newViewProps.edgeInsets.left,
|
|
287
|
+
newViewProps.edgeInsets.bottom, newViewProps.edgeInsets.right);
|
|
288
|
+
if (!UIEdgeInsetsEqualToEdgeInsets(newEdgeInsets, _edgeInsets)) {
|
|
289
|
+
_oldEdgeInsets = _edgeInsets;
|
|
290
|
+
_edgeInsets = newEdgeInsets;
|
|
291
|
+
[_provider setEdgeInsets:_edgeInsets oldEdgeInsets:_oldEdgeInsets];
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
[super updateProps:props oldProps:oldProps];
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
#pragma mark - Commands
|
|
298
|
+
|
|
299
|
+
- (void)moveCamera:(double)latitude
|
|
300
|
+
longitude:(double)longitude
|
|
301
|
+
zoom:(double)zoom
|
|
302
|
+
duration:(double)duration {
|
|
303
|
+
[_provider moveCamera:latitude
|
|
304
|
+
longitude:longitude
|
|
305
|
+
zoom:zoom
|
|
306
|
+
duration:duration];
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
- (void)fitCoordinates:(NSArray *)coordinates
|
|
310
|
+
edgeInsetsTop:(double)edgeInsetsTop
|
|
311
|
+
edgeInsetsLeft:(double)edgeInsetsLeft
|
|
312
|
+
edgeInsetsBottom:(double)edgeInsetsBottom
|
|
313
|
+
edgeInsetsRight:(double)edgeInsetsRight
|
|
314
|
+
duration:(double)duration {
|
|
315
|
+
[_provider fitCoordinates:coordinates
|
|
316
|
+
edgeInsetsTop:edgeInsetsTop
|
|
317
|
+
edgeInsetsLeft:edgeInsetsLeft
|
|
318
|
+
edgeInsetsBottom:edgeInsetsBottom
|
|
319
|
+
edgeInsetsRight:edgeInsetsRight
|
|
320
|
+
duration:duration];
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
- (void)setEdgeInsets:(double)top
|
|
324
|
+
left:(double)left
|
|
325
|
+
bottom:(double)bottom
|
|
326
|
+
right:(double)right
|
|
327
|
+
duration:(double)duration {
|
|
328
|
+
UIEdgeInsets oldInsets = _edgeInsets;
|
|
329
|
+
_edgeInsets = UIEdgeInsetsMake(top, left, bottom, right);
|
|
330
|
+
[_provider setEdgeInsets:_edgeInsets
|
|
331
|
+
oldEdgeInsets:oldInsets
|
|
332
|
+
duration:duration];
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
- (void)handleCommand:(const NSString *)commandName args:(const NSArray *)args {
|
|
336
|
+
RCTLuggMapViewHandleCommand(self, commandName, args);
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
Class<RCTComponentViewProtocol> LuggMapViewCls(void) {
|
|
340
|
+
return LuggMapView.class;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
@end
|
package/ios/LuggMarkerView.h
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
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
|
|
@@ -20,12 +21,26 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
20
21
|
@property(nonatomic, readonly, nullable) NSString *markerDescription;
|
|
21
22
|
@property(nonatomic, readonly) CGPoint anchor;
|
|
22
23
|
@property(nonatomic, readonly) NSInteger zIndex;
|
|
24
|
+
@property(nonatomic, readonly) CLLocationDegrees rotate;
|
|
25
|
+
@property(nonatomic, readonly) CGFloat scale;
|
|
26
|
+
@property(nonatomic, readonly) BOOL rasterize;
|
|
27
|
+
@property(nonatomic, readonly) BOOL draggable;
|
|
23
28
|
@property(nonatomic, readonly) BOOL hasCustomView;
|
|
24
29
|
@property(nonatomic, readonly) BOOL didLayout;
|
|
25
30
|
@property(nonatomic, readonly) UIView *iconView;
|
|
31
|
+
@property(nonatomic, readonly, nullable) LuggCalloutView *calloutView;
|
|
26
32
|
@property(nonatomic, weak, nullable) id<LuggMarkerViewDelegate> delegate;
|
|
27
33
|
@property(nonatomic, strong, nullable) NSObject *marker;
|
|
28
34
|
|
|
35
|
+
- (nullable UIImage *)createIconImage;
|
|
36
|
+
- (nullable UIImage *)createScaledIconImage;
|
|
37
|
+
- (void)resetIconViewTransform;
|
|
38
|
+
- (void)emitPressEventWithPoint:(CGPoint)point;
|
|
39
|
+
- (void)emitDragStartEventWithPoint:(CGPoint)point;
|
|
40
|
+
- (void)emitDragChangeEventWithPoint:(CGPoint)point;
|
|
41
|
+
- (void)emitDragEndEventWithPoint:(CGPoint)point;
|
|
42
|
+
- (void)updateCoordinate:(CLLocationCoordinate2D)coordinate;
|
|
43
|
+
|
|
29
44
|
@end
|
|
30
45
|
|
|
31
46
|
NS_ASSUME_NONNULL_END
|
package/ios/LuggMarkerView.mm
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#import "LuggMarkerView.h"
|
|
2
|
+
#import "LuggCalloutView.h"
|
|
3
|
+
#import "events/MarkerDragEvent.h"
|
|
4
|
+
#import "events/MarkerPressEvent.h"
|
|
2
5
|
|
|
3
6
|
#import <react/renderer/components/RNMapsSpec/ComponentDescriptors.h>
|
|
4
7
|
#import <react/renderer/components/RNMapsSpec/EventEmitters.h>
|
|
@@ -8,6 +11,7 @@
|
|
|
8
11
|
#import "RCTFabricComponentsPlugins.h"
|
|
9
12
|
|
|
10
13
|
using namespace facebook::react;
|
|
14
|
+
using namespace luggmaps::events;
|
|
11
15
|
|
|
12
16
|
@interface LuggMarkerView () <RCTLuggMarkerViewViewProtocol>
|
|
13
17
|
@end
|
|
@@ -19,8 +23,13 @@ using namespace facebook::react;
|
|
|
19
23
|
NSString *_markerDescription;
|
|
20
24
|
CGPoint _anchor;
|
|
21
25
|
NSInteger _zIndex;
|
|
26
|
+
CLLocationDegrees _rotate;
|
|
27
|
+
CGFloat _scale;
|
|
28
|
+
BOOL _rasterize;
|
|
29
|
+
BOOL _draggable;
|
|
22
30
|
BOOL _didLayout;
|
|
23
31
|
UIView *_iconView;
|
|
32
|
+
LuggCalloutView *_calloutView;
|
|
24
33
|
}
|
|
25
34
|
|
|
26
35
|
+ (ComponentDescriptorProvider)componentDescriptorProvider {
|
|
@@ -37,6 +46,9 @@ using namespace facebook::react;
|
|
|
37
46
|
_coordinate = CLLocationCoordinate2DMake(0, 0);
|
|
38
47
|
_anchor = CGPointMake(0.5, 1.0);
|
|
39
48
|
_zIndex = 0;
|
|
49
|
+
_rotate = 0;
|
|
50
|
+
_scale = 1;
|
|
51
|
+
_rasterize = YES;
|
|
40
52
|
_didLayout = NO;
|
|
41
53
|
|
|
42
54
|
_iconView = [[UIView alloc] init];
|
|
@@ -63,6 +75,10 @@ using namespace facebook::react;
|
|
|
63
75
|
[NSString stringWithUTF8String:newViewProps.description.c_str()];
|
|
64
76
|
_anchor = CGPointMake(newViewProps.anchor.x, newViewProps.anchor.y);
|
|
65
77
|
_zIndex = newViewProps.zIndex.value_or(0);
|
|
78
|
+
_rotate = newViewProps.rotate;
|
|
79
|
+
_scale = newViewProps.scale;
|
|
80
|
+
_rasterize = newViewProps.rasterize;
|
|
81
|
+
_draggable = newViewProps.draggable;
|
|
66
82
|
}
|
|
67
83
|
|
|
68
84
|
- (void)finalizeUpdates:(RNComponentViewUpdateMask)updateMask {
|
|
@@ -78,14 +94,22 @@ using namespace facebook::react;
|
|
|
78
94
|
- (void)mountChildComponentView:
|
|
79
95
|
(UIView<RCTComponentViewProtocol> *)childComponentView
|
|
80
96
|
index:(NSInteger)index {
|
|
81
|
-
[
|
|
97
|
+
if ([childComponentView isKindOfClass:[LuggCalloutView class]]) {
|
|
98
|
+
_calloutView = (LuggCalloutView *)childComponentView;
|
|
99
|
+
} else {
|
|
100
|
+
[_iconView insertSubview:childComponentView atIndex:index];
|
|
101
|
+
}
|
|
82
102
|
_didLayout = NO;
|
|
83
103
|
}
|
|
84
104
|
|
|
85
105
|
- (void)unmountChildComponentView:
|
|
86
106
|
(UIView<RCTComponentViewProtocol> *)childComponentView
|
|
87
107
|
index:(NSInteger)index {
|
|
88
|
-
[childComponentView
|
|
108
|
+
if ([childComponentView isKindOfClass:[LuggCalloutView class]]) {
|
|
109
|
+
_calloutView = nil;
|
|
110
|
+
} else {
|
|
111
|
+
[childComponentView removeFromSuperview];
|
|
112
|
+
}
|
|
89
113
|
_didLayout = NO;
|
|
90
114
|
}
|
|
91
115
|
|
|
@@ -138,6 +162,22 @@ using namespace facebook::react;
|
|
|
138
162
|
return _zIndex;
|
|
139
163
|
}
|
|
140
164
|
|
|
165
|
+
- (CLLocationDegrees)rotate {
|
|
166
|
+
return _rotate;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
- (CGFloat)scale {
|
|
170
|
+
return _scale;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
- (BOOL)rasterize {
|
|
174
|
+
return _rasterize;
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
- (BOOL)draggable {
|
|
178
|
+
return _draggable;
|
|
179
|
+
}
|
|
180
|
+
|
|
141
181
|
- (BOOL)hasCustomView {
|
|
142
182
|
return _iconView.subviews.count > 0;
|
|
143
183
|
}
|
|
@@ -150,11 +190,105 @@ using namespace facebook::react;
|
|
|
150
190
|
return _iconView;
|
|
151
191
|
}
|
|
152
192
|
|
|
193
|
+
- (LuggCalloutView *)calloutView {
|
|
194
|
+
return _calloutView;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
- (UIImage *)createIconImage {
|
|
198
|
+
CGSize size = _iconView.bounds.size;
|
|
199
|
+
if (size.width <= 0 || size.height <= 0) {
|
|
200
|
+
return nil;
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
UIGraphicsImageRendererFormat *format =
|
|
204
|
+
[UIGraphicsImageRendererFormat defaultFormat];
|
|
205
|
+
format.scale = [UIScreen mainScreen].scale;
|
|
206
|
+
UIGraphicsImageRenderer *renderer =
|
|
207
|
+
[[UIGraphicsImageRenderer alloc] initWithSize:size format:format];
|
|
208
|
+
|
|
209
|
+
return [renderer imageWithActions:^(UIGraphicsImageRendererContext *context) {
|
|
210
|
+
[self->_iconView.layer renderInContext:context.CGContext];
|
|
211
|
+
}];
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
- (UIImage *)createScaledIconImage {
|
|
215
|
+
CGSize size = _iconView.bounds.size;
|
|
216
|
+
if (size.width <= 0 || size.height <= 0) {
|
|
217
|
+
return nil;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
CGSize scaledSize = CGSizeMake(size.width * _scale, size.height * _scale);
|
|
221
|
+
|
|
222
|
+
UIGraphicsImageRendererFormat *format =
|
|
223
|
+
[UIGraphicsImageRendererFormat defaultFormat];
|
|
224
|
+
format.scale = [UIScreen mainScreen].scale;
|
|
225
|
+
UIGraphicsImageRenderer *renderer =
|
|
226
|
+
[[UIGraphicsImageRenderer alloc] initWithSize:scaledSize format:format];
|
|
227
|
+
|
|
228
|
+
return [renderer imageWithActions:^(UIGraphicsImageRendererContext *context) {
|
|
229
|
+
CGContextScaleCTM(context.CGContext, self->_scale, self->_scale);
|
|
230
|
+
[self->_iconView.layer renderInContext:context.CGContext];
|
|
231
|
+
}];
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
- (void)emitPressEventWithPoint:(CGPoint)point {
|
|
235
|
+
MarkerPressEvent event{
|
|
236
|
+
.latitude = _coordinate.latitude,
|
|
237
|
+
.longitude = _coordinate.longitude,
|
|
238
|
+
.x = point.x,
|
|
239
|
+
.y = point.y,
|
|
240
|
+
};
|
|
241
|
+
event.emit<LuggMarkerViewEventEmitter>(_eventEmitter);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
- (void)emitDragStartEventWithPoint:(CGPoint)point {
|
|
245
|
+
MarkerDragStartEvent event{
|
|
246
|
+
.latitude = _coordinate.latitude,
|
|
247
|
+
.longitude = _coordinate.longitude,
|
|
248
|
+
.x = point.x,
|
|
249
|
+
.y = point.y,
|
|
250
|
+
};
|
|
251
|
+
event.emit<LuggMarkerViewEventEmitter>(_eventEmitter);
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
- (void)emitDragChangeEventWithPoint:(CGPoint)point {
|
|
255
|
+
MarkerDragChangeEvent event{
|
|
256
|
+
.latitude = _coordinate.latitude,
|
|
257
|
+
.longitude = _coordinate.longitude,
|
|
258
|
+
.x = point.x,
|
|
259
|
+
.y = point.y,
|
|
260
|
+
};
|
|
261
|
+
event.emit<LuggMarkerViewEventEmitter>(_eventEmitter);
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
- (void)emitDragEndEventWithPoint:(CGPoint)point {
|
|
265
|
+
MarkerDragEndEvent event{
|
|
266
|
+
.latitude = _coordinate.latitude,
|
|
267
|
+
.longitude = _coordinate.longitude,
|
|
268
|
+
.x = point.x,
|
|
269
|
+
.y = point.y,
|
|
270
|
+
};
|
|
271
|
+
event.emit<LuggMarkerViewEventEmitter>(_eventEmitter);
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
- (void)updateCoordinate:(CLLocationCoordinate2D)coordinate {
|
|
275
|
+
_coordinate = coordinate;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
- (void)resetIconViewTransform {
|
|
279
|
+
_iconView.transform = CGAffineTransformIdentity;
|
|
280
|
+
_iconView.layer.anchorPoint = CGPointMake(0.5, 0.5);
|
|
281
|
+
_iconView.frame = CGRectMake(0, 0, _iconView.bounds.size.width,
|
|
282
|
+
_iconView.bounds.size.height);
|
|
283
|
+
}
|
|
284
|
+
|
|
153
285
|
- (void)prepareForRecycle {
|
|
154
286
|
[super prepareForRecycle];
|
|
155
287
|
_didLayout = NO;
|
|
288
|
+
_calloutView = nil;
|
|
156
289
|
self.marker = nil;
|
|
157
290
|
self.delegate = nil;
|
|
291
|
+
[self resetIconViewTransform];
|
|
158
292
|
for (UIView *subview in _iconView.subviews) {
|
|
159
293
|
[subview removeFromSuperview];
|
|
160
294
|
}
|
|
@@ -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 LuggPolygonView;
|
|
8
|
+
|
|
9
|
+
@protocol LuggPolygonViewDelegate <NSObject>
|
|
10
|
+
@optional
|
|
11
|
+
- (void)polygonViewDidUpdate:(LuggPolygonView *)polygonView;
|
|
12
|
+
@end
|
|
13
|
+
|
|
14
|
+
@interface LuggPolygonView : RCTViewComponentView
|
|
15
|
+
|
|
16
|
+
@property(nonatomic, readonly) NSArray<CLLocation *> *coordinates;
|
|
17
|
+
@property(nonatomic, readonly) NSArray<NSArray<CLLocation *> *> *holes;
|
|
18
|
+
@property(nonatomic, readonly) UIColor *strokeColor;
|
|
19
|
+
@property(nonatomic, readonly) UIColor *fillColor;
|
|
20
|
+
@property(nonatomic, readonly) CGFloat strokeWidth;
|
|
21
|
+
@property(nonatomic, readonly) NSInteger zIndex;
|
|
22
|
+
@property(nonatomic, readonly) BOOL tappable;
|
|
23
|
+
@property(nonatomic, weak, nullable) id<LuggPolygonViewDelegate> delegate;
|
|
24
|
+
@property(nonatomic, strong, nullable) NSObject *polygon;
|
|
25
|
+
@property(nonatomic, weak, nullable) NSObject *renderer;
|
|
26
|
+
|
|
27
|
+
- (void)emitPressEvent;
|
|
28
|
+
|
|
29
|
+
@end
|
|
30
|
+
|
|
31
|
+
NS_ASSUME_NONNULL_END
|