mirror of
https://github.com/apache/superset.git
synced 2024-09-19 20:19:37 -04:00
Remove unnecessary export types and reorganize types (#99)
* fix re-export types in translation * Fix more types * reorganize type in chart package * Fix unit tests * remove Array<> in favor of []
This commit is contained in:
parent
dba200aa84
commit
80290426ec
@ -7,7 +7,8 @@ import {
|
|||||||
SupersetClientClass,
|
SupersetClientClass,
|
||||||
} from '@superset-ui/connection';
|
} from '@superset-ui/connection';
|
||||||
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
|
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
|
||||||
import { FormData, AnnotationLayerMetadata } from '../query/FormData';
|
import { AnnotationLayerMetadata } from '../types/Annotation';
|
||||||
|
import { FormData } from '../types/FormData';
|
||||||
|
|
||||||
export type SliceIdAndOrFormData =
|
export type SliceIdAndOrFormData =
|
||||||
| {
|
| {
|
||||||
@ -29,14 +30,14 @@ interface ChartData {
|
|||||||
queryData: object;
|
queryData: object;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ChartClientConfig {
|
export default class ChartClient {
|
||||||
client?: SupersetClientInterface | SupersetClientClass;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class ChartClient {
|
|
||||||
readonly client: SupersetClientInterface | SupersetClientClass;
|
readonly client: SupersetClientInterface | SupersetClientClass;
|
||||||
|
|
||||||
constructor(config: ChartClientConfig = {}) {
|
constructor(
|
||||||
|
config: {
|
||||||
|
client?: SupersetClientInterface | SupersetClientClass;
|
||||||
|
} = {},
|
||||||
|
) {
|
||||||
const { client = SupersetClient } = config;
|
const { client = SupersetClient } = config;
|
||||||
this.client = client;
|
this.client = client;
|
||||||
}
|
}
|
||||||
@ -102,7 +103,7 @@ export class ChartClient {
|
|||||||
return Promise.reject(new Error('This feature is not implemented yet.'));
|
return Promise.reject(new Error('This feature is not implemented yet.'));
|
||||||
}
|
}
|
||||||
|
|
||||||
loadAnnotations(annotationLayers?: Array<AnnotationLayerMetadata>): Promise<AnnotationData> {
|
loadAnnotations(annotationLayers?: AnnotationLayerMetadata[]): Promise<AnnotationData> {
|
||||||
if (Array.isArray(annotationLayers) && annotationLayers.length > 0) {
|
if (Array.isArray(annotationLayers) && annotationLayers.length > 0) {
|
||||||
return Promise.all(annotationLayers.map(layer => this.loadAnnotation(layer))).then(results =>
|
return Promise.all(annotationLayers.map(layer => this.loadAnnotation(layer))).then(results =>
|
||||||
annotationLayers.reduce((prev, layer, i) => {
|
annotationLayers.reduce((prev, layer, i) => {
|
||||||
|
@ -1,12 +1,7 @@
|
|||||||
export { ChartClient, ChartClientConfig } from './clients/ChartClient';
|
export { default as ChartClient } from './clients/ChartClient';
|
||||||
export { default as ChartMetadata, ChartMetadataConfig } from './models/ChartMetadata';
|
export { default as ChartMetadata } from './models/ChartMetadata';
|
||||||
export {
|
export { default as ChartPlugin } from './models/ChartPlugin';
|
||||||
default as ChartPlugin,
|
export { default as ChartProps } from './models/ChartProps';
|
||||||
ChartPluginConfig,
|
|
||||||
BuildQueryFunction,
|
|
||||||
TransformPropsFunction,
|
|
||||||
} from './models/ChartPlugin';
|
|
||||||
export { default as ChartProps, ChartPropsConfig } from './models/ChartProps';
|
|
||||||
|
|
||||||
export { default as createLoadableRenderer } from './components/createLoadableRenderer';
|
export { default as createLoadableRenderer } from './components/createLoadableRenderer';
|
||||||
export { default as reactify } from './components/reactify';
|
export { default as reactify } from './components/reactify';
|
||||||
@ -21,6 +16,10 @@ export {
|
|||||||
default as getChartTransformPropsRegistry,
|
default as getChartTransformPropsRegistry,
|
||||||
} from './registries/ChartTransformPropsRegistrySingleton';
|
} from './registries/ChartTransformPropsRegistrySingleton';
|
||||||
|
|
||||||
export { QueryContext, buildQueryContext } from './query/buildQueryContext';
|
export { default as buildQueryContext } from './query/buildQueryContext';
|
||||||
export { DatasourceType, DatasourceKey } from './query/DatasourceKey';
|
export { default as DatasourceKey } from './query/DatasourceKey';
|
||||||
export { FormData } from './query/FormData';
|
|
||||||
|
export * from './types/Annotation';
|
||||||
|
export * from './types/Datasource';
|
||||||
|
export * from './types/FormData';
|
||||||
|
export * from './types/Query';
|
||||||
|
@ -2,28 +2,26 @@ interface LookupTable {
|
|||||||
[key: string]: boolean;
|
[key: string]: boolean;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ChartMetadataConfig {
|
|
||||||
name: string;
|
|
||||||
canBeAnnotationTypes?: Array<string>;
|
|
||||||
credits?: Array<string>;
|
|
||||||
description?: string;
|
|
||||||
show?: boolean;
|
|
||||||
supportedAnnotationTypes?: Array<string>;
|
|
||||||
thumbnail: string;
|
|
||||||
useLegacyApi?: boolean;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class ChartMetadata {
|
export default class ChartMetadata {
|
||||||
name: string;
|
name: string;
|
||||||
canBeAnnotationTypesLookup: LookupTable;
|
canBeAnnotationTypesLookup: LookupTable;
|
||||||
credits: Array<string>;
|
credits: string[];
|
||||||
description: string;
|
description: string;
|
||||||
show: boolean;
|
show: boolean;
|
||||||
supportedAnnotationTypes: Array<string>;
|
supportedAnnotationTypes: string[];
|
||||||
thumbnail: string;
|
thumbnail: string;
|
||||||
useLegacyApi: boolean;
|
useLegacyApi: boolean;
|
||||||
|
|
||||||
constructor(config: ChartMetadataConfig) {
|
constructor(config: {
|
||||||
|
name: string;
|
||||||
|
canBeAnnotationTypes?: string[];
|
||||||
|
credits?: string[];
|
||||||
|
description?: string;
|
||||||
|
show?: boolean;
|
||||||
|
supportedAnnotationTypes?: string[];
|
||||||
|
thumbnail: string;
|
||||||
|
useLegacyApi?: boolean;
|
||||||
|
}) {
|
||||||
const {
|
const {
|
||||||
name,
|
name,
|
||||||
canBeAnnotationTypes = [],
|
canBeAnnotationTypes = [],
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
import { isRequired, Plugin } from '@superset-ui/core';
|
import { isRequired, Plugin } from '@superset-ui/core';
|
||||||
import ChartMetadata from './ChartMetadata';
|
import ChartMetadata from './ChartMetadata';
|
||||||
import ChartProps from './ChartProps';
|
import ChartProps from './ChartProps';
|
||||||
import { FormData } from '../query/FormData';
|
|
||||||
import { QueryContext } from '../query/buildQueryContext';
|
|
||||||
import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton';
|
import getChartMetadataRegistry from '../registries/ChartMetadataRegistrySingleton';
|
||||||
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
|
import getChartBuildQueryRegistry from '../registries/ChartBuildQueryRegistrySingleton';
|
||||||
import getChartComponentRegistry from '../registries/ChartComponentRegistrySingleton';
|
import getChartComponentRegistry from '../registries/ChartComponentRegistrySingleton';
|
||||||
import getChartTransformPropsRegistry from '../registries/ChartTransformPropsRegistrySingleton';
|
import getChartTransformPropsRegistry from '../registries/ChartTransformPropsRegistrySingleton';
|
||||||
|
import { FormData } from '../types/FormData';
|
||||||
|
import { QueryContext } from '../types/Query';
|
||||||
|
|
||||||
const IDENTITY = (x: any) => x;
|
const IDENTITY = (x: any) => x;
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ export type TransformPropsFunction = (
|
|||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface ChartPluginConfig<T extends FormData> {
|
interface ChartPluginConfig<T extends FormData> {
|
||||||
metadata: ChartMetadata;
|
metadata: ChartMetadata;
|
||||||
// use buildQuery for immediate value
|
// use buildQuery for immediate value
|
||||||
buildQuery?: BuildQueryFunction<T>;
|
buildQuery?: BuildQueryFunction<T>;
|
||||||
|
@ -12,11 +12,11 @@ type SnakeCaseDatasource = PlainObject;
|
|||||||
type CamelCaseFormData = PlainObject;
|
type CamelCaseFormData = PlainObject;
|
||||||
type SnakeCaseFormData = PlainObject;
|
type SnakeCaseFormData = PlainObject;
|
||||||
type QueryData = PlainObject;
|
type QueryData = PlainObject;
|
||||||
type Filters = Array<any>;
|
type Filters = any[];
|
||||||
type HandlerFunction = (...args: any[]) => void;
|
type HandlerFunction = (...args: any[]) => void;
|
||||||
type ChartPropsSelector = (c: ChartPropsConfig) => ChartProps;
|
type ChartPropsSelector = (c: ChartPropsConfig) => ChartProps;
|
||||||
|
|
||||||
export interface ChartPropsConfig {
|
interface ChartPropsConfig {
|
||||||
annotationData?: AnnotationData;
|
annotationData?: AnnotationData;
|
||||||
datasource?: SnakeCaseDatasource;
|
datasource?: SnakeCaseDatasource;
|
||||||
filters?: Filters;
|
filters?: Filters;
|
||||||
|
@ -1,9 +1,6 @@
|
|||||||
export enum DatasourceType {
|
import { DatasourceType } from '../types/Datasource';
|
||||||
Table = 'table',
|
|
||||||
Druid = 'druid',
|
|
||||||
}
|
|
||||||
|
|
||||||
export class DatasourceKey {
|
export default class DatasourceKey {
|
||||||
readonly id: number;
|
readonly id: number;
|
||||||
readonly type: DatasourceType;
|
readonly type: DatasourceType;
|
||||||
|
|
||||||
|
@ -1,61 +1,9 @@
|
|||||||
import { Column } from './Column';
|
import { FormData } from '../types/FormData';
|
||||||
import { FormData } from './FormData';
|
import { MetricKey, Metric, FormDataMetric, AdhocMetric, ExpressionType } from '../types/Metric';
|
||||||
|
|
||||||
export const LABEL_MAX_LENGTH = 43;
|
export const LABEL_MAX_LENGTH = 43;
|
||||||
|
|
||||||
// Note that the values of MetricKeys are lower_snake_case because they're
|
export default class Metrics {
|
||||||
// used as keys of form data jsons.
|
|
||||||
export enum MetricKey {
|
|
||||||
METRIC = 'metric',
|
|
||||||
METRICS = 'metrics',
|
|
||||||
PERCENT_METRICS = 'percent_metrics',
|
|
||||||
RIGHT_AXIS_METRIC = 'metric_2',
|
|
||||||
SECONDARY_METRIC = 'secondary_metric',
|
|
||||||
X = 'x',
|
|
||||||
Y = 'y',
|
|
||||||
SIZE = 'size',
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum Aggregate {
|
|
||||||
AVG = 'AVG',
|
|
||||||
COUNT = 'COUNT ',
|
|
||||||
COUNT_DISTINCT = 'COUNT_DISTINCT',
|
|
||||||
MAX = 'MAX',
|
|
||||||
MIN = 'MIN',
|
|
||||||
SUM = 'SUM',
|
|
||||||
}
|
|
||||||
|
|
||||||
export enum ExpressionType {
|
|
||||||
SIMPLE = 'SIMPLE',
|
|
||||||
SQL = 'SQL',
|
|
||||||
}
|
|
||||||
|
|
||||||
interface AdhocMetricSimple {
|
|
||||||
expressionType: ExpressionType.SIMPLE;
|
|
||||||
column: Column;
|
|
||||||
aggregate: Aggregate;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface AdhocMetricSQL {
|
|
||||||
expressionType: ExpressionType.SQL;
|
|
||||||
sqlExpression: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
export type AdhocMetric = {
|
|
||||||
label?: string;
|
|
||||||
optionName?: string;
|
|
||||||
} & (AdhocMetricSimple | AdhocMetricSQL);
|
|
||||||
|
|
||||||
// Type of metrics in form data
|
|
||||||
export type FormDataMetric = string | AdhocMetric;
|
|
||||||
|
|
||||||
// Type of Metric the client provides to server after unifying various forms
|
|
||||||
// of metrics in form data
|
|
||||||
export type Metric = {
|
|
||||||
label: string;
|
|
||||||
} & Partial<AdhocMetric>;
|
|
||||||
|
|
||||||
export class Metrics {
|
|
||||||
// Use Array to maintain insertion order for metrics that are order sensitive
|
// Use Array to maintain insertion order for metrics that are order sensitive
|
||||||
private metrics: Metric[];
|
private metrics: Metric[];
|
||||||
|
|
@ -1,18 +1,11 @@
|
|||||||
import { buildQueryObject, QueryObject } from './buildQueryObject';
|
import buildQueryObject from './buildQueryObject';
|
||||||
import { DatasourceKey, DatasourceType } from './DatasourceKey';
|
import DatasourceKey from './DatasourceKey';
|
||||||
import { FormData } from './FormData';
|
import { FormData } from '../types/FormData';
|
||||||
|
import { QueryContext, QueryObject } from '../types/Query';
|
||||||
|
|
||||||
const WRAP_IN_ARRAY = (baseQueryObject: QueryObject) => [baseQueryObject];
|
const WRAP_IN_ARRAY = (baseQueryObject: QueryObject) => [baseQueryObject];
|
||||||
|
|
||||||
export interface QueryContext {
|
export default function buildQueryContext(
|
||||||
datasource: {
|
|
||||||
id: number;
|
|
||||||
type: DatasourceType;
|
|
||||||
};
|
|
||||||
queries: Array<QueryObject>;
|
|
||||||
}
|
|
||||||
|
|
||||||
export function buildQueryContext(
|
|
||||||
formData: FormData,
|
formData: FormData,
|
||||||
buildQuery: (baseQueryObject: QueryObject) => QueryObject[] = WRAP_IN_ARRAY,
|
buildQuery: (baseQueryObject: QueryObject) => QueryObject[] = WRAP_IN_ARRAY,
|
||||||
): QueryContext {
|
): QueryContext {
|
||||||
|
@ -1,11 +1,9 @@
|
|||||||
import { FormData, getGranularity } from './FormData';
|
import Metrics from './Metrics';
|
||||||
import { Metric, Metrics } from './Metric';
|
import { QueryObject } from '../types/Query';
|
||||||
|
import { FormData } from '../types/FormData';
|
||||||
|
|
||||||
// TODO: fill out the rest of the query object
|
function getGranularity(formData: FormData): string {
|
||||||
export interface QueryObject {
|
return 'granularity_sqla' in formData ? formData.granularity_sqla : formData.granularity;
|
||||||
granularity: string;
|
|
||||||
groupby?: string[];
|
|
||||||
metrics?: Metric[];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build the common segments of all query objects (e.g. the granularity field derived from
|
// Build the common segments of all query objects (e.g. the granularity field derived from
|
||||||
@ -13,7 +11,7 @@ export interface QueryObject {
|
|||||||
// buildQuery method for each viz type (see `wordcloud/buildQuery.ts` for an example).
|
// 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
|
// 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.
|
// specific viz, which is a subtype of the generic formData shared among all viz types.
|
||||||
export function buildQueryObject<T extends FormData>(formData: T): QueryObject {
|
export default function buildQueryObject<T extends FormData>(formData: T): QueryObject {
|
||||||
return {
|
return {
|
||||||
granularity: getGranularity(formData),
|
granularity: getGranularity(formData),
|
||||||
metrics: new Metrics(formData).getMetrics(),
|
metrics: new Metrics(formData).getMetrics(),
|
||||||
|
@ -0,0 +1,6 @@
|
|||||||
|
/* eslint-disable import/prefer-default-export */
|
||||||
|
|
||||||
|
export type AnnotationLayerMetadata = {
|
||||||
|
name: string;
|
||||||
|
sourceType?: string;
|
||||||
|
};
|
@ -0,0 +1,6 @@
|
|||||||
|
/* eslint-disable import/prefer-default-export */
|
||||||
|
|
||||||
|
export enum DatasourceType {
|
||||||
|
Table = 'table',
|
||||||
|
Druid = 'druid',
|
||||||
|
}
|
@ -1,6 +1,8 @@
|
|||||||
/* eslint camelcase: 0 */
|
/* eslint camelcase: 0 */
|
||||||
|
/* eslint-disable import/prefer-default-export */
|
||||||
// FormData uses snake_cased keys.
|
// FormData uses snake_cased keys.
|
||||||
import { FormDataMetric, MetricKey } from './Metric';
|
import { FormDataMetric, MetricKey } from './Metric';
|
||||||
|
import { AnnotationLayerMetadata } from './Annotation';
|
||||||
|
|
||||||
// Type signature and utility functions for formData shared by all viz types
|
// Type signature and utility functions for formData shared by all viz types
|
||||||
// It will be gradually filled out as we build out the query object
|
// It will be gradually filled out as we build out the query object
|
||||||
@ -11,15 +13,10 @@ import { FormDataMetric, MetricKey } from './Metric';
|
|||||||
// unified into a proper Metric type during buildQuery (see `/query/Metrics.ts`).
|
// unified into a proper Metric type during buildQuery (see `/query/Metrics.ts`).
|
||||||
type Metrics = Partial<Record<MetricKey, FormDataMetric | FormDataMetric[]>>;
|
type Metrics = Partial<Record<MetricKey, FormDataMetric | FormDataMetric[]>>;
|
||||||
|
|
||||||
export type AnnotationLayerMetadata = {
|
|
||||||
name: string;
|
|
||||||
sourceType?: string;
|
|
||||||
};
|
|
||||||
|
|
||||||
type BaseFormData = {
|
type BaseFormData = {
|
||||||
datasource: string;
|
datasource: string;
|
||||||
viz_type: string;
|
viz_type: string;
|
||||||
annotation_layers?: Array<AnnotationLayerMetadata>;
|
annotation_layers?: AnnotationLayerMetadata[];
|
||||||
} & Metrics;
|
} & Metrics;
|
||||||
|
|
||||||
// FormData is either sqla-based or druid-based
|
// FormData is either sqla-based or druid-based
|
||||||
@ -32,7 +29,3 @@ type DruidFormData = {
|
|||||||
} & BaseFormData;
|
} & BaseFormData;
|
||||||
|
|
||||||
export type FormData = SqlaFormData | DruidFormData;
|
export type FormData = SqlaFormData | DruidFormData;
|
||||||
|
|
||||||
export function getGranularity(formData: FormData): string {
|
|
||||||
return 'granularity_sqla' in formData ? formData.granularity_sqla : formData.granularity;
|
|
||||||
}
|
|
@ -0,0 +1,53 @@
|
|||||||
|
import { Column } from './Column';
|
||||||
|
|
||||||
|
// Note that the values of MetricKeys are lower_snake_case because they're
|
||||||
|
// used as keys of form data jsons.
|
||||||
|
export enum MetricKey {
|
||||||
|
METRIC = 'metric',
|
||||||
|
METRICS = 'metrics',
|
||||||
|
PERCENT_METRICS = 'percent_metrics',
|
||||||
|
RIGHT_AXIS_METRIC = 'metric_2',
|
||||||
|
SECONDARY_METRIC = 'secondary_metric',
|
||||||
|
X = 'x',
|
||||||
|
Y = 'y',
|
||||||
|
SIZE = 'size',
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum Aggregate {
|
||||||
|
AVG = 'AVG',
|
||||||
|
COUNT = 'COUNT ',
|
||||||
|
COUNT_DISTINCT = 'COUNT_DISTINCT',
|
||||||
|
MAX = 'MAX',
|
||||||
|
MIN = 'MIN',
|
||||||
|
SUM = 'SUM',
|
||||||
|
}
|
||||||
|
|
||||||
|
export enum ExpressionType {
|
||||||
|
SIMPLE = 'SIMPLE',
|
||||||
|
SQL = 'SQL',
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AdhocMetricSimple {
|
||||||
|
expressionType: ExpressionType.SIMPLE;
|
||||||
|
column: Column;
|
||||||
|
aggregate: Aggregate;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface AdhocMetricSQL {
|
||||||
|
expressionType: ExpressionType.SQL;
|
||||||
|
sqlExpression: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export type AdhocMetric = {
|
||||||
|
label?: string;
|
||||||
|
optionName?: string;
|
||||||
|
} & (AdhocMetricSimple | AdhocMetricSQL);
|
||||||
|
|
||||||
|
// Type of metrics in form data
|
||||||
|
export type FormDataMetric = string | AdhocMetric;
|
||||||
|
|
||||||
|
// Type of Metric the client provides to server after unifying various forms
|
||||||
|
// of metrics in form data
|
||||||
|
export type Metric = {
|
||||||
|
label: string;
|
||||||
|
} & Partial<AdhocMetric>;
|
@ -0,0 +1,26 @@
|
|||||||
|
import ChartProps from '../models/ChartProps';
|
||||||
|
import { DatasourceType } from './Datasource';
|
||||||
|
import { FormData } from './FormData';
|
||||||
|
import { Metric } from './Metric';
|
||||||
|
|
||||||
|
export interface QueryObject {
|
||||||
|
granularity: string;
|
||||||
|
groupby?: string[];
|
||||||
|
metrics?: Metric[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface QueryContext {
|
||||||
|
datasource: {
|
||||||
|
id: number;
|
||||||
|
type: DatasourceType;
|
||||||
|
};
|
||||||
|
queries: QueryObject[];
|
||||||
|
}
|
||||||
|
|
||||||
|
export type BuildQueryFunction<T extends FormData> = (formData: T) => QueryContext;
|
||||||
|
|
||||||
|
export type TransformPropsFunction = (
|
||||||
|
chartProps: ChartProps,
|
||||||
|
) => {
|
||||||
|
[key: string]: any;
|
||||||
|
};
|
@ -20,7 +20,7 @@ describe('ChartPlugin', () => {
|
|||||||
|
|
||||||
describe('new ChartPlugin()', () => {
|
describe('new ChartPlugin()', () => {
|
||||||
const FakeChart = () => 'test';
|
const FakeChart = () => 'test';
|
||||||
const buildQuery = (formData: FormData) => ({
|
const buildQuery = (_: FormData) => ({
|
||||||
datasource: { id: 1, type: DatasourceType.Table },
|
datasource: { id: 1, type: DatasourceType.Table },
|
||||||
queries: [{ granularity: 'day' }],
|
queries: [{ granularity: 'day' }],
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { DatasourceKey } from '../../src/query/DatasourceKey';
|
import { DatasourceKey } from '../../src';
|
||||||
|
|
||||||
describe('DatasourceKey', () => {
|
describe('DatasourceKey', () => {
|
||||||
const tableKey = '5__table';
|
const tableKey = '5__table';
|
||||||
|
@ -1,11 +1,6 @@
|
|||||||
import { ColumnType } from '../../src/query/Column';
|
import { ColumnType } from '../../src/types/Column';
|
||||||
import {
|
import { AdhocMetric, Aggregate, ExpressionType } from '../../src/types/Metric';
|
||||||
AdhocMetric,
|
import Metrics, { LABEL_MAX_LENGTH } from '../../src/query/Metrics';
|
||||||
Aggregate,
|
|
||||||
ExpressionType,
|
|
||||||
LABEL_MAX_LENGTH,
|
|
||||||
Metrics,
|
|
||||||
} from '../../src/query/Metric';
|
|
||||||
|
|
||||||
describe('Metrics', () => {
|
describe('Metrics', () => {
|
||||||
let metrics: Metrics;
|
let metrics: Metrics;
|
@ -1,4 +1,4 @@
|
|||||||
import { buildQueryContext } from '../../src/query/buildQueryContext';
|
import { buildQueryContext } from '../../src';
|
||||||
|
|
||||||
describe('queryContextBuilder', () => {
|
describe('queryContextBuilder', () => {
|
||||||
it('should build datasource for table sources', () => {
|
it('should build datasource for table sources', () => {
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
import { buildQueryObject, QueryObject } from '../../src/query/buildQueryObject';
|
import buildQueryObject from '../../src/query/buildQueryObject';
|
||||||
|
import { QueryObject } from '../../src';
|
||||||
|
|
||||||
describe('queryObjectBuilder', () => {
|
describe('queryObjectBuilder', () => {
|
||||||
let query: QueryObject;
|
let query: QueryObject;
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import * as CategoricalColorNamespace from './CategoricalColorNamespace';
|
import * as CategoricalColorNamespace from './CategoricalColorNamespace';
|
||||||
|
|
||||||
export { CategoricalColorNamespace };
|
export { CategoricalColorNamespace };
|
||||||
export { ColorSchemeConfig } from './ColorScheme';
|
|
||||||
export { default as CategoricalColorScale } from './CategoricalColorScale';
|
export { default as CategoricalColorScale } from './CategoricalColorScale';
|
||||||
export { default as CategoricalScheme } from './CategoricalScheme';
|
export { default as CategoricalScheme } from './CategoricalScheme';
|
||||||
export { default as getCategoricalSchemeRegistry } from './CategoricalSchemeRegistrySingleton';
|
export { default as getCategoricalSchemeRegistry } from './CategoricalSchemeRegistrySingleton';
|
||||||
export { default as getSequentialSchemeRegistry } from './SequentialSchemeRegistrySingleton';
|
export { default as getSequentialSchemeRegistry } from './SequentialSchemeRegistrySingleton';
|
||||||
export { default as SequentialScheme, SequentialSchemeConfig } from './SequentialScheme';
|
export { default as SequentialScheme } from './SequentialScheme';
|
||||||
|
|
||||||
export const BRAND_COLOR = '#00A699';
|
export const BRAND_COLOR = '#00A699';
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import { ClientConfig, SupersetClientClass } from './SupersetClientClass';
|
import SupersetClientClass from './SupersetClientClass';
|
||||||
import { RequestConfig, SupersetClientResponse } from './types';
|
import { ClientConfig, RequestConfig, SupersetClientInterface } from './types';
|
||||||
|
|
||||||
let singletonClient: SupersetClientClass | undefined;
|
let singletonClient: SupersetClientClass | undefined;
|
||||||
|
|
||||||
@ -11,20 +11,6 @@ function getInstance(maybeClient: SupersetClientClass | undefined): SupersetClie
|
|||||||
return maybeClient;
|
return maybeClient;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface SupersetClientInterface {
|
|
||||||
configure: (config?: ClientConfig) => SupersetClientClass;
|
|
||||||
delete: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
|
||||||
get: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
|
||||||
getInstance: (maybeClient?: SupersetClientClass) => SupersetClientClass;
|
|
||||||
init: (force?: boolean) => Promise<string | undefined>;
|
|
||||||
isAuthenticated: () => boolean;
|
|
||||||
post: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
|
||||||
put: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
|
||||||
reAuthenticate: () => Promise<string | undefined>;
|
|
||||||
request: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
|
||||||
reset: () => void;
|
|
||||||
}
|
|
||||||
|
|
||||||
const SupersetClient: SupersetClientInterface = {
|
const SupersetClient: SupersetClientInterface = {
|
||||||
configure: (config?: ClientConfig): SupersetClientClass => {
|
configure: (config?: ClientConfig): SupersetClientClass => {
|
||||||
singletonClient = new SupersetClientClass(config);
|
singletonClient = new SupersetClientClass(config);
|
||||||
|
@ -1,29 +1,19 @@
|
|||||||
import callApi from './callApi';
|
import callApi from './callApi';
|
||||||
import {
|
import {
|
||||||
|
ClientConfig,
|
||||||
ClientTimeout,
|
ClientTimeout,
|
||||||
Credentials,
|
Credentials,
|
||||||
|
CsrfPromise,
|
||||||
|
CsrfToken,
|
||||||
Headers,
|
Headers,
|
||||||
Host,
|
Host,
|
||||||
Mode,
|
Mode,
|
||||||
SupersetClientResponse,
|
Protocol,
|
||||||
RequestConfig,
|
RequestConfig,
|
||||||
|
SupersetClientResponse,
|
||||||
} from './types';
|
} from './types';
|
||||||
|
|
||||||
type CsrfToken = string;
|
export default class SupersetClientClass {
|
||||||
type CsrfPromise = Promise<string | undefined>;
|
|
||||||
type Protocol = 'http:' | 'https:';
|
|
||||||
|
|
||||||
export interface ClientConfig {
|
|
||||||
credentials?: Credentials;
|
|
||||||
csrfToken?: CsrfToken;
|
|
||||||
headers?: Headers;
|
|
||||||
host?: Host;
|
|
||||||
protocol?: Protocol;
|
|
||||||
mode?: Mode;
|
|
||||||
timeout?: ClientTimeout;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class SupersetClientClass {
|
|
||||||
credentials: Credentials;
|
credentials: Credentials;
|
||||||
csrfToken?: CsrfToken;
|
csrfToken?: CsrfToken;
|
||||||
csrfPromise?: CsrfPromise;
|
csrfPromise?: CsrfPromise;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
export { default as callApi } from './callApi';
|
export { default as callApi } from './callApi';
|
||||||
export { default as SupersetClient, SupersetClientInterface } from './SupersetClient';
|
export { default as SupersetClient } from './SupersetClient';
|
||||||
export { SupersetClientClass } from './SupersetClientClass';
|
export { default as SupersetClientClass } from './SupersetClientClass';
|
||||||
export * from './types';
|
export * from './types';
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
import SupersetClientClass from './SupersetClientClass';
|
||||||
|
|
||||||
export type Body = RequestInit['body'];
|
export type Body = RequestInit['body'];
|
||||||
export type Cache = RequestInit['cache'];
|
export type Cache = RequestInit['cache'];
|
||||||
export type Credentials = RequestInit['credentials'];
|
export type Credentials = RequestInit['credentials'];
|
||||||
@ -61,4 +63,32 @@ export interface JsonTextResponse {
|
|||||||
text?: string;
|
text?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type CsrfToken = string;
|
||||||
|
export type CsrfPromise = Promise<string | undefined>;
|
||||||
|
export type Protocol = 'http:' | 'https:';
|
||||||
|
|
||||||
|
export interface ClientConfig {
|
||||||
|
credentials?: Credentials;
|
||||||
|
csrfToken?: CsrfToken;
|
||||||
|
headers?: Headers;
|
||||||
|
host?: Host;
|
||||||
|
protocol?: Protocol;
|
||||||
|
mode?: Mode;
|
||||||
|
timeout?: ClientTimeout;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface SupersetClientInterface {
|
||||||
|
configure: (config?: ClientConfig) => SupersetClientClass;
|
||||||
|
delete: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
||||||
|
get: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
||||||
|
getInstance: (maybeClient?: SupersetClientClass) => SupersetClientClass;
|
||||||
|
init: (force?: boolean) => Promise<string | undefined>;
|
||||||
|
isAuthenticated: () => boolean;
|
||||||
|
post: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
||||||
|
put: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
||||||
|
reAuthenticate: () => Promise<string | undefined>;
|
||||||
|
request: (request: RequestConfig) => Promise<SupersetClientResponse>;
|
||||||
|
reset: () => void;
|
||||||
|
}
|
||||||
|
|
||||||
export type SupersetClientResponse = Response | JsonTextResponse;
|
export type SupersetClientResponse = Response | JsonTextResponse;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import fetchMock from 'fetch-mock';
|
import fetchMock from 'fetch-mock';
|
||||||
|
|
||||||
import { BigNumber } from 'bignumber.js';
|
import { BigNumber } from 'bignumber.js';
|
||||||
import { SupersetClientClass, ClientConfig } from '../src/SupersetClientClass';
|
import { SupersetClientClass, ClientConfig } from '../src';
|
||||||
import throwIfCalled from './utils/throwIfCalled';
|
import throwIfCalled from './utils/throwIfCalled';
|
||||||
import { LOGIN_GLOB } from './fixtures/constants';
|
import { LOGIN_GLOB } from './fixtures/constants';
|
||||||
|
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
export { default as ExtensibleFunction } from './models/ExtensibleFunction';
|
export { default as ExtensibleFunction } from './models/ExtensibleFunction';
|
||||||
export { default as Plugin } from './models/Plugin';
|
export { default as Plugin } from './models/Plugin';
|
||||||
export { default as Preset, PresetConfig } from './models/Preset';
|
export { default as Preset } from './models/Preset';
|
||||||
export { default as Registry, RegistryConfig, OverwritePolicy } from './models/Registry';
|
export { default as Registry } from './models/Registry';
|
||||||
export {
|
export { default as RegistryWithDefaultKey } from './models/RegistryWithDefaultKey';
|
||||||
default as RegistryWithDefaultKey,
|
|
||||||
RegistryWithDefaultKeyConfig,
|
|
||||||
} from './models/RegistryWithDefaultKey';
|
|
||||||
|
|
||||||
export { default as convertKeysToCamelCase } from './utils/convertKeysToCamelCase';
|
export { default as convertKeysToCamelCase } from './utils/convertKeysToCamelCase';
|
||||||
export { default as isDefined } from './utils/isDefined';
|
export { default as isDefined } from './utils/isDefined';
|
||||||
export { default as isRequired } from './utils/isRequired';
|
export { default as isRequired } from './utils/isRequired';
|
||||||
export { default as makeSingleton } from './utils/makeSingleton';
|
export { default as makeSingleton } from './utils/makeSingleton';
|
||||||
|
|
||||||
|
export * from './types';
|
||||||
|
@ -1,19 +1,19 @@
|
|||||||
import Plugin from './Plugin';
|
import Plugin from './Plugin';
|
||||||
|
|
||||||
export interface PresetConfig {
|
|
||||||
name?: string;
|
|
||||||
description?: string;
|
|
||||||
presets?: Preset[];
|
|
||||||
plugins?: Plugin[];
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class Preset {
|
export default class Preset {
|
||||||
name: string;
|
name: string;
|
||||||
description: string;
|
description: string;
|
||||||
presets: Preset[];
|
presets: Preset[];
|
||||||
plugins: Plugin[];
|
plugins: Plugin[];
|
||||||
|
|
||||||
constructor(config: PresetConfig = {}) {
|
constructor(
|
||||||
|
config: {
|
||||||
|
name?: string;
|
||||||
|
description?: string;
|
||||||
|
presets?: Preset[];
|
||||||
|
plugins?: Plugin[];
|
||||||
|
} = {},
|
||||||
|
) {
|
||||||
const { name = '', description = '', presets = [], plugins = [] } = config;
|
const { name = '', description = '', presets = [], plugins = [] } = config;
|
||||||
this.name = name;
|
this.name = name;
|
||||||
this.description = description;
|
this.description = description;
|
||||||
|
@ -1,10 +1,5 @@
|
|||||||
/* eslint no-console: 0 */
|
/* eslint no-console: 0 */
|
||||||
|
import { OverwritePolicy } from '../types';
|
||||||
export enum OverwritePolicy {
|
|
||||||
ALLOW = 'ALLOW',
|
|
||||||
PROHIBIT = 'PROHIBIT',
|
|
||||||
WARN = 'WARN',
|
|
||||||
}
|
|
||||||
|
|
||||||
interface ItemWithValue<T> {
|
interface ItemWithValue<T> {
|
||||||
value: T;
|
value: T;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Registry, { RegistryConfig } from './Registry';
|
import Registry, { RegistryConfig } from './Registry';
|
||||||
|
|
||||||
export interface RegistryWithDefaultKeyConfig extends RegistryConfig {
|
interface RegistryWithDefaultKeyConfig extends RegistryConfig {
|
||||||
initialDefaultKey?: string;
|
initialDefaultKey?: string;
|
||||||
setFirstItemAsDefault?: boolean;
|
setFirstItemAsDefault?: boolean;
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
/* eslint-disable import/prefer-default-export */
|
||||||
|
|
||||||
|
export enum OverwritePolicy {
|
||||||
|
ALLOW = 'ALLOW',
|
||||||
|
PROHIBIT = 'PROHIBIT',
|
||||||
|
WARN = 'WARN',
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/* eslint no-console: 0 */
|
/* eslint no-console: 0 */
|
||||||
import mockConsole from 'jest-mock-console';
|
import mockConsole from 'jest-mock-console';
|
||||||
import Registry, { OverwritePolicy } from '../../src/models/Registry';
|
import { Registry, OverwritePolicy } from '../../src';
|
||||||
|
|
||||||
describe('Registry', () => {
|
describe('Registry', () => {
|
||||||
it('exists', () => {
|
it('exists', () => {
|
||||||
|
@ -1,5 +1,11 @@
|
|||||||
import UntypedJed from 'jed';
|
import UntypedJed from 'jed';
|
||||||
import { Jed, LanguagePack } from './jed';
|
import { TranslatorConfig } from './types';
|
||||||
|
|
||||||
|
interface Jed {
|
||||||
|
translate(input: string): Jed;
|
||||||
|
ifPlural(value: number, plural: string): Jed;
|
||||||
|
fetch(...args: any[]): string;
|
||||||
|
}
|
||||||
|
|
||||||
const DEFAULT_LANGUAGE_PACK = {
|
const DEFAULT_LANGUAGE_PACK = {
|
||||||
domain: 'superset',
|
domain: 'superset',
|
||||||
@ -14,12 +20,6 @@ const DEFAULT_LANGUAGE_PACK = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
export { LanguagePack };
|
|
||||||
|
|
||||||
export interface TranslatorConfig {
|
|
||||||
languagePack?: LanguagePack;
|
|
||||||
}
|
|
||||||
|
|
||||||
export default class Translator {
|
export default class Translator {
|
||||||
i18n: Jed;
|
i18n: Jed;
|
||||||
|
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/* eslint no-console: 0 */
|
/* eslint no-console: 0 */
|
||||||
import Translator, { TranslatorConfig } from './Translator';
|
import Translator from './Translator';
|
||||||
|
import { TranslatorConfig } from './types';
|
||||||
|
|
||||||
let singleton: Translator;
|
let singleton: Translator;
|
||||||
let isConfigured = false;
|
let isConfigured = false;
|
||||||
|
@ -1,2 +1,2 @@
|
|||||||
export { configure, t, tn } from './TranslatorSingleton';
|
export { configure, t, tn } from './TranslatorSingleton';
|
||||||
export { TranslatorConfig, LanguagePack } from './Translator';
|
export * from './types';
|
||||||
|
@ -20,3 +20,7 @@ export interface Jed {
|
|||||||
ifPlural(value: number, plural: string): Jed;
|
ifPlural(value: number, plural: string): Jed;
|
||||||
fetch(...args: any[]): string;
|
fetch(...args: any[]): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface TranslatorConfig {
|
||||||
|
languagePack?: LanguagePack;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user