import { ChartType, Cube as OriginalCube, PivotConfig, PreAggregationType, Query } from '@cubejs-client/core'; import { VizState } from '@cubejs-client/react'; import { FC, ReactNode } from 'react'; import { useQueryBuilder } from './hooks/query-builder'; export type QueryBuilderTracking = { event: (name: string, props?: Record) => void; }; type SchemaChangeProps = { schemaVersion: number; refresh: () => Promise; }; export interface QueryBuilderSharedProps { apiUrl: string; apiToken: string | null; apiVersion?: string; isApiBlocked?: boolean; openSqlRunner?: (sqlQuery: string) => void; VizardComponent?: FC; disableSidebarResizing?: boolean; tracking?: QueryBuilderTracking; RequestStatusComponent?: FC; } export interface QueryBuilderContextProps extends ReturnType, QueryBuilderSharedProps { selectedCube: Cube | null; selectCube: (cube: string | null) => void; connectionId?: number; } export interface QueryBuilderProps extends QueryBuilderSharedProps { schemaVersion?: number; defaultQuery?: Query; shouldRunDefaultQuery?: boolean; initialVizState?: VizState; onSchemaChange?: (props: SchemaChangeProps) => void; extra?: ReactNode | null; memberViewType?: MemberViewType; defaultChartType?: ChartType; defaultPivotConfig?: PivotConfig; onQueryChange?: ((data: { query: Query; chartType?: ChartType; }) => void) | undefined; } export type CubeStats = { isUsed: boolean; instance?: Cube; measures: string[]; dimensions: string[]; timeDimensions: string[]; filters: string[]; folders: Record; hierarchies: Record; segments: string[]; dateRanges: string[]; grouping: string[]; }; export interface RequestStatusProps { requestId: string; isAggregated: boolean; dbType?: string; error?: string; external: boolean | null; extDbType: string; preAggregationType?: PreAggregationType; } export interface QueryOptions { ungrouped?: boolean; } export type MissingMember = { name: string; category: 'measures' | 'dimensions' | 'segments' | 'timeDimensions'; type?: 'string' | 'number' | 'time' | 'boolean'; granularities?: string[]; selected?: boolean; }; export type WithUndefinedValues = { [K in keyof T]: T[K] | undefined; }; export type MemberType = 'measure' | 'dimension' | 'segment'; export type MemberViewType = 'name' | 'title'; export type TCubeFolder = { name: string; members: string[]; }; export type TCubeHierarchy = { name: string; title?: string; levels: string[]; public?: boolean; }; export type Cube = OriginalCube & { folders: TCubeFolder[]; hierarchies: TCubeHierarchy[]; }; export {};