@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,197 @@
1
+ package com.github.wuxudong.rncharts.utils;
2
+
3
+ import android.graphics.drawable.GradientDrawable;
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.github.mikephil.charting.charts.Chart;
9
+ import com.github.mikephil.charting.components.YAxis;
10
+ import com.github.mikephil.charting.data.BarLineScatterCandleBubbleDataSet;
11
+ import com.github.mikephil.charting.data.DataSet;
12
+ import com.github.mikephil.charting.data.LineRadarDataSet;
13
+ import com.github.mikephil.charting.data.LineScatterCandleRadarDataSet;
14
+ import com.github.mikephil.charting.formatter.LargeValueFormatter;
15
+ import com.github.mikephil.charting.formatter.PercentFormatter;
16
+ import com.github.wuxudong.rncharts.charts.CustomFormatter;
17
+ import com.github.wuxudong.rncharts.charts.DateFormatter;
18
+ import com.github.wuxudong.rncharts.charts.IndexValueFormatter;
19
+ import com.github.wuxudong.rncharts.charts.LabelByXValueFormatter;
20
+
21
+ import java.util.HashMap;
22
+ import java.util.Locale;
23
+ import java.util.Map;
24
+ import java.util.concurrent.TimeUnit;
25
+
26
+ /**
27
+ * https://github.com/PhilJay/MPAndroidChart/wiki/The-DataSet-class
28
+ * https://github.com/PhilJay/MPAndroidChart/wiki/DataSet-classes-in-detail
29
+ */
30
+ public class ChartDataSetConfigUtils {
31
+
32
+ public static void commonConfig(Chart chart, DataSet dataSet, ReadableMap config) {
33
+ // Setting main color
34
+ if (BridgeUtils.validate(config, ReadableType.Number, "color")) {
35
+ dataSet.setColor(config.getInt("color"));
36
+ }
37
+ if (BridgeUtils.validate(config, ReadableType.Array, "colors")) {
38
+ dataSet.setColors(BridgeUtils.convertToIntArray(config.getArray("colors")));
39
+ }
40
+
41
+ // TODO more config to add: https://github.com/PhilJay/MPAndroidChart/wiki/The-DataSet-class
42
+
43
+ if (BridgeUtils.validate(config, ReadableType.Boolean, "drawValues")) {
44
+ dataSet.setDrawValues(config.getBoolean("drawValues"));
45
+ }
46
+
47
+ if (BridgeUtils.validate(config, ReadableType.Boolean, "highlightEnabled")) {
48
+ dataSet.setHighlightEnabled(config.getBoolean("highlightEnabled"));
49
+ }
50
+
51
+ if (BridgeUtils.validate(config, ReadableType.Boolean, "visible")) {
52
+ dataSet.setVisible(config.getBoolean("visible"));
53
+ }
54
+
55
+ if (BridgeUtils.validate(config, ReadableType.Number, "valueTextSize")) {
56
+ dataSet.setValueTextSize((float) config.getDouble("valueTextSize"));
57
+ }
58
+
59
+ if (BridgeUtils.validate(config, ReadableType.Number, "valueTextColor")) {
60
+ dataSet.setValueTextColor(config.getInt("valueTextColor"));
61
+ }
62
+
63
+ if (BridgeUtils.validate(config, ReadableType.String, "valueFormatter")) {
64
+ String valueFormatter = config.getString("valueFormatter");
65
+
66
+ if ("largeValue".equals(valueFormatter)) {
67
+ dataSet.setValueFormatter(new LargeValueFormatter());
68
+ } else if ("percent".equals(valueFormatter)) {
69
+ dataSet.setValueFormatter(new PercentFormatter());
70
+ } else if ("date".equals(valueFormatter)) {
71
+ String valueFormatterPattern = config.getString("valueFormatterPattern");
72
+
73
+ long since = 0;
74
+ if (BridgeUtils.validate(config, ReadableType.Number, "since")) {
75
+ since = (long) config.getDouble("since");
76
+ }
77
+
78
+ TimeUnit timeUnit = TimeUnit.MILLISECONDS;
79
+
80
+ if (BridgeUtils.validate(config, ReadableType.String, "timeUnit")) {
81
+ timeUnit = TimeUnit.valueOf(config.getString("timeUnit").toUpperCase());
82
+ }
83
+
84
+ Locale locale = Locale.getDefault();
85
+
86
+ if (BridgeUtils.validate(config, ReadableType.String, "locale")) {
87
+ locale = Locale.forLanguageTag(config.getString("locale"));
88
+ }
89
+
90
+ dataSet.setValueFormatter(new DateFormatter(valueFormatterPattern, since, timeUnit, locale));
91
+ } else if ("labelByXValue".equals(valueFormatter)) {
92
+ ReadableArray valueFormatterLabels = config.getArray("valueFormatterLabels");
93
+
94
+ Map<Float, String> labelsByXValue = new HashMap<>();
95
+ for (int index = 0; index < valueFormatterLabels.size(); index++) {
96
+ ReadableMap entry = valueFormatterLabels.getMap(index);
97
+ labelsByXValue.put(Float.valueOf((float) entry.getDouble("x")), entry.getString("label"));
98
+ }
99
+
100
+ dataSet.setValueFormatter(new LabelByXValueFormatter(labelsByXValue));
101
+ } else {
102
+ dataSet.setValueFormatter(new CustomFormatter(valueFormatter));
103
+ }
104
+ } else if (BridgeUtils.validate(config, ReadableType.Array, "valueFormatter")) {
105
+ dataSet.setValueFormatter(new IndexValueFormatter(BridgeUtils.convertToStringArray(config.getArray("valueFormatter"))));
106
+ }
107
+
108
+ if (BridgeUtils.validate(config, ReadableType.String, "axisDependency")) {
109
+ dataSet.setAxisDependency(YAxis.AxisDependency.valueOf(config.getString("axisDependency").toUpperCase(Locale.ENGLISH)));
110
+ }
111
+
112
+ if (BridgeUtils.validate(config, ReadableType.String, "fontFamily")) {
113
+ dataSet.setValueTypeface(TypefaceUtils.getTypeface(chart, config));
114
+ }
115
+
116
+ }
117
+
118
+ public static void commonBarLineScatterCandleBubbleConfig(BarLineScatterCandleBubbleDataSet dataSet, ReadableMap config) {
119
+ if (BridgeUtils.validate(config, ReadableType.Number, "highlightColor")) {
120
+ dataSet.setHighLightColor(config.getInt("highlightColor"));
121
+ }
122
+ }
123
+
124
+ public static void commonLineScatterCandleRadarConfig(LineScatterCandleRadarDataSet dataSet, ReadableMap config) {
125
+ if (BridgeUtils.validate(config, ReadableType.Boolean, "drawHighlightIndicators")) {
126
+ dataSet.setDrawHighlightIndicators(config.getBoolean("drawHighlightIndicators"));
127
+ }
128
+ if (BridgeUtils.validate(config, ReadableType.Boolean, "drawVerticalHighlightIndicator")) {
129
+ dataSet.setDrawVerticalHighlightIndicator(config.getBoolean("drawVerticalHighlightIndicator"));
130
+ }
131
+ if (BridgeUtils.validate(config, ReadableType.Boolean, "drawHorizontalHighlightIndicator")) {
132
+ dataSet.setDrawHorizontalHighlightIndicator(config.getBoolean("drawHorizontalHighlightIndicator"));
133
+ }
134
+ if (BridgeUtils.validate(config, ReadableType.Number, "highlightLineWidth")) {
135
+ dataSet.setHighlightLineWidth((float) config.getDouble("highlightLineWidth"));
136
+ }
137
+ }
138
+
139
+ public static void commonLineRadarConfig(LineRadarDataSet dataSet, ReadableMap config) {
140
+
141
+ if (BridgeUtils.validate(config, ReadableType.Map, "fillGradient")) {
142
+ int[] colors = BridgeUtils.convertToIntArray(config.getMap("fillGradient").getArray("colors"));
143
+
144
+ GradientDrawable.Orientation orientation = GradientDrawable.Orientation.BOTTOM_TOP;
145
+
146
+ switch (config.getMap("fillGradient").getString("orientation")) {
147
+ case "TOP_BOTTOM":
148
+ orientation = GradientDrawable.Orientation.TOP_BOTTOM;
149
+ break;
150
+ case "TR_BL":
151
+ orientation = GradientDrawable.Orientation.TR_BL;
152
+ break;
153
+ case "RIGHT_LEFT":
154
+ orientation = GradientDrawable.Orientation.RIGHT_LEFT;
155
+ break;
156
+ case "BR_TL":
157
+ orientation = GradientDrawable.Orientation.BR_TL;
158
+ break;
159
+ case "BOTTOM_TOP":
160
+ orientation = GradientDrawable.Orientation.BOTTOM_TOP;
161
+ break;
162
+ case "BL_TR":
163
+ orientation = GradientDrawable.Orientation.BL_TR;
164
+ break;
165
+ case "LEFT_RIGHT":
166
+ orientation = GradientDrawable.Orientation.LEFT_RIGHT;
167
+ break;
168
+ case "TL_BR":
169
+ orientation = GradientDrawable.Orientation.TL_BR;
170
+ break;
171
+ }
172
+
173
+ GradientDrawable gd = new GradientDrawable(
174
+ orientation,
175
+ colors);
176
+ gd.setCornerRadius(0f);
177
+ gd.setAlpha(config.getInt("fillAlpha"));
178
+ dataSet.setFillDrawable(gd);
179
+ } else if (BridgeUtils.validate(config, ReadableType.Number, "fillColor")) {
180
+ dataSet.setFillColor(config.getInt("fillColor"));
181
+ }
182
+ if (BridgeUtils.validate(config, ReadableType.Number, "fillAlpha")) {
183
+ dataSet.setFillAlpha(config.getInt("fillAlpha"));
184
+ }
185
+ // TODO setFillDrawable android.graphics.drawable.Drawable
186
+ if (BridgeUtils.validate(config, ReadableType.Boolean, "drawFilled")) {
187
+ dataSet.setDrawFilled(config.getBoolean("drawFilled"));
188
+ }
189
+ if (BridgeUtils.validate(config, ReadableType.Number, "lineWidth")) {
190
+ float lineWidth = (float) config.getDouble("lineWidth");
191
+ if (lineWidth >= 0.2f && lineWidth < 10f) {
192
+ dataSet.setLineWidth(lineWidth);
193
+ }
194
+ }
195
+ }
196
+
197
+ }
@@ -0,0 +1,144 @@
1
+ /**
2
+ * ConversionUtil.java
3
+ * react-native-eval
4
+ * <p>
5
+ * Created by Andy Prock on 9/24/15.
6
+ */
7
+
8
+ package com.github.wuxudong.rncharts.utils;
9
+
10
+ import com.facebook.react.bridge.ReadableArray;
11
+ import com.facebook.react.bridge.ReadableMap;
12
+ import com.facebook.react.bridge.ReadableType;
13
+
14
+ import java.util.ArrayList;
15
+ import java.util.HashMap;
16
+ import java.util.List;
17
+ import java.util.Map;
18
+
19
+ import javax.annotation.Nullable;
20
+
21
+ /**
22
+ * Helper utilities to convert from react-native types to POJOs
23
+ */
24
+ public final class ConversionUtil {
25
+ /**
26
+ * toObject extracts a value from a {@link ReadableMap} by its key,
27
+ * and returns a POJO representing that object.
28
+ *
29
+ * @param readableMap The Map to containing the value to be converted
30
+ * @param key The key for the value to be converted
31
+ * @return The converted POJO
32
+ */
33
+ public static Object toObject(@Nullable ReadableMap readableMap, String key) {
34
+ if (readableMap == null) {
35
+ return null;
36
+ }
37
+
38
+ Object result;
39
+
40
+ ReadableType readableType = readableMap.getType(key);
41
+ switch (readableType) {
42
+ case Null:
43
+ result = key;
44
+ break;
45
+ case Boolean:
46
+ result = readableMap.getBoolean(key);
47
+ break;
48
+ case Number:
49
+ // Can be int or double.
50
+ double tmp = readableMap.getDouble(key);
51
+ if (tmp == (int) tmp) {
52
+ result = (int) tmp;
53
+ } else {
54
+ result = tmp;
55
+ }
56
+ break;
57
+ case String:
58
+ result = readableMap.getString(key);
59
+ break;
60
+ case Map:
61
+ result = toMap(readableMap.getMap(key));
62
+ break;
63
+ case Array:
64
+ result = toList(readableMap.getArray(key));
65
+ break;
66
+ default:
67
+ throw new IllegalArgumentException("Could not convert object with key: " + key + ".");
68
+ }
69
+
70
+ return result;
71
+ }
72
+
73
+ /**
74
+ * toMap converts a {@link ReadableMap} into a HashMap.
75
+ *
76
+ * @param readableMap The ReadableMap to be conveted.
77
+ * @return A HashMap containing the data that was in the ReadableMap.
78
+ */
79
+ public static Map<String, Object> toMap(@Nullable ReadableMap readableMap) {
80
+ if (readableMap == null) {
81
+ return null;
82
+ }
83
+
84
+ com.facebook.react.bridge.ReadableMapKeySetIterator iterator = readableMap.keySetIterator();
85
+ if (!iterator.hasNextKey()) {
86
+ return null;
87
+ }
88
+
89
+ Map<String, Object> result = new HashMap<>();
90
+ while (iterator.hasNextKey()) {
91
+ String key = iterator.nextKey();
92
+ result.put(key, toObject(readableMap, key));
93
+ }
94
+
95
+ return result;
96
+ }
97
+
98
+ /**
99
+ * toList converts a {@link ReadableArray} into an ArrayList.
100
+ *
101
+ * @param readableArray The ReadableArray to be conveted.
102
+ * @return An ArrayList containing the data that was in the ReadableArray.
103
+ */
104
+ public static List<Object> toList(@Nullable ReadableArray readableArray) {
105
+ if (readableArray == null) {
106
+ return null;
107
+ }
108
+
109
+ List<Object> result = new ArrayList<>(readableArray.size());
110
+ for (int index = 0; index < readableArray.size(); index++) {
111
+ ReadableType readableType = readableArray.getType(index);
112
+ switch (readableType) {
113
+ case Null:
114
+ result.add(String.valueOf(index));
115
+ break;
116
+ case Boolean:
117
+ result.add(readableArray.getBoolean(index));
118
+ break;
119
+ case Number:
120
+ // Can be int or double.
121
+ double tmp = readableArray.getDouble(index);
122
+ if (tmp == (int) tmp) {
123
+ result.add((int) tmp);
124
+ } else {
125
+ result.add(tmp);
126
+ }
127
+ break;
128
+ case String:
129
+ result.add(readableArray.getString(index));
130
+ break;
131
+ case Map:
132
+ result.add(toMap(readableArray.getMap(index)));
133
+ break;
134
+ case Array:
135
+ result = toList(readableArray.getArray(index));
136
+ break;
137
+ default:
138
+ throw new IllegalArgumentException("Could not convert object with index: " + index + ".");
139
+ }
140
+ }
141
+
142
+ return result;
143
+ }
144
+ }
@@ -0,0 +1,51 @@
1
+ package com.github.wuxudong.rncharts.utils;
2
+
3
+ import android.content.res.Resources;
4
+ import android.graphics.Bitmap;
5
+ import android.graphics.BitmapFactory;
6
+ import android.graphics.drawable.BitmapDrawable;
7
+ import android.graphics.drawable.Drawable;
8
+ import android.graphics.drawable.ShapeDrawable;
9
+ import android.os.AsyncTask;
10
+
11
+ import java.io.IOException;
12
+ import java.io.InputStream;
13
+ import java.net.HttpURLConnection;
14
+ import java.net.URL;
15
+
16
+ public class DrawableUtils {
17
+ public static Drawable drawableFromUrl(String url, final int width, final int height) {
18
+ try {
19
+ return new DrawableLoadingAsyncTask().execute(url, Integer.toString(width), Integer.toString(height)).get();
20
+ } catch (Exception e) {
21
+ // draw dummy drawable when execution fail
22
+ e.printStackTrace();
23
+ return new ShapeDrawable();
24
+ }
25
+ }
26
+
27
+ static class DrawableLoadingAsyncTask extends AsyncTask<String, Void, Drawable> {
28
+ @Override
29
+ protected Drawable doInBackground(String... strings) {
30
+ try {
31
+ Bitmap x;
32
+
33
+ int width = Integer.parseInt(strings[1]);
34
+ int height = Integer.parseInt(strings[2]);
35
+
36
+ HttpURLConnection connection = (HttpURLConnection) new URL(strings[0]).openConnection();
37
+ connection.connect();
38
+ InputStream input = connection.getInputStream();
39
+
40
+ x = BitmapFactory.decodeStream(input);
41
+
42
+ return new BitmapDrawable(Resources.getSystem(), Bitmap.createScaledBitmap(x, width, height, true));
43
+
44
+ } catch(IOException e) {
45
+ e.printStackTrace();
46
+ // draw dummy drawable when connection fail
47
+ return new ShapeDrawable();
48
+ }
49
+ }
50
+ };
51
+ }
@@ -0,0 +1,128 @@
1
+ package com.github.wuxudong.rncharts.utils;
2
+
3
+ import com.github.mikephil.charting.animation.Easing;
4
+
5
+ import static com.github.mikephil.charting.animation.Easing.EaseInBack;
6
+ import static com.github.mikephil.charting.animation.Easing.EaseInBounce;
7
+ import static com.github.mikephil.charting.animation.Easing.EaseInCirc;
8
+ import static com.github.mikephil.charting.animation.Easing.EaseInCubic;
9
+ import static com.github.mikephil.charting.animation.Easing.EaseInElastic;
10
+ import static com.github.mikephil.charting.animation.Easing.EaseInExpo;
11
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutBack;
12
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutBounce;
13
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutCirc;
14
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutCubic;
15
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutElastic;
16
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutExpo;
17
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutQuad;
18
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutQuart;
19
+ import static com.github.mikephil.charting.animation.Easing.EaseInOutSine;
20
+ import static com.github.mikephil.charting.animation.Easing.EaseInQuad;
21
+ import static com.github.mikephil.charting.animation.Easing.EaseInQuart;
22
+ import static com.github.mikephil.charting.animation.Easing.EaseInSine;
23
+ import static com.github.mikephil.charting.animation.Easing.EaseOutBack;
24
+ import static com.github.mikephil.charting.animation.Easing.EaseOutBounce;
25
+ import static com.github.mikephil.charting.animation.Easing.EaseOutCirc;
26
+ import static com.github.mikephil.charting.animation.Easing.EaseOutCubic;
27
+ import static com.github.mikephil.charting.animation.Easing.EaseOutElastic;
28
+ import static com.github.mikephil.charting.animation.Easing.EaseOutExpo;
29
+ import static com.github.mikephil.charting.animation.Easing.EaseOutQuad;
30
+ import static com.github.mikephil.charting.animation.Easing.EaseOutQuart;
31
+ import static com.github.mikephil.charting.animation.Easing.EaseOutSine;
32
+ import static com.github.mikephil.charting.animation.Easing.Linear;
33
+
34
+
35
+ public class EasingFunctionHelper {
36
+
37
+ public static Easing.EasingFunction getEasingFunction(String name) {
38
+ switch (name) {
39
+ case "Linear":
40
+ return Linear;
41
+
42
+ case "EaseInQuad":
43
+ return EaseInQuad;
44
+
45
+ case "EaseOutQuad":
46
+ return EaseOutQuad;
47
+
48
+ case "EaseInOutQuad":
49
+ return EaseInOutQuad;
50
+
51
+ case "EaseInCubic":
52
+ return EaseInCubic;
53
+
54
+ case "EaseOutCubic":
55
+ return EaseOutCubic;
56
+
57
+ case "EaseInOutCubic":
58
+ return EaseInOutCubic;
59
+
60
+ case "EaseInQuart":
61
+ return EaseInQuart;
62
+
63
+ case "EaseOutQuart":
64
+ return EaseOutQuart;
65
+
66
+ case "EaseInOutQuart":
67
+ return EaseInOutQuart;
68
+
69
+ case "EaseInSine":
70
+ return EaseInSine;
71
+
72
+ case "EaseOutSine":
73
+ return EaseOutSine;
74
+
75
+ case "EaseInOutSine":
76
+ return EaseInOutSine;
77
+
78
+ case "EaseInExpo":
79
+ return EaseInExpo;
80
+
81
+ case "EaseOutExpo":
82
+ return EaseOutExpo;
83
+
84
+ case "EaseInOutExpo":
85
+ return EaseInOutExpo;
86
+
87
+ case "EaseInCirc":
88
+ return EaseInCirc;
89
+
90
+ case "EaseOutCirc":
91
+ return EaseOutCirc;
92
+
93
+ case "EaseInOutCirc":
94
+ return EaseInOutCirc;
95
+
96
+ case "EaseInElastic":
97
+ return EaseInElastic;
98
+
99
+ case "EaseOutElastic":
100
+ return EaseOutElastic;
101
+
102
+ case "EaseInOutElastic":
103
+ return EaseInOutElastic;
104
+
105
+ case "EaseInBack":
106
+ return EaseInBack;
107
+
108
+ case "EaseOutBack":
109
+ return EaseOutBack;
110
+
111
+ case "EaseInOutBack":
112
+ return EaseInOutBack;
113
+
114
+ case "EaseInBounce":
115
+ return EaseInBounce;
116
+
117
+ case "EaseOutBounce":
118
+ return EaseOutBounce;
119
+
120
+ case "EaseInOutBounce":
121
+ return EaseInOutBounce;
122
+
123
+ default:
124
+ return Linear;
125
+
126
+ }
127
+ }
128
+ }
@@ -0,0 +1,147 @@
1
+ package com.github.wuxudong.rncharts.utils;
2
+
3
+ import com.facebook.react.bridge.WritableArray;
4
+ import com.facebook.react.bridge.WritableMap;
5
+ import com.facebook.react.bridge.WritableNativeArray;
6
+ import com.facebook.react.bridge.WritableNativeMap;
7
+ import com.github.mikephil.charting.data.BarEntry;
8
+ import com.github.mikephil.charting.data.BubbleEntry;
9
+ import com.github.mikephil.charting.data.CandleEntry;
10
+ import com.github.mikephil.charting.data.Entry;
11
+ import com.github.mikephil.charting.data.PieEntry;
12
+ import com.github.mikephil.charting.data.RadarEntry;
13
+
14
+ import org.json.JSONArray;
15
+ import org.json.JSONException;
16
+ import org.json.JSONObject;
17
+
18
+ import java.util.Iterator;
19
+ import java.util.Map;
20
+
21
+ /**
22
+ * Helper utilities to convert from Entry to WritableMap
23
+ */
24
+ public final class EntryToWritableMapUtils {
25
+ public static WritableMap convertEntryToWritableMap(Entry entry) {
26
+ if(entry == null) {
27
+ return null;
28
+ }
29
+
30
+ WritableMap map = new WritableNativeMap();
31
+
32
+ if(entry.getData() instanceof Map) {
33
+ map.putMap("data", convertMapToWritableMap((Map) entry.getData()));
34
+ }
35
+
36
+ if (entry instanceof BarEntry) {
37
+ BarEntry barEntry = (BarEntry) entry;
38
+
39
+ map.putDouble("x", entry.getX());
40
+
41
+ if (barEntry.getYVals() != null) {
42
+ WritableArray array = new WritableNativeArray();
43
+ for (float f: barEntry.getYVals()) {
44
+ array.pushDouble(f);
45
+ }
46
+
47
+ map.putArray("yValues", array);
48
+ } else {
49
+ map.putDouble("y", entry.getY());
50
+ }
51
+ } else if (entry instanceof BubbleEntry) {
52
+ BubbleEntry bubbleEntry = (BubbleEntry) entry;
53
+
54
+ map.putDouble("x", entry.getX());
55
+ map.putDouble("y", entry.getY());
56
+
57
+ map.putDouble("size", bubbleEntry.getSize());
58
+ } else if (entry instanceof CandleEntry) {
59
+ CandleEntry candleEntry = (CandleEntry) entry;
60
+
61
+ map.putDouble("x", entry.getX());
62
+
63
+ map.putDouble("open", candleEntry.getOpen());
64
+ map.putDouble("close", candleEntry.getClose());
65
+ map.putDouble("low", candleEntry.getLow());
66
+ map.putDouble("high", candleEntry.getHigh());
67
+ } else if (entry instanceof PieEntry) {
68
+ PieEntry pieEntry = (PieEntry) entry;
69
+
70
+ map.putDouble("value", pieEntry.getValue());
71
+ map.putString("label", pieEntry.getLabel());
72
+ } else if (entry instanceof RadarEntry) {
73
+ RadarEntry radarEntry = (RadarEntry) entry;
74
+
75
+ map.putDouble("value", radarEntry.getValue());
76
+ } else {
77
+ map.putDouble("x", entry.getX());
78
+ map.putDouble("y", entry.getY());
79
+
80
+ }
81
+
82
+ return map;
83
+ }
84
+
85
+ private static WritableMap convertMapToWritableMap(Map map) {
86
+ return convertJsonToWritableMap(new JSONObject(map));
87
+ }
88
+
89
+ private static WritableMap convertJsonToWritableMap(JSONObject jsonObject) {
90
+ if(jsonObject == null) {
91
+ return null;
92
+ }
93
+
94
+ WritableMap map = new WritableNativeMap();
95
+
96
+ try {
97
+ Iterator<String> iterator = jsonObject.keys();
98
+ while (iterator.hasNext()) {
99
+ String key = iterator.next();
100
+ Object value = jsonObject.get(key);
101
+ if (value instanceof JSONObject) {
102
+ map.putMap(key, convertJsonToWritableMap((JSONObject) value));
103
+ } else if (value instanceof JSONArray) {
104
+ map.putArray(key, convertJsonToWritableArray((JSONArray) value));
105
+ } else if (value instanceof Boolean) {
106
+ map.putBoolean(key, (Boolean) value);
107
+ } else if (value instanceof Integer) {
108
+ map.putInt(key, (Integer) value);
109
+ } else if (value instanceof Double) {
110
+ map.putDouble(key, (Double) value);
111
+ } else if (value instanceof String) {
112
+ map.putString(key, (String) value);
113
+ } else {
114
+ map.putString(key, value.toString());
115
+ }
116
+ }
117
+ } catch(JSONException ex) {
118
+ map.putString("error", "Failed to convert JSONObject to WritableMap: " + ex.getMessage());
119
+ }
120
+
121
+ return map;
122
+ }
123
+
124
+ private static WritableArray convertJsonToWritableArray(JSONArray jsonArray) throws JSONException {
125
+ WritableArray array = new WritableNativeArray();
126
+
127
+ for (int i = 0; i < jsonArray.length(); i++) {
128
+ Object value = jsonArray.get(i);
129
+ if (value instanceof JSONObject) {
130
+ array.pushMap(convertJsonToWritableMap((JSONObject) value));
131
+ } else if (value instanceof JSONArray) {
132
+ array.pushArray(convertJsonToWritableArray((JSONArray) value));
133
+ } else if (value instanceof Boolean) {
134
+ array.pushBoolean((Boolean) value);
135
+ } else if (value instanceof Integer) {
136
+ array.pushInt((Integer) value);
137
+ } else if (value instanceof Double) {
138
+ array.pushDouble((Double) value);
139
+ } else if (value instanceof String) {
140
+ array.pushString((String) value);
141
+ } else {
142
+ array.pushString(value.toString());
143
+ }
144
+ }
145
+ return array;
146
+ }
147
+ }