UNPKG

drizzle-cube

Version:

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

109 lines (108 loc) 4.82 kB
import { default as React } from 'react'; import { PortletDebugDataEntry } from '../stores/dashboardStore'; import { LayoutItem } from 'react-grid-layout'; import { DashboardConfig, PortletConfig, RowLayout, DashboardFilter, DashboardGridSettings, DashboardLayoutMode } from '../types'; export interface UseDashboardOptions { /** Dashboard configuration */ config: DashboardConfig; /** Whether dashboard is editable */ editable?: boolean; /** Dashboard filters */ dashboardFilters?: DashboardFilter[]; /** Grid settings */ gridSettings: DashboardGridSettings; /** Allowed layout modes */ allowedModes?: DashboardLayoutMode[]; /** Whether responsive mode allows editing (desktop only) */ isResponsiveEditable?: boolean; /** Config change handler */ onConfigChange?: (config: DashboardConfig) => void; /** Save handler */ onSave?: (config: DashboardConfig) => Promise<void> | void; /** Grid width for row calculations */ gridWidth?: number; /** Portlet component refs for refresh functionality */ portletComponentRefs?: React.MutableRefObject<Record<string, { refresh: () => void; } | null>>; /** Portlet refresh handler (external) */ onPortletRefresh?: (portletId: string) => void; } export interface UseDashboardResult { /** Whether dashboard is in edit mode */ isEditMode: boolean; /** Selected filter ID for filter assignment mode */ selectedFilterId: string | null; /** Whether portlet modal is open */ isPortletModalOpen: boolean; /** Portlet being edited */ editingPortlet: PortletConfig | null; /** Whether filter config modal is open */ isFilterConfigModalOpen: boolean; /** Portlet for filter configuration */ filterConfigPortlet: PortletConfig | null; /** Portlet ID pending delete confirmation */ deleteConfirmPortletId: string | null; /** Draft rows during drag operations */ draftRows: RowLayout[] | null; /** Whether a portlet is being dragged */ isDraggingPortlet: boolean; /** Last known layout for change detection */ lastKnownLayout: LayoutItem[]; /** Whether component is initialized */ isInitialized: boolean; /** Debug data per portlet */ debugData: Record<string, PortletDebugDataEntry>; /** Whether editing is allowed (editable && isEditMode && desktop && !filterMode) */ canEdit: boolean; /** Whether layout mode can be changed */ canChangeLayoutMode: boolean; /** Currently selected filter object */ selectedFilter: DashboardFilter | null; /** Resolved rows for row-based layout */ resolvedRows: RowLayout[]; /** Current layout mode */ layoutMode: DashboardLayoutMode; /** Allowed layout modes */ allowedModes: DashboardLayoutMode[]; actions: UseDashboardActions; } export interface UseDashboardActions { enterEditMode: () => void; exitEditMode: () => void; toggleEditMode: () => void; selectFilter: (filterId: string | null) => void; exitFilterSelectionMode: () => void; openAddPortlet: () => void; openEditPortlet: (portlet: PortletConfig) => void; closePortletModal: () => void; openFilterConfig: (portlet: PortletConfig) => void; closeFilterConfig: () => void; setDraftRows: (rows: RowLayout[] | null) => void; setIsDraggingPortlet: (isDragging: boolean) => void; setLastKnownLayout: (layout: LayoutItem[]) => void; setIsInitialized: (initialized: boolean) => void; setDragState: (state: { rowIndex: number; colIndex: number; portletId: string; } | null) => void; clearDragState: () => void; hasLayoutActuallyChanged: (newLayout: LayoutItem[]) => boolean; updateRowLayout: (rows: RowLayout[], save?: boolean, portletsOverride?: PortletConfig[]) => Promise<void>; handleLayoutModeChange: (mode: DashboardLayoutMode) => Promise<void>; savePortlet: (portletData: PortletConfig | Omit<PortletConfig, 'id' | 'x' | 'y'>) => Promise<string | null>; deletePortlet: (portletId: string) => Promise<void>; duplicatePortlet: (portletId: string) => Promise<string | undefined>; refreshPortlet: (portletId: string) => void; toggleFilterForPortlet: (portletId: string, filterId: string) => Promise<void>; selectAllForFilter: (filterId: string) => Promise<void>; saveFilterConfig: (mapping: string[]) => Promise<void>; handlePaletteChange: (paletteName: string) => Promise<void>; openDeleteConfirm: (portletId: string) => void; closeDeleteConfirm: () => void; confirmDelete: () => Promise<void>; setDebugData: (portletId: string, data: PortletDebugDataEntry) => void; clearDebugData: (portletId?: string) => void; } export declare function useDashboard(options: UseDashboardOptions): UseDashboardResult;