react-native-map4d-map-dtqg 0.1.4 → 0.1.5

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 (217) hide show
  1. package/README.md +58 -0
  2. package/android/.gradle/9.2.0/fileHashes/fileHashes.lock +0 -0
  3. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  5. package/android/build.gradle +2 -2
  6. package/android/src/main/java/com/reactnativemap4dmap/Map4dMapModule.java +39 -27
  7. package/ios/Map4dMap.h +12 -3
  8. package/ios/Map4dMap.m +108 -3
  9. package/ios/Map4dMapTurbo.mm +16 -0
  10. package/ios/RMFCircleManager.m +40 -68
  11. package/ios/RMFDirectionsRendererManager.m +26 -24
  12. package/ios/RMFMapViewManager.m +64 -149
  13. package/ios/RMFMarkerManager.m +36 -64
  14. package/ios/RMFPOIManager.m +40 -74
  15. package/ios/RMFPolygonManager.m +38 -60
  16. package/ios/RMFPolylineManager.m +36 -58
  17. package/ios/building/RMFBuildingManager.m +36 -64
  18. package/lib/commonjs/components/MFBanDoSo/constants.js +27 -0
  19. package/lib/commonjs/components/MFBanDoSo/constants.js.map +1 -0
  20. package/lib/commonjs/components/MFBanDoSo/helpers.js +200 -0
  21. package/lib/commonjs/components/MFBanDoSo/helpers.js.map +1 -0
  22. package/lib/commonjs/components/MFBanDoSo/propTypes.js +18 -0
  23. package/lib/commonjs/components/MFBanDoSo/propTypes.js.map +1 -0
  24. package/lib/commonjs/components/MFBanDoSo/styles.js +328 -0
  25. package/lib/commonjs/components/MFBanDoSo/styles.js.map +1 -0
  26. package/lib/commonjs/components/MFBanDoSo/ui.js +220 -0
  27. package/lib/commonjs/components/MFBanDoSo/ui.js.map +1 -0
  28. package/lib/commonjs/components/MFBanDoSo.js +190 -73
  29. package/lib/commonjs/components/MFBanDoSo.js.map +1 -1
  30. package/lib/commonjs/components/MFBuilding.js +15 -90
  31. package/lib/commonjs/components/MFBuilding.js.map +1 -1
  32. package/lib/commonjs/components/MFCircle.js +20 -88
  33. package/lib/commonjs/components/MFCircle.js.map +1 -1
  34. package/lib/commonjs/components/MFDirectionsRenderer.js +15 -93
  35. package/lib/commonjs/components/MFDirectionsRenderer.js.map +1 -1
  36. package/lib/commonjs/components/MFMapView.js +50 -147
  37. package/lib/commonjs/components/MFMapView.js.map +1 -1
  38. package/lib/commonjs/components/MFMarker.js +15 -101
  39. package/lib/commonjs/components/MFMarker.js.map +1 -1
  40. package/lib/commonjs/components/MFPOI.js +17 -92
  41. package/lib/commonjs/components/MFPOI.js.map +1 -1
  42. package/lib/commonjs/components/MFPolygon.js +15 -87
  43. package/lib/commonjs/components/MFPolygon.js.map +1 -1
  44. package/lib/commonjs/components/MFPolyline.js +17 -87
  45. package/lib/commonjs/components/MFPolyline.js.map +1 -1
  46. package/lib/commonjs/components/MFTileOverlay.js +7 -15
  47. package/lib/commonjs/components/MFTileOverlay.js.map +1 -1
  48. package/lib/commonjs/components/Map4dMapView.js +1 -4
  49. package/lib/commonjs/components/Map4dMapView.js.map +1 -1
  50. package/lib/commonjs/components/extends/AreaFocusManager.js +4 -38
  51. package/lib/commonjs/components/extends/AreaFocusManager.js.map +1 -1
  52. package/lib/commonjs/components/extends/AreaFocuser.js +1 -17
  53. package/lib/commonjs/components/extends/AreaFocuser.js.map +1 -1
  54. package/lib/commonjs/components/extends/BoundHelper.js +0 -6
  55. package/lib/commonjs/components/extends/BoundHelper.js.map +1 -1
  56. package/lib/commonjs/components/extends/area/AreaFocusAreas.js +0 -37
  57. package/lib/commonjs/components/extends/area/AreaFocusAreas.js.map +1 -1
  58. package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js +1 -35
  59. package/lib/commonjs/components/extends/area/AreaFocusGeometryUtils.js.map +1 -1
  60. package/lib/commonjs/components/extends/area/AreaFocusSession.js +0 -18
  61. package/lib/commonjs/components/extends/area/AreaFocusSession.js.map +1 -1
  62. package/lib/commonjs/components/extends/area/AreaFocusTypes.js +2 -3
  63. package/lib/commonjs/components/extends/area/AreaFocusTypes.js.map +1 -1
  64. package/lib/commonjs/components/internal/DefaultRoadmapStyle.js +1 -2
  65. package/lib/commonjs/components/internal/DefaultRoadmapStyle.js.map +1 -1
  66. package/lib/commonjs/components/internal/GeojsonStyleUtils.js +20 -31
  67. package/lib/commonjs/components/internal/GeojsonStyleUtils.js.map +1 -1
  68. package/lib/commonjs/index.js +0 -11
  69. package/lib/commonjs/index.js.map +1 -1
  70. package/lib/commonjs/native/Map4dMapNativeModule.js +10 -0
  71. package/lib/commonjs/native/Map4dMapNativeModule.js.map +1 -0
  72. package/lib/commonjs/native/NativeModuleResolver.js +35 -0
  73. package/lib/commonjs/native/NativeModuleResolver.js.map +1 -0
  74. package/lib/commonjs/native/ViewManagerCommand.js +67 -0
  75. package/lib/commonjs/native/ViewManagerCommand.js.map +1 -0
  76. package/lib/commonjs/package.json +1 -0
  77. package/lib/commonjs/specs/NativeMap4dMap.js +9 -0
  78. package/lib/commonjs/specs/NativeMap4dMap.js.map +1 -0
  79. package/lib/module/components/MFBanDoSo/constants.js +22 -0
  80. package/lib/module/components/MFBanDoSo/constants.js.map +1 -0
  81. package/lib/module/components/MFBanDoSo/helpers.js +188 -0
  82. package/lib/module/components/MFBanDoSo/helpers.js.map +1 -0
  83. package/lib/module/components/MFBanDoSo/propTypes.js +14 -0
  84. package/lib/module/components/MFBanDoSo/propTypes.js.map +1 -0
  85. package/lib/module/components/MFBanDoSo/styles.js +325 -0
  86. package/lib/module/components/MFBanDoSo/styles.js.map +1 -0
  87. package/lib/module/components/MFBanDoSo/ui.js +213 -0
  88. package/lib/module/components/MFBanDoSo/ui.js.map +1 -0
  89. package/lib/module/components/MFBanDoSo.js +192 -63
  90. package/lib/module/components/MFBanDoSo.js.map +1 -1
  91. package/lib/module/components/MFBuilding.js +17 -82
  92. package/lib/module/components/MFBuilding.js.map +1 -1
  93. package/lib/module/components/MFCircle.js +22 -80
  94. package/lib/module/components/MFCircle.js.map +1 -1
  95. package/lib/module/components/MFDirectionsRenderer.js +16 -85
  96. package/lib/module/components/MFDirectionsRenderer.js.map +1 -1
  97. package/lib/module/components/MFMapView.js +51 -136
  98. package/lib/module/components/MFMapView.js.map +1 -1
  99. package/lib/module/components/MFMarker.js +17 -92
  100. package/lib/module/components/MFMarker.js.map +1 -1
  101. package/lib/module/components/MFPOI.js +19 -84
  102. package/lib/module/components/MFPOI.js.map +1 -1
  103. package/lib/module/components/MFPolygon.js +17 -79
  104. package/lib/module/components/MFPolygon.js.map +1 -1
  105. package/lib/module/components/MFPolyline.js +19 -79
  106. package/lib/module/components/MFPolyline.js.map +1 -1
  107. package/lib/module/components/MFTileOverlay.js +10 -9
  108. package/lib/module/components/MFTileOverlay.js.map +1 -1
  109. package/lib/module/components/Map4dMapView.js +2 -0
  110. package/lib/module/components/Map4dMapView.js.map +1 -1
  111. package/lib/module/components/extends/AreaFocusManager.js +6 -32
  112. package/lib/module/components/extends/AreaFocusManager.js.map +1 -1
  113. package/lib/module/components/extends/AreaFocuser.js +3 -15
  114. package/lib/module/components/extends/AreaFocuser.js.map +1 -1
  115. package/lib/module/components/extends/BoundHelper.js +2 -5
  116. package/lib/module/components/extends/BoundHelper.js.map +1 -1
  117. package/lib/module/components/extends/area/AreaFocusAreas.js +2 -33
  118. package/lib/module/components/extends/area/AreaFocusAreas.js.map +1 -1
  119. package/lib/module/components/extends/area/AreaFocusGeometryUtils.js +2 -32
  120. package/lib/module/components/extends/area/AreaFocusGeometryUtils.js.map +1 -1
  121. package/lib/module/components/extends/area/AreaFocusSession.js +2 -17
  122. package/lib/module/components/extends/area/AreaFocusSession.js.map +1 -1
  123. package/lib/module/components/extends/area/AreaFocusTypes.js +3 -0
  124. package/lib/module/components/extends/area/AreaFocusTypes.js.map +1 -1
  125. package/lib/module/components/internal/DefaultRoadmapStyle.js +2 -0
  126. package/lib/module/components/internal/DefaultRoadmapStyle.js.map +1 -1
  127. package/lib/module/components/internal/GeojsonStyleUtils.js +21 -28
  128. package/lib/module/components/internal/GeojsonStyleUtils.js.map +1 -1
  129. package/lib/module/index.js +2 -0
  130. package/lib/module/index.js.map +1 -1
  131. package/lib/module/native/Map4dMapNativeModule.js +5 -0
  132. package/lib/module/native/Map4dMapNativeModule.js.map +1 -0
  133. package/lib/module/native/NativeModuleResolver.js +29 -0
  134. package/lib/module/native/NativeModuleResolver.js.map +1 -0
  135. package/lib/module/native/ViewManagerCommand.js +61 -0
  136. package/lib/module/native/ViewManagerCommand.js.map +1 -0
  137. package/lib/module/specs/NativeMap4dMap.js +5 -0
  138. package/lib/module/specs/NativeMap4dMap.js.map +1 -0
  139. package/lib/typescript/components/MFBanDoSo/constants.d.ts +8 -0
  140. package/lib/typescript/components/MFBanDoSo/constants.d.ts.map +1 -0
  141. package/lib/typescript/components/MFBanDoSo/helpers.d.ts +14 -0
  142. package/lib/typescript/components/MFBanDoSo/helpers.d.ts.map +1 -0
  143. package/lib/typescript/components/MFBanDoSo/propTypes.d.ts +2 -0
  144. package/lib/typescript/components/MFBanDoSo/propTypes.d.ts.map +1 -0
  145. package/lib/typescript/components/MFBanDoSo/styles.d.ts +462 -0
  146. package/lib/typescript/components/MFBanDoSo/styles.d.ts.map +1 -0
  147. package/lib/typescript/components/MFBanDoSo/ui.d.ts +30 -0
  148. package/lib/typescript/components/MFBanDoSo/ui.d.ts.map +1 -0
  149. package/lib/typescript/components/MFBanDoSo.d.ts +37 -0
  150. package/lib/typescript/components/MFBanDoSo.d.ts.map +1 -0
  151. package/lib/typescript/components/MFBuilding.d.ts +24 -0
  152. package/lib/typescript/components/MFBuilding.d.ts.map +1 -0
  153. package/lib/typescript/components/MFCircle.d.ts +24 -0
  154. package/lib/typescript/components/MFCircle.d.ts.map +1 -0
  155. package/lib/typescript/components/MFDirectionsRenderer.d.ts +19 -0
  156. package/lib/typescript/components/MFDirectionsRenderer.d.ts.map +1 -0
  157. package/lib/typescript/components/MFMapView.d.ts +66 -0
  158. package/lib/typescript/components/MFMapView.d.ts.map +1 -0
  159. package/lib/typescript/components/MFMarker.d.ts +26 -0
  160. package/lib/typescript/components/MFMarker.d.ts.map +1 -0
  161. package/lib/typescript/components/MFPOI.d.ts +24 -0
  162. package/lib/typescript/components/MFPOI.d.ts.map +1 -0
  163. package/lib/typescript/components/MFPolygon.d.ts +24 -0
  164. package/lib/typescript/components/MFPolygon.d.ts.map +1 -0
  165. package/lib/typescript/components/MFPolyline.d.ts +24 -0
  166. package/lib/typescript/components/MFPolyline.d.ts.map +1 -0
  167. package/lib/typescript/components/MFTileOverlay.d.ts +12 -0
  168. package/lib/typescript/components/MFTileOverlay.d.ts.map +1 -0
  169. package/lib/typescript/components/Map4dMapView.d.ts +8 -7
  170. package/lib/typescript/components/Map4dMapView.d.ts.map +1 -0
  171. package/lib/typescript/components/extends/AreaFocusManager.d.ts +34 -0
  172. package/lib/typescript/components/extends/AreaFocusManager.d.ts.map +1 -0
  173. package/lib/typescript/components/extends/AreaFocuser.d.ts +15 -0
  174. package/lib/typescript/components/extends/AreaFocuser.d.ts.map +1 -0
  175. package/lib/typescript/components/extends/BoundHelper.d.ts +11 -0
  176. package/lib/typescript/components/extends/BoundHelper.d.ts.map +1 -0
  177. package/lib/typescript/components/extends/area/AreaFocusAreas.d.ts +58 -0
  178. package/lib/typescript/components/extends/area/AreaFocusAreas.d.ts.map +1 -0
  179. package/lib/typescript/components/extends/area/AreaFocusGeometryUtils.d.ts +19 -0
  180. package/lib/typescript/components/extends/area/AreaFocusGeometryUtils.d.ts.map +1 -0
  181. package/lib/typescript/components/extends/area/AreaFocusSession.d.ts +14 -0
  182. package/lib/typescript/components/extends/area/AreaFocusSession.d.ts.map +1 -0
  183. package/lib/typescript/components/extends/area/AreaFocusTypes.d.ts +40 -0
  184. package/lib/typescript/components/extends/area/AreaFocusTypes.d.ts.map +1 -0
  185. package/lib/typescript/components/internal/DefaultRoadmapStyle.d.ts +820 -0
  186. package/lib/typescript/components/internal/DefaultRoadmapStyle.d.ts.map +1 -0
  187. package/lib/typescript/components/internal/GeojsonStyleUtils.d.ts +3 -0
  188. package/lib/typescript/components/internal/GeojsonStyleUtils.d.ts.map +1 -0
  189. package/lib/typescript/index.d.ts +13 -0
  190. package/lib/typescript/index.d.ts.map +1 -0
  191. package/lib/typescript/native/Map4dMapNativeModule.d.ts +2 -0
  192. package/lib/typescript/native/Map4dMapNativeModule.d.ts.map +1 -0
  193. package/lib/typescript/native/NativeModuleResolver.d.ts +3 -0
  194. package/lib/typescript/native/NativeModuleResolver.d.ts.map +1 -0
  195. package/lib/typescript/native/ViewManagerCommand.d.ts +11 -0
  196. package/lib/typescript/native/ViewManagerCommand.d.ts.map +1 -0
  197. package/package.json +27 -11
  198. package/src/components/MFBanDoSo/constants.js +32 -0
  199. package/src/components/MFBanDoSo/helpers.js +273 -0
  200. package/src/components/MFBanDoSo/propTypes.js +14 -0
  201. package/src/components/MFBanDoSo/styles.js +316 -0
  202. package/src/components/MFBanDoSo/ui.js +230 -0
  203. package/src/components/MFBanDoSo.js +268 -78
  204. package/src/components/MFBuilding.js +8 -48
  205. package/src/components/MFCircle.js +8 -48
  206. package/src/components/MFDirectionsRenderer.js +8 -47
  207. package/src/components/MFMapView.js +31 -53
  208. package/src/components/MFMarker.js +9 -50
  209. package/src/components/MFPOI.js +8 -48
  210. package/src/components/MFPolygon.js +8 -48
  211. package/src/components/MFPolyline.js +8 -48
  212. package/src/components/internal/GeojsonStyleUtils.js +3 -0
  213. package/src/native/Map4dMapNativeModule.js +3 -0
  214. package/src/native/NativeModuleResolver.js +33 -0
  215. package/src/native/ViewManagerCommand.js +82 -0
  216. package/src/specs/NativeMap4dMap.js +12 -0
  217. package/ios/Map4dMapViewManager.m +0 -34
