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 }))