Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add the possibility to addEntries to a chart, without updating the whole dataSets #752

Open
wants to merge 16 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion android/gradle/wrapper/gradle-wrapper.properties
@@ -1,4 +1,4 @@
#Tue May 14 11:38:24 CST 2019
#Tue Feb 25 08:59:20 EET 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
Expand Down
Expand Up @@ -11,6 +11,7 @@
import com.github.mikephil.charting.charts.Chart;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.interfaces.datasets.IDataSet;
import com.github.mikephil.charting.jobs.ZoomJob;
import com.github.mikephil.charting.listener.BarLineChartTouchListener;
import com.github.mikephil.charting.listener.OnChartGestureListener;
Expand All @@ -21,6 +22,7 @@
import com.github.wuxudong.rncharts.utils.BridgeUtils;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Map;
import java.util.WeakHashMap;

Expand Down Expand Up @@ -287,7 +289,9 @@ public Map<String, Integer> getCommandsMap() {
"moveViewToAnimated", MOVE_VIEW_TO_ANIMATED,
"fitScreen", FIT_SCREEN,
"highlights", HIGHLIGHTS,
"setDataAndLockIndex", SET_DATA_AND_LOCK_INDEX);
"setDataAndLockIndex", SET_DATA_AND_LOCK_INDEX,
"addEntries", ADD_ENTRIES);
map.put("replaceDataSets", REPLACE_DATA_SETS);

if (commandsMap != null) {
map.putAll(commandsMap);
Expand Down Expand Up @@ -329,11 +333,62 @@ public void receiveCommand(T root, int commandId, @Nullable ReadableArray args)
case SET_DATA_AND_LOCK_INDEX:
setDataAndLockIndex(root, args.getMap(0));
return;

case ADD_ENTRIES:
addEntries(root, args.getArray(0));
return;

case REPLACE_DATA_SETS:
replaceDataSets(root, args.getArray(0));
return;
}

super.receiveCommand(root, commandId, args);
}

private void addEntries(T root, ReadableArray arr) {
for (int i = 0; i < arr.size(); i++) {
ReadableMap map = arr.getMap(i);
IDataSet dataSetByIndex = root.getData().getDataSetByIndex(map.getInt("index"));

if (map.hasKey("config")) {
getDataExtract().dataSetConfig(root, dataSetByIndex, map.getMap("config"));
}

ArrayList<Entry> entries = getDataExtract().createEntries(map.getArray("values"));
for (Entry entry : entries) {
dataSetByIndex.addEntry(entry);
}
}
root.getData().notifyDataChanged();
root.notifyDataSetChanged();
root.invalidate();
}

private void replaceDataSets(T root, ReadableArray arr) {
for (int i = 0; i < arr.size(); i++) {
ReadableMap map = arr.getMap(i);
IDataSet dataSetByIndex = root.getData().getDataSetByIndex(map.getInt("index"));

ReadableMap dataSetReadableMap = map.getMap("dataSet");

ReadableArray values = dataSetReadableMap.getArray("values");
String label = dataSetReadableMap.getString("label");

ArrayList<U> entries = getDataExtract().createEntries(values);
IDataSet<U> dataSet = getDataExtract().createDataSet(entries, label);
if (BridgeUtils.validate(dataSetReadableMap, ReadableType.Map, "config")) {
getDataExtract().dataSetConfig(root, dataSet, dataSetReadableMap.getMap("config"));
}

root.getData().removeDataSet(dataSetByIndex);
root.getData().getDataSets().add(map.getInt("index"), dataSet);
}
root.getData().notifyDataChanged();
root.notifyDataSetChanged();
root.invalidate();
}

