@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.
- package/README.md +258 -0
- package/android/build.gradle +43 -0
- package/android/src/main/AndroidManifest.xml +4 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/MPAndroidChartPackage.java +49 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/BarChartManager.java +46 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/BarLineChartBaseManager.java +415 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/BubbleChartManager.java +32 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/CandleStickChartManager.java +31 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ChartBaseManager.java +605 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ChartGroupHolder.java +80 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/CombinedChartManager.java +62 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ConfigurableMinimumLinePositionFillFormatter.java +19 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/CustomFormatter.java +25 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/DateFormatter.java +34 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/HorizontalBarChartManager.java +23 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/IndexValueFormatter.java +102 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/LabelByXValueFormatter.java +25 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/LineChartManager.java +31 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/PieChartManager.java +147 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/RadarChartManager.java +118 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/ScatterChartManager.java +32 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/charts/YAxisChartBase.java +51 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/BarDataExtract.java +106 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/BubbleDataExtract.java +74 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/CandleDataExtract.java +102 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/CombinedDataExtract.java +70 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/DataExtract.java +77 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/LineDataExtract.java +130 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/PieDataExtract.java +101 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/RadarDataExtract.java +58 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/data/ScatterDataExtract.java +75 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/listener/RNOnChartGestureListener.java +129 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/listener/RNOnChartValueSelectedListener.java +52 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/markers/RNCircleMarkerView.java +19 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/markers/RNRectangleMarkerView.java +134 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/BridgeUtils.java +52 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/ChartDataSetConfigUtils.java +197 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/ConversionUtil.java +144 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/DrawableUtils.java +51 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/EasingFunctionHelper.java +128 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/EntryToWritableMapUtils.java +147 -0
- package/android/src/main/java/com/github/wuxudong/rncharts/utils/TypefaceUtils.java +47 -0
- package/android/src/main/res/drawable-nodpi/circle_marker.xml +8 -0
- package/android/src/main/res/drawable-nodpi/oval_marker.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_left.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_right.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_top.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_top_left.9.png +0 -0
- package/android/src/main/res/drawable-nodpi/rectangle_marker_top_right.9.png +0 -0
- package/android/src/main/res/layout/circle_marker.xml +13 -0
- package/android/src/main/res/layout/oval_marker.xml +24 -0
- package/android/src/main/res/layout/rectangle_marker.xml +21 -0
- package/index.js +21 -0
- package/ios/ReactNativeCharts/BalloonMarker.swift +240 -0
- package/ios/ReactNativeCharts/ChartGroupHolder.swift +70 -0
- package/ios/ReactNativeCharts/CircleMarker.swift +108 -0
- package/ios/ReactNativeCharts/ConfigurableMinimumLinePositionFillFormatter.swift +19 -0
- package/ios/ReactNativeCharts/CustomChartDateFormatter.swift +64 -0
- package/ios/ReactNativeCharts/DataExtract.swift +80 -0
- package/ios/ReactNativeCharts/IndexValueFormatter.swift +49 -0
- package/ios/ReactNativeCharts/RNBarLineChartBaseManager.swift +115 -0
- package/ios/ReactNativeCharts/RNBarLineChartManagerBridge.h +40 -0
- package/ios/ReactNativeCharts/RNBarLineChartViewBase.swift +294 -0
- package/ios/ReactNativeCharts/RNChartManagerBridge.h +36 -0
- package/ios/ReactNativeCharts/RNChartViewBase.swift +593 -0
- package/ios/ReactNativeCharts/RNCharts-Bridging-Header.h +9 -0
- package/ios/ReactNativeCharts/RNYAxisChartManagerBridge.h +17 -0
- package/ios/ReactNativeCharts/RNYAxisChartViewBase.swift +53 -0
- package/ios/ReactNativeCharts/ReactNativeCharts.xcodeproj/project.pbxproj +376 -0
- package/ios/ReactNativeCharts/bar/BarDataExtract.swift +89 -0
- package/ios/ReactNativeCharts/bar/RNBarChartManager.swift +53 -0
- package/ios/ReactNativeCharts/bar/RNBarChartManagerBridge.m +17 -0
- package/ios/ReactNativeCharts/bar/RNBarChartView.swift +41 -0
- package/ios/ReactNativeCharts/bar/RNBarChartViewBase.swift +27 -0
- package/ios/ReactNativeCharts/bar/RNHorizontalBarChartManager.swift +45 -0
- package/ios/ReactNativeCharts/bar/RNHorizontalBarChartManagerBridge.m +16 -0
- package/ios/ReactNativeCharts/bar/RNHorizontalBarChartView.swift +41 -0
- package/ios/ReactNativeCharts/bubble/BubbleDataExtract.swift +61 -0
- package/ios/ReactNativeCharts/bubble/RNBubbleChartManager.swift +53 -0
- package/ios/ReactNativeCharts/bubble/RNBubbleChartManagerBridge.m +15 -0
- package/ios/ReactNativeCharts/bubble/RNBubbleChartView.swift +39 -0
- package/ios/ReactNativeCharts/candlestick/CandleDataExtract.swift +101 -0
- package/ios/ReactNativeCharts/candlestick/RNCandleStickChartManager.swift +53 -0
- package/ios/ReactNativeCharts/candlestick/RNCandleStickChartManagerBridge.m +16 -0
- package/ios/ReactNativeCharts/candlestick/RNCandleStickChartView.swift +44 -0
- package/ios/ReactNativeCharts/combine/CombinedDataExtract.swift +81 -0
- package/ios/ReactNativeCharts/combine/RNCombinedChartManager.swift +53 -0
- package/ios/ReactNativeCharts/combine/RNCombinedChartManagerBridge.m +19 -0
- package/ios/ReactNativeCharts/combine/RNCombinedChartView.swift +61 -0
- package/ios/ReactNativeCharts/formatters/ChartDateFormatter.swift +38 -0
- package/ios/ReactNativeCharts/formatters/LabelByXValueFormatter.swift +35 -0
- package/ios/ReactNativeCharts/formatters/LargeValueFormatter.swift +72 -0
- package/ios/ReactNativeCharts/line/LineDataExtract.swift +178 -0
- package/ios/ReactNativeCharts/line/RNLineChartManager.swift +53 -0
- package/ios/ReactNativeCharts/line/RNLineChartManagerBridge.m +14 -0
- package/ios/ReactNativeCharts/line/RNLineChartView.swift +41 -0
- package/ios/ReactNativeCharts/pie/PieDataExtract.swift +97 -0
- package/ios/ReactNativeCharts/pie/RNPieChartManager.swift +19 -0
- package/ios/ReactNativeCharts/pie/RNPieChartManagerBridge.m +30 -0
- package/ios/ReactNativeCharts/pie/RNPieChartView.swift +192 -0
- package/ios/ReactNativeCharts/radar/RNRadarChartManager.swift +19 -0
- package/ios/ReactNativeCharts/radar/RNRadarChartManagerBridge.m +25 -0
- package/ios/ReactNativeCharts/radar/RNRadarChartView.swift +99 -0
- package/ios/ReactNativeCharts/radar/RadarDataExtract.swift +50 -0
- package/ios/ReactNativeCharts/scatter/RNScatterChartManager.swift +53 -0
- package/ios/ReactNativeCharts/scatter/RNScatterChartManagerBridge.m +15 -0
- package/ios/ReactNativeCharts/scatter/RNScatterChartView.swift +43 -0
- package/ios/ReactNativeCharts/scatter/ScatterDataExtract.swift +76 -0
- package/ios/ReactNativeCharts/utils/BridgeUtils.swift +333 -0
- package/ios/ReactNativeCharts/utils/ChartDataSetConfigUtils.swift +147 -0
- package/ios/ReactNativeCharts/utils/EntryToDictionaryUtils.swift +66 -0
- package/ios/ReactNativeCharts/utils/FontUtils.swift +29 -0
- package/ios/ReactNativeCharts/utils/HighlightUtils.swift +41 -0
- package/lib/AxisIface.js +102 -0
- package/lib/BarChart.js +43 -0
- package/lib/BarLineChartBase.js +86 -0
- package/lib/BubbleChart.js +40 -0
- package/lib/CandleStickChart.js +40 -0
- package/lib/ChartBase.js +131 -0
- package/lib/ChartDataConfig.js +263 -0
- package/lib/ChartDataSetConfig.js +80 -0
- package/lib/CombinedChart.js +43 -0
- package/lib/HighlightEnhancer.js +15 -0
- package/lib/HorizontalBarChart.js +43 -0
- package/lib/LineChart.js +39 -0
- package/lib/MoveEnhancer.js +49 -0
- package/lib/PieChart.js +64 -0
- package/lib/PieRadarChartBase.js +18 -0
- package/lib/RadarChart.js +52 -0
- package/lib/ScaleEnhancer.js +16 -0
- package/lib/ScatterChart.js +38 -0
- package/lib/ScrollEnhancer.js +15 -0
- package/package.json +40 -0
- 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
|
+
}
|