packages/website/storybook/storybook-data.js (105 lines of code) (raw):
const data = {};
const DEC23 = 1513987200000;
const DAY_IN_MS = 86400000;
export function generateLinearData({
nbPoints = 20,
randomFactor = 1,
startValue = 10,
changeRatio = 0.1,
extraParams = [],
flipXY,
key
}) {
if (data[key]) {
return flipXY ? xyFlip(data[key]) : data[key];
}
const result = new Array(nbPoints).fill(0).reduce(
(series, curr, i) => [
...series,
enrich({
extraParams,
datapoint: {
x: i + 1,
y:
series[i].y * (1 + (Math.random() - 0.5) * changeRatio) +
(Math.random() - 0.5) * randomFactor
},
nbPoints,
series,
i
})
],
[
enrich({
extraParams,
datapoint: {x: 0, y: startValue},
nbPoints,
series: [],
i: 0
})
]
);
if (key !== undefined) {
data[key] = result;
}
return flipXY ? xyFlip(result) : result;
}
export function generateScatterplotData(args) {
const extraParams = [
['x', random({max: 20})],
['y', random({max: 20})]
].concat(args.extraParams || []);
return generateLinearData({...args, extraParams});
}
export function generateRadialData(args) {
return generateScatterplotData(args).map(({x, y, ...d}, i) => {
return {
angle: Math.round(x + y),
label: getWord()({i}),
...d
};
});
}
export function xyFlip(arr) {
return arr.map(d => ({
...d,
x: d.y,
y: d.x
}));
}
export function enrich({datapoint, extraParams, nbPoints, series, i}) {
return extraParams.reduce((result, param) => {
result[param[0]] = param[1]({...datapoint, series, nbPoints, i});
return result;
}, datapoint);
}
export function nonUniformX() {
return ({x, series, i}) => {
if (!i) {
return x;
}
return series[i].x + Math.random() + Math.random() + Math.random();
};
}
export function random({max = 1, min = 0}) {
return () => min + Math.random() * (max - min);
}
export function intRandom({max = 10, min = 0}) {
return () => Math.floor(min + Math.random() * (max - min));
}
export function getTime({startTime = DEC23}) {
return ({i}) => startTime + i * DAY_IN_MS;
}
export function getWord() {
return ({i}) =>
[
'deck.gl',
'math.gl',
'probe.gl',
'vis.gl',
'react-map-gl',
'vis-academy',
'luma.gl',
'kepler.gl'
][i % 8];
}