@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,58 @@
1
+ package com.github.wuxudong.rncharts.data;
2
+
3
+ import com.facebook.react.bridge.ReadableArray;
4
+ import com.facebook.react.bridge.ReadableMap;
5
+ import com.facebook.react.bridge.ReadableType;
6
+ import com.github.mikephil.charting.charts.Chart;
7
+ import com.github.mikephil.charting.data.RadarData;
8
+ import com.github.mikephil.charting.data.RadarDataSet;
9
+ import com.github.mikephil.charting.data.RadarEntry;
10
+ import com.github.mikephil.charting.interfaces.datasets.IDataSet;
11
+ import com.github.wuxudong.rncharts.utils.ChartDataSetConfigUtils;
12
+ import com.github.wuxudong.rncharts.utils.ConversionUtil;
13
+
14
+ import java.util.ArrayList;
15
+
16
+ /**
17
+ * Created by xudong on 02/03/2017.
18
+ */
19
+ public class RadarDataExtract extends DataExtract<RadarData, RadarEntry> {
20
+
21
+ @Override
22
+ RadarData createData() {
23
+ return new RadarData();
24
+ }
25
+
26
+ @Override
27
+ IDataSet<RadarEntry> createDataSet(ArrayList<RadarEntry> entries, String label) {
28
+ return new RadarDataSet(entries, label);
29
+ }
30
+
31
+ @Override
32
+ void dataSetConfig(Chart chart, IDataSet<RadarEntry> dataSet, ReadableMap config) {
33
+ RadarDataSet radarDataSet = (RadarDataSet) dataSet;
34
+
35
+ ChartDataSetConfigUtils.commonConfig(chart, radarDataSet, config);
36
+ ChartDataSetConfigUtils.commonLineScatterCandleRadarConfig(radarDataSet, config);
37
+ ChartDataSetConfigUtils.commonLineRadarConfig(radarDataSet, config);
38
+
39
+ // RadarDataSet only config
40
+ }
41
+
42
+ @Override
43
+ RadarEntry createEntry(ReadableArray values, int index) {
44
+ RadarEntry entry;
45
+
46
+ if (ReadableType.Map.equals(values.getType(index))) {
47
+ ReadableMap map = values.getMap(index);
48
+ float value = (float) map.getDouble("value");
49
+ entry = new RadarEntry(value, ConversionUtil.toMap(map));
50
+ } else if (ReadableType.Number.equals(values.getType(index))) {
51
+ entry = new RadarEntry((float) values.getDouble(index));
52
+ } else {
53
+ throw new IllegalArgumentException("Unexpected entry type: " + values.getType(index));
54
+ }
55
+ return entry;
56
+ }
57
+
58
+ }
@@ -0,0 +1,75 @@
1
+ package com.github.wuxudong.rncharts.data;
2
+
3
+ import com.facebook.react.bridge.ReadableArray;
4
+ import com.facebook.react.bridge.ReadableMap;
5
+ import com.facebook.react.bridge.ReadableType;
6
+ import com.github.mikephil.charting.charts.Chart;
7
+ import com.github.mikephil.charting.charts.ScatterChart;
8
+ import com.github.mikephil.charting.data.Entry;
9
+ import com.github.mikephil.charting.data.ScatterData;
10
+ import com.github.mikephil.charting.data.ScatterDataSet;
11
+ import com.github.mikephil.charting.interfaces.datasets.IDataSet;
12
+ import com.github.wuxudong.rncharts.utils.BridgeUtils;
13
+ import com.github.wuxudong.rncharts.utils.ChartDataSetConfigUtils;
14
+ import com.github.wuxudong.rncharts.utils.ConversionUtil;
15
+
16
+ import java.util.ArrayList;
17
+ import java.util.Locale;
18
+
19
+ /**
20
+ * Created by xudong on 02/03/2017.
21
+ */
22
+ public class ScatterDataExtract extends DataExtract<ScatterData, Entry> {
23
+ @Override
24
+ ScatterData createData() {
25
+ return new ScatterData();
26
+ }
27
+
28
+ @Override
29
+ IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
30
+ return new ScatterDataSet(entries, label);
31
+ }
32
+
33
+ @Override
34
+ void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
35
+ ScatterDataSet scatterDataSet = (ScatterDataSet) dataSet;
36
+
37
+ ChartDataSetConfigUtils.commonConfig(chart, scatterDataSet, config);
38
+ ChartDataSetConfigUtils.commonBarLineScatterCandleBubbleConfig(scatterDataSet, config);
39
+ ChartDataSetConfigUtils.commonLineScatterCandleRadarConfig(scatterDataSet, config);
40
+
41
+ // ScatterDataSet only config
42
+ if (BridgeUtils.validate(config, ReadableType.Number, "scatterShapeSize")) {
43
+ scatterDataSet.setScatterShapeSize((float) config.getDouble("scatterShapeSize"));
44
+ }
45
+ if (BridgeUtils.validate(config, ReadableType.String, "scatterShape")) {
46
+ scatterDataSet.setScatterShape(ScatterChart.ScatterShape.valueOf(config.getString("scatterShape").toUpperCase(Locale.ENGLISH)));
47
+ }
48
+ if (BridgeUtils.validate(config, ReadableType.Number, "scatterShapeHoleColor")) {
49
+ scatterDataSet.setScatterShapeHoleColor(config.getInt("scatterShapeHoleColor"));
50
+ }
51
+ if (BridgeUtils.validate(config, ReadableType.Number, "scatterShapeHoleRadius")) {
52
+ scatterDataSet.setScatterShapeHoleRadius((float) config.getDouble("scatterShapeHoleRadius"));
53
+ }
54
+ }
55
+
56
+ @Override
57
+ Entry createEntry(ReadableArray values, int index) {
58
+ float x = index;
59
+
60
+ Entry entry;
61
+ if (ReadableType.Map.equals(values.getType(index))) {
62
+ ReadableMap map = values.getMap(index);
63
+ if (map.hasKey("x")) {
64
+ x = (float) map.getDouble("x");
65
+ }
66
+ entry = new Entry(x, (float) map.getDouble("y"), ConversionUtil.toMap(map));
67
+ } else if (ReadableType.Number.equals(values.getType(index))) {
68
+ entry = new Entry(x, (float) values.getDouble(index));
69
+ } else {
70
+ throw new IllegalArgumentException("Unexpected entry type: " + values.getType(index));
71
+ }
72
+
73
+ return entry;
74
+ }
75
+ }
@@ -0,0 +1,129 @@
1
+ package com.github.wuxudong.rncharts.listener;
2
+
3
+ import androidx.annotation.NonNull;
4
+ import android.view.MotionEvent;
5
+
6
+ import com.facebook.react.bridge.Arguments;
7
+ import com.facebook.react.bridge.ReactContext;
8
+ import com.facebook.react.bridge.WritableMap;
9
+ import com.facebook.react.uimanager.events.RCTEventEmitter;
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.listener.ChartTouchListener;
14
+ import com.github.mikephil.charting.listener.OnChartGestureListener;
15
+ import com.github.mikephil.charting.utils.MPPointD;
16
+ import com.github.mikephil.charting.utils.ViewPortHandler;
17
+ import com.github.wuxudong.rncharts.charts.ChartGroupHolder;
18
+
19
+ import java.lang.ref.WeakReference;
20
+
21
+ /**
22
+ * Created by xudong on 07/03/2017.
23
+ */
24
+ public class RNOnChartGestureListener implements OnChartGestureListener {
25
+
26
+ private WeakReference<Chart> mWeakChart;
27
+
28
+ private String group = null;
29
+
30
+ private String identifier = null;
31
+
32
+ public RNOnChartGestureListener(Chart chart) {
33
+ this.mWeakChart = new WeakReference<>(chart);
34
+ }
35
+
36
+ public void setGroup(String group) {
37
+ this.group = group;
38
+ }
39
+
40
+ public void setIdentifier(String identifier) {
41
+ this.identifier = identifier;
42
+ }
43
+
44
+ @Override
45
+ public void onChartGestureStart(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
46
+ sendEvent("chartGestureStart", me);
47
+ }
48
+
49
+ @Override
50
+ public void onChartGestureEnd(MotionEvent me, ChartTouchListener.ChartGesture lastPerformedGesture) {
51
+ sendEvent("chartGestureEnd", me);
52
+ }
53
+
54
+ @Override
55
+ public void onChartLongPressed(MotionEvent me) {
56
+ sendEvent("chartLongPress", me);
57
+ }
58
+
59
+ @Override
60
+ public void onChartDoubleTapped(MotionEvent me) {
61
+ sendEvent("doubleTapped", me);
62
+ }
63
+
64
+ @Override
65
+ public void onChartSingleTapped(MotionEvent me) {
66
+ sendEvent("chartSingleTap", me);
67
+ }
68
+
69
+ @Override
70
+ public void onChartFling(MotionEvent me1, MotionEvent me2, float velocityX, float velocityY) {
71
+ sendEvent("chartFling", me1);
72
+ }
73
+
74
+ @Override
75
+ public void onChartScale(MotionEvent me, float scaleX, float scaleY) {
76
+ sendEvent("chartScaled", me);
77
+ }
78
+
79
+ @Override
80
+ public void onChartTranslate(MotionEvent me, float dX, float dY) {
81
+ sendEvent("chartTranslated", me);
82
+ }
83
+
84
+ private void sendEvent(String action, MotionEvent me) {
85
+ Chart chart = mWeakChart.get();
86
+ if (chart != null) {
87
+
88
+ WritableMap event = getEvent(action, me, chart);
89
+
90
+ ReactContext reactContext = (ReactContext) chart.getContext();
91
+ reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
92
+ chart.getId(),
93
+ "topChange",
94
+ event);
95
+ }
96
+ }
97
+
98
+ @NonNull
99
+ private WritableMap getEvent(String action, MotionEvent me, Chart chart) {
100
+ WritableMap event = Arguments.createMap();
101
+
102
+ event.putString("action", action);
103
+
104
+ if (chart instanceof BarLineChartBase) {
105
+ BarLineChartBase barLineChart = (BarLineChartBase) chart;
106
+ ViewPortHandler viewPortHandler = chart.getViewPortHandler();
107
+ event.putDouble("scaleX", chart.getScaleX());
108
+ event.putDouble("scaleY", chart.getScaleY());
109
+
110
+ MPPointD center = ((BarLineChartBase) chart).getValuesByTouchPoint(viewPortHandler.getContentCenter().getX(), viewPortHandler.getContentCenter().getY(), YAxis.AxisDependency.LEFT);
111
+ event.putDouble("centerX", center.x);
112
+ event.putDouble("centerY", center.y);
113
+
114
+ MPPointD leftBottom = ((BarLineChartBase) chart).getValuesByTouchPoint(viewPortHandler.contentLeft(), viewPortHandler.contentBottom(), YAxis.AxisDependency.LEFT);
115
+ MPPointD rightTop = ((BarLineChartBase) chart).getValuesByTouchPoint(viewPortHandler.contentRight(), viewPortHandler.contentTop(), YAxis.AxisDependency.LEFT);
116
+
117
+ event.putDouble("left", leftBottom.x);
118
+ event.putDouble("bottom", leftBottom.y);
119
+ event.putDouble("right", rightTop.x);
120
+ event.putDouble("top", rightTop.y);
121
+
122
+ if (group != null && identifier != null) {
123
+ ChartGroupHolder.sync(group, identifier, chart.getScaleX(), chart.getScaleY(), (float) center.x, (float) center.y);
124
+
125
+ }
126
+ }
127
+ return event;
128
+ }
129
+ }
@@ -0,0 +1,52 @@
1
+ package com.github.wuxudong.rncharts.listener;
2
+
3
+ import com.facebook.react.bridge.ReactContext;
4
+ import com.facebook.react.uimanager.events.RCTEventEmitter;
5
+ import com.github.mikephil.charting.charts.Chart;
6
+ import com.github.mikephil.charting.data.Entry;
7
+ import com.github.mikephil.charting.highlight.Highlight;
8
+ import com.github.mikephil.charting.listener.OnChartValueSelectedListener;
9
+ import com.github.wuxudong.rncharts.utils.EntryToWritableMapUtils;
10
+
11
+ import java.lang.ref.WeakReference;
12
+
13
+ /**
14
+ * Created by xudong on 07/03/2017.
15
+ */
16
+ public class RNOnChartValueSelectedListener implements OnChartValueSelectedListener {
17
+
18
+ private WeakReference<Chart> mWeakChart;
19
+
20
+ public RNOnChartValueSelectedListener(Chart chart) {
21
+ mWeakChart = new WeakReference<>(chart);
22
+ }
23
+
24
+ @Override
25
+ public void onValueSelected(Entry entry, Highlight h) {
26
+
27
+ if (mWeakChart != null) {
28
+ Chart chart = mWeakChart.get();
29
+
30
+ ReactContext reactContext = (ReactContext) chart.getContext();
31
+ reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
32
+ chart.getId(),
33
+ "topSelect",
34
+ EntryToWritableMapUtils.convertEntryToWritableMap(entry));
35
+ }
36
+ }
37
+
38
+ @Override
39
+ public void onNothingSelected() {
40
+ if (mWeakChart != null) {
41
+ Chart chart = mWeakChart.get();
42
+
43
+ ReactContext reactContext = (ReactContext) chart.getContext();
44
+ reactContext.getJSModule(RCTEventEmitter.class).receiveEvent(
45
+ chart.getId(),
46
+ "topSelect",
47
+ null);
48
+ }
49
+
50
+ }
51
+
52
+ }
@@ -0,0 +1,19 @@
1
+ package com.github.wuxudong.rncharts.markers;
2
+
3
+ import com.github.mikephil.charting.components.MarkerView;
4
+ import android.content.Context;
5
+
6
+ import com.github.mikephil.charting.utils.MPPointF;
7
+ import com.github.wuxudong.rncharts.R;
8
+
9
+ public class RNCircleMarkerView extends MarkerView {
10
+ public RNCircleMarkerView(Context context) {
11
+ //the super will take care of displaying the layout
12
+ super(context, R.layout.circle_marker);
13
+ }
14
+
15
+ @Override
16
+ public MPPointF getOffset() {
17
+ return new MPPointF(-(getWidth() / 2), -getHeight() / 2);
18
+ }
19
+ }
@@ -0,0 +1,134 @@
1
+ package com.github.wuxudong.rncharts.markers;
2
+
3
+ import android.content.Context;
4
+ import android.graphics.drawable.Drawable;
5
+ import androidx.core.content.res.ResourcesCompat;
6
+ import android.text.TextUtils;
7
+ import android.widget.TextView;
8
+
9
+ import com.github.mikephil.charting.charts.Chart;
10
+ import com.github.mikephil.charting.components.MarkerView;
11
+ import com.github.mikephil.charting.data.CandleEntry;
12
+ import com.github.mikephil.charting.data.Entry;
13
+ import com.github.mikephil.charting.highlight.Highlight;
14
+ import com.github.mikephil.charting.utils.MPPointF;
15
+ import com.github.mikephil.charting.utils.Utils;
16
+ import com.github.wuxudong.rncharts.R;
17
+
18
+ import java.util.List;
19
+ import java.util.Map;
20
+
21
+ public class RNRectangleMarkerView extends MarkerView {
22
+
23
+ private TextView tvContent;
24
+
25
+ private Drawable backgroundLeft = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_left, null);
26
+ private Drawable background = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker, null);
27
+ private Drawable backgroundRight = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_right, null);
28
+
29
+ private Drawable backgroundTopLeft = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_top_left, null);
30
+ private Drawable backgroundTop = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_top, null);
31
+ private Drawable backgroundTopRight = ResourcesCompat.getDrawable(getResources(), R.drawable.rectangle_marker_top_right, null);
32
+
33
+ private int digits = 0;
34
+
35
+ public RNRectangleMarkerView(Context context) {
36
+ super(context, R.layout.rectangle_marker);
37
+
38
+ tvContent = (TextView) findViewById(R.id.rectangle_tvContent);
39
+ }
40
+
41
+ public void setDigits(int digits) {
42
+ this.digits = digits;
43
+ }
44
+
45
+ @Override
46
+ public void refreshContent(Entry e, Highlight highlight) {
47
+ String text;
48
+
49
+ if (e instanceof CandleEntry) {
50
+ CandleEntry ce = (CandleEntry) e;
51
+ text = Utils.formatNumber(ce.getClose(), digits, false);
52
+ } else {
53
+ text = Utils.formatNumber(e.getY(), digits, false);
54
+ }
55
+
56
+ if (e.getData() instanceof Map) {
57
+ if (((Map) e.getData()).containsKey("marker")) {
58
+
59
+ Object marker = ((Map) e.getData()).get("marker");
60
+ text = marker.toString();
61
+
62
+ if (highlight.getStackIndex() != -1 && marker instanceof List) {
63
+ text = ((List) marker).get(highlight.getStackIndex()).toString();
64
+ }
65
+
66
+ }
67
+ }
68
+
69
+ if (TextUtils.isEmpty(text)) {
70
+ tvContent.setVisibility(INVISIBLE);
71
+ } else {
72
+ tvContent.setText(text);
73
+ tvContent.setVisibility(VISIBLE);
74
+ }
75
+
76
+ super.refreshContent(e, highlight);
77
+ }
78
+
79
+ @Override
80
+ public MPPointF getOffset() {
81
+ return new MPPointF(-(getWidth() / 2), -getHeight());
82
+ }
83
+
84
+ @Override
85
+ public MPPointF getOffsetForDrawingAtPoint(float posX, float posY) {
86
+
87
+ MPPointF offset = getOffset();
88
+
89
+ MPPointF offset2 = new MPPointF();
90
+
91
+ offset2.x = offset.x;
92
+ offset2.y = offset.y;
93
+
94
+ Chart chart = getChartView();
95
+
96
+ float width = getWidth();
97
+
98
+ if (posX + offset2.x < 0) {
99
+ offset2.x = 0;
100
+
101
+ if (posY + offset2.y < 0) {
102
+ offset2.y = 0;
103
+ tvContent.setBackground(backgroundTopLeft);
104
+ } else {
105
+ tvContent.setBackground(backgroundLeft);
106
+ }
107
+
108
+ } else if (chart != null && posX + width + offset2.x > chart.getWidth()) {
109
+ offset2.x = -width;
110
+
111
+ if (posY + offset2.y < 0) {
112
+ offset2.y = 0;
113
+ tvContent.setBackground(backgroundTopRight);
114
+ } else {
115
+ tvContent.setBackground(backgroundRight);
116
+ }
117
+ } else {
118
+ if (posY + offset2.y < 0) {
119
+ offset2.y = 0;
120
+ tvContent.setBackground(backgroundTop);
121
+ } else {
122
+ tvContent.setBackground(background);
123
+ }
124
+ }
125
+
126
+ return offset2;
127
+ }
128
+
129
+ public TextView getTvContent() {
130
+ return tvContent;
131
+ }
132
+
133
+ }
134
+
@@ -0,0 +1,52 @@
1
+ package com.github.wuxudong.rncharts.utils;
2
+
3
+ import com.facebook.react.bridge.ReadableArray;
4
+ import com.facebook.react.bridge.ReadableMap;
5
+ import com.facebook.react.bridge.ReadableType;
6
+
7
+ public class BridgeUtils {
8
+
9
+ public static boolean validate(ReadableMap map, ReadableType propType, String propName) {
10
+ return map.hasKey(propName) && propType.equals(map.getType(propName));
11
+ }
12
+
13
+ public static int[] convertToIntArray(ReadableArray readableArray) {
14
+ int[] array = new int[readableArray.size()];
15
+
16
+ for (int i = 0; i < readableArray.size(); i++) {
17
+ if (!ReadableType.Number.equals(readableArray.getType(i))) {
18
+ throw new IllegalArgumentException("Expecting array of numbers");
19
+ }
20
+ array[i] = readableArray.getInt(i);
21
+ }
22
+
23
+ return array;
24
+ }
25
+
26
+ public static float[] convertToFloatArray(ReadableArray readableArray) {
27
+ float[] array = new float[readableArray.size()];
28
+
29
+ for (int i = 0; i < readableArray.size(); i++) {
30
+ if (!ReadableType.Number.equals(readableArray.getType(i))) {
31
+ throw new IllegalArgumentException("Expecting array of numbers");
32
+ }
33
+ array[i] = (float) readableArray.getDouble(i);
34
+ }
35
+
36
+ return array;
37
+ }
38
+
39
+ public static String[] convertToStringArray(ReadableArray readableArray) {
40
+ String[] array = new String[readableArray.size()];
41
+
42
+ for (int i = 0; i < readableArray.size(); i++) {
43
+ if (!ReadableType.String.equals(readableArray.getType(i))) {
44
+ throw new IllegalArgumentException("Expecting array of strings");
45
+ }
46
+ array[i] = readableArray.getString(i);
47
+ }
48
+
49
+ return array;
50
+ }
51
+
52
+ }