mirror of
https://github.com/apache/superset.git
synced 2024-09-19 20:19:37 -04:00
Rename FormData to ChartFormData (#100)
This commit is contained in:
parent
dd9cf0deb6
commit
e4cd35a02e
@ -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 {
|
||||
@ -26,7 +26,7 @@ interface AnnotationData {
|
||||
interface ChartData {
|
||||
annotationData: AnnotationData;
|
||||
datasource: object;
|
||||
formData: FormData;
|
||||
formData: ChartFormData;
|
||||
queryData: object;
|
||||
}
|
||||
|
||||
@ -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
|
||||
@ -57,7 +57,7 @@ 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,
|
||||
}));
|
||||
@ -65,11 +65,11 @@ export default class ChartClient {
|
||||
|
||||
/* 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
|
||||
|
@ -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';
|
||||
|
@ -5,7 +5,7 @@ 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;
|
||||
@ -13,7 +13,7 @@ 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,
|
||||
@ -21,7 +21,7 @@ export type TransformPropsFunction = (
|
||||
[key: string]: any;
|
||||
};
|
||||
|
||||
interface ChartPluginConfig<T extends FormData> {
|
||||
interface ChartPluginConfig<T extends ChartFormData> {
|
||||
metadata: ChartMetadata;
|
||||
// use buildQuery for immediate value
|
||||
buildQuery?: BuildQueryFunction<T>;
|
||||
@ -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>;
|
||||
|
@ -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;
|
||||
@ -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]];
|
||||
|
@ -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 {
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
@ -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(),
|
||||
|
@ -28,4 +28,4 @@ type DruidFormData = {
|
||||
granularity: string;
|
||||
} & BaseFormData;
|
||||
|
||||
export type FormData = SqlaFormData | DruidFormData;
|
||||
export type ChartFormData = SqlaFormData | DruidFormData;
|
@ -1,3 +1,5 @@
|
||||
/* eslint-disable no-unused-vars */
|
||||
|
||||
export enum ColumnType {
|
||||
DOUBLE = 'DOUBLE',
|
||||
FLOAT = 'FLOAT',
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* eslint-disable import/prefer-default-export */
|
||||
/* eslint-disable import/prefer-default-export, no-unused-vars */
|
||||
|
||||
export enum DatasourceType {
|
||||
Table = 'table',
|
||||
|
@ -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
|
||||
|
@ -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 {
|
||||
@ -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,
|
||||
|
@ -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';
|
||||
|
||||
@ -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/', {
|
||||
@ -196,7 +201,7 @@ describe('ChartClient', () => {
|
||||
amet: true,
|
||||
});
|
||||
|
||||
getChartBuildQueryRegistry().registerValue('line', (formData: FormData) =>
|
||||
getChartBuildQueryRegistry().registerValue('line', (formData: ChartFormData) =>
|
||||
buildQueryContext(formData),
|
||||
);
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
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) => (
|
||||
@ -8,7 +8,7 @@ describe('SuperChart', () => {
|
||||
);
|
||||
const chartProps = new ChartProps();
|
||||
|
||||
class MyChartPlugin extends ChartPlugin<FormData> {
|
||||
class MyChartPlugin extends ChartPlugin<ChartFormData> {
|
||||
constructor() {
|
||||
super({
|
||||
metadata: new ChartMetadata({
|
||||
@ -21,7 +21,7 @@ describe('SuperChart', () => {
|
||||
}
|
||||
}
|
||||
|
||||
class SecondChartPlugin extends ChartPlugin<FormData> {
|
||||
class SecondChartPlugin extends ChartPlugin<ChartFormData> {
|
||||
constructor() {
|
||||
super({
|
||||
metadata: new ChartMetadata({
|
||||
@ -34,7 +34,7 @@ describe('SuperChart', () => {
|
||||
}
|
||||
}
|
||||
|
||||
class SlowChartPlugin extends ChartPlugin<FormData> {
|
||||
class SlowChartPlugin extends ChartPlugin<ChartFormData> {
|
||||
constructor() {
|
||||
super({
|
||||
metadata: new ChartMetadata({
|
||||
|
@ -1,7 +1,7 @@
|
||||
import {
|
||||
ChartPlugin,
|
||||
ChartMetadata,
|
||||
FormData,
|
||||
ChartFormData,
|
||||
DatasourceType,
|
||||
ChartProps,
|
||||
BuildQueryFunction,
|
||||
@ -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' }],
|
||||
});
|
||||
@ -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' });
|
||||
}
|
||||
});
|
||||
@ -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' });
|
||||
}
|
||||
});
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* eslint-disable import/prefer-default-export */
|
||||
/* eslint-disable import/prefer-default-export, no-unused-vars */
|
||||
|
||||
export enum OverwritePolicy {
|
||||
ALLOW = 'ALLOW',
|
||||
|
@ -1,12 +0,0 @@
|
||||
import { FormData as GenericFormData } from '@superset-ui/chart';
|
||||
|
||||
// FormData specific to the wordcloud viz
|
||||
interface WordCloudFormData {
|
||||
series: string;
|
||||
}
|
||||
|
||||
// FormData for wordcloud contains both common properties of all form data
|
||||
// and properties specific to wordcloud vizzes
|
||||
type FormData = GenericFormData & WordCloudFormData;
|
||||
|
||||
export default FormData;
|
@ -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;
|
@ -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 => [
|
||||
{
|
||||
|
@ -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';
|
||||
|
||||
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user