@urvish-procare/react-native-charts-wrapper 0.6.0

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 (135) hide show
  1. package/README.md +258 -0
  2. package/android/build.gradle +43 -0
  3. package/android/src/main/AndroidManifest.xml +4 -0
  4. package/android/src/main/java/com/github/wuxudong/rncharts/MPAndroidChartPackage.java +49 -0
  5. package/android/src/main/java/com/github/wuxudong/rncharts/charts/BarChartManager.java +46 -0
  6. package/android/src/main/java/com/github/wuxudong/rncharts/charts/BarLineChartBaseManager.java +415 -0
  7. package/android/src/main/java/com/github/wuxudong/rncharts/charts/BubbleChartManager.java +32 -0
  8. package/android/src/main/java/com/github/wuxudong/rncharts/charts/CandleStickChartManager.java +31 -0
  9. package/android/src/main/java/com/github/wuxudong/rncharts/charts/ChartBaseManager.java +605 -0
  10. package/android/src/main/java/com/github/wuxudong/rncharts/charts/ChartGroupHolder.java +80 -0
  11. package/android/src/main/java/com/github/wuxudong/rncharts/charts/CombinedChartManager.java +62 -0
  12. package/android/src/main/java/com/github/wuxudong/rncharts/charts/ConfigurableMinimumLinePositionFillFormatter.java +19 -0
  13. package/android/src/main/java/com/github/wuxudong/rncharts/charts/CustomFormatter.java +25 -0
  14. package/android/src/main/java/com/github/wuxudong/rncharts/charts/DateFormatter.java +34 -0
  15. package/android/src/main/java/com/github/wuxudong/rncharts/charts/HorizontalBarChartManager.java +23 -0
  16. package/android/src/main/java/com/github/wuxudong/rncharts/charts/IndexValueFormatter.java +102 -0
  17. package/android/src/main/java/com/github/wuxudong/rncharts/charts/LabelByXValueFormatter.java +25 -0
  18. package/android/src/main/java/com/github/wuxudong/rncharts/charts/LineChartManager.java +31 -0
  19. package/android/src/main/java/com/github/wuxudong/rncharts/charts/PieChartManager.java +147 -0
  20. package/android/src/main/java/com/github/wuxudong/rncharts/charts/RadarChartManager.java +118 -0
  21. package/android/src/main/java/com/github/wuxudong/rncharts/charts/ScatterChartManager.java +32 -0
  22. package/android/src/main/java/com/github/wuxudong/rncharts/charts/YAxisChartBase.java +51 -0
  23. package/android/src/main/java/com/github/wuxudong/rncharts/data/BarDataExtract.java +106 -0
  24. package/android/src/main/java/com/github/wuxudong/rncharts/data/BubbleDataExtract.java +74 -0
  25. package/android/src/main/java/com/github/wuxudong/rncharts/data/CandleDataExtract.java +102 -0
  26. package/android/src/main/java/com/github/wuxudong/rncharts/data/CombinedDataExtract.java +70 -0
  27. package/android/src/main/java/com/github/wuxudong/rncharts/data/DataExtract.java +77 -0
  28. package/android/src/main/java/com/github/wuxudong/rncharts/data/LineDataExtract.java +130 -0
  29. package/android/src/main/java/com/github/wuxudong/rncharts/data/PieDataExtract.java +101 -0
  30. package/android/src/main/java/com/github/wuxudong/rncharts/data/RadarDataExtract.java +58 -0
  31. package/android/src/main/java/com/github/wuxudong/rncharts/data/ScatterDataExtract.java +75 -0
  32. package/android/src/main/java/com/github/wuxudong/rncharts/listener/RNOnChartGestureListener.java +129 -0
  33. package/android/src/main/java/com/github/wuxudong/rncharts/listener/RNOnChartValueSelectedListener.java +52 -0
  34. package/android/src/main/java/com/github/wuxudong/rncharts/markers/RNCircleMarkerView.java +19 -0
  35. package/android/src/main/java/com/github/wuxudong/rncharts/markers/RNRectangleMarkerView.java +134 -0
  36. package/android/src/main/java/com/github/wuxudong/rncharts/utils/BridgeUtils.java +52 -0
  37. package/android/src/main/java/com/github/wuxudong/rncharts/utils/ChartDataSetConfigUtils.java +197 -0
  38. package/android/src/main/java/com/github/wuxudong/rncharts/utils/ConversionUtil.java +144 -0
  39. package/android/src/main/java/com/github/wuxudong/rncharts/utils/DrawableUtils.java +51 -0
  40. package/android/src/main/java/com/github/wuxudong/rncharts/utils/EasingFunctionHelper.java +128 -0
  41. package/android/src/main/java/com/github/wuxudong/rncharts/utils/EntryToWritableMapUtils.java +147 -0
  42. package/android/src/main/java/com/github/wuxudong/rncharts/utils/TypefaceUtils.java +47 -0
  43. package/android/src/main/res/drawable-nodpi/circle_marker.xml +8 -0
  44. package/android/src/main/res/drawable-nodpi/oval_marker.png +0 -0
  45. package/android/src/main/res/drawable-nodpi/rectangle_marker.9.png +0 -0
  46. package/android/src/main/res/drawable-nodpi/rectangle_marker_left.9.png +0 -0
  47. package/android/src/main/res/drawable-nodpi/rectangle_marker_right.9.png +0 -0
  48. package/android/src/main/res/drawable-nodpi/rectangle_marker_top.9.png +0 -0
  49. package/android/src/main/res/drawable-nodpi/rectangle_marker_top_left.9.png +0 -0
  50. package/android/src/main/res/drawable-nodpi/rectangle_marker_top_right.9.png +0 -0
  51. package/android/src/main/res/layout/circle_marker.xml +13 -0
  52. package/android/src/main/res/layout/oval_marker.xml +24 -0
  53. package/android/src/main/res/layout/rectangle_marker.xml +21 -0
  54. package/index.js +21 -0
  55. package/ios/ReactNativeCharts/BalloonMarker.swift +240 -0
  56. package/ios/ReactNativeCharts/ChartGroupHolder.swift +70 -0
  57. package/ios/ReactNativeCharts/CircleMarker.swift +108 -0
  58. package/ios/ReactNativeCharts/ConfigurableMinimumLinePositionFillFormatter.swift +19 -0
  59. package/ios/ReactNativeCharts/CustomChartDateFormatter.swift +64 -0
  60. package/ios/ReactNativeCharts/DataExtract.swift +80 -0
  61. package/ios/ReactNativeCharts/IndexValueFormatter.swift +49 -0
  62. package/ios/ReactNativeCharts/RNBarLineChartBaseManager.swift +115 -0
  63. package/ios/ReactNativeCharts/RNBarLineChartManagerBridge.h +40 -0
  64. package/ios/ReactNativeCharts/RNBarLineChartViewBase.swift +294 -0
  65. package/ios/ReactNativeCharts/RNChartManagerBridge.h +36 -0
  66. package/ios/ReactNativeCharts/RNChartViewBase.swift +593 -0
  67. package/ios/ReactNativeCharts/RNCharts-Bridging-Header.h +9 -0
  68. package/ios/ReactNativeCharts/RNYAxisChartManagerBridge.h +17 -0
  69. package/ios/ReactNativeCharts/RNYAxisChartViewBase.swift +53 -0
  70. package/ios/ReactNativeCharts/ReactNativeCharts.xcodeproj/project.pbxproj +376 -0
  71. package/ios/ReactNativeCharts/bar/BarDataExtract.swift +89 -0
  72. package/ios/ReactNativeCharts/bar/RNBarChartManager.swift +53 -0
  73. package/ios/ReactNativeCharts/bar/RNBarChartManagerBridge.m +17 -0
  74. package/ios/ReactNativeCharts/bar/RNBarChartView.swift +41 -0
  75. package/ios/ReactNativeCharts/bar/RNBarChartViewBase.swift +27 -0
  76. package/ios/ReactNativeCharts/bar/RNHorizontalBarChartManager.swift +45 -0
  77. package/ios/ReactNativeCharts/bar/RNHorizontalBarChartManagerBridge.m +16 -0
  78. package/ios/ReactNativeCharts/bar/RNHorizontalBarChartView.swift +41 -0
  79. package/ios/ReactNativeCharts/bubble/BubbleDataExtract.swift +61 -0
  80. package/ios/ReactNativeCharts/bubble/RNBubbleChartManager.swift +53 -0
  81. package/ios/ReactNativeCharts/bubble/RNBubbleChartManagerBridge.m +15 -0
  82. package/ios/ReactNativeCharts/bubble/RNBubbleChartView.swift +39 -0
  83. package/ios/ReactNativeCharts/candlestick/CandleDataExtract.swift +101 -0
  84. package/ios/ReactNativeCharts/candlestick/RNCandleStickChartManager.swift +53 -0
  85. package/ios/ReactNativeCharts/candlestick/RNCandleStickChartManagerBridge.m +16 -0
  86. package/ios/ReactNativeCharts/candlestick/RNCandleStickChartView.swift +44 -0
  87. package/ios/ReactNativeCharts/combine/CombinedDataExtract.swift +81 -0
  88. package/ios/ReactNativeCharts/combine/RNCombinedChartManager.swift +53 -0
  89. package/ios/ReactNativeCharts/combine/RNCombinedChartManagerBridge.m +19 -0
  90. package/ios/ReactNativeCharts/combine/RNCombinedChartView.swift +61 -0
  91. package/ios/ReactNativeCharts/formatters/ChartDateFormatter.swift +38 -0
  92. package/ios/ReactNativeCharts/formatters/LabelByXValueFormatter.swift +35 -0
  93. package/ios/ReactNativeCharts/formatters/LargeValueFormatter.swift +72 -0
  94. package/ios/ReactNativeCharts/line/LineDataExtract.swift +178 -0
  95. package/ios/ReactNativeCharts/line/RNLineChartManager.swift +53 -0
  96. package/ios/ReactNativeCharts/line/RNLineChartManagerBridge.m +14 -0
  97. package/ios/ReactNativeCharts/line/RNLineChartView.swift +41 -0
  98. package/ios/ReactNativeCharts/pie/PieDataExtract.swift +97 -0
  99. package/ios/ReactNativeCharts/pie/RNPieChartManager.swift +19 -0
  100. package/ios/ReactNativeCharts/pie/RNPieChartManagerBridge.m +30 -0
  101. package/ios/ReactNativeCharts/pie/RNPieChartView.swift +192 -0
  102. package/ios/ReactNativeCharts/radar/RNRadarChartManager.swift +19 -0
  103. package/ios/ReactNativeCharts/radar/RNRadarChartManagerBridge.m +25 -0
  104. package/ios/ReactNativeCharts/radar/RNRadarChartView.swift +99 -0
  105. package/ios/ReactNativeCharts/radar/RadarDataExtract.swift +50 -0
  106. package/ios/ReactNativeCharts/scatter/RNScatterChartManager.swift +53 -0
  107. package/ios/ReactNativeCharts/scatter/RNScatterChartManagerBridge.m +15 -0
  108. package/ios/ReactNativeCharts/scatter/RNScatterChartView.swift +43 -0
  109. package/ios/ReactNativeCharts/scatter/ScatterDataExtract.swift +76 -0
  110. package/ios/ReactNativeCharts/utils/BridgeUtils.swift +333 -0
  111. package/ios/ReactNativeCharts/utils/ChartDataSetConfigUtils.swift +147 -0
  112. package/ios/ReactNativeCharts/utils/EntryToDictionaryUtils.swift +66 -0
  113. package/ios/ReactNativeCharts/utils/FontUtils.swift +29 -0
  114. package/ios/ReactNativeCharts/utils/HighlightUtils.swift +41 -0
  115. package/lib/AxisIface.js +102 -0
  116. package/lib/BarChart.js +43 -0
  117. package/lib/BarLineChartBase.js +86 -0
  118. package/lib/BubbleChart.js +40 -0
  119. package/lib/CandleStickChart.js +40 -0
  120. package/lib/ChartBase.js +131 -0
  121. package/lib/ChartDataConfig.js +263 -0
  122. package/lib/ChartDataSetConfig.js +80 -0
  123. package/lib/CombinedChart.js +43 -0
  124. package/lib/HighlightEnhancer.js +15 -0
  125. package/lib/HorizontalBarChart.js +43 -0
  126. package/lib/LineChart.js +39 -0
  127. package/lib/MoveEnhancer.js +49 -0
  128. package/lib/PieChart.js +64 -0
  129. package/lib/PieRadarChartBase.js +18 -0
  130. package/lib/RadarChart.js +52 -0
  131. package/lib/ScaleEnhancer.js +16 -0
  132. package/lib/ScatterChart.js +38 -0
  133. package/lib/ScrollEnhancer.js +15 -0
  134. package/package.json +40 -0
  135. package/react-native-charts-wrapper.podspec +26 -0
