blob: cfca83577b616e513559f16d80c1a8c51bc9fb81 [file] [log] [blame]
import React from 'react';
import memoizeOne from 'memoize-one';
import { withKnobs, number, boolean } from '@storybook/addon-knobs';
import { SuperChart } from '@superset-ui/core';
import TableChartPlugin, { TableChartProps } from '@superset-ui/plugin-chart-table/src';
import { basicFormData, basicData, birthNames } from './testData';
import { withResizableChartDemo } from '../../../shared/components/ResizableChartDemo';
export default {
title: 'Chart Plugins|plugin-chart-table',
decorators: [withKnobs, withResizableChartDemo],
};
new TableChartPlugin().configure({ key: 'table' }).register();
function expandArray<T>(input: T[], targetSize: number) {
if (!input || input.length === 0) {
throw new Error('Cannot expand an empty array');
}
let arr = input;
while (arr.length < targetSize) {
arr = arr.concat(arr);
}
return arr.slice(0, targetSize);
}
// memoize expanded array so to make sure we always return the same
// data when changing page sizes
const expandRecords = memoizeOne(expandArray);
const expandColumns = memoizeOne(expandArray);
/**
* Load sample data for testing
* @param props the original props passed to SuperChart
* @param pageLength number of records perpage
* @param rows the target number of records
* @param cols the target number of columns
*/
function loadData(
props: TableChartProps,
{
pageLength = 50,
rows = 1042,
cols = 8,
alignPn = false,
showCellBars = true,
includeSearch = true,
},
): TableChartProps {
if (!props.queriesData || !props.queriesData[0]) return props;
const records = props.queriesData?.[0].data || [];
const columns = props.queriesData?.[0].colnames || [];
return {
...props,
queriesData: [
{
...props.queriesData[0],
data: expandRecords(records, rows),
colnames: expandColumns(columns, cols),
},
],
formData: {
...props.formData,
align_pn: alignPn,
page_length: pageLength,
show_cell_bars: showCellBars,
include_search: includeSearch,
},
height: window.innerHeight - 130,
};
}
export const basic = ({ width, height }) => (
<SuperChart
chartType="table"
datasource={{
columnFormats: {},
}}
width={width}
height={height}
queriesData={[{ data: basicData }]}
formData={basicFormData}
/>
);
basic.story = {
parameters: {
initialSize: {
width: 680,
height: 420,
},
},
};
export const BigTable = ({ width, height }) => {
const rows = number('Records', 2046, { range: true, min: 0, max: 50000 });
const cols = number('Columns', 8, { range: true, min: 1, max: 20 });
const pageLength = number('Page size', 50, { range: true, min: 0, max: 100 });
const includeSearch = boolean('Include search', true);
const alignPn = boolean('Algin PosNeg', false);
const showCellBars = boolean('Show Cell Bars', true);
const chartProps = loadData(birthNames, {
pageLength,
rows,
cols,
alignPn,
showCellBars,
includeSearch,
});
return <SuperChart chartType="table" {...chartProps} width={width} height={height} />;
};
BigTable.story = {
parameters: {
initialSize: {
width: 620,
height: 440,
},
},
};