Files
superset2/superset-frontend/plugins/plugin-chart-table/src/stories/Table.stories.tsx
Evan Rusackas 5fe8ba8fac fix(storybook): add theme prop to all SuperChart instances in stories
Add supersetTheme import and theme prop to all 44 storybook story files
that use SuperChart to satisfy the required ChartPropsConfig.theme property.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-27 15:38:44 -08:00

212 lines
5.0 KiB
TypeScript

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import memoizeOne from 'memoize-one';
import { DataRecord, SuperChart, VizType } from '@superset-ui/core';
import { supersetTheme } from '@apache-superset/core/ui';
import TableChartPlugin, {
TableChartProps,
} from '@superset-ui/plugin-chart-table';
import { basicFormData, basicData, birthNames } from './testData';
import { withResizableChartDemo } from '@storybook-shared';
export default {
title: 'Chart Plugins/plugin-chart-table',
decorators: [withResizableChartDemo],
args: {
rows: 2046,
cols: 8,
pageLength: 50,
includeSearch: true,
alignPn: false,
showCellBars: true,
allowRearrangeColumns: false,
},
argTypes: {
rows: {
control: 'number',
name: 'Records',
min: 0,
max: 50000,
},
cols: {
control: 'number',
name: 'Columns',
min: 1,
max: 20,
},
pageLength: {
control: 'number',
name: 'Page size',
min: 0,
max: 100,
},
includeSearch: {
control: 'boolean',
name: 'Include search',
},
alignPn: {
control: 'boolean',
name: 'Align PosNeg',
},
showCellBars: {
control: 'boolean',
name: 'Show Cell Bars',
},
allowRearrangeColumns: {
control: 'boolean',
name: 'Allow end user to drag-and-drop column headers to rearrange them.',
},
},
};
new TableChartPlugin().configure({ key: VizType.Table }).register();
function expandArray<T>(input: T[], targetSize: number): T[] {
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(
(input: DataRecord[], targetSize: number): DataRecord[] =>
expandArray(input, targetSize),
);
const expandColumns = memoizeOne(
(input: string[], targetSize: number): string[] =>
expandArray(input, targetSize),
);
/**
* Load sample data for testing
* @param props the original props passed to SuperChart
* @param pageLength number of records per page
* @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,
allowRearrangeColumns = false,
},
): TableChartProps {
if (!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,
allow_rearrange_columns: allowRearrangeColumns,
},
height: window.innerHeight - 130,
};
}
export const Basic = ({ width, height }: { width: number; height: number }) => (
<SuperChart
theme={supersetTheme}
chartType={VizType.Table}
datasource={{
columnFormats: {},
}}
width={width}
height={height}
queriesData={[basicData]}
formData={basicFormData}
/>
);
Basic.parameters = {
initialSize: {
width: 680,
height: 420,
},
};
export const BigTable = ({
rows,
cols,
pageLength,
includeSearch,
alignPn,
showCellBars,
allowRearrangeColumns,
width,
height,
}: {
rows: number;
cols: number;
pageLength: number;
includeSearch: boolean;
alignPn: boolean;
showCellBars: boolean;
allowRearrangeColumns: boolean;
width: number;
height: number;
}) => {
const chartProps = loadData(birthNames, {
pageLength,
rows,
cols,
alignPn,
showCellBars,
includeSearch,
allowRearrangeColumns,
});
return (
<SuperChart
chartType={VizType.Table}
{...chartProps}
theme={supersetTheme}
width={width}
height={height}
/>
);
};
BigTable.parameters = {
initialSize: {
width: 620,
height: 440,
},
};