UNPKG

drizzle-cube

Version:

Drizzle ORM-first semantic layer with Cube.js compatibility. Type-safe analytics and dashboards with SQL injection protection.

170 lines (169 loc) 6.46 kB
import { CubeQuery, FilterOperator, Filter, SimpleFilter, GroupFilter, ChartType, ChartAxisConfig, ChartDisplayConfig } from '../../types'; import { MetaResponse, QueryAnalysis, ValidationResult, DateRangeType } from '../../shared/types'; export type { MetaField, MetaCube, MetaResponse, QueryAnalysis, PrimaryCubeSelectionReason, PrimaryCubeCandidate, PrimaryCubeAnalysis, JoinPathStep, JoinPathAnalysis, PreAggregationAnalysis, QuerySummary, ValidationResult, FilterOperatorMeta, DateRangeType, DateRangeOption, TimeGranularity } from '../../shared/types'; export { FILTER_OPERATORS, DATE_RANGE_OPTIONS, TIME_GRANULARITIES } from '../../shared/types'; export type ValidationStatus = 'idle' | 'validating' | 'valid' | 'invalid'; export type ExecutionStatus = 'idle' | 'loading' | 'refreshing' | 'success' | 'error'; export type SchemaStatus = 'idle' | 'loading' | 'success' | 'error'; export interface QueryBuilderState { query: CubeQuery; validationStatus: ValidationStatus; validationError: string | null; validationSql: { sql: string[]; params: any[]; } | null; executionStatus: ExecutionStatus; executionResults: any[] | null; executionError: string | null; totalRowCount: number | null; totalRowCountStatus: 'idle' | 'loading' | 'success' | 'error'; resultsStale: boolean; } export interface ApiConfig { baseApiUrl: string; apiToken: string; } export interface QueryBuilderProps { className?: string; initialQuery?: CubeQuery; disableLocalStorage?: boolean; hideSettings?: boolean; enableSharing?: boolean; onShare?: (url: string) => void; } export interface QueryBuilderRef { getCurrentQuery: () => CubeQuery; getValidationState: () => { status: ValidationStatus; result?: ValidationResult; }; getValidationResult: () => ValidationResult | null; } export interface CubeMetaExplorerProps { schema: MetaResponse | null; schemaStatus: SchemaStatus; schemaError: string | null; selectedFields: { measures: string[]; dimensions: string[]; timeDimensions: string[]; }; onFieldSelect: (fieldName: string, fieldType: 'measures' | 'dimensions' | 'timeDimensions') => void; onFieldDeselect: (fieldName: string, fieldType: 'measures' | 'dimensions' | 'timeDimensions') => void; onRetrySchema?: () => void; onOpenSettings?: () => void; onExpandSchema?: (expanded: boolean) => void; onViewTypeChange?: (viewType: 'tree' | 'diagram') => void; isExpanded?: boolean; } export type ShareButtonState = 'idle' | 'copied' | 'copied-no-chart'; export interface QueryPanelProps { query: CubeQuery; schema: MetaResponse | null; validationStatus: ValidationStatus; validationError: string | null; validationSql: { sql: string[]; params: any[]; } | null; validationAnalysis?: QueryAnalysis | null; onExecute: () => void; onRemoveField: (fieldName: string, fieldType: 'measures' | 'dimensions' | 'timeDimensions') => void; onTimeDimensionGranularityChange: (dimensionName: string, granularity: string) => void; onFiltersChange: (filters: Filter[]) => void; onDateRangeChange: (timeDimension: string, dateRange: string | string[]) => void; onDateRangeRemove: (timeDimension: string) => void; onOrderChange: (fieldName: string, direction: 'asc' | 'desc' | null) => void; onClearQuery?: () => void; showSettings?: boolean; onSettingsClick?: () => void; onAIAssistantClick?: () => void; onSchemaClick?: () => void; onShareClick?: () => void; canShare?: boolean; shareButtonState?: ShareButtonState; isViewingShared?: boolean; } export interface AvailableFields { dimensions: string[]; timeDimensions: string[]; measures: string[]; } export interface ResultsPanelProps { executionStatus: ExecutionStatus; executionResults: any[] | null; executionError: string | null; resultsStale?: boolean; query: CubeQuery; displayLimit?: number; onDisplayLimitChange?: (limit: number) => void; totalRowCount?: number | null; totalRowCountStatus?: 'idle' | 'loading' | 'success' | 'error'; chartType?: ChartType; chartConfig?: ChartAxisConfig; displayConfig?: ChartDisplayConfig; availableFields?: AvailableFields | null; onChartTypeChange?: (type: ChartType) => void; onChartConfigChange?: (config: ChartAxisConfig) => void; onDisplayConfigChange?: (config: ChartDisplayConfig) => void; activeView?: 'table' | 'chart'; onActiveViewChange?: (view: 'table' | 'chart') => void; } export interface FilterBuilderProps { filters: Filter[]; schema: MetaResponse | null; query: CubeQuery; onFiltersChange: (filters: Filter[]) => void; hideFieldSelector?: boolean; } export interface FilterItemProps { filter: SimpleFilter; index: number; onFilterChange: (index: number, filter: SimpleFilter) => void; onFilterRemove: (index: number) => void; schema: MetaResponse | null; query: CubeQuery; hideFieldSelector?: boolean; hideOperatorSelector?: boolean; hideRemoveButton?: boolean; } export interface FilterGroupProps { group: GroupFilter; index: number; onGroupChange: (index: number, group: GroupFilter) => void; onGroupChangeWithUnwrap?: (index: number, group: GroupFilter) => void; onGroupRemove: (index: number) => void; schema: MetaResponse | null; query: CubeQuery; depth: number; } export interface FilterValueSelectorProps { fieldName: string; operator: FilterOperator; values: any[]; onValuesChange: (values: any[]) => void; schema: MetaResponse | null; } export interface DateRangeFilter { id: string; timeDimension: string; rangeType: DateRangeType; startDate?: string; endDate?: string; } export interface DateRangeSelectorProps { timeDimensions: string[]; onDateRangeChange: (timeDimension: string, dateRange: string | string[]) => void; onDateRangeRemove: (timeDimension: string) => void; currentDateRanges: Record<string, string | string[]>; } export interface DateRangeFilterProps { timeDimensions: Array<{ dimension: string; granularity?: string; dateRange?: string | string[]; }>; onDateRangeChange: (timeDimension: string, dateRange: string | string[]) => void; onDateRangeRemove: (timeDimension: string) => void; }