diff --git a/packages/victory-core/src/victory-util/data.js b/packages/victory-core/src/victory-util/data.js
index a6a5644c7..57a6abe11 100644
--- a/packages/victory-core/src/victory-util/data.js
+++ b/packages/victory-core/src/victory-util/data.js
@@ -307,7 +307,13 @@ function getStringsFromData(props, axis) {
const key = props[axis] === undefined ? axis : props[axis];
const accessor = Helpers.createAccessor(key);
- const sortedData = sortData(props.data, props.sortKey, props.sortOrder);
+ // support immutable data
+ const data = props.data.reduce((memo, d) => {
+ memo.push(parseDatum(d));
+ return memo;
+ }, []);
+
+ const sortedData = sortData(data, props.sortKey, props.sortOrder);
const dataStrings = sortedData
.reduce((dataArr, datum) => {
datum = parseDatum(datum);
diff --git a/stories/victory-area.js b/stories/victory-area.js
index 578372383..53ba0cfe5 100644
--- a/stories/victory-area.js
+++ b/stories/victory-area.js
@@ -7,6 +7,7 @@ import { VictoryTooltip } from "../packages/victory-tooltip/src/index";
import { VictoryTheme } from "../packages/victory-core/src/index";
import { getData, getMixedData, getTimeData, getLogData } from "./data";
import { getChartDecorator, getPolarChartDecorator } from "./decorators";
+import { fromJS } from "immutable";
storiesOf("VictoryArea", module).add("default rendering", () => );
@@ -78,7 +79,19 @@ storiesOf("VictoryArea.data", module)
/>
);
})
- .add("plotting functions", () => Math.sin(2 * Math.PI * d.x)} />);
+ .add("plotting functions", () => Math.sin(2 * Math.PI * d.x)} />)
+ .add("with immutable data", () => {
+ return (
+
+ );
+ });
storiesOf("VictoryArea.labels", module)
.addDecorator(getChartDecorator())
diff --git a/stories/victory-bar.js b/stories/victory-bar.js
index e4068faa2..d247068a7 100644
--- a/stories/victory-bar.js
+++ b/stories/victory-bar.js
@@ -18,6 +18,7 @@ import {
getDescendingSmallData
} from "./data";
import * as d3Shape from "d3-shape";
+import { fromJS } from "immutable";
storiesOf("VictoryBar", module).add("default rendering", () => );
@@ -256,7 +257,18 @@ storiesOf("VictoryBar.data", module)
y={"a.b.d"}
/>
);
- });
+ })
+ .add("with immutable data", () => (
+
+ ));
storiesOf("VictoryBar.labels", module)
.addDecorator(getChartDecorator({ domainPadding: 25 }))
diff --git a/stories/victory-candlestick.js b/stories/victory-candlestick.js
index f0e604e99..e8968db0d 100644
--- a/stories/victory-candlestick.js
+++ b/stories/victory-candlestick.js
@@ -7,6 +7,7 @@ import { VictoryTheme } from "../packages/victory-core/src/index";
import { range } from "lodash";
import seedrandom from "seedrandom";
import { getChartDecorator } from "./decorators";
+import { fromJS } from "immutable";
const getTimeData = (num, seed) => {
seed = seed || "getTimeData";
@@ -95,6 +96,19 @@ storiesOf("VictoryCandlestick.data", module)
high={(data) => data.big / 10}
/>
);
+ })
+ .add("with immutable data", () => {
+ return (
+
+ );
});
storiesOf("VictoryCandlestick.labels", module)
diff --git a/stories/victory-errorbar.js b/stories/victory-errorbar.js
index 3ed09203e..3bd1393ce 100644
--- a/stories/victory-errorbar.js
+++ b/stories/victory-errorbar.js
@@ -7,6 +7,7 @@ import { VictoryTheme } from "../packages/victory-core/src/index";
import { range } from "lodash";
import seedrandom from "seedrandom";
import { getChartDecorator } from "./decorators";
+import { fromJS } from "immutable";
const getData = (num, symmetric, seed) => {
seed = seed || "getData";
@@ -53,6 +54,20 @@ storiesOf("VictoryErrorBar.data", module)
errorY={(d) => [d.error, d.error + 2]}
/>
);
+ })
+ .add("with immutable data", () => {
+ return (
+ [d.error, d.error + 2]}
+ />
+ );
});
storiesOf("VictoryErrorBar.labels", module)
diff --git a/stories/victory-line.js b/stories/victory-line.js
index 79661d8d0..eed14e4d9 100644
--- a/stories/victory-line.js
+++ b/stories/victory-line.js
@@ -7,6 +7,7 @@ import { VictoryTooltip } from "../packages/victory-tooltip/src/index";
import { VictoryTheme } from "../packages/victory-core/src/index";
import { getData, getMixedData, getTimeData, getLogData } from "./data";
import { getChartDecorator, getPolarChartDecorator } from "./decorators";
+import { fromJS } from "immutable";
storiesOf("VictoryLine", module).add("default rendering", () => );
@@ -77,7 +78,17 @@ storiesOf("VictoryLine.data", module)
/>
);
})
- .add("plotting functions", () => Math.sin(2 * Math.PI * d.x)} />);
+ .add("plotting functions", () => Math.sin(2 * Math.PI * d.x)} />)
+ .add("with immutable data", () => (
+
+ ));
storiesOf("VictoryLine.labels", module)
.addDecorator(getChartDecorator())
diff --git a/stories/victory-pie.js b/stories/victory-pie.js
index 0d51255ea..ee71fd045 100644
--- a/stories/victory-pie.js
+++ b/stories/victory-pie.js
@@ -3,6 +3,7 @@ import React from "react";
import { storiesOf } from "@storybook/react";
import { action } from "@storybook/addon-actions";
import { VictoryPie, Slice } from "../packages/victory-pie/src/index";
+import { fromJS } from "immutable";
storiesOf("VictoryPie", module)
.addDecorator((story) => {story()}
)
@@ -146,4 +147,14 @@ storiesOf("VictoryPie", module)
]}
/>
+ ))
+ .add("with immutable data", () => (
+
));
diff --git a/stories/victory-scatter.js b/stories/victory-scatter.js
index 006ef7f5c..f2c9e0057 100644
--- a/stories/victory-scatter.js
+++ b/stories/victory-scatter.js
@@ -7,6 +7,7 @@ import { VictoryTooltip } from "../packages/victory-tooltip/src/index";
import { VictoryTheme } from "../packages/victory-core/src/index";
import { getData, getMixedData, getTimeData, getLogData } from "./data";
import { getChartDecorator, getPolarChartDecorator } from "./decorators";
+import { fromJS } from "immutable";
const SYMBOLS = [
"circle",
@@ -124,7 +125,18 @@ storiesOf("VictoryScatter.data", module)
/>
);
})
- .add("plotting functions", () => Math.sin(2 * Math.PI * d.x)} />);
+ .add("plotting functions", () => Math.sin(2 * Math.PI * d.x)} />)
+ .add("with immutable data", () => (
+
+ ));
storiesOf("VictoryScatter.labels", module)
.addDecorator(getChartDecorator({ domainPadding: 25 }))