private void setDataAndLockIndex(T root, ReadableMap map) {
YAxis.AxisDependency axisDependency = root.getAxisLeft().isEnabled() ? YAxis.AxisDependency.LEFT : YAxis.AxisDependency.RIGHT;
Transformer transformer = root.getTransformer(axisDependency);
Expand Down
Expand Up @@ -49,6 +49,8 @@ public abstract class ChartBaseManager<T extends Chart, U extends Entry> extends
protected static final int HIGHLIGHTS = 8;

protected static final int SET_DATA_AND_LOCK_INDEX = 9;
protected static final int ADD_ENTRIES = 10;
protected static final int REPLACE_DATA_SETS = 11;

abstract DataExtract getDataExtract();

Expand Down
Expand Up @@ -24,7 +24,7 @@ BarData createData() {
}

@Override
IDataSet<BarEntry> createDataSet(ArrayList<BarEntry> entries, String label) {
public IDataSet<BarEntry> createDataSet(ArrayList<BarEntry> entries, String label) {
return new BarDataSet(entries, label);
}

Expand Down Expand Up @@ -62,7 +62,7 @@ BarEntry createEntry(ReadableArray values, int index) {
}

@Override
void dataSetConfig(Chart chart, IDataSet<BarEntry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<BarEntry> dataSet, ReadableMap config) {
BarDataSet barDataSet = (BarDataSet) dataSet;

ChartDataSetConfigUtils.commonConfig(chart, barDataSet, config);
Expand Down
Expand Up @@ -25,12 +25,12 @@ BubbleData createData() {


@Override
IDataSet<BubbleEntry> createDataSet(ArrayList<BubbleEntry> entries, String label) {
public IDataSet<BubbleEntry> createDataSet(ArrayList<BubbleEntry> entries, String label) {
return new BubbleDataSet(entries, label);
}

@Override
void dataSetConfig(Chart chart, IDataSet<BubbleEntry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<BubbleEntry> dataSet, ReadableMap config) {
BubbleDataSet bubbleDataSet = (BubbleDataSet) dataSet;

ChartDataSetConfigUtils.commonConfig(chart, bubbleDataSet, config);
Expand Down
Expand Up @@ -27,12 +27,12 @@ CandleData createData() {
}

@Override
IDataSet<CandleEntry> createDataSet(ArrayList<CandleEntry> entries, String label) {
public IDataSet<CandleEntry> createDataSet(ArrayList<CandleEntry> entries, String label) {
return new CandleDataSet(entries, label);
}

@Override
void dataSetConfig(Chart chart, IDataSet<CandleEntry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<CandleEntry> dataSet, ReadableMap config) {
CandleDataSet candleDataSet = (CandleDataSet) dataSet;

ChartDataSetConfigUtils.commonConfig(chart, candleDataSet, config);
Expand Down
Expand Up @@ -54,12 +54,12 @@ CombinedData createData() {
}

@Override
IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
public IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
throw new UnsupportedOperationException();
}

@Override
void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
throw new UnsupportedOperationException();
}

Expand Down
Expand Up @@ -57,11 +57,11 @@ public D extract(Chart chart, ReadableMap propMap) {
void dataConfig(D data, ReadableMap config) {
}

abstract IDataSet<U> createDataSet(ArrayList<U> entries, String label);
public abstract IDataSet<U> createDataSet(ArrayList<U> entries, String label);

abstract void dataSetConfig(Chart chart, IDataSet<U> dataSet, ReadableMap config);
public abstract void dataSetConfig(Chart chart, IDataSet<U> dataSet, ReadableMap config);

ArrayList<U> createEntries(ReadableArray yValues) {
public ArrayList<U> createEntries(ReadableArray yValues) {
ArrayList<U> entries = new ArrayList<>(yValues.size());
for (int j = 0; j < yValues.size(); j++) {
if (!yValues.isNull(j)) {
Expand Down
Expand Up @@ -29,12 +29,12 @@ LineData createData() {


@Override
IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
public IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
return new LineDataSet(entries, label);
}

@Override
void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
LineDataSet lineDataSet = (LineDataSet) dataSet;

ChartDataSetConfigUtils.commonConfig(chart, lineDataSet, config);
Expand Down
Expand Up @@ -25,12 +25,12 @@ PieData createData() {
}

@Override
IDataSet<PieEntry> createDataSet(ArrayList<PieEntry> entries, String label) {
public IDataSet<PieEntry> createDataSet(ArrayList<PieEntry> entries, String label) {
return new PieDataSet(entries, label);
}

@Override
void dataSetConfig(Chart chart, IDataSet<PieEntry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<PieEntry> dataSet, ReadableMap config) {
PieDataSet pieDataSet = (PieDataSet) dataSet;

ChartDataSetConfigUtils.commonConfig(chart, pieDataSet, config);
Expand Down
Expand Up @@ -24,12 +24,12 @@ RadarData createData() {
}

@Override
IDataSet<RadarEntry> createDataSet(ArrayList<RadarEntry> entries, String label) {
public IDataSet<RadarEntry> createDataSet(ArrayList<RadarEntry> entries, String label) {
return new RadarDataSet(entries, label);
}

@Override
void dataSetConfig(Chart chart, IDataSet<RadarEntry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<RadarEntry> dataSet, ReadableMap config) {
RadarDataSet radarDataSet = (RadarDataSet) dataSet;

ChartDataSetConfigUtils.commonConfig(chart, radarDataSet, config);
Expand Down
Expand Up @@ -26,12 +26,12 @@ ScatterData createData() {
}

@Override
IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
public IDataSet<Entry> createDataSet(ArrayList<Entry> entries, String label) {
return new ScatterDataSet(entries, label);
}

@Override
void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
public void dataSetConfig(Chart chart, IDataSet<Entry> dataSet, ReadableMap config) {
ScatterDataSet scatterDataSet = (ScatterDataSet) dataSet;

ChartDataSetConfigUtils.commonConfig(chart, scatterDataSet, config);
Expand Down
14 changes: 14 additions & 0 deletions ios/ReactNativeCharts/RNBarLineChartBaseManager.swift
Expand Up @@ -66,6 +66,20 @@ extension RNBarLineChartBaseManager {
view.setDataAndLockIndex(data);
}
}

func _addEntries(_ reactTag: NSNumber, data: NSArray) {
_bridge?.uiManager.addUIBlock { (uiManager: RCTUIManager?, viewRegistry:[NSNumber : UIView]?) in
let view: RNBarLineChartViewBase = viewRegistry![reactTag] as! RNBarLineChartViewBase;
view.addEntries(data);
}
}

func _replaceDataSets(_ reactTag: NSNumber, data: NSArray) {
_bridge?.uiManager.addUIBlock { (uiManager: RCTUIManager?, viewRegistry:[NSNumber : UIView]?) in
let view: RNBarLineChartViewBase = viewRegistry![reactTag] as! RNBarLineChartViewBase;
view.replaceDataSets(data);
}
}
}


Expand Down
4 changes: 3 additions & 1 deletion ios/ReactNativeCharts/RNBarLineChartManagerBridge.h
Expand Up @@ -35,5 +35,7 @@ RCT_EXTERN_METHOD(centerViewTo:(nonnull NSNumber *)node xValue:(nonnull NSNumber
RCT_EXTERN_METHOD(centerViewToAnimated:(nonnull NSNumber *)node xValue:(nonnull NSNumber *)xValue yValue:(nonnull NSNumber *)yValue axisDependency:(nonnull NSString *)axisDependency duration:(nonnull NSNumber *)duration) \
RCT_EXTERN_METHOD(highlights:(nonnull NSNumber *)node config:(nonnull NSArray *)config) \
RCT_EXTERN_METHOD(fitScreen:(nonnull NSNumber *)node) \
RCT_EXTERN_METHOD(setDataAndLockIndex:(nonnull NSNumber *)node data:(nonnull NSDictionary *)data)
RCT_EXTERN_METHOD(setDataAndLockIndex:(nonnull NSNumber *)node data:(nonnull NSDictionary *)data) \
RCT_EXTERN_METHOD(addEntries:(nonnull NSNumber *)node data:(nonnull NSArray *)data) \
RCT_EXTERN_METHOD(replaceDataSets:(nonnull NSNumber *)node data:(nonnull NSArray *)data)
#endif /* RNBarLineChartManagerBridge_h */
35 changes: 34 additions & 1 deletion ios/ReactNativeCharts/RNBarLineChartViewBase.swift
Expand Up @@ -276,5 +276,38 @@ class RNBarLineChartViewBase: RNYAxisChartViewBase {

return barLineChart.valueForTouchPoint(point: CGPoint(x: contentRect.maxX, y:contentRect.minY), axis: axis).y - barLineChart.valueForTouchPoint(point: CGPoint(x: contentRect.minX, y:contentRect.maxY), axis: axis).y
}


func addEntries(_ data: NSArray) {
for d in data {
let json = BridgeUtils.toJson(d as! NSDictionary);
let index = json["index"].int!;
let entries = dataExtract.createEntries(json["values"].array!)
let dataSet = barLineChart.data!.dataSet(at: index)
for e in entries {
dataSet!.addEntry(e)
}
}
barLineChart.data!.notifyDataChanged()
barLineChart.notifyDataSetChanged()
}

func replaceDataSets(_ data: NSArray) {
for d in data {
let json = BridgeUtils.toJson(d as! NSDictionary);
let index = json["index"].int!;
let dataSetByIndex = barLineChart.data!.dataSet(at: index)
let dataSet = json["dataSet"].dictionary;
let values = dataSet!["values"]!.arrayValue;
let label = dataSet!["label"]!.stringValue;
let entries = dataExtract.createEntries(values);
let chartDataSet = dataExtract.createDataSet(entries, label: label);
if dataSet!["config"]!.dictionary != nil {
dataExtract.dataSetConfig(chartDataSet, config: dataSet!["config"]!)
}
barLineChart.data!.removeDataSet(dataSetByIndex!);
barLineChart.data!.dataSets.insert(chartDataSet, at: index);
}
barLineChart.data!.notifyDataChanged()
barLineChart.notifyDataSetChanged()
}
}
7 changes: 7 additions & 0 deletions ios/ReactNativeCharts/bar/RNBarChartManager.swift
Expand Up @@ -50,4 +50,11 @@ open class RNBarChartManager: RCTViewManager, RNBarLineChartBaseManager {
(self as RNBarLineChartBaseManager)._setDataAndLockIndex(reactTag, data: data)
}

func addEntries(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._addEntries(reactTag, data: data)
}

func replaceDataSets(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._replaceDataSets(reactTag, data: data)
}
}
7 changes: 7 additions & 0 deletions ios/ReactNativeCharts/bubble/RNBubbleChartManager.swift
Expand Up @@ -50,4 +50,11 @@ open class RNBubbleChartManager: RCTViewManager, RNBarLineChartBaseManager {
(self as RNBarLineChartBaseManager)._setDataAndLockIndex(reactTag, data: data)
}

func addEntries(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._addEntries(reactTag, data: data)
}

func replaceDataSets(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._replaceDataSets(reactTag, data: data)
}
}
Expand Up @@ -50,4 +50,11 @@ open class RNCandleStickChartManager: RCTViewManager, RNBarLineChartBaseManager
(self as RNBarLineChartBaseManager)._setDataAndLockIndex(reactTag, data: data)
}

func addEntries(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._addEntries(reactTag, data: data)
}

func replaceDataSets(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._replaceDataSets(reactTag, data: data)
}
}
7 changes: 7 additions & 0 deletions ios/ReactNativeCharts/combine/RNCombinedChartManager.swift
Expand Up @@ -50,4 +50,11 @@ open class RNCombinedChartManager: RCTViewManager, RNBarLineChartBaseManager {
(self as RNBarLineChartBaseManager)._setDataAndLockIndex(reactTag, data: data)
}

func addEntries(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._addEntries(reactTag, data: data)
}

func replaceDataSets(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._replaceDataSets(reactTag, data: data)
}
}
7 changes: 7 additions & 0 deletions ios/ReactNativeCharts/line/RNLineChartManager.swift
Expand Up @@ -50,4 +50,11 @@ open class RNLineChartManager: RCTViewManager, RNBarLineChartBaseManager {
(self as RNBarLineChartBaseManager)._setDataAndLockIndex(reactTag, data: data)
}

func addEntries(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._addEntries(reactTag, data: data)
}

func replaceDataSets(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._replaceDataSets(reactTag, data: data)
}
}
7 changes: 7 additions & 0 deletions ios/ReactNativeCharts/scatter/RNScatterChartManager.swift
Expand Up @@ -50,4 +50,11 @@ class RNScatterChartManager: RCTViewManager, RNBarLineChartBaseManager {
(self as RNBarLineChartBaseManager)._setDataAndLockIndex(reactTag, data: data)
}

func addEntries(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._addEntries(reactTag, data: data)
}

func replaceDataSets(_ reactTag: NSNumber, data: NSArray) {
(self as RNBarLineChartBaseManager)._replaceDataSets(reactTag, data: data)
}
}
3 changes: 2 additions & 1 deletion lib/BarChart.js
Expand Up @@ -11,6 +11,7 @@ import MoveEnhancer from './MoveEnhancer'
import ScaleEnhancer from "./ScaleEnhancer";
import HighlightEnhancer from "./HighlightEnhancer";
import ScrollEnhancer from "./ScrollEnhancer";
import LiveUpdateProvider from './LiveUpdateProvider';

class BarChart extends React.Component {
getNativeComponentName() {
Expand Down Expand Up @@ -40,4 +41,4 @@ var RNBarChart = requireNativeComponent('RNBarChart', BarChart, {
nativeOnly: {onSelect: true, onChange: true}
})

export default ScrollEnhancer(HighlightEnhancer(ScaleEnhancer(MoveEnhancer(BarChart))))
export default ScrollEnhancer(HighlightEnhancer(ScaleEnhancer(MoveEnhancer(LiveUpdateProvider(BarChart)))))