@@ -1,108 +1,232 @@
1
- import PropTypes from 'prop-types';
1
+ import React from 'react';
2
+ import {
3
+ Animated,
4
+ Easing,
5
+ } from 'react-native';
6
+ import {
7
+ LEGEND_TITLE,
8
+ SELECTOR_CLOSE_DURATION_MS,
9
+ SELECTOR_DRAWER_TRANSLATE_X,
10
+ SELECTOR_OPEN_DURATION_MS,
11
+ SELECTOR_TITLE,
12
+ getCategoryConfigUrl,
13
+ getSourceUrl,
14
+ } from './MFBanDoSo/constants';
15
+ import {
16
+ createCategoryGroupSections,
17
+ createSelectedCategoryItemsSignature,
18
+ getSelectedCategoryItems,
19
+ normalizeCategoryItems,
20
+ reconcileExpandedGroupKeys,
21
+ resolveCategoryGroupMetadataFromResponse,
22
+ resolveCategoryItemColor,
23
+ resolveItemsFromCategoryResponse,
24
+ toggleCategoryGroupChecked,
25
+ toggleCategoryItemChecked,
26
+ } from './MFBanDoSo/helpers';
27
+ import {
28
+ banDoSoPropTypes,
29
+ } from './MFBanDoSo/propTypes';
2
30
  import { MFMapView } from './MFMapView';
