@gooddata/react-components
Version:
GoodData.UI - A powerful JavaScript library for building analytical applications
333 lines (284 loc) • 9.22 kB
text/typescript
// (C) 2019-2020 GoodData Corporation
import { AFM, Execution, VisualizationObject } from "@gooddata/typings";
import { DataLayer } from "@gooddata/gooddata-js";
import { ISeparators } from "@gooddata/numberjs";
import { VisualizationEnvironment } from "../../components/uri/Visualization";
import { IDrillableItem } from "../../interfaces/DrillEvents";
import { OverTimeComparisonType } from "../../interfaces/OverTimeComparison";
import { ChartType } from "../../constants/visualizationTypes";
import { IColorPalette } from "../../interfaces/Config";
import * as VisEvents from "../../interfaces/Events";
import { DATE_DATASET_ATTRIBUTE } from "../constants/bucket";
import { IPushData } from "../../interfaces/PushData";
export type ILocale =
| "en-US"
| "de-DE"
| "es-ES"
| "fr-FR"
| "ja-JP"
| "nl-NL"
| "pt-BR"
| "pt-PT"
| "zh-Hans";
export interface IFeatureFlags {
[property: string]: string | boolean | number;
}
export interface IVisConstruct {
projectId: string;
element: string;
configPanelElement: string;
callbacks: IVisCallbacks;
environment?: VisualizationEnvironment;
locale?: ILocale;
featureFlags?: IFeatureFlags;
visualizationProperties?: IVisualizationPropertiesWrapper;
references?: IReferences;
}
export interface ICustomProps {
stickyHeaderOffset?: number;
drillableItems?: IDrillableItem[];
totalsEditAllowed?: boolean;
}
export interface IDimensions {
width?: number; // Note: will not be optional once we start sending it
height: number;
}
export interface IVisProps {
dataSource: DataLayer.DataSource.IDataSource<Execution.IExecutionResponses>;
resultSpec: AFM.IResultSpec;
dimensions: IDimensions;
custom: ICustomProps;
locale?: ILocale;
config?: IGdcConfig;
}
export interface IVisualizationOptions {
dateOptionsDisabled: boolean;
}
export interface IVisCallbacks extends VisEvents.IEvents {
afterRender?(): void;
pushData(data: IPushData, options?: IVisualizationOptions): void;
}
export interface IBucketFilterElement {
title: string;
uri: string;
}
export interface IBucketFilterInterval {
granularity: string;
interval: string[];
name: string;
}
export type ComparisonConditionOperator =
| "GREATER_THAN"
| "GREATER_THAN_OR_EQUAL_TO"
| "LESS_THAN"
| "LESS_THAN_OR_EQUAL_TO"
| "EQUAL_TO"
| "NOT_EQUAL_TO";
export interface IComparisonCondition {
readonly comparison: {
readonly operator: ComparisonConditionOperator;
readonly value: number;
};
}
export type RangeConditionOperator = "BETWEEN" | "NOT_BETWEEN";
export interface IRangeCondition {
readonly range: {
readonly operator: RangeConditionOperator;
readonly from: number;
readonly to: number;
};
}
export type IMeasureValueFilterCondition = IComparisonCondition | IRangeCondition;
export interface IAttributeFilter {
attribute: string;
isInverted: boolean;
totalElementsCount: number;
selectedElements: Array<{
title: string;
uri: string;
}>;
}
export interface IDateFilter {
attribute: "attr.datedataset";
overTimeComparisonType: OverTimeComparisonType;
interval: {
granularity: string;
interval: [string, string] | [number, number];
name: string;
type: "relative" | "absolute";
};
}
export interface IMeasureValueFilter {
measureLocalIdentifier: string;
condition?: IMeasureValueFilterCondition;
}
export type IBucketFilter = IAttributeFilter | IDateFilter | IMeasureValueFilter;
export function isDateFilter(filter: IBucketFilter): filter is IDateFilter {
return !!filter && (filter as IDateFilter).attribute === DATE_DATASET_ATTRIBUTE;
}
export function isAttributeFilter(filter: IBucketFilter): filter is IAttributeFilter {
const filterAsAttributeFilter: IAttributeFilter = filter as IAttributeFilter;
return (
!!filter &&
filterAsAttributeFilter.attribute !== DATE_DATASET_ATTRIBUTE &&
filterAsAttributeFilter.attribute !== undefined
);
}
export function isMeasureValueFilter(filter: IBucketFilter): filter is IMeasureValueFilter {
return !!filter && !!(filter as IMeasureValueFilter).measureLocalIdentifier;
}
export interface ISort {
direction: "asc" | "desc";
}
export interface IBucketItem {
aggregation?: boolean;
attribute?: string;
dfUri?: string; // default displayFrom uri
filters?: IBucketFilter[];
format?: string;
granularity?: string;
localIdentifier: string;
locationDisplayFormUri?: string;
masterLocalIdentifier?: string;
overTimeComparisonType?: OverTimeComparisonType;
operandLocalIdentifiers?: Array<string | null> | null;
operator?: string | null;
showInPercent?: boolean;
showOnSecondaryAxis?: boolean;
sort?: ISort;
type?: string;
}
export interface IFiltersBucketItem extends IBucketItem {
autoCreated?: boolean;
}
export interface IBucket {
localIdentifier: string;
items: IBucketItem[];
totals?: VisualizationObject.IVisualizationTotal[];
chartType?: VisualizationObject.VisualizationType;
}
export interface IFilters {
localIdentifier: "filters";
items: IFiltersBucketItem[];
}
export interface IRecommendations {
[key: string]: boolean;
}
export interface IBucketUiConfig {
accepts?: string[];
canAddItems?: boolean;
warningMessage?: string;
title?: string;
subtitle?: string;
icon?: string;
allowsDuplicateItems?: boolean;
allowsReordering?: boolean;
allowsSwapping?: boolean;
enabled?: boolean;
itemsLimit?: number;
isShowInPercentEnabled?: boolean;
isShowInPercentVisible?: boolean;
isShowOnSecondaryAxisVisible?: boolean;
allowShowOnSecondaryAxis?: boolean;
allowSelectChartType?: boolean;
allowOptionalStacking?: boolean;
}
export interface IBucketsUiConfig {
[localIdentifier: string]: IBucketUiConfig;
}
export interface IExportUiConfig {
supported?: boolean;
}
export interface INoMetricUiConfig {
supported?: boolean;
}
export interface IOpenAsReportUiConfig {
supported?: boolean;
warningMessage?: string;
}
export interface ICustomError {
heading: string;
text: string;
}
export interface IOptionalStacking {
supported?: boolean;
disabled?: boolean;
stackMeasures?: boolean;
stackMeasuresToPercent?: boolean;
canStackInPercent?: boolean;
}
export interface ISupportedLocationIcon {
supported?: boolean;
}
export interface IUiConfig {
buckets: IBucketsUiConfig;
recommendations?: IRecommendations;
exportConfig?: IExportUiConfig;
noMetricAccepted?: INoMetricUiConfig;
openAsReport?: IOpenAsReportUiConfig;
customError?: ICustomError;
supportedOverTimeComparisonTypes?: OverTimeComparisonType[];
supportedChartTypes?: ChartType[];
axis?: string;
optionalStacking?: IOptionalStacking;
supportedLocationIcon?: ISupportedLocationIcon;
}
export interface IVisualizationProperties {
controls?: IVisualizationPropertiesControls;
sortItems?: AFM.SortItem[];
}
export interface IVisualizationPropertiesControls {
// This can be anything depending on a visualization type
[property: string]: any;
}
export interface IVisualizationPropertiesWrapper {
properties: IVisualizationProperties;
propertiesMeta?: any;
}
export interface IReferencePoint {
buckets: IBucket[];
filters: IFilters;
properties?: IVisualizationProperties; // properties are under plugvis creator's control
}
export interface IReferences {
[identifier: string]: string;
}
export interface IExtendedReferencePoint {
buckets: IBucket[];
filters: IFilters;
properties?: IVisualizationProperties; // properties are under plugvis creator's control
uiConfig: IUiConfig;
}
export interface IVisualization {
// visualizationProperties are used for visualization configuration
update(
props: IVisProps,
visualizationProperties: IVisualizationPropertiesWrapper,
mdObject: VisualizationObject.IVisualizationObjectContent,
references: IReferences,
): void;
unmount(): void;
addNewDerivedBucketItems(
referencePoint: IReferencePoint,
newDerivedBucketItems: IBucketItem[],
): Promise<IReferencePoint>;
/**
* Called every time the reference point or the visualization class change
* to allow visualizations to get updated ExtendedReferencePoint.
* @param referencePoint The new value of the reference point.
* @param previousReferencePoint The previous value of the reference point.
* This value is only provided if the visualization class was not changed
* (i. e. both points are related to the same visualization class).
* @returns Promise of the new ExtendedReferencePoint.
*/
getExtendedReferencePoint(
referencePoint: IReferencePoint,
previousReferencePoint?: IReferencePoint,
): Promise<IExtendedReferencePoint>;
}
export interface IGdcConfig {
separators?: ISeparators;
colorPalette?: IColorPalette;
isExportMode?: boolean;
isInEditMode?: boolean;
}