Skip to content

Commit

Permalink
Rename FormData to ChartFormData (#100)
Browse files Browse the repository at this point in the history
  • Loading branch information
kristw authored and zhaoyongjie committed Nov 25, 2021
1 parent 74c5b48 commit 592592f
Show file tree
Hide file tree
Showing 19 changed files with 58 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -8,15 +8,15 @@ import {
} from '@superset-ui/connection';
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
import { AnnotationLayerMetadata } from '../types/Annotation';
import { FormData } from '../types/FormData';
import { ChartFormData } from '../types/ChartFormData';

export type SliceIdAndOrFormData =
| {
sliceId: number;
formData?: Partial<FormData>;
formData?: Partial<ChartFormData>;
}
| {
formData: FormData;
formData: ChartFormData;
};

interface AnnotationData {
Expand All @@ -26,7 +26,7 @@ interface AnnotationData {
interface ChartData {
annotationData: AnnotationData;
datasource: object;
formData: FormData;
formData: ChartFormData;
queryData: object;
}

Expand All @@ -42,7 +42,7 @@ export default class ChartClient {
this.client = client;
}

loadFormData(input: SliceIdAndOrFormData, options?: RequestConfig): Promise<FormData> {
loadFormData(input: SliceIdAndOrFormData, options?: RequestConfig): Promise<ChartFormData> {
/* If sliceId is provided, use it to fetch stored formData from API */
if ('sliceId' in input) {
const promise = this.client
Expand All @@ -57,19 +57,19 @@ export default class ChartClient {
* If formData is also specified, override API result
* with user-specified formData
*/
return promise.then((dbFormData: FormData) => ({
return promise.then((dbFormData: ChartFormData) => ({
...dbFormData,
...input.formData,
}));
}

/* If sliceId is not provided, returned formData wrapped in a Promise */
return input.formData
? Promise.resolve(input.formData as FormData)
? Promise.resolve(input.formData as ChartFormData)
: Promise.reject(new Error('At least one of sliceId or formData must be specified'));
}

loadQueryData(formData: FormData, options?: RequestConfig): Promise<object> {
loadQueryData(formData: ChartFormData, options?: RequestConfig): Promise<object> {
const buildQuery = getChartBuildQueryRegistry().get(formData.viz_type);
if (buildQuery) {
return this.client
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,5 +21,5 @@ export { default as DatasourceKey } from './query/DatasourceKey';

export * from './types/Annotation';
export * from './types/Datasource';
export * from './types/FormData';
export * from './types/ChartFormData';
export * from './types/Query';
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@ import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySinglet
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
import getChartComponentRegistry from '../registries/ChartComponentRegistrySingleton';
import getChartTransformPropsRegistry from '../registries/ChartTransformPropsRegistrySingleton';
import { FormData } from '../types/FormData';
import { ChartFormData } from '../types/ChartFormData';
import { QueryContext } from '../types/Query';

const IDENTITY = (x: any) => x;

type PromiseOrValue<T> = Promise<T> | T;
type PromiseOrValueLoader<T> = () => PromiseOrValue<T> | PromiseOrValue<{ default: T }>;

export type BuildQueryFunction<T extends FormData> = (formData: T) => QueryContext;
export type BuildQueryFunction<T extends ChartFormData> = (formData: T) => QueryContext;

export type TransformPropsFunction = (
chartProps: ChartProps,
) => {
[key: string]: any;
};

interface ChartPluginConfig<T extends FormData> {
interface ChartPluginConfig<T extends ChartFormData> {
metadata: ChartMetadata;
// use buildQuery for immediate value
buildQuery?: BuildQueryFunction<T>;
Expand All @@ -37,7 +37,7 @@ interface ChartPluginConfig<T extends FormData> {
loadChart?: PromiseOrValueLoader<Function>;
}

export default class ChartPlugin<T extends FormData = FormData> extends Plugin {
export default class ChartPlugin<T extends ChartFormData = ChartFormData> extends Plugin {
metadata: ChartMetadata;
loadBuildQuery?: PromiseOrValueLoader<BuildQueryFunction<T>>;
loadTransformProps: PromiseOrValueLoader<TransformPropsFunction>;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { FormData } from '../types/FormData';
import { ChartFormData } from '../types/ChartFormData';
import { MetricKey, Metric, FormDataMetric, AdhocMetric, ExpressionType } from '../types/Metric';

export const LABEL_MAX_LENGTH = 43;
Expand All @@ -7,7 +7,7 @@ export default class Metrics {
// Use Array to maintain insertion order for metrics that are order sensitive
private metrics: Metric[];

constructor(formData: FormData) {
constructor(formData: ChartFormData) {
this.metrics = [];
Object.keys(MetricKey).forEach(key => {
const metric = formData[MetricKey[key as keyof typeof MetricKey]];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import buildQueryObject from './buildQueryObject';
import DatasourceKey from './DatasourceKey';
import { FormData } from '../types/FormData';
import { ChartFormData } from '../types/ChartFormData';
import { QueryContext, QueryObject } from '../types/Query';

const WRAP_IN_ARRAY = (baseQueryObject: QueryObject) => [baseQueryObject];

export default function buildQueryContext(
formData: FormData,
formData: ChartFormData,
buildQuery: (baseQueryObject: QueryObject) => QueryObject[] = WRAP_IN_ARRAY,
): QueryContext {
return {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import Metrics from './Metrics';
import { QueryObject } from '../types/Query';
import { FormData } from '../types/FormData';
import { ChartFormData } from '../types/ChartFormData';

function getGranularity(formData: FormData): string {
function getGranularity(formData: ChartFormData): string {
return 'granularity_sqla' in formData ? formData.granularity_sqla : formData.granularity;
}

Expand All @@ -11,7 +11,7 @@ function getGranularity(formData: FormData): string {
// buildQuery method for each viz type (see `wordcloud/buildQuery.ts` for an example).
// Note the type of the formData argument passed in here is the type of the formData for a
// specific viz, which is a subtype of the generic formData shared among all viz types.
export default function buildQueryObject<T extends FormData>(formData: T): QueryObject {
export default function buildQueryObject<T extends ChartFormData>(formData: T): QueryObject {
return {
granularity: getGranularity(formData),
metrics: new Metrics(formData).getMetrics(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ type DruidFormData = {
granularity: string;
} & BaseFormData;

export type FormData = SqlaFormData | DruidFormData;
export type ChartFormData = SqlaFormData | DruidFormData;
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */

export enum ColumnType {
DOUBLE = 'DOUBLE',
FLOAT = 'FLOAT',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* eslint-disable import/prefer-default-export */
/* eslint-disable import/prefer-default-export, no-unused-vars */

export enum DatasourceType {
Table = 'table',
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
/* eslint-disable no-unused-vars */

import { Column } from './Column';

// Note that the values of MetricKeys are lower_snake_case because they're
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import ChartProps from '../models/ChartProps';
import { DatasourceType } from './Datasource';
import { FormData } from './FormData';
import { ChartFormData } from './ChartFormData';
import { Metric } from './Metric';

export interface QueryObject {
Expand All @@ -17,7 +17,7 @@ export interface QueryContext {
queries: QueryObject[];
}

export type BuildQueryFunction<T extends FormData> = (formData: T) => QueryContext;
export type BuildQueryFunction<T extends ChartFormData> = (formData: T) => QueryContext;

export type TransformPropsFunction = (
chartProps: ChartProps,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
import fetchMock from 'fetch-mock';
import { SupersetClientClass, SupersetClient } from '@superset-ui/connection';

import { ChartClient, getChartBuildQueryRegistry, buildQueryContext, FormData } from '../../src';
import {
ChartClient,
getChartBuildQueryRegistry,
buildQueryContext,
ChartFormData,
} from '../../src';
import { SliceIdAndOrFormData } from '../../src/clients/ChartClient';
import { LOGIN_GLOB } from '../../../superset-ui-connection/test/fixtures/constants';

Expand Down Expand Up @@ -90,7 +95,7 @@ describe('ChartClient', () => {

describe('.loadQueryData(formData, options)', () => {
it('returns a promise of query data for known chart type', () => {
getChartBuildQueryRegistry().registerValue('word_cloud', (formData: FormData) =>
getChartBuildQueryRegistry().registerValue('word_cloud', (formData: ChartFormData) =>
buildQueryContext(formData),
);
fetchMock.post('glob:*/api/v1/query/', {
Expand Down Expand Up @@ -196,7 +201,7 @@ describe('ChartClient', () => {
amet: true,
});

getChartBuildQueryRegistry().registerValue('line', (formData: FormData) =>
getChartBuildQueryRegistry().registerValue('line', (formData: ChartFormData) =>
buildQueryContext(formData),
);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
import React from 'react';
import { mount, shallow } from 'enzyme';
import { ChartProps, ChartMetadata, ChartPlugin, FormData, SuperChart } from '../../src';
import { ChartProps, ChartMetadata, ChartPlugin, ChartFormData, SuperChart } from '../../src';

describe('SuperChart', () => {
const TestComponent = (props: any) => (
<div className="test-component">{props.character || 'test-component'}</div>
);
const chartProps = new ChartProps();

class MyChartPlugin extends ChartPlugin<FormData> {
class MyChartPlugin extends ChartPlugin<ChartFormData> {
constructor() {
super({
metadata: new ChartMetadata({
Expand All @@ -21,7 +21,7 @@ describe('SuperChart', () => {
}
}

class SecondChartPlugin extends ChartPlugin<FormData> {
class SecondChartPlugin extends ChartPlugin<ChartFormData> {
constructor() {
super({
metadata: new ChartMetadata({
Expand All @@ -34,7 +34,7 @@ describe('SuperChart', () => {
}
}

class SlowChartPlugin extends ChartPlugin<FormData> {
class SlowChartPlugin extends ChartPlugin<ChartFormData> {
constructor() {
super({
metadata: new ChartMetadata({
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import {
ChartPlugin,
ChartMetadata,
FormData,
ChartFormData,
DatasourceType,
ChartProps,
BuildQueryFunction,
Expand All @@ -20,7 +20,7 @@ describe('ChartPlugin', () => {

describe('new ChartPlugin()', () => {
const FakeChart = () => 'test';
const buildQuery = (_: FormData) => ({
const buildQuery = (_: ChartFormData) => ({
datasource: { id: 1, type: DatasourceType.Table },
queries: [{ granularity: 'day' }],
});
Expand Down Expand Up @@ -53,7 +53,7 @@ describe('ChartPlugin', () => {
loadBuildQuery: () => buildQuery,
});
if (typeof plugin.loadBuildQuery === 'function') {
const fn = plugin.loadBuildQuery() as BuildQueryFunction<FormData>;
const fn = plugin.loadBuildQuery() as BuildQueryFunction<ChartFormData>;
expect(fn(FORM_DATA).queries[0]).toEqual({ granularity: 'day' });
}
});
Expand All @@ -65,7 +65,7 @@ describe('ChartPlugin', () => {
buildQuery,
});
if (typeof plugin.loadBuildQuery === 'function') {
const fn = plugin.loadBuildQuery() as BuildQueryFunction<FormData>;
const fn = plugin.loadBuildQuery() as BuildQueryFunction<ChartFormData>;
expect(fn(FORM_DATA).queries[0]).toEqual({ granularity: 'day' });
}
});
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
/* eslint-disable import/prefer-default-export */
/* eslint-disable import/prefer-default-export, no-unused-vars */

export enum OverwritePolicy {
ALLOW = 'ALLOW',
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ChartFormData } from '@superset-ui/chart';

// FormData for wordcloud contains both common properties of all form data
// and properties specific to wordcloud vizzes
type WordCloudFormData = ChartFormData & {
series: string;
};

export default WordCloudFormData;
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { buildQueryContext } from '@superset-ui/chart';
import FormData from './FormData';
import WordCloudFormData from './WordCloudFormData';

export default function buildQuery(formData: FormData) {
export default function buildQuery(formData: WordCloudFormData) {
// Set the single QueryObject's groupby field with series in formData
return buildQueryContext(formData, baseQueryObject => [
{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { t } from '@superset-ui/translation';
import { ChartMetadata, ChartPlugin } from '@superset-ui/chart';
import buildQuery from './buildQuery';
import FormData from './FormData';
import WordCloudFormData from './WordCloudFormData';
import transformProps from './transformProps';
import thumbnail from './images/thumbnail.png';

Expand All @@ -12,7 +12,7 @@ const metadata = new ChartMetadata({
thumbnail,
});

export default class WordCloudChartPlugin extends ChartPlugin<FormData> {
export default class WordCloudChartPlugin extends ChartPlugin<WordCloudFormData> {
constructor() {
super({
buildQuery,
Expand Down

0 comments on commit 592592f

Please sign in to comment.