blob: 1e79ede34396c635ad0e56f34c37bbeb6399e34b [file] [log] [blame]
/* eslint-disable max-classes-per-file */
import React from 'react';
import { QueryFormData } from '@superset-ui/core';
import { ChartMetadata, ChartPlugin } from '@superset-ui/core/src/chart';
const DIMENSION_STYLE = {
fontSize: 36,
fontWeight: 700,
flex: '1 1 auto',
display: 'flex',
alignItems: 'center',
};
export const TestComponent = ({
formData,
message,
width,
height,
}: {
formData?: unknown;
message?: string;
width?: number;
height?: number;
}) => (
<div
className="test-component"
style={{
width,
height,
backgroundColor: '#00d1c1',
color: '#fff',
display: 'flex',
flexDirection: 'column',
alignItems: 'center',
borderRadius: 8,
}}
>
<div className="message" style={{ padding: 10 }}>
{message ?? 'custom component'}
</div>
<div className="dimension" style={DIMENSION_STYLE}>
{[width, height].join('x')}
</div>
<div className="formData" style={{ padding: 10 }}>
<code style={{ color: '#D3F9F7' }}>{JSON.stringify(formData)}</code>
</div>
</div>
);
export const ChartKeys = {
DILIGENT: 'diligent-chart',
LAZY: 'lazy-chart',
SLOW: 'slow-chart',
BUGGY: 'buggy-chart',
};
export class DiligentChartPlugin extends ChartPlugin<QueryFormData> {
constructor() {
super({
metadata: new ChartMetadata({
name: ChartKeys.DILIGENT,
thumbnail: '',
}),
Chart: TestComponent,
transformProps: x => x,
});
}
}
function identity<T>(x: T) {
return x;
}
export class LazyChartPlugin extends ChartPlugin<QueryFormData> {
constructor() {
super({
metadata: new ChartMetadata({
name: ChartKeys.LAZY,
thumbnail: '',
}),
// this mirrors `() => import(module)` syntax
loadChart: () => Promise.resolve({ default: TestComponent }),
// promise without .default
loadTransformProps: () => Promise.resolve(identity),
});
}
}
export class SlowChartPlugin extends ChartPlugin<QueryFormData> {
constructor() {
super({
metadata: new ChartMetadata({
name: ChartKeys.SLOW,
thumbnail: '',
}),
loadChart: () =>
new Promise(resolve => {
setTimeout(() => {
resolve(TestComponent);
}, 1000);
}),
transformProps: x => x,
});
}
}
export class BuggyChartPlugin extends ChartPlugin<QueryFormData> {
constructor() {
super({
metadata: new ChartMetadata({
name: ChartKeys.BUGGY,
thumbnail: '',
}),
Chart: () => {
throw new Error('The component is too buggy to render.');
},
transformProps: x => x,
});
}
}