@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,333 @@
1
+ //
2
+ // Created by xudong wu on 23/02/2017.
3
+ // Copyright (c) wuxudong. All rights reserved.
4
+ //
5
+
6
+ import Foundation
7
+ import SwiftyJSON
8
+ import DGCharts
9
+
10
+ class BridgeUtils {
11
+ static func toIOSAlpha(_ alpha: NSNumber) -> CGFloat {
12
+ return CGFloat(Double(truncating: alpha) / 255.0);
13
+ }
14
+
15
+ static func parseColors(_ array: [JSON]) -> [NSUIColor] {
16
+ return array.map {
17
+ return RCTConvert.uiColor($0.intValue);
18
+ }
19
+ }
20
+
21
+ static func toJson(_ dict: NSDictionary) -> JSON {
22
+ let json = try! JSONSerialization.data(withJSONObject: dict);
23
+
24
+ return JSON.init(parseJSON: NSString(data: json, encoding: String.Encoding.utf8.rawValue)! as String);
25
+ }
26
+
27
+ static func parseLineChartMode(_ mode: String) -> LineChartDataSet.Mode {
28
+ let iosEnumString = androidEnumToIOSEnum(mode)
29
+
30
+ switch iosEnumString {
31
+ case "linear":
32
+ return .linear
33
+ case "stepped":
34
+ return .stepped
35
+ case "cubicBezier":
36
+ return .cubicBezier
37
+ case "horizontalBezier":
38
+ return .horizontalBezier
39
+ default:
40
+ return .linear
41
+ }
42
+ }
43
+
44
+ static func parseLegendHorizontalAlignment(_ horizontalAlignment: String) -> Legend.HorizontalAlignment {
45
+ let iosEnumString = androidEnumToIOSEnum(horizontalAlignment)
46
+
47
+ switch iosEnumString {
48
+ case "right":
49
+ return .right
50
+ case "center":
51
+ return .center
52
+ default:
53
+ return .left
54
+ }
55
+ }
56
+
57
+ static func parseLegendVerticalAlignment(_ verticalAlignment: String) -> Legend.VerticalAlignment {
58
+ let iosEnumString = androidEnumToIOSEnum(verticalAlignment)
59
+
60
+ switch iosEnumString {
61
+ case "top":
62
+ return .top
63
+ case "center":
64
+ return .center
65
+ default:
66
+ return .bottom
67
+ }
68
+ }
69
+
70
+ static func parseLegendOrientation(_ orientation: String) -> Legend.Orientation {
71
+ let iosEnumString = androidEnumToIOSEnum(orientation)
72
+
73
+ switch iosEnumString {
74
+ case "vertical":
75
+ return .vertical
76
+ default:
77
+ return .horizontal
78
+ }
79
+ }
80
+
81
+ static func parseLegendDirection(_ direction: String) -> Legend.Direction {
82
+ let iosEnumString = androidEnumToIOSEnum(direction)
83
+
84
+ switch iosEnumString {
85
+ case "rightToLeft":
86
+ return .rightToLeft
87
+ default:
88
+ return .leftToRight
89
+ }
90
+ }
91
+
92
+
93
+
94
+ static func parseYAxisLabelPosition(_ position: String) -> YAxis.LabelPosition {
95
+ let iosEnumString = androidEnumToIOSEnum(position)
96
+
97
+ switch iosEnumString {
98
+ case "outsideChart":
99
+ return .outsideChart
100
+ case "insideChart":
101
+ return .insideChart
102
+ default:
103
+ return .outsideChart
104
+ }
105
+ }
106
+
107
+ static func parseXAxisLabelPosition(_ position: String) -> XAxis.LabelPosition {
108
+ let iosEnumString = androidEnumToIOSEnum(position)
109
+
110
+ switch iosEnumString {
111
+ case "top":
112
+ return .top
113
+ case "bottom":
114
+ return .bottom
115
+ case "bothSided":
116
+ return .bothSided
117
+ case "topInside":
118
+ return .topInside
119
+ case "bottomInside":
120
+ return .bottomInside
121
+ default:
122
+ return .top
123
+ }
124
+ }
125
+
126
+ static func parseLegendForm(_ form: String) -> Legend.Form {
127
+
128
+ let iosEnumString = androidEnumToIOSEnum(form)
129
+
130
+ switch iosEnumString {
131
+ case "none":
132
+ return .none
133
+ case "empty":
134
+ return .empty
135
+ case "`default`":
136
+ return .`default`
137
+ case "square":
138
+ return .square
139
+ case "circle":
140
+ return .circle
141
+ case "line":
142
+ return .line
143
+ default:
144
+ return .square
145
+ }
146
+ }
147
+
148
+ static func parseScatterShape(_ shape: String) -> ScatterChartDataSet.Shape {
149
+ let iosEnumString = androidEnumToIOSEnum(shape)
150
+
151
+ switch iosEnumString {
152
+ case "square":
153
+ return .square
154
+ case "circle":
155
+ return .circle
156
+ case "triangle":
157
+ return .triangle
158
+ case "cross":
159
+ return .cross
160
+ case "x":
161
+ return .x
162
+ case "chevronUp":
163
+ return .chevronUp
164
+ case "chevronDown":
165
+ return .chevronDown
166
+ default:
167
+ return .square
168
+ }
169
+ }
170
+
171
+ static func parseEasingOption(_ option: String) -> ChartEasingOption {
172
+ let iosEnumString = String(option.first!).lowercased() + String(option.dropFirst())
173
+
174
+ switch iosEnumString {
175
+ case "linear":
176
+ return .linear
177
+ case "easeInQuad":
178
+ return .easeInQuad
179
+ case "easeOutQuad":
180
+ return .easeOutQuad
181
+ case "easeInOutQuad":
182
+ return .easeInOutQuad
183
+ case "easeInCubic":
184
+ return .easeInCubic
185
+ case "easeOutCubic":
186
+ return .easeOutCubic
187
+ case "easeInOutCubic":
188
+ return .easeInOutCubic
189
+ case "easeInQuart":
190
+ return .easeInQuart
191
+ case "easeOutQuart":
192
+ return .easeOutQuart
193
+ case "easeInOutQuart":
194
+ return .easeInOutQuart
195
+ case "easeInQuint":
196
+ return .easeInQuint
197
+ case "easeOutQuint":
198
+ return .easeOutQuint
199
+ case "easeInOutQuint":
200
+ return .easeInOutQuint
201
+ case "easeInSine":
202
+ return .easeInSine
203
+ case "easeOutSine":
204
+ return .easeOutSine
205
+ case "easeInOutSine":
206
+ return .easeInOutSine
207
+ case "easeInExpo":
208
+ return .easeInExpo
209
+ case "easeOutExpo":
210
+ return .easeOutExpo
211
+ case "easeInOutExpo":
212
+ return .easeInOutExpo
213
+ case "easeInCirc":
214
+ return .easeInCirc
215
+ case "easeOutCirc":
216
+ return .easeOutCirc
217
+ case "easeInOutCirc":
218
+ return .easeInOutCirc
219
+ case "easeInElastic":
220
+ return .easeInElastic
221
+ case "easeOutElastic":
222
+ return .easeOutElastic
223
+ case "easeInOutElastic":
224
+ return .easeInOutElastic
225
+ case "easeInBack":
226
+ return .easeInBack
227
+ case "easeOutBack":
228
+ return .easeOutBack
229
+ case "easeInOutBack":
230
+ return .easeInOutBack
231
+ case "easeInBounce":
232
+ return .easeInBounce
233
+ case "easeOutBounce":
234
+ return .easeOutBounce
235
+ case "easeInOutBounce":
236
+ return .easeInOutBounce
237
+ default:
238
+ return .linear
239
+ }
240
+ }
241
+
242
+ static func parseAxisDependency(_ option: String) -> YAxis.AxisDependency {
243
+ let iosEnumString = androidEnumToIOSEnum(option)
244
+
245
+ switch iosEnumString {
246
+ case "left":
247
+ return .left
248
+
249
+ case "right":
250
+ return .right
251
+
252
+ default:
253
+ return .left
254
+ }
255
+ }
256
+
257
+ static func parsePieChartDataSetValuePosition(_ option: String) -> PieChartDataSet.ValuePosition {
258
+ let iosEnumString = androidEnumToIOSEnum(option)
259
+
260
+ switch iosEnumString {
261
+ case "insideSlice":
262
+ return .insideSlice
263
+
264
+ case "outsideSlice":
265
+ return .outsideSlice
266
+
267
+ default:
268
+ return .insideSlice
269
+ }
270
+ }
271
+
272
+ static func androidEnumToIOSEnum(_ desc: String) -> String {
273
+ let components = desc.components(separatedBy: "_")
274
+
275
+ if components.count > 1 {
276
+ return components.enumerated().reduce("") {
277
+ accumulate, current in
278
+ return current.offset == 0 ? current.element.lowercased() :
279
+ accumulate + current.element.lowercased().capitalized;
280
+ }
281
+ } else {
282
+ return desc.lowercased();
283
+ }
284
+ }
285
+
286
+ // unfortunately, this function can only work with pure swift enum without @objc
287
+ // check http://stackoverflow.com/questions/42513337/why-does-an-objc-enum-have-a-different-description-than-a-pure-swift-enum
288
+ static func parseIntEnumFromString<T:RawRepresentable>(_ enumType: T.Type, desc: String) -> T? where T.RawValue == Int {
289
+ let iosEnumString = androidEnumToIOSEnum(desc);
290
+
291
+ var i = 0
292
+ while let item = enumType.init(rawValue: i) {
293
+ if String(describing: item) == iosEnumString {
294
+ return item
295
+ }
296
+ i += 1
297
+ }
298
+ return nil;
299
+ }
300
+
301
+ static func parseLimitlineLabelPosition(_ position: String) -> ChartLimitLine.LabelPosition {
302
+ let iosEnumString = androidEnumToIOSEnum(position)
303
+ // NSLog("this label position %@", iosEnumString)
304
+ switch iosEnumString {
305
+ case "rightBottom":
306
+ return .rightBottom
307
+ case "leftBottom":
308
+ return .leftBottom
309
+ case "rightTop":
310
+ return .rightTop
311
+ case "leftTop":
312
+ return .leftTop
313
+ default:
314
+ return .rightTop
315
+ }
316
+ }
317
+
318
+ static func parseDrawOrder(_ drawOrder: String) -> CombinedChartView.DrawOrder{
319
+ let iosEnumString = androidEnumToIOSEnum(drawOrder)
320
+ switch iosEnumString {
321
+ case "bar":
322
+ return .bar
323
+ case "bubble":
324
+ return .bubble
325
+ case "candle":
326
+ return .candle
327
+ case "scatter":
328
+ return .scatter
329
+ default:
330
+ return .line
331
+ }
332
+ }
333
+ }
@@ -0,0 +1,147 @@
1
+ //
2
+ // ChartDataSetConfigUtils.swift
3
+ // reactNativeCharts
4
+ //
5
+ // Created by xudong wu on 23/02/2017.
6
+ // Copyright wuxudong
7
+ //
8
+
9
+ import UIKit
10
+ import DGCharts
11
+ import SwiftyJSON
12
+
13
+
14
+ class ChartDataSetConfigUtils: NSObject {
15
+ static func commonConfig(_ dataSet: ChartDataSet, config: JSON) {
16
+ if let font = FontUtils.getFont(config) {
17
+ dataSet.valueFont = font
18
+ }
19
+
20
+ // Setting main color
21
+ if config["color"].int != nil {
22
+ dataSet.setColor(RCTConvert.uiColor(config["color"].intValue))
23
+ }
24
+
25
+ if config["colors"].array != nil {
26
+ dataSet.colors = BridgeUtils.parseColors(config["colors"].arrayValue)
27
+ }
28
+
29
+ if config["drawValues"].bool != nil {
30
+ dataSet.drawValuesEnabled = config["drawValues"].boolValue;
31
+ }
32
+
33
+ if config["highlightEnabled"].bool != nil {
34
+ dataSet.highlightEnabled = config["highlightEnabled"].boolValue;
35
+ }
36
+
37
+ if config["valueTextSize"].float != nil {
38
+ dataSet.valueFont = dataSet.valueFont.withSize(CGFloat(config["valueTextSize"].floatValue))
39
+ }
40
+
41
+ if config["valueTextColor"].int != nil {
42
+ dataSet.valueTextColor = RCTConvert.uiColor(config["valueTextColor"].intValue)
43
+ }
44
+
45
+ if config["visible"].bool != nil {
46
+ dataSet.visible = config["visible"].boolValue
47
+ }
48
+
49
+ let valueFormatter = config["valueFormatter"];
50
+ if valueFormatter.string != nil {
51
+ if "largeValue" == valueFormatter.stringValue {
52
+ dataSet.valueFormatter = LargeValueFormatter();
53
+ } else if "percent" == valueFormatter.stringValue {
54
+ let percentFormatter = NumberFormatter()
55
+ percentFormatter.numberStyle = .percent
56
+
57
+ dataSet.valueFormatter = DefaultValueFormatter(formatter: percentFormatter);
58
+ } else if "date" == valueFormatter.stringValue {
59
+ let valueFormatterPattern = config["valueFormatterPattern"].stringValue;
60
+ let since = config["since"].double != nil ? config["since"].doubleValue : 0
61
+ let timeUnit = config["timeUnit"].string != nil ? config["timeUnit"].stringValue : "MILLISECONDS"
62
+ let locale = config["locale"].string;
63
+ dataSet.valueFormatter = CustomChartDateFormatter(pattern: valueFormatterPattern, since: since, timeUnit: timeUnit, locale: locale);
64
+ } else if "labelByXValue" == valueFormatter.stringValue {
65
+ let valueFormatterLabels = config["valueFormatterLabels"].arrayValue;
66
+
67
+ var labelsByXValue = [Double : String]();
68
+ for entry in valueFormatterLabels {
69
+ labelsByXValue.updateValue(entry["label"].stringValue, forKey: entry["x"].doubleValue);
70
+ }
71
+
72
+ dataSet.valueFormatter = LabelByXValueFormatter(labelsByXValue);
73
+ } else {
74
+ let customFormatter = NumberFormatter()
75
+ customFormatter.positiveFormat = valueFormatter.stringValue
76
+ customFormatter.negativeFormat = valueFormatter.stringValue
77
+
78
+ dataSet.valueFormatter = DefaultValueFormatter(formatter: customFormatter);
79
+ }
80
+ } else if valueFormatter.array != nil {
81
+ dataSet.valueFormatter = IndexValueFormatter(values: valueFormatter.arrayValue.map({ $0.stringValue }))
82
+ }
83
+
84
+ if config["axisDependency"].string != nil {
85
+ dataSet.axisDependency = BridgeUtils.parseAxisDependency(config["axisDependency"].stringValue)
86
+ }
87
+ }
88
+
89
+ static func commonBarLineScatterCandleBubbleConfig(_ dataSet: BarLineScatterCandleBubbleChartDataSet, config: JSON) {
90
+ if config["highlightColor"].int != nil {
91
+ dataSet.highlightColor = RCTConvert.uiColor(config["highlightColor"].intValue);
92
+ }
93
+ }
94
+
95
+
96
+ static func commonLineScatterCandleRadarConfig(_ dataSet: LineScatterCandleRadarChartDataSet, config: JSON) {
97
+ if config["drawHighlightIndicators"].bool != nil {
98
+ dataSet.setDrawHighlightIndicators(config["drawHighlightIndicators"].boolValue);
99
+ }
100
+
101
+ if config["drawVerticalHighlightIndicator"].bool != nil {
102
+ dataSet.drawVerticalHighlightIndicatorEnabled = config["drawVerticalHighlightIndicator"].boolValue;
103
+ }
104
+
105
+ if config["drawHorizontalHighlightIndicator"].bool != nil {
106
+ dataSet.drawHorizontalHighlightIndicatorEnabled = config["drawHorizontalHighlightIndicator"].boolValue;
107
+ }
108
+
109
+ if config["highlightLineWidth"].float != nil {
110
+ dataSet.highlightLineWidth = CGFloat(config["highlightLineWidth"].floatValue);
111
+ }
112
+ }
113
+
114
+ static func commonLineRadarConfig( _ dataSet:LineRadarChartDataSet, config:JSON) {
115
+ if let fillGradient = config["fillGradient"].dictionary {
116
+ let colors = fillGradient["colors"]?.array!.map { RCTConvert.uiColor($0.int)!.cgColor }
117
+ let locations = fillGradient["positions"]?.array!.map { CGFloat($0.float!) }
118
+
119
+ let gradient = CGGradient.init(colorsSpace: CGColorSpaceCreateDeviceRGB(), colors: colors! as CFArray, locations: locations)
120
+
121
+ var angle = 90.0
122
+ if fillGradient["angle"] != nil {
123
+ angle = fillGradient["angle"]!.doubleValue
124
+ }
125
+
126
+ if (gradient != nil) {
127
+ dataSet.fill = LinearGradientFill(gradient: gradient!, angle: CGFloat(angle));
128
+ }
129
+ } else if config["fillColor"].int != nil {
130
+ dataSet.fillColor = RCTConvert.uiColor(config["fillColor"].intValue);
131
+ }
132
+
133
+ if config["fillAlpha"].number != nil {
134
+ dataSet.fillAlpha = BridgeUtils.toIOSAlpha(config["fillAlpha"].numberValue);
135
+ }
136
+
137
+ if config["drawFilled"].bool != nil {
138
+ dataSet.drawFilledEnabled = config["drawFilled"].boolValue;
139
+ }
140
+
141
+ if config["lineWidth"].float != nil {
142
+ dataSet.lineWidth = CGFloat(config["lineWidth"].floatValue);
143
+ }
144
+ }
145
+
146
+
147
+ }
@@ -0,0 +1,66 @@
1
+ //
2
+ // EntryToDictionaryUtils.swift
3
+ //
4
+ //
5
+ // Created by xudong wu on 08/03/2017.
6
+ // Copyright © 2017 Facebook. All rights reserved.
7
+ //
8
+
9
+ import UIKit
10
+ import DGCharts
11
+ import SwiftyJSON
12
+
13
+ class EntryToDictionaryUtils: NSObject {
14
+ static func entryToDictionary(_ entry: ChartDataEntry) -> [AnyHashable: Any]{
15
+ var dict = [AnyHashable: Any]()
16
+
17
+ if entry.data != nil {
18
+ dict["data"] = (entry.data as! JSON).dictionaryObject!
19
+ }
20
+
21
+ if entry is BarChartDataEntry {
22
+ let barEntry = entry as! BarChartDataEntry;
23
+
24
+ dict["x"] = barEntry.x
25
+
26
+ if barEntry.yValues != nil {
27
+ dict["yValues"] = barEntry.yValues
28
+ } else {
29
+ dict["y"] = barEntry.y
30
+ }
31
+ } else if entry is BubbleChartDataEntry {
32
+
33
+ let bubbleEntry = entry as! BubbleChartDataEntry;
34
+
35
+ dict["x"] = bubbleEntry.x
36
+ dict["y"] = bubbleEntry.y
37
+
38
+ dict["size"] = bubbleEntry.size
39
+ } else if entry is CandleChartDataEntry {
40
+ let candleEntry = entry as! CandleChartDataEntry;
41
+
42
+ dict["x"] = candleEntry.x
43
+ dict["open"] = candleEntry.open
44
+ dict["close"] = candleEntry.close
45
+ dict["low"] = candleEntry.low
46
+ dict["high"] = candleEntry.high
47
+ } else if entry is PieChartDataEntry {
48
+ let pieEntry = entry as! PieChartDataEntry;
49
+
50
+ dict["value"] = pieEntry.value
51
+
52
+ if pieEntry.label != nil {
53
+ dict["label"] = pieEntry.label!
54
+ }
55
+ } else if entry is RadarChartDataEntry {
56
+ let radarEntry = entry as! RadarChartDataEntry;
57
+
58
+ dict["value"] = radarEntry.value
59
+ } else {
60
+ dict["x"] = entry.x
61
+ dict["y"] = entry.y
62
+ }
63
+
64
+ return dict
65
+ }
66
+ }
@@ -0,0 +1,29 @@
1
+ //
2
+ // FontUtils.swift
3
+ // Example
4
+ //
5
+ // Created by wuxudong on 2018/7/25.
6
+ // Copyright © 2018 Facebook. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+ import SwiftyJSON
11
+
12
+ class FontUtils {
13
+ static func getFont(_ json: JSON) -> UIFont? {
14
+ var font : UIFont?;
15
+ if json["fontFamily"].string != nil {
16
+ font = RCTFont.update(font ?? nil, withFamily: json["fontFamily"].string)
17
+ }
18
+
19
+ if json["fontStyle"].string != nil {
20
+ font = RCTFont.update(font ?? nil, withStyle: json["fontStyle"].string)
21
+ }
22
+
23
+ if json["fontWeight"].string != nil {
24
+ font = RCTFont.update(font ?? nil, withWeight: json["fontWeight"].string)
25
+ }
26
+
27
+ return font
28
+ }
29
+ }
@@ -0,0 +1,41 @@
1
+ //
2
+ // HighlightUtils.swift
3
+ //
4
+ // Created by wuxudong on 2018/7/26.
5
+ // Copyright © 2018 wuxudong. All rights reserved.
6
+ //
7
+
8
+ import Foundation
9
+ import DGCharts
10
+ import SwiftyJSON
11
+
12
+ class HighlightUtils {
13
+ static func getHighlights(_ config: NSArray) -> [Highlight] {
14
+ var highlights : [Highlight] = []
15
+ for object in config {
16
+ if let dict = object as? NSDictionary {
17
+ let json = BridgeUtils.toJson(dict)
18
+
19
+ if json["x"].double != nil {
20
+ let dataSetIndex = json["dataSetIndex"].int != nil ? json["dataSetIndex"].intValue : 0
21
+ let y = json["y"].double != nil ? json["y"].doubleValue : 0
22
+
23
+ var highlight : Highlight
24
+ if json["stackIndex"].int != nil {
25
+ highlight = Highlight(x: json["x"].doubleValue, dataSetIndex: dataSetIndex, stackIndex: json["stackIndex"].intValue)
26
+ } else {
27
+ highlight = Highlight(x: json["x"].doubleValue, y: y, dataSetIndex: dataSetIndex)
28
+ }
29
+
30
+ if json["dataIndex"].int != nil {
31
+ highlight.dataIndex = json["dataIndex"].intValue
32
+ }
33
+
34
+ highlights.append(highlight)
35
+ }
36
+ }
37
+ }
38
+
39
+ return highlights
40
+ }
41
+ }