drizzle-cube
Version:
Drizzle ORM-first semantic layer with Cube.js compatibility. Type-safe analytics and dashboards with SQL injection protection.
60 lines (59 loc) • 2.99 kB
TypeScript
import { Filter, DashboardFilter, CubeMeta, DashboardConfig } from '../types';
/**
* Get dashboard filters that should be applied to a portlet based on its mapping configuration
* @param dashboardFilters - All available dashboard filters
* @param filterMapping - Array of filter IDs that apply to this portlet
* @returns Array of filters that should be applied to the portlet
*/
export declare function getApplicableDashboardFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: string[] | undefined): Filter[];
export declare function mergeDashboardAndPortletFilters(dashboardFilters: Filter[], portletFilters: Filter[] | undefined): Filter[] | undefined;
/**
* Check if a filter field exists in the cube metadata
* This helps identify filters that might not apply to a specific portlet's data
* @param filter - The filter to validate
* @param cubeMeta - Cube metadata to validate against
* @returns true if the filter field exists in any cube's measures or dimensions
*/
export declare function validateFilterForCube(filter: Filter, cubeMeta: CubeMeta | null): boolean;
/**
* Validate that all dashboard filters in a portlet's mapping exist and are valid
* @param dashboardFilters - All available dashboard filters
* @param filterMapping - The portlet's filter mapping
* @param cubeMeta - Cube metadata for validation
* @returns Object with validation result and list of invalid filter IDs
*/
export declare function validatePortletFilterMapping(dashboardFilters: DashboardFilter[] | undefined, filterMapping: string[] | undefined, cubeMeta: CubeMeta | null): {
isValid: boolean;
invalidFilterIds: string[];
missingFilterIds: string[];
};
/**
* Extract all unique measures, dimensions, and timeDimensions used across all portlets in a dashboard
* This helps create a filtered schema view showing only fields relevant to the dashboard
* @param dashboardConfig - Dashboard configuration
* @returns Object with unique measures, dimensions, and timeDimensions
*/
export declare function extractDashboardFields(dashboardConfig: DashboardConfig): {
measures: Set<string>;
dimensions: Set<string>;
timeDimensions: Set<string>;
};
/**
* Time dimension type from CubeQuery
*/
type TimeDimension = {
dimension: string;
granularity?: string;
dateRange?: string[] | string;
};
/**
* Apply universal time filters to a portlet's timeDimensions
* Universal time filters apply their dateRange to ALL time dimensions in the portlet
*
* @param dashboardFilters - All dashboard filters
* @param filterMapping - Filter IDs that apply to this portlet
* @param portletTimeDimensions - The portlet's existing timeDimensions array
* @returns Updated timeDimensions array with date ranges applied
*/
export declare function applyUniversalTimeFilters(dashboardFilters: DashboardFilter[] | undefined, filterMapping: string[] | undefined, portletTimeDimensions: TimeDimension[] | undefined): TimeDimension[] | undefined;
export {};