UNPKG

drizzle-cube

Version:

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

111 lines (110 loc) 4.6 kB
import { CubeQuery, Filter, SimpleFilter } from '../../types'; import { MetaField, MetaResponse } from '../QueryBuilder/types'; export { isSimpleFilter, isGroupFilter, isAndFilter, isOrFilter, flattenFilters, countFilters, createSimpleFilter, createAndFilter, createOrFilter, cleanupFilters, transformFiltersForServer, transformFiltersFromServer, hasQueryContent, cleanQuery, cleanQueryForServer, transformQueryForUI, getCubeNameFromField, getFieldType, getFieldTitle, getAvailableOperators, getAllFilterableFields, convertDateRangeTypeToValue, requiresNumberInput, formatDateForCube, } from '../../shared/utils'; /** * Check if a field is selected in the current query */ export declare function isFieldSelected(fieldName: string, fieldType: 'measures' | 'dimensions' | 'timeDimensions', query: CubeQuery): boolean; /** * Get all time dimension fields from schema */ export declare function getTimeDimensionFields(schema: MetaResponse): MetaField[]; /** * Get all non-time dimension fields from schema */ export declare function getRegularDimensionFields(schema: MetaResponse): MetaField[]; /** * Get all measure fields from schema */ export declare function getMeasureFields(schema: MetaResponse): MetaField[]; /** * Get count of selected fields across all types */ export declare function getSelectedFieldsCount(query: CubeQuery): number; /** * Group fields by cube name */ export declare function groupFieldsByCube(fields: MetaField[]): Record<string, MetaField[]>; /** * Create an empty query object */ export declare function createEmptyQuery(): CubeQuery; /** * Get all filterable fields from schema (measures, dimensions, and time dimensions) * Returns ALL fields if no query provided, or only query fields if query provided */ export declare function getFilterableFields(schema: MetaResponse, query?: CubeQuery): MetaField[]; /** * Get organized filter field options with query fields prioritized at top */ export declare function getOrganizedFilterFields(schema: MetaResponse, query?: CubeQuery): { queryFields: MetaField[]; allFields: MetaField[]; }; /** * Validate a filter */ export declare function validateFilter(filter: SimpleFilter, schema: MetaResponse): { isValid: boolean; errors: string[]; }; /** * Clean up filters by removing any that reference fields not in the current query (legacy) * Only used for backward compatibility - filters on non-query fields are now supported */ export declare function cleanupFiltersLegacy(filters: Filter[], query: CubeQuery): Filter[]; /** * Get the time dimensions that have date ranges applied */ export declare function getTimeDimensionsWithDateRanges(query: CubeQuery): Record<string, string | string[]>; /** * Check if a query has any time dimensions */ export declare function hasTimeDimensions(query: CubeQuery): boolean; /** * Clean up order object by removing fields that are no longer in the query */ export declare function cleanupOrder(order: Record<string, 'asc' | 'desc'> | undefined, query: CubeQuery): Record<string, 'asc' | 'desc'> | undefined; /** * Get sort direction for a field from the order object */ export declare function getSortDirection(fieldName: string, order: Record<string, 'asc' | 'desc'> | undefined): 'asc' | 'desc' | null; /** * Get tooltip text for sort button based on current direction */ export declare function getSortTooltip(direction: 'asc' | 'desc' | null): string; /** * Get next sort direction in the cycle: null -> asc -> desc -> null */ export declare function getNextSortDirection(current: 'asc' | 'desc' | null): 'asc' | 'desc' | null; /** * Date preset configuration for compact filter bar */ export interface DatePreset { id: string; label: string; value: string; } export declare const DATE_PRESETS: DatePreset[]; export declare const XTD_OPTIONS: DatePreset[]; /** * Calculate actual date range from a preset string * Returns start and end dates for display purposes */ export declare function calculateDateRange(preset: string): { start: Date; end: Date; } | null; /** * Format a date range for display (e.g., "Jan 1, 2024 - Jan 31, 2024") */ export declare function formatDateRangeDisplay(start: Date, end: Date): string; /** * Detect preset ID from a date range value * Returns the preset ID (e.g., '7d', 'mtd') or 'custom' if not a preset */ export declare function detectPresetFromDateRange(dateRange: string | string[] | undefined): string | null; /** * Format filter value for display in a compact chip */ export declare function formatFilterValueDisplay(values: any[], operator: string): string;