31
+ import {
32
+ LayerButton,
33
+ LegendButton,
34
+ LegendPanel,
35
+ SelectorDrawer,
36
+ } from './MFBanDoSo/ui';
3
37
  import {
4
38
  buildGeojsonStyle,
5
- createCategoryItemsSignature,
6
39
  } from './internal/GeojsonStyleUtils';
7
40
 
8
- const FilterStylePropType = PropTypes.shape({
9
- kind: PropTypes.oneOfType([
10
- PropTypes.string,
11
- PropTypes.arrayOf(PropTypes.string),
12
- ]),
13
- kind_detail: PropTypes.oneOfType([
14
- PropTypes.string,
15
- PropTypes.arrayOf(PropTypes.string),
16
- ]),
17
- });
18
-
19
- const DrawLinePropType = PropTypes.shape({
20
- color: PropTypes.string,
21
- width: PropTypes.oneOfType([PropTypes.number, PropTypes.array]),
22
- });
23
-
24
- const DrawFillPropType = PropTypes.shape({
25
- color: PropTypes.string,
26
- });
27
-
28
- const DrawSymbolPropType = PropTypes.shape({
29
- icon_image: PropTypes.string,
30
- icon_index: PropTypes.number,
31
- icon_color: PropTypes.string,
32
- use_direct_icon_url: PropTypes.bool,
33
- });
34
-
35
- const CategoryStylePropType = PropTypes.shape({
36
- line: PropTypes.arrayOf(
37
- PropTypes.shape({
38
- layer: PropTypes.string,
39
- filter: FilterStylePropType,
40
- draw: DrawLinePropType,
41
- })
42
- ),
43
- fill: PropTypes.arrayOf(
44
- PropTypes.shape({
45
- layer: PropTypes.string,
46
- filter: FilterStylePropType,
47
- draw: DrawFillPropType,
48
- })
49
- ),
50
- symbol: PropTypes.arrayOf(
51
- PropTypes.shape({
52
- layer: PropTypes.string,
53
- filter: FilterStylePropType,
54
- draw: DrawSymbolPropType,
55
- })
56
- ),
57
- });
58
-
59
- const CategoryItemPropType = PropTypes.shape({
60
- key: PropTypes.string,
61
- title: PropTypes.string,
62
- group: PropTypes.string,
63
- order: PropTypes.number,
64
- checked: PropTypes.bool,
65
- style: CategoryStylePropType,
66
- });
67
-
68
41
  class MFBanDoSo extends MFMapView {
69
42
  constructor(props) {
70
43
  super(props);
71
44
  this._appliedGeojsonStyle = null;
45
+ this._isMounted = false;
46
+ this._categoryRequestId = 0;
47
+ this._selectorAnim = new Animated.Value(0);
48
+ this.state = {
49
+ ...this.state,
50
+ categoryItems: [],
51
+ expandedGroupKeys: {},
52
+ groupTitleByKey: {},
53
+ groupOrderedKeys: [],
54
+ isLegendVisible: false,
55
+ isSelectorVisible: false,
56
+ isSelectorMounted: false,
57
+ };
58
+
59
+ this._toggleItem = this._toggleItem.bind(this);
60
+ this._toggleGroupChecked = this._toggleGroupChecked.bind(this);
61
+ this._toggleGroup = this._toggleGroup.bind(this);
62
+ this._toggleSelectorVisibility = this._toggleSelectorVisibility.bind(this);
63
+ this._toggleLegendVisibility = this._toggleLegendVisibility.bind(this);
64
+ this._openSelector = this._openSelector.bind(this);
65
+ this._closeSelector = this._closeSelector.bind(this);
72
66
  }
73
67
 
74
68
  componentDidMount() {
69
+ this._isMounted = true;
70
+ this._loadCategoryItems();
75
71
  this._syncGeojsonStyle();
76
72
  }
77
73
 
78
74
  componentDidUpdate(prevProps, prevState) {
79
75
  const mapReadyChanged = prevState.isReady !== this.state.isReady;
80
76
  const mapStyleChanged = prevProps.mapStyle !== this.props.mapStyle;
81
- const sourceUrlChanged = prevProps.sourceUrl !== this.props.sourceUrl;
77
+ const isStagingChanged = prevProps.isStaging !== this.props.isStaging;
78
+
79
+ if (isStagingChanged) {
80
+ this._loadCategoryItems();
81
+ }
82
+
82
83
  const itemsChanged =
83
- createCategoryItemsSignature(prevProps.items) !==
84
- createCategoryItemsSignature(this.props.items);
85
-
86
- if (
87
- mapReadyChanged ||
88
- mapStyleChanged ||
89
- sourceUrlChanged ||
90
- itemsChanged
91
- ) {
84
+ createSelectedCategoryItemsSignature(prevState.categoryItems) !==
85
+ createSelectedCategoryItemsSignature(this.state.categoryItems);
86
+
87
+ if (mapReadyChanged || mapStyleChanged || isStagingChanged || itemsChanged) {
92
88
  this._syncGeojsonStyle();
93
89
  }
94
90
  }
95
91
 
92
+ componentWillUnmount() {
93
+ this._isMounted = false;
94
+ }
95
+
96
+ async _loadCategoryItems() {
97
+ const requestId = this._categoryRequestId + 1;
98
+ this._categoryRequestId = requestId;
99
+
100
+ try {
101
+ const response = await fetch(getCategoryConfigUrl(this.props.isStaging));
102
+ if (!response.ok) {
103
+ throw new Error(`Failed to fetch category config: ${response.status}`);
104
+ }
105
+
106
+ const json = await response.json();
107
+ const nextItems = resolveItemsFromCategoryResponse(json);
108
+ const groupMetadata = resolveCategoryGroupMetadataFromResponse(json);
109
+
110
+ if (!this._isMounted || requestId !== this._categoryRequestId) {
111
+ return;
112
+ }
113
+
114
+ this.setState((prevState) => {
115
+ const categoryItems = normalizeCategoryItems(nextItems);
116
+ const groupSections = createCategoryGroupSections(
117
+ categoryItems,
118
+ groupMetadata.titleByKey,
119
+ groupMetadata.orderedKeys
120
+ );
121
+
122
+ return {
123
+ categoryItems,
124
+ groupTitleByKey: groupMetadata.titleByKey,
125
+ groupOrderedKeys: groupMetadata.orderedKeys,
126
+ expandedGroupKeys: reconcileExpandedGroupKeys(
127
+ groupSections,
128
+ prevState.expandedGroupKeys
129
+ ),
130
+ };
131
+ });
132
+ } catch (error) {
133
+ if (requestId !== this._categoryRequestId) {
134
+ return;
135
+ }
136
+ console.warn('Cannot load category items', error);
137
+ }
138
+ }
139
+
140
+ _toggleItem(targetKey, targetIndex) {
141
+ this.setState((prevState) => ({
142
+ categoryItems: toggleCategoryItemChecked(
143
+ prevState.categoryItems,
144
+ targetKey,
145
+ targetIndex
146
+ ),
147
+ }));
148
+ }
149
+
150
+ _toggleGroup(groupKey) {
151
+ if (typeof groupKey !== 'string' || groupKey.length === 0) {
152
+ return;
153
+ }
154
+
155
+ this.setState((prevState) => ({
156
+ expandedGroupKeys: {
157
+ ...prevState.expandedGroupKeys,
158
+ [groupKey]: !(prevState.expandedGroupKeys[groupKey] !== false),
159
+ },
160
+ }));
161
+ }
162
+
163
+ _toggleGroupChecked(groupKey, checkedValue) {
164
+ this.setState((prevState) => ({
165
+ categoryItems: toggleCategoryGroupChecked(
166
+ prevState.categoryItems,
167
+ groupKey,
168
+ checkedValue
169
+ ),
170
+ }));
171
+ }
172
+
173
+ _toggleSelectorVisibility() {
174
+ if (this.state.isSelectorVisible) {
175
+ this._closeSelector();
176
+ return;
177
+ }
178
+
179
+ this._openSelector();
180
+ }
181
+
182
+ _toggleLegendVisibility() {
183
+ this.setState((prevState) => ({
184
+ isLegendVisible: !prevState.isLegendVisible,
185
+ }));
186
+ }
187
+
188
+ _openSelector() {
189
+ this.setState({
190
+ isSelectorMounted: true,
191
+ isSelectorVisible: true,
192
+ }, () => {
193
+ Animated.timing(this._selectorAnim, {
194
+ toValue: 1,
195
+ duration: SELECTOR_OPEN_DURATION_MS,
196
+ easing: Easing.out(Easing.cubic),
197
+ useNativeDriver: true,
198
+ }).start();
199
+ });
200
+ }
201
+
202
+ _closeSelector() {
203
+ Animated.timing(this._selectorAnim, {
204
+ toValue: 0,
205
+ duration: SELECTOR_CLOSE_DURATION_MS,
206
+ easing: Easing.in(Easing.cubic),
207
+ useNativeDriver: true,
208
+ }).start(() => {
209
+ if (!this._isMounted) {
210
+ return;
211
+ }
212
+
213
+ this.setState({
214
+ isSelectorVisible: false,
215
+ isSelectorMounted: false,
216
+ });
217
+ });
218
+ }
219
+
96
220
  _syncGeojsonStyle() {
97
221
  if (!this.state.isReady) {
98
222
  return;
99
223
  }
100
224
 
101
- const items = this.props.items || [];
225
+ const items = getSelectedCategoryItems(this.state.categoryItems);
102
226
 
103
227
  const geojsonStyle = buildGeojsonStyle(
104
228
  this.props.mapStyle,
105
- this.props.sourceUrl,
229
+ getSourceUrl(this.props.isStaging),
106
230
  items
107
231
  );
108
232
 
@@ -113,12 +237,78 @@ class MFBanDoSo extends MFMapView {
113
237
  this._appliedGeojsonStyle = geojsonStyle;
114
238
  this._runCommand('setMapStyle', [geojsonStyle]);
115
239
  }
240
+
241
+ render() {
242
+ const items = this.state.categoryItems;
243
+ const groupSections = createCategoryGroupSections(
244
+ items,
245
+ this.state.groupTitleByKey,
246
+ this.state.groupOrderedKeys
247
+ );
248
+ const hasItems = Array.isArray(items) && items.length > 0;
249
+ const showLayerButton = hasItems;
250
+ const showSelector = this.state.isSelectorMounted && hasItems;
251
+ const showLegendButton = hasItems;
252
+ const showLegend = this.state.isLegendVisible && hasItems;
253
+ const selectorTitle = SELECTOR_TITLE;
254
+ const legendTitle = LEGEND_TITLE;
255
+ const backdropAnimatedStyle = {
256
+ opacity: this._selectorAnim.interpolate({
257
+ inputRange: [0, 1],
258
+ outputRange: [0, 1],
259
+ }),
260
+ };
261
+ const panelAnimatedStyle = {
262
+ transform: [
263
+ {
264
+ translateX: this._selectorAnim.interpolate({
265
+ inputRange: [0, 1],
266
+ outputRange: [SELECTOR_DRAWER_TRANSLATE_X, 0],
267
+ }),
268
+ },
269
+ ],
270
+ };
271
+
272
+ return (
273
+ <React.Fragment>
274
+ {super.render()}
275
+ <LayerButton
276
+ show={showLayerButton}
277
+ isActive={this.state.isSelectorVisible}
278
+ onPress={this._toggleSelectorVisibility}
279
+ />
280
+ <LegendButton
281
+ show={showLegendButton}
282
+ isActive={this.state.isLegendVisible}
283
+ onPress={this._toggleLegendVisibility}
284
+ />
285
+ <SelectorDrawer
286
+ show={showSelector}
287
+ title={selectorTitle}
288
+ groupSections={groupSections}
289
+ expandedGroupKeys={this.state.expandedGroupKeys}
290
+ backdropAnimatedStyle={backdropAnimatedStyle}
291
+ panelAnimatedStyle={panelAnimatedStyle}
292
+ onClose={this._toggleSelectorVisibility}
293
+ onToggleGroup={this._toggleGroup}
294
+ onToggleGroupChecked={this._toggleGroupChecked}
295
+ onToggleItem={this._toggleItem}
296
+ />
297
+ <LegendPanel
298
+ show={showLegend}
299
+ title={legendTitle}
300
+ items={items}
301
+ getItemColor={(item) => resolveCategoryItemColor(item)}
302
+ />
303
+ </React.Fragment>
304
+ );
305
+ }
116
306
  }
117
307
 
118
- MFBanDoSo.propTypes = {
119
- ...MFMapView.propTypes,
120
- items: PropTypes.arrayOf(CategoryItemPropType),
121
- sourceUrl: PropTypes.string.isRequired,
308
+ MFBanDoSo.propTypes = banDoSoPropTypes;
309
+ MFBanDoSo.defaultProps = {
310
+ ...MFMapView.defaultProps,
311
+ isStaging: true,
122
312
  };
123
313
 
124
314
  export { MFBanDoSo };
@@ -1,11 +1,9 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import {ViewPropTypes} from 'deprecated-react-native-prop-types';
4
+ import {runViewManagerCommand} from '../native/ViewManagerCommand';
4
5
  import {
5
6
  requireNativeComponent,
6
- Platform,
7
- UIManager,
8
- NativeModules,
9
7
  findNodeHandle
10
8
  } from 'react-native';
11
9
 
@@ -138,51 +136,13 @@ class MFBuilding extends React.Component {
138
136
  }
139
137
 
140
138
  _runCommand(name, args) {
141
- switch (Platform.OS) {
142
- case 'android': {
143
- if (!UIManager || typeof UIManager.dispatchViewManagerCommand !== 'function') {
144
- return;
145
- }
146
-
147
- const commandId = this._uiManagerCommand(name);
148
- if (commandId == null) {
149
- return;
150
- }
151
-
152
- UIManager.dispatchViewManagerCommand(this._getHandle(), commandId, args);
153
- break;
154
- }
155
-
156
- case 'ios':
157
- this._mapManagerCommand(name)(this._getHandle(), ...args);
158
- break;
159
-
160
- default:
161
- break;
162
- }
163
- }
164
-
165
- _uiManagerCommand(name) {
166
- const uiManager = UIManager || NativeModules.UIManager;
167
- const componentName = "RMFBuilding";
168
-
169
- if (!uiManager) {
170
- return null;
171
- }
172
-
173
- if (!uiManager.getViewManagerConfig) {
174
- // RN < 0.58
175
- const legacyConfig = uiManager[componentName];
176
- return legacyConfig && legacyConfig.Commands ? legacyConfig.Commands[name] : null;
177
- }
178
-
179
- // RN >= 0.58
180
- const config = uiManager.getViewManagerConfig(componentName);
181
- return config && config.Commands ? config.Commands[name] : null;
182
- }
183
-
184
- _mapManagerCommand(name) {
185
- return NativeModules[`RMFBuilding`][name];
139
+ return runViewManagerCommand({
140
+ componentName: 'RMFBuilding',
141
+ moduleName: 'RMFBuilding',
142
+ commandName: name,
143
+ args,
144
+ reactTag: this._getHandle(),
145
+ });
186
146
  }
187
147
 
188
148
  render() {
@@ -1,11 +1,9 @@
1
1
  import PropTypes from 'prop-types';
2
2
  import React from 'react';
3
3
  import {ViewPropTypes, ColorPropType} from 'deprecated-react-native-prop-types';
4
+ import {runViewManagerCommand} from '../native/ViewManagerCommand';
4
5
  import {
5
6
  requireNativeComponent,
6
- Platform,
7
- UIManager,
8
- NativeModules,
9
7
  findNodeHandle,
10
8
  processColor
11
9
  } from 'react-native';
@@ -111,51 +109,13 @@ class MFCircle extends React.Component {
111
109
 
112
110
 
113
111
  _runCommand(name, args) {
114
- switch (Platform.OS) {
115
- case 'android': {
116
- if (!UIManager || typeof UIManager.dispatchViewManagerCommand !== 'function') {
117
- return;
118
- }
119
-
120
- const commandId = this._uiManagerCommand(name);
121
- if (commandId == null) {
122
- return;
123
- }
124
-
125
- UIManager.dispatchViewManagerCommand(this._getHandle(), commandId, args);
126
- break;
127
- }
128
-
129
- case 'ios':
130
- this._mapManagerCommand(name)(this._getHandle(), ...args);
131
- break;
132
-
133
- default:
134
- break;
135
- }
136
- }
137
-
138
- _uiManagerCommand(name) {
139
- const uiManager = UIManager || NativeModules.UIManager;
140
- const componentName = "RMFCircle";
141
-
142
- if (!uiManager) {
143
- return null;
144
- }
145
-
146
- if (!uiManager.getViewManagerConfig) {
147
- // RN < 0.58
148
- const legacyConfig = uiManager[componentName];
149
- return legacyConfig && legacyConfig.Commands ? legacyConfig.Commands[name] : null;
150
- }
151
-
152
- // RN >= 0.58
153
- const config = uiManager.getViewManagerConfig(componentName);
154
- return config && config.Commands ? config.Commands[name] : null;
155
- }
156
-
157
- _mapManagerCommand(name) {
158
- return NativeModules[`RMFCircle`][name];
112
+ return runViewManagerCommand({
113
+ componentName: 'RMFCircle',
114
+ moduleName: 'RMFCircle',
115
+ commandName: name,
116
+ args,
117
+ reactTag: this._getHandle(),
118
+ });
159
119
  }
160
120
 
161
121
  _onPress(event) {
@@ -1,12 +1,10 @@
1
1
  import React from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import {ViewPropTypes, ColorPropType} from 'deprecated-react-native-prop-types';
4
+ import {runViewManagerCommand} from '../native/ViewManagerCommand';
4
5
  import {
5
6
  requireNativeComponent,
6
- Platform,
7
7
  Image,
8
- UIManager,
9
- NativeModules,
10
8
  findNodeHandle,
11
9
  processColor
12
10
  } from 'react-native';
@@ -191,56 +189,19 @@ class MFDirectionsRenderer extends React.Component {
191
189
  }
192
190
 
193
191
  _runCommand(name, args) {
194
- switch (Platform.OS) {
195
- case 'android': {
196
- if (!UIManager || typeof UIManager.dispatchViewManagerCommand !== 'function') {
197
- return;
198
- }
199
-
200
- const commandId = this._uiManagerCommand(name);
201
- if (commandId == null) {
202
- return;
203
- }
204
-
205
- UIManager.dispatchViewManagerCommand(this._getHandle(), commandId, args);
206
- break;
207
- }
208
-
209
- case 'ios':
210
- this._mapManagerCommand(name)(this._getHandle(), ...args);
211
- break;
212
-
213
- default:
214
- break;
215
- }
192
+ return runViewManagerCommand({
193
+ componentName: 'RMFDirectionsRenderer',
194
+ moduleName: 'RMFDirectionsRenderer',
195
+ commandName: name,
196
+ args,
197
+ reactTag: this._getHandle(),
198
+ });
216
199
  }
217
200
 
218
201
  _getHandle() {
219
202
  return findNodeHandle(this.renderer);
220
203
  }
221
204
 
222
- _uiManagerCommand(name) {
223
- const uiManager = UIManager || NativeModules.UIManager;
224
- const componentName = "RMFDirectionsRenderer";
225
-
226
- if (!uiManager) {
227
- return null;
228
- }
229
-
230
- if (!uiManager.getViewManagerConfig) {
231
- // RN < 0.58
232
- const legacyConfig = uiManager[componentName];
233
- return legacyConfig && legacyConfig.Commands ? legacyConfig.Commands[name] : null;
234
- }
235
-
236
- // RN >= 0.58
237
- const config = uiManager.getViewManagerConfig(componentName);
238
- return config && config.Commands ? config.Commands[name] : null;
239
- }
240
-
241
- _mapManagerCommand(name) {
242
- return NativeModules[`RMFDirectionsRenderer`][name];
243
- }
244
205
  }
245
206
 
246
207
  MFDirectionsRenderer.propTypes = propTypes;