From 15efb6e89459a3261c8bfa40714924ce31fb05b5 Mon Sep 17 00:00:00 2001 From: plouc Date: Fri, 7 Jan 2022 21:46:54 +0900 Subject: [PATCH] feat(generators): add a helper to generate x/y series --- packages/generators/src/index.ts | 1 + packages/generators/src/xySeries.ts | 58 +++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 packages/generators/src/xySeries.ts diff --git a/packages/generators/src/index.ts b/packages/generators/src/index.ts index 436dc7c50c..9ebf411db4 100644 --- a/packages/generators/src/index.ts +++ b/packages/generators/src/index.ts @@ -283,3 +283,4 @@ export * from './network' export * from './parallelCoordinates' export * from './sankey' export * from './swarmplot' +export * from './xySeries' diff --git a/packages/generators/src/xySeries.ts b/packages/generators/src/xySeries.ts new file mode 100644 index 0000000000..8c1c5e469a --- /dev/null +++ b/packages/generators/src/xySeries.ts @@ -0,0 +1,58 @@ +interface XYRangeStaticValues { + values: string[] | number[] +} + +interface XYRandomNumericValues { + length: number + min: number + max: number + round?: boolean +} + +type XYRangeValues = XYRangeStaticValues | XYRandomNumericValues + +const getValueGenerator = (config: XYRangeValues) => { + let generator: (index: number) => string | number + + if ('values' in config) { + generator = (index: number) => config.values[index] + } else { + generator = () => { + let value = config.min + Math.random() * (config.max - config.min) + if (config.round) { + value = Math.round(value) + } + + return value + } + } + + return generator +} + +export const generateXYSeries = ({ + serieIds, + x, + y, +}: { + serieIds: string[] + x: XYRangeValues + y: XYRangeValues +}) => { + const xLength = 'length' in x ? x.length : x.values.length + + const getX = getValueGenerator(x) + const getY = getValueGenerator(y) + + return serieIds.map(serieId => { + return { + id: serieId, + data: Array.from({ length: xLength }).map((_, index) => { + return { + x: getX(index), + y: getY(index), + } + }), + } + }) +}