import { default as React } from 'react'; import { PortletDebugDataEntry } from '../stores/dashboardStore.js'; import { LayoutItem } from 'react-grid-layout'; import { DashboardConfig, PortletConfig, RowLayout, DashboardFilter, DashboardFilterMapping, DashboardGridSettings, DashboardLayoutMode } from '../types.js'; 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; /** Callback to save thumbnail separately - called on edit mode exit when thumbnail feature is enabled */ onSaveThumbnail?: (thumbnailData: string) => Promise; /** Grid width for row calculations */ gridWidth?: number; /** Portlet component refs for refresh functionality */ portletComponentRefs?: React.MutableRefObject void; } | null>>; /** Portlet refresh handler (external) */ onPortletRefresh?: (portletId: string, options?: { bustCache?: boolean; }) => void; /** Ref to the dashboard container element for thumbnail capture */ dashboardRef?: React.RefObject; } 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 text portlet modal is open */ isTextModalOpen: boolean; /** Portlet being edited in text modal */ editingTextPortlet: 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; /** 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; openAddText: () => void; openEditText: (portlet: PortletConfig) => void; closeTextModal: () => 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; handleLayoutModeChange: (mode: DashboardLayoutMode) => Promise; savePortlet: (portletData: PortletConfig | Omit) => Promise; deletePortlet: (portletId: string) => Promise; duplicatePortlet: (portletId: string) => Promise; refreshPortlet: (portletId: string, options?: { bustCache?: boolean; }) => void; toggleFilterForPortlet: (portletId: string, filterId: string) => Promise; selectAllForFilter: (filterId: string) => Promise; saveFilterConfig: (mapping: DashboardFilterMapping) => Promise; handlePaletteChange: (paletteName: string) => Promise; openDeleteConfirm: (portletId: string) => void; closeDeleteConfirm: () => void; confirmDelete: () => Promise; setDebugData: (portletId: string, data: PortletDebugDataEntry) => void; clearDebugData: (portletId?: string) => void; } export declare function useDashboard(options: UseDashboardOptions): UseDashboardResult;