@@ -0,0 +1,415 @@
1
+ package com.github.wuxudong.rncharts.charts;
2
+
3
+ import android.graphics.RectF;
4
+
5
+ import com.facebook.react.bridge.ReadableArray;
6
+ import com.facebook.react.bridge.ReadableMap;
7
+ import com.facebook.react.bridge.ReadableType;
8
+ import com.facebook.react.common.MapBuilder;
9
+ import com.facebook.react.uimanager.annotations.ReactProp;
10
+ import com.github.mikephil.charting.charts.BarLineChartBase;
11
+ import com.github.mikephil.charting.charts.Chart;
12
+ import com.github.mikephil.charting.components.YAxis;
13
+ import com.github.mikephil.charting.data.Entry;
14
+ import com.github.mikephil.charting.jobs.ZoomJob;
15
+ import com.github.mikephil.charting.listener.BarLineChartTouchListener;
16
+ import com.github.mikephil.charting.listener.OnChartGestureListener;
17
+ import com.github.mikephil.charting.utils.MPPointD;
18
+ import com.github.mikephil.charting.utils.MPPointF;
19
+ import com.github.mikephil.charting.utils.Transformer;
20
+ import com.github.wuxudong.rncharts.listener.RNOnChartGestureListener;
21
+ import com.github.wuxudong.rncharts.utils.BridgeUtils;
22
+
23
+ import java.lang.reflect.Field;
24
+ import java.util.Map;
25
+ import java.util.WeakHashMap;
26
+
27
+ import javax.annotation.Nullable;
28
+
29
+ class ChartExtraProperties {
30
+ public ReadableMap savedVisibleRange = null;
31
+ public String group = null;
32
+ public String identifier = null;
33
+ public boolean syncX = true;
34
+ public boolean syncY = false;
35
+ }
36
+
37
+ class ExtraPropertiesHolder {
38
+
39
+
40
+ private WeakHashMap<BarLineChartBase, ChartExtraProperties> extraProperties = new WeakHashMap<>();
41
+
42
+ public synchronized ChartExtraProperties getExtraProperties(BarLineChartBase chart) {
43
+ if (!extraProperties.containsKey(chart)) {
44
+ extraProperties.put(chart, new ChartExtraProperties());
45
+ }
46
+
47
+ return extraProperties.get(chart);
48
+ }
49
+ }
50
+
51
+ public abstract class BarLineChartBaseManager<T extends BarLineChartBase, U extends Entry> extends YAxisChartBase<T, U> {
52
+
53
+ private ExtraPropertiesHolder extraPropertiesHolder = new ExtraPropertiesHolder();
54
+
55
+ @Override
56
+ public void setYAxis(Chart chart, ReadableMap propMap) {
57
+ BarLineChartBase barLineChart = (BarLineChartBase) chart;
58
+
59
+ if (BridgeUtils.validate(propMap, ReadableType.Map, "left")) {
60
+ YAxis leftYAxis = barLineChart.getAxisLeft();
61
+ setCommonAxisConfig(chart, leftYAxis, propMap.getMap("left"));
62
+ setYAxisConfig(leftYAxis, propMap.getMap("left"));
63
+ }
64
+ if (BridgeUtils.validate(propMap, ReadableType.Map, "right")) {
65
+ YAxis rightYAxis = barLineChart.getAxisRight();
66
+ setCommonAxisConfig(chart, rightYAxis, propMap.getMap("right"));
67
+ setYAxisConfig(rightYAxis, propMap.getMap("right"));
68
+ }
69
+ }
70
+
71
+ @ReactProp(name = "maxHighlightDistance")
72
+ public void setMaxHighlightDistance(BarLineChartBase chart, float maxHighlightDistance) {
73
+ chart.setMaxHighlightDistance(maxHighlightDistance);
74
+ }
75
+
76
+ @ReactProp(name = "drawGridBackground")
77
+ public void setDrawGridBackground(BarLineChartBase chart, boolean enabled) {
78
+ chart.setDrawGridBackground(enabled);
79
+ }
80
+
81
+ @ReactProp(name = "gridBackgroundColor")
82
+ public void setGridBackgroundColor(BarLineChartBase chart, Integer color) {
83
+ chart.setGridBackgroundColor(color);
84
+ }
85
+
86
+ @ReactProp(name = "drawBorders")
87
+ public void setDrawBorders(BarLineChartBase chart, boolean enabled) {
88
+ chart.setDrawBorders(enabled);
89
+ }
90
+
91
+ @ReactProp(name = "borderColor")
92
+ public void setBorderColor(BarLineChartBase chart, Integer color) {
93
+ chart.setBorderColor(color);
94
+ }
95
+
96
+ @ReactProp(name = "borderWidth")
97
+ public void setBorderWidth(BarLineChartBase chart, float width) {
98
+ chart.setBorderWidth(width);
99
+ }
100
+
101
+ @ReactProp(name = "maxVisibleValueCount")
102
+ public void setMaxVisibleValueCount(BarLineChartBase chart, int count) {
103
+ chart.setMaxVisibleValueCount(count);
104
+ }
105
+
106
+ @ReactProp(name = "visibleRange")
107
+ public void setVisibleXRangeMinimum(BarLineChartBase chart, ReadableMap propMap) {
108
+ // delay visibleRange handling until chart data is set
109
+ extraPropertiesHolder.getExtraProperties(chart).savedVisibleRange = propMap;
110
+
111
+ }
112
+
113
+ private void updateVisibleRange(BarLineChartBase chart, ReadableMap propMap) {
114
+ if (BridgeUtils.validate(propMap, ReadableType.Map, "x")) {
115
+ ReadableMap x = propMap.getMap("x");
116
+ if (BridgeUtils.validate(x, ReadableType.Number, "min")) {
117
+ chart.setVisibleXRangeMinimum((float) x.getDouble("min"));
118
+ }
119
+
120
+ if (BridgeUtils.validate(x, ReadableType.Number, "max")) {
121
+ chart.setVisibleXRangeMaximum((float) x.getDouble("max"));
122
+ }
123
+ }
124
+
125
+ if (BridgeUtils.validate(propMap, ReadableType.Map, "y")) {
126
+ ReadableMap y = propMap.getMap("y");
127
+
128
+ if (BridgeUtils.validate(y, ReadableType.Map, "left")) {
129
+ ReadableMap left = y.getMap("left");
130
+ if (BridgeUtils.validate(left, ReadableType.Number, "min")) {
131
+ chart.setVisibleYRangeMinimum((float) left.getDouble("min"), YAxis.AxisDependency.LEFT);
132
+ }
133
+
134
+ if (BridgeUtils.validate(left, ReadableType.Number, "max")) {
135
+ chart.setVisibleYRangeMaximum((float) left.getDouble("max"), YAxis.AxisDependency.LEFT);
136
+ }
137
+ }
138
+
139
+ if (BridgeUtils.validate(y, ReadableType.Map, "right")) {
140
+ ReadableMap right = y.getMap("right");
141
+ if (BridgeUtils.validate(right, ReadableType.Number, "min")) {
142
+ chart.setVisibleYRangeMinimum((float) right.getDouble("min"), YAxis.AxisDependency.RIGHT);
143
+ }
144
+
145
+ if (BridgeUtils.validate(right, ReadableType.Number, "max")) {
146
+ chart.setVisibleYRangeMaximum((float) right.getDouble("max"), YAxis.AxisDependency.RIGHT);
147
+ }
148
+ }
149
+ }
150
+ }
151
+
152
+ @ReactProp(name = "autoScaleMinMaxEnabled")
153
+ public void setAutoScaleMinMaxEnabled(BarLineChartBase chart, boolean enabled) {
154
+ chart.setAutoScaleMinMaxEnabled(enabled);
155
+ }
156
+
157
+ @ReactProp(name = "keepPositionOnRotation")
158
+ public void setKeepPositionOnRotation(BarLineChartBase chart, boolean enabled) {
159
+ chart.setKeepPositionOnRotation(enabled);
160
+ }
161
+
162
+ @ReactProp(name = "scaleEnabled")
163
+ public void setScaleEnabled(BarLineChartBase chart, boolean enabled) {
164
+ chart.setScaleEnabled(enabled);
165
+ }
166
+
167
+ @ReactProp(name = "dragEnabled")
168
+ public void setDragEnabled(BarLineChartBase chart, boolean enabled) {
169
+ chart.setDragEnabled(enabled);
170
+ }
171
+
172
+ @ReactProp(name = "highlightPerDragEnabled")
173
+ public void setHighlightPerDragEnabled(BarLineChartBase chart, boolean enabled) {
174
+ chart.setHighlightPerDragEnabled(enabled);
175
+ }
176
+
177
+ @ReactProp(name = "scaleXEnabled")
178
+ public void setScaleXEnabled(BarLineChartBase chart, boolean enabled) {
179
+ chart.setScaleXEnabled(enabled);
180
+ }
181
+
182
+ @ReactProp(name = "scaleYEnabled")
183
+ public void setScaleYEnabled(BarLineChartBase chart, boolean enabled) {
184
+ chart.setScaleYEnabled(enabled);
185
+ }
186
+
187
+ @ReactProp(name = "pinchZoom")
188
+ public void setPinchZoom(BarLineChartBase chart, boolean enabled) {
189
+ chart.setPinchZoom(enabled);
190
+ }
191
+
192
+ @ReactProp(name = "doubleTapToZoomEnabled")
193
+ public void setDoubleTapToZoomEnabled(BarLineChartBase chart, boolean enabled) {
194
+ chart.setDoubleTapToZoomEnabled(enabled);
195
+ }
196
+
197
+ @ReactProp(name = "zoom")
198
+ public void setZoom(BarLineChartBase chart, ReadableMap propMap) {
199
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "scaleX") &&
200
+ BridgeUtils.validate(propMap, ReadableType.Number, "scaleY") &&
201
+ BridgeUtils.validate(propMap, ReadableType.Number, "xValue") &&
202
+ BridgeUtils.validate(propMap, ReadableType.Number, "yValue")) {
203
+
204
+ YAxis.AxisDependency axisDependency = YAxis.AxisDependency.LEFT;
205
+ if (propMap.hasKey("axisDependency") &&
206
+ propMap.getString("axisDependency").equalsIgnoreCase("RIGHT")) {
207
+ axisDependency = YAxis.AxisDependency.RIGHT;
208
+ }
209
+
210
+ chart.zoom(
211
+ (float) propMap.getDouble("scaleX") / chart.getScaleX(),
212
+ (float) propMap.getDouble("scaleY") / chart.getScaleY(),
213
+ (float) propMap.getDouble("xValue"),
214
+ (float) propMap.getDouble("yValue"),
215
+ axisDependency
216
+ );
217
+ }
218
+ }
219
+
220
+ // Note: Offset aren't updated until first touch event: https://github.com/PhilJay/MPAndroidChart/issues/892
221
+ @ReactProp(name = "viewPortOffsets")
222
+ public void setViewPortOffsets(BarLineChartBase chart, ReadableMap propMap) {
223
+ double left = 0, top = 0, right = 0, bottom = 0;
224
+
225
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "left")) {
226
+ left = propMap.getDouble("left");
227
+ }
228
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "top")) {
229
+ top = propMap.getDouble("top");
230
+ }
231
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "right")) {
232
+ right = propMap.getDouble("right");
233
+ }
234
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "bottom")) {
235
+ bottom = propMap.getDouble("bottom");
236
+ }
237
+ chart.setViewPortOffsets((float) left, (float) top, (float) right, (float) bottom);
238
+ }
239
+
240
+ @ReactProp(name = "extraOffsets")
241
+ public void setExtraOffsets(BarLineChartBase chart, ReadableMap propMap) {
242
+ double left = 0, top = 0, right = 0, bottom = 0;
243
+
244
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "left")) {
245
+ left = propMap.getDouble("left");
246
+ }
247
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "top")) {
248
+ top = propMap.getDouble("top");
249
+ }
250
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "right")) {
251
+ right = propMap.getDouble("right");
252
+ }
253
+ if (BridgeUtils.validate(propMap, ReadableType.Number, "bottom")) {
254
+ bottom = propMap.getDouble("bottom");
255
+ }
256
+ chart.setExtraOffsets((float) left, (float) top, (float) right, (float) bottom);
257
+ }
258
+
259
+ @ReactProp(name = "group")
260
+ public void setGroup(BarLineChartBase chart, String group) {
261
+ extraPropertiesHolder.getExtraProperties(chart).group = group;
262
+ }
263
+
264
+ @ReactProp(name = "identifier")
265
+ public void setIdentifier(BarLineChartBase chart, String identifier) {
266
+ extraPropertiesHolder.getExtraProperties(chart).identifier = identifier;
267
+ }
268
+
269
+ @ReactProp(name = "syncX")
270
+ public void setSyncX(BarLineChartBase chart, boolean syncX) {
271
+ extraPropertiesHolder.getExtraProperties(chart).syncX = syncX;
272
+ }
273
+
274
+ @ReactProp(name = "syncY")
275
+ public void setSyncY(BarLineChartBase chart, boolean syncY) {
276
+ extraPropertiesHolder.getExtraProperties(chart).syncY = syncY;
277
+ }
278
+
279
+ @Nullable
280
+ @Override
281
+ public Map<String, Integer> getCommandsMap() {
282
+ Map<String, Integer> commandsMap = super.getCommandsMap();
283
+
284
+ Map<String, Integer> map = MapBuilder.of(
285
+ "moveViewTo", MOVE_VIEW_TO,
286
+ "moveViewToX", MOVE_VIEW_TO_X,
287
+ "moveViewToAnimated", MOVE_VIEW_TO_ANIMATED,
288
+ "fitScreen", FIT_SCREEN,
289
+ "highlights", HIGHLIGHTS,
290
+ "setDataAndLockIndex", SET_DATA_AND_LOCK_INDEX);
291
+
292
+ if (commandsMap != null) {
293
+ map.putAll(commandsMap);
294
+ }
295
+ return map;
296
+ }
297
+
298
+ @Override
299
+ public void receiveCommand(T root, int commandId, @Nullable ReadableArray args) {
300
+ switch (commandId) {
301
+ case MOVE_VIEW_TO:
302
+ root.moveViewTo((float) args.getDouble(0), (float) args.getDouble(1), args.getString(2).equalsIgnoreCase("right") ? YAxis.AxisDependency.RIGHT : YAxis.AxisDependency.LEFT);
303
+ return;
304
+
305
+ case MOVE_VIEW_TO_X:
306
+ root.moveViewToX((float) args.getDouble(0));
307
+ return;
308
+
309
+ case MOVE_VIEW_TO_ANIMATED:
310
+ root.moveViewToAnimated((float) args.getDouble(0), (float) args.getDouble(1), args.getString(2).equalsIgnoreCase("right") ? YAxis.AxisDependency.RIGHT : YAxis.AxisDependency.LEFT, args.getInt(3));
311
+ return;
312
+
313
+ case CENTER_VIEW_TO:
314
+ root.centerViewTo((float) args.getDouble(0), (float) args.getDouble(1), args.getString(2).equalsIgnoreCase("right") ? YAxis.AxisDependency.RIGHT : YAxis.AxisDependency.LEFT);
315
+ return;
316
+
317
+ case CENTER_VIEW_TO_ANIMATED:
318
+ root.centerViewToAnimated((float) args.getDouble(0), (float) args.getDouble(1), args.getString(2).equalsIgnoreCase("right") ? YAxis.AxisDependency.RIGHT : YAxis.AxisDependency.LEFT, args.getInt(3));
319
+ return;
320
+
321
+ case FIT_SCREEN:
322
+ root.fitScreen();
323
+ return;
324
+
325
+ case HIGHLIGHTS:
326
+ this.setHighlights(root, args.getArray(0));
327
+ return;
328
+
329
+ case SET_DATA_AND_LOCK_INDEX:
330
+ setDataAndLockIndex(root, args.getMap(0));
331
+ return;
332
+ }
333
+
334
+ super.receiveCommand(root, commandId, args);
335
+ }
336
+
337
+ private void setDataAndLockIndex(T root, ReadableMap map) {
338
+ YAxis.AxisDependency axisDependency = root.getAxisLeft().isEnabled() ? YAxis.AxisDependency.LEFT : YAxis.AxisDependency.RIGHT;
339
+ Transformer transformer = root.getTransformer(axisDependency);
340
+
341
+ RectF contentRect = root.getViewPortHandler().getContentRect();
342
+ float originalCenterXPixel = contentRect.centerX();
343
+ float originalCenterYPixel = contentRect.centerY();
344
+
345
+ MPPointD originalCenterValue = root.getValuesByTouchPoint(originalCenterXPixel, originalCenterYPixel, axisDependency);
346
+ double originalVisibleXRange = root.getVisibleXRange();
347
+ double originalVisibleYRange = getVisibleYRange(root, axisDependency);
348
+
349
+ root.setData((getDataExtract().extract(root, map)));
350
+ ReadableMap savedVisibleRange = extraPropertiesHolder.getExtraProperties(root).savedVisibleRange;
351
+ if (savedVisibleRange != null) {
352
+ updateVisibleRange(root, savedVisibleRange);
353
+ }
354
+
355
+ MPPointD newPixelForOriginalCenter = transformer.getPixelForValues((float) originalCenterValue.x, (float) originalCenterValue.y);
356
+
357
+ // it only work when no scale involved, otherwise xBias and yBias is not accurate
358
+ double xBias = newPixelForOriginalCenter.x - originalCenterXPixel;
359
+ double yBias = newPixelForOriginalCenter.y - originalCenterYPixel;
360
+
361
+ double newVisibleXRange = root.getVisibleXRange();
362
+ double newVisibleYRange = getVisibleYRange(root, axisDependency);
363
+
364
+ double scaleX = (newVisibleXRange / originalVisibleXRange);
365
+ double scaleY = (newVisibleYRange / originalVisibleYRange);
366
+
367
+ ZoomJob.getInstance(root.getViewPortHandler(), (float) scaleX, (float) scaleY, (float) originalCenterValue.x, (float) originalCenterValue.y, transformer, axisDependency, root).run();
368
+
369
+ try {
370
+ // if there is a dragging action in process, because BarLineChartTouchListener hold an another copy of matrixTouch when touch start, add extra offset to it.
371
+ // unfortunately, mTouchStartPoint is private
372
+ Field fieldTouchStartPoint = BarLineChartTouchListener.class.getDeclaredField("mTouchStartPoint");
373
+ fieldTouchStartPoint.setAccessible(true);
374
+ MPPointF mTouchStartPoint = (MPPointF) fieldTouchStartPoint.get(root.getOnTouchListener());
375
+
376
+ mTouchStartPoint.x += xBias;
377
+ mTouchStartPoint.y += yBias;
378
+ } catch (Exception e) {
379
+ e.printStackTrace();
380
+ }
381
+
382
+ }
383
+
384
+ private double getVisibleYRange(T chart, YAxis.AxisDependency axisDependency) {
385
+ RectF contentRect = chart.getViewPortHandler().getContentRect();
386
+
387
+ return chart.getValuesByTouchPoint(contentRect.right, contentRect.top, axisDependency).y -
388
+ chart.getValuesByTouchPoint(contentRect.left, contentRect.bottom, axisDependency).y;
389
+
390
+ }
391
+
392
+ @Override
393
+ protected void onAfterDataSetChanged(T chart) {
394
+ super.onAfterDataSetChanged(chart);
395
+
396
+ ChartExtraProperties extraProperties = extraPropertiesHolder.getExtraProperties(chart);
397
+
398
+ if (extraProperties.savedVisibleRange != null) {
399
+ updateVisibleRange(chart, extraProperties.savedVisibleRange);
400
+ }
401
+
402
+
403
+ if (extraProperties.group != null && extraProperties.identifier != null) {
404
+ OnChartGestureListener onChartGestureListener = chart.getOnChartGestureListener();
405
+
406
+ if (onChartGestureListener != null && onChartGestureListener instanceof RNOnChartGestureListener) {
407
+ RNOnChartGestureListener rnOnChartGestureListener = (RNOnChartGestureListener) onChartGestureListener;
408
+ rnOnChartGestureListener.setGroup(extraProperties.group);
409
+ rnOnChartGestureListener.setIdentifier(extraProperties.identifier);
410
+ }
411
+
412
+ ChartGroupHolder.addChart(extraProperties.group, extraProperties.identifier, chart, extraProperties.syncX, extraProperties.syncY);
413
+ }
414
+ }
415
+ }
@@ -0,0 +1,32 @@
1
+ package com.github.wuxudong.rncharts.charts;
2
+
3
+
4
+ import com.facebook.react.uimanager.ThemedReactContext;
5
+ import com.github.mikephil.charting.charts.BubbleChart;
6
+ import com.github.mikephil.charting.data.BubbleEntry;
7
+ import com.github.wuxudong.rncharts.data.BubbleDataExtract;
8
+ import com.github.wuxudong.rncharts.data.DataExtract;
9
+ import com.github.wuxudong.rncharts.listener.RNOnChartGestureListener;
10
+ import com.github.wuxudong.rncharts.listener.RNOnChartValueSelectedListener;
11
+
12
+ public class BubbleChartManager extends BarLineChartBaseManager<BubbleChart, BubbleEntry> {
13
+
14
+ @Override
15
+ public String getName() {
16
+ return "RNBubbleChart";
17
+ }
18
+
19
+ @Override
20
+ protected BubbleChart createViewInstance(ThemedReactContext reactContext) {
21
+ BubbleChart bubbleChart = new BubbleChart(reactContext);
22
+ bubbleChart.setOnChartValueSelectedListener(new RNOnChartValueSelectedListener(bubbleChart));
23
+ bubbleChart.setOnChartGestureListener(new RNOnChartGestureListener(bubbleChart));
24
+ return bubbleChart;
25
+ }
26
+
27
+
28
+ @Override
29
+ DataExtract getDataExtract() {
30
+ return new BubbleDataExtract();
31
+ }
32
+ }
@@ -0,0 +1,31 @@
1
+ package com.github.wuxudong.rncharts.charts;
2
+
3
+ import com.facebook.react.uimanager.ThemedReactContext;
4
+ import com.github.mikephil.charting.charts.CandleStickChart;
5
+ import com.github.mikephil.charting.data.CandleEntry;
6
+ import com.github.wuxudong.rncharts.data.CandleDataExtract;
7
+ import com.github.wuxudong.rncharts.data.DataExtract;
8
+ import com.github.wuxudong.rncharts.listener.RNOnChartGestureListener;
9
+ import com.github.wuxudong.rncharts.listener.RNOnChartValueSelectedListener;
10
+
11
+ public class CandleStickChartManager extends BarLineChartBaseManager<CandleStickChart, CandleEntry> {
12
+
13
+ @Override
14
+ public String getName() {
15
+ return "RNCandleStickChart";
16
+ }
17
+
18
+ @Override
19
+ protected CandleStickChart createViewInstance(ThemedReactContext reactContext) {
20
+ CandleStickChart candleStickChart = new CandleStickChart(reactContext);
21
+ candleStickChart.setOnChartValueSelectedListener(new RNOnChartValueSelectedListener(candleStickChart));
22
+ candleStickChart.setOnChartGestureListener(new RNOnChartGestureListener(candleStickChart));
23
+ return candleStickChart;
24
+ }
25
+
26
+
27
+ @Override
28
+ DataExtract getDataExtract() {
29
+ return new CandleDataExtract();
30
+ }
31
+ }