Skip to content

Commit 630d3e5

Browse files
authored
feat: split superset-ui/query from superset-ui/chart (apache-superset#178)
BREAKING CHANGE: some api and types are removed from @superset-ui/chart and moved to /query * feat: split superset-ui/query from superset-ui/chart * fix: update references * test: fix broken tests * refactor: rename ChartFormData to QueryFormData * fix: rename file * fix: remove annotation layer from query package
1 parent f8d7042 commit 630d3e5

37 files changed

+155
-107
lines changed

packages/superset-ui-chart/package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
"@superset-ui/connection": "^0.11.0",
4444
"@superset-ui/core": "^0.11.0",
4545
"@superset-ui/dimension": "^0.11.10",
46+
"@superset-ui/query": "^0.11.10",
4647
"react": "^15 || ^16"
4748
}
4849
}

packages/superset-ui-chart/src/clients/ChartClient.ts

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,18 @@ import {
66
Json,
77
SupersetClientClass,
88
} from '@superset-ui/connection';
9+
import { QueryFormData, Datasource } from '@superset-ui/query';
910
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
1011
import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton';
11-
import { AnnotationLayerMetadata } from '../types/Annotation';
12-
import { ChartFormData } from '../types/ChartFormData';
1312
import { QueryData } from '../models/ChartProps';
14-
import { Datasource } from '../types/Datasource';
13+
import { AnnotationLayerMetadata } from '../types/Annotation';
1514

1615
// This expands to Partial<All> & (union of all possible single-property types)
1716
type AtLeastOne<All, Each = { [K in keyof All]: Pick<All, K> }> = Partial<All> & Each[keyof Each];
1817

1918
export type SliceIdAndOrFormData = AtLeastOne<{
2019
sliceId: number;
21-
formData: Partial<ChartFormData>;
20+
formData: Partial<QueryFormData>;
2221
}>;
2322

2423
interface AnnotationData {
@@ -28,7 +27,7 @@ interface AnnotationData {
2827
export interface ChartData {
2928
annotationData: AnnotationData;
3029
datasource: object;
31-
formData: ChartFormData;
30+
formData: QueryFormData;
3231
queryData: QueryData;
3332
}
3433

@@ -47,7 +46,7 @@ export default class ChartClient {
4746
loadFormData(
4847
input: SliceIdAndOrFormData,
4948
options?: Partial<RequestConfig>,
50-
): Promise<ChartFormData> {
49+
): Promise<QueryFormData> {
5150
/* If sliceId is provided, use it to fetch stored formData from API */
5251
if ('sliceId' in input) {
5352
const promise = this.client
@@ -62,19 +61,19 @@ export default class ChartClient {
6261
* If formData is also specified, override API result
6362
* with user-specified formData
6463
*/
65-
return promise.then((dbFormData: ChartFormData) => ({
64+
return promise.then((dbFormData: QueryFormData) => ({
6665
...dbFormData,
6766
...input.formData,
6867
}));
6968
}
7069

7170
/* If sliceId is not provided, returned formData wrapped in a Promise */
7271
return input.formData
73-
? Promise.resolve(input.formData as ChartFormData)
72+
? Promise.resolve(input.formData as QueryFormData)
7473
: Promise.reject(new Error('At least one of sliceId or formData must be specified'));
7574
}
7675

77-
async loadQueryData(formData: ChartFormData, options?: Partial<RequestConfig>): Promise<object> {
76+
async loadQueryData(formData: QueryFormData, options?: Partial<RequestConfig>): Promise<object> {
7877
const { viz_type: visType } = formData;
7978
const metaDataRegistry = getChartMetadataRegistry();
8079
const buildQueryRegistry = getChartBuildQueryRegistry();
@@ -132,17 +131,23 @@ export default class ChartClient {
132131
}
133132

134133
loadChartData(input: SliceIdAndOrFormData): Promise<ChartData> {
135-
return this.loadFormData(input).then(formData =>
136-
Promise.all([
137-
this.loadAnnotations(formData.annotation_layers),
138-
this.loadDatasource(formData.datasource),
139-
this.loadQueryData(formData),
140-
]).then(([annotationData, datasource, queryData]) => ({
141-
annotationData,
142-
datasource,
143-
formData,
144-
queryData,
145-
})),
134+
return this.loadFormData(input).then(
135+
(
136+
formData: QueryFormData & {
137+
// eslint-disable-next-line camelcase
138+
annotation_layers?: AnnotationLayerMetadata[];
139+
},
140+
) =>
141+
Promise.all([
142+
this.loadAnnotations(formData.annotation_layers),
143+
this.loadDatasource(formData.datasource),
144+
this.loadQueryData(formData),
145+
]).then(([annotationData, datasource, queryData]) => ({
146+
annotationData,
147+
datasource,
148+
formData,
149+
queryData,
150+
})),
146151
);
147152
}
148153
}

packages/superset-ui-chart/src/components/ChartDataProvider.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
/* eslint react/sort-comp: 'off' */
22
import React, { ReactNode } from 'react';
33
import { SupersetClientInterface, RequestConfig } from '@superset-ui/connection';
4-
4+
import { QueryFormData, Datasource } from '@superset-ui/query';
55
import ChartClient, { SliceIdAndOrFormData } from '../clients/ChartClient';
6-
import { ChartFormData } from '../types/ChartFormData';
7-
import { Datasource } from '../types/Datasource';
86
import { QueryData } from '../models/ChartProps';
97

108
interface Payload {
11-
formData: Partial<ChartFormData>;
9+
formData: Partial<QueryFormData>;
1210
queryData: QueryData;
1311
datasource?: Datasource;
1412
}

packages/superset-ui-chart/src/index.ts

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,6 @@ export {
1616
default as getChartTransformPropsRegistry,
1717
} from './registries/ChartTransformPropsRegistrySingleton';
1818

19-
export { default as buildQueryContext } from './query/buildQueryContext';
20-
export { default as DatasourceKey } from './query/DatasourceKey';
21-
2219
export { default as ChartDataProvider } from './components/ChartDataProvider';
2320

24-
export * from './types/Annotation';
25-
export * from './types/ChartFormData';
26-
export * from './types/Datasource';
27-
export * from './types/Metric';
28-
export * from './types/Query';
2921
export * from './types/TransformFunction';

packages/superset-ui-chart/src/models/ChartPlugin.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import { FunctionComponent, ComponentType } from 'react';
22
import { isRequired, Plugin } from '@superset-ui/core';
3+
import { QueryFormData } from '@superset-ui/query';
34
import ChartMetadata from './ChartMetadata';
45
import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton';
56
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
67
import getChartComponentRegistry from '../registries/ChartComponentRegistrySingleton';
78
import getChartTransformPropsRegistry from '../registries/ChartTransformPropsRegistrySingleton';
8-
import { ChartFormData } from '../types/ChartFormData';
99
import { BuildQueryFunction, TransformProps } from '../types/TransformFunction';
1010

1111
const IDENTITY = (x: any) => x;
@@ -15,7 +15,7 @@ export type PromiseOrValueLoader<T> = () => PromiseOrValue<T>;
1515
export type ChartType = ComponentType<any> | FunctionComponent<any>;
1616
type ValueOrModuleWithValue<T> = T | { default: T };
1717

18-
interface ChartPluginConfig<T extends ChartFormData> {
18+
interface ChartPluginConfig<T extends QueryFormData> {
1919
metadata: ChartMetadata;
2020
/** Use buildQuery for immediate value. For lazy-loading, use loadBuildQuery. */
2121
buildQuery?: BuildQueryFunction<T>;
@@ -47,7 +47,7 @@ function sanitizeLoader<T>(
4747
};
4848
}
4949

50-
export default class ChartPlugin<T extends ChartFormData = ChartFormData> extends Plugin {
50+
export default class ChartPlugin<T extends QueryFormData = QueryFormData> extends Plugin {
5151
metadata: ChartMetadata;
5252
loadBuildQuery?: PromiseOrValueLoader<BuildQueryFunction<T>>;
5353
loadTransformProps: PromiseOrValueLoader<TransformProps>;

packages/superset-ui-chart/src/registries/ChartBuildQueryRegistrySingleton.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { Registry, makeSingleton, OverwritePolicy } from '@superset-ui/core';
2-
import { QueryContext } from '../types/Query';
2+
import { QueryContext } from '@superset-ui/query';
33

4-
// Ideally this would be <T extends ChartFormData>
4+
// Ideally this would be <T extends QueryFormData>
55
type BuildQuery = (formData: any) => QueryContext;
66

77
class ChartBuildQueryRegistry extends Registry<BuildQuery> {

packages/superset-ui-chart/src/types/TransformFunction.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import { ChartFormData } from './ChartFormData';
1+
import { QueryFormData, QueryContext } from '@superset-ui/query';
22
import ChartProps from '../models/ChartProps';
3-
import { QueryContext } from './Query';
43

54
export interface PlainProps {
65
[key: string]: any;
@@ -12,4 +11,4 @@ export type PreTransformProps = TransformFunction<ChartProps, ChartProps>;
1211
export type TransformProps = TransformFunction<ChartProps>;
1312
export type PostTransformProps = TransformFunction;
1413

15-
export type BuildQueryFunction<T extends ChartFormData> = (formData: T) => QueryContext;
14+
export type BuildQueryFunction<T extends QueryFormData> = (formData: T) => QueryContext;

packages/superset-ui-chart/test/clients/ChartClient.test.ts

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
11
import fetchMock from 'fetch-mock';
22
import { SupersetClientClass, SupersetClient } from '@superset-ui/connection';
3-
3+
import { buildQueryContext, QueryFormData } from '@superset-ui/query';
44
import {
55
ChartClient,
66
getChartBuildQueryRegistry,
7-
buildQueryContext,
8-
ChartFormData,
97
getChartMetadataRegistry,
108
ChartMetadata,
119
} from '../../src';
12-
1310
import { SliceIdAndOrFormData } from '../../src/clients/ChartClient';
1411
import { LOGIN_GLOB } from '../../../superset-ui-connection/test/fixtures/constants';
1512

@@ -103,7 +100,7 @@ describe('ChartClient', () => {
103100
new ChartMetadata({ name: 'Word Cloud', thumbnail: '' }),
104101
);
105102

106-
getChartBuildQueryRegistry().registerValue('word_cloud', (formData: ChartFormData) =>
103+
getChartBuildQueryRegistry().registerValue('word_cloud', (formData: QueryFormData) =>
107104
buildQueryContext(formData),
108105
);
109106
fetchMock.post('glob:*/api/v1/query/', {
@@ -247,7 +244,7 @@ describe('ChartClient', () => {
247244
new ChartMetadata({ name: 'Line', thumbnail: '.gif' }),
248245
);
249246

250-
getChartBuildQueryRegistry().registerValue('line', (formData: ChartFormData) =>
247+
getChartBuildQueryRegistry().registerValue('line', (formData: QueryFormData) =>
251248
buildQueryContext(formData),
252249
);
253250

packages/superset-ui-chart/test/components/MockChartPlugins.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React from 'react';
2-
import { ChartMetadata, ChartPlugin, ChartFormData } from '../../src';
2+
import { ChartMetadata, ChartPlugin, QueryFormData } from '../../src';
33

44
const DIMENSION_STYLE = {
55
fontSize: 36,
@@ -52,7 +52,7 @@ export const ChartKeys = {
5252
BUGGY: 'buggy-chart',
5353
};
5454

55-
export class DiligentChartPlugin extends ChartPlugin<ChartFormData> {
55+
export class DiligentChartPlugin extends ChartPlugin<QueryFormData> {
5656
constructor() {
5757
super({
5858
metadata: new ChartMetadata({
@@ -65,7 +65,7 @@ export class DiligentChartPlugin extends ChartPlugin<ChartFormData> {
6565
}
6666
}
6767

68-
export class LazyChartPlugin extends ChartPlugin<ChartFormData> {
68+
export class LazyChartPlugin extends ChartPlugin<QueryFormData> {
6969
constructor() {
7070
super({
7171
metadata: new ChartMetadata({
@@ -80,7 +80,7 @@ export class LazyChartPlugin extends ChartPlugin<ChartFormData> {
8080
}
8181
}
8282

83-
export class SlowChartPlugin extends ChartPlugin<ChartFormData> {
83+
export class SlowChartPlugin extends ChartPlugin<QueryFormData> {
8484
constructor() {
8585
super({
8686
metadata: new ChartMetadata({
@@ -98,7 +98,7 @@ export class SlowChartPlugin extends ChartPlugin<ChartFormData> {
9898
}
9999
}
100100

101-
export class BuggyChartPlugin extends ChartPlugin<ChartFormData> {
101+
export class BuggyChartPlugin extends ChartPlugin<QueryFormData> {
102102
constructor() {
103103
super({
104104
metadata: new ChartMetadata({

packages/superset-ui-chart/test/models/ChartPlugin.test.tsx

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
import React from 'react';
2-
2+
import { QueryFormData, DatasourceType } from '@superset-ui/query';
33
import {
44
ChartPlugin,
55
ChartMetadata,
6-
ChartFormData,
7-
DatasourceType,
86
ChartProps,
97
BuildQueryFunction,
108
TransformProps,
@@ -61,7 +59,7 @@ describe('ChartPlugin', () => {
6159
loadBuildQuery: () => buildQuery,
6260
});
6361
if (typeof plugin.loadBuildQuery === 'function') {
64-
const fn = plugin.loadBuildQuery() as BuildQueryFunction<ChartFormData>;
62+
const fn = plugin.loadBuildQuery() as BuildQueryFunction<QueryFormData>;
6563
expect(fn(FORM_DATA).queries[0]).toEqual({ granularity: 'day' });
6664
}
6765
});
@@ -73,7 +71,7 @@ describe('ChartPlugin', () => {
7371
buildQuery,
7472
});
7573
if (typeof plugin.loadBuildQuery === 'function') {
76-
const fn = plugin.loadBuildQuery() as BuildQueryFunction<ChartFormData>;
74+
const fn = plugin.loadBuildQuery() as BuildQueryFunction<QueryFormData>;
7775
expect(fn(FORM_DATA).queries[0]).toEqual({ granularity: 'day' });
7876
}
7977
});

0 commit comments

Comments
 (0)