drizzle-cube
Version:
Drizzle ORM-first semantic layer with Cube.js compatibility. Type-safe analytics and dashboards with SQL injection protection.
55 lines (54 loc) • 2.4 kB
TypeScript
import { StateCreator } from 'zustand';
import { AnalysisBuilderStore } from '../analysisBuilderStore';
import { Filter, QueryMergeStrategy, CubeQuery, MultiQueryConfig } from '../../types';
import { AnalysisBuilderState } from '../../components/AnalysisBuilder/types';
/**
* Query slice state
*/
export interface QuerySliceState {
/** Array of query states (one per tab) */
queryStates: AnalysisBuilderState[];
/** Index of the currently active query tab */
activeQueryIndex: number;
/** Strategy for merging multi-query results */
mergeStrategy: QueryMergeStrategy;
}
/**
* Query slice actions
*/
export interface QuerySliceActions {
setQueryStates: (states: AnalysisBuilderState[]) => void;
updateQueryState: (index: number, updater: (state: AnalysisBuilderState) => AnalysisBuilderState) => void;
setActiveQueryIndex: (index: number) => void;
setMergeStrategy: (strategy: QueryMergeStrategy) => void;
addQuery: () => void;
removeQuery: (index: number) => void;
addMetric: (field: string, label?: string) => void;
removeMetric: (id: string) => void;
toggleMetric: (fieldName: string) => void;
reorderMetrics: (fromIndex: number, toIndex: number) => void;
addBreakdown: (field: string, isTimeDimension: boolean, granularity?: string) => void;
removeBreakdown: (id: string) => void;
toggleBreakdown: (fieldName: string, isTimeDimension: boolean, granularity?: string) => void;
setBreakdownGranularity: (id: string, granularity: string) => void;
toggleBreakdownComparison: (id: string) => void;
reorderBreakdowns: (fromIndex: number, toIndex: number) => void;
setFilters: (filters: Filter[]) => void;
dropFieldToFilter: (field: string) => void;
setOrder: (fieldName: string, direction: 'asc' | 'desc' | null) => void;
getCurrentState: () => AnalysisBuilderState;
getMergeKeys: () => string[] | undefined;
isMultiQueryMode: () => boolean;
buildCurrentQuery: () => CubeQuery;
buildAllQueries: () => CubeQuery[];
buildMultiQueryConfig: () => MultiQueryConfig | null;
}
export type QuerySlice = QuerySliceState & QuerySliceActions;
export declare const createInitialQueryState: () => QuerySliceState;
/**
* Create the query slice.
* Uses StateCreator pattern for composability.
*/
export declare const createQuerySlice: StateCreator<AnalysisBuilderStore, [
], [
], QuerySlice>;