import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef, ElementRef } from '@angular/core'; import { MJQueryEntityExtended } from '@memberjunction/core-entities'; import { PageChangeEvent } from '@memberjunction/ng-pagination'; import { ColDef, GridReadyEvent, RowClickedEvent, GridApi, RowDoubleClickedEvent, RowSelectionOptions, GetRowIdParams, SortChangedEvent as AgSortChangedEvent, type Theme, ColumnResizedEvent, ColumnMovedEvent, SelectionChangedEvent, GridOptions } from 'ag-grid-community'; import { ExportService, ExportDialogConfig, ExportDialogResult } from '@memberjunction/ng-export-service'; import { ExportOptions, ExportResult } from '@memberjunction/export-engine'; import { QueryGridSelectionMode, QueryGridColumnConfig, QueryGridSortState, QueryGridState, QueryGridVisualConfig, QueryRowClickEvent, QueryEntityLinkClickEvent, QueryGridStateChangedEvent, QuerySelectionChangedEvent } from './models/query-grid-types'; import { RowDetailEntityLinkEvent } from '../query-row-detail/query-row-detail.component'; import * as i0 from "@angular/core"; /** * A data grid component for displaying query results with full interactivity. * Features: * - Client-side sorting with multi-column support * - Column resizing, reordering, and visibility toggle * - Entity linking for columns with SourceEntityID * - State persistence to User Settings * - Export to Excel/CSV * - Row selection (single, multiple, checkbox modes) * * @example * ```html * * * ``` */ export declare class QueryDataGridComponent implements OnInit, OnDestroy { private cdr; private elementRef; private exportService; private _queryInfo; /** * The QueryInfo metadata for the query being displayed. * Used to derive column configurations and entity linking. */ set QueryInfo(value: MJQueryEntityExtended | null); get QueryInfo(): MJQueryEntityExtended | null; private _columnConfigs; /** * Optional pre-built column configurations for ad-hoc queries without saved metadata. * When provided, overrides both QueryInfo-derived columns and auto-inferred columns. * Enables entity linking without requiring a saved Query or QueryInfo object. * * Set this BEFORE setting Data to ensure columns are configured before the grid renders. */ set ColumnConfigs(value: QueryGridColumnConfig[] | null); get ColumnConfigs(): QueryGridColumnConfig[] | null; private _data; /** * The query result data to display in the grid. */ set Data(value: Record[]); get Data(): Record[]; /** * Selection mode for the grid */ SelectionMode: QueryGridSelectionMode; /** * Whether to show the toolbar */ ShowToolbar: boolean; /** * Whether to show row count in toolbar */ ShowRowCount: boolean; /** * Whether to show selection count in toolbar */ ShowSelectionCount: boolean; /** * Whether to show export button */ ShowExport: boolean; /** * Whether to show refresh button */ ShowRefresh: boolean; /** * Whether to allow sorting */ AllowSorting: boolean; /** * Whether to allow column resizing */ AllowColumnResize: boolean; /** * Whether to allow column reordering */ AllowColumnReorder: boolean; /** * Visual configuration */ VisualConfig: QueryGridVisualConfig; /** * External loading state - when true, shows loading overlay */ IsLoading: boolean; /** * Height of the grid container */ Height: string; /** * Initial grid state (for restoring from persistence) */ InitialGridState: QueryGridState | null; /** * Whether to automatically persist grid state (column widths, order, sort) to User Settings */ PersistState: boolean; /** * Fired when a row is clicked */ RowClick: EventEmitter; /** * Fired when a row is double-clicked */ RowDoubleClick: EventEmitter; /** * Fired when an entity link is clicked */ EntityLinkClick: EventEmitter; /** * Fired when selection changes */ SelectionChange: EventEmitter; /** * Fired when grid state changes (for persistence) */ GridStateChange: EventEmitter; /** * Fired when refresh is requested */ RefreshRequest: EventEmitter; /** * Total row count for server-side paging (from RunQueryResult.TotalRowCount). * When > 0 and TotalPages > 1, the data pager is displayed below the grid. */ TotalRowCount: number; /** Current page number (1-based) for server-side paging */ PageNumber: number; /** Page size for server-side paging */ PageSize: number; /** Fired when the user navigates to a different page */ PageChange: EventEmitter; GridApi: GridApi | null; ColumnDefs: ColDef[]; Columns: QueryGridColumnConfig[]; SortState: QueryGridSortState[]; SelectedRows: Record[]; Theme: Theme; private destroy$; private stateChangeSubject; private statePersistSubject; private _mergedVisualConfig; private _pendingState; GridOptions: GridOptions; /** Default column settings - enables sorting, resizing */ DefaultColDef: ColDef; constructor(cdr: ChangeDetectorRef, elementRef: ElementRef, exportService: ExportService); ngOnInit(): void; ngOnDestroy(): void; OnGridReady(event: GridReadyEvent): void; private onQueryInfoChanged; private applyColumnStateFromGridState; private buildColumnDefs; private getCellStyle; private getHeaderClass; private formatCellValue; private renderEntityLinkCell; /** * Generates header template HTML with entity icon from metadata * Shows: [Entity Icon] Column Name [Sort Icons] */ private getEntityLinkHeaderTemplate; private defaultComparator; OnRowClicked(event: RowClickedEvent): void; OnRowDoubleClicked(event: RowDoubleClickedEvent): void; OnSelectionChanged(event: SelectionChangedEvent): void; OnSortChanged(event: AgSortChangedEvent): void; OnColumnResized(event: ColumnResizedEvent): void; OnColumnMoved(event: ColumnMovedEvent): void; private emitStateChange; GetGridState(): QueryGridState; ApplyGridState(state: QueryGridState): void; /** * Loads persisted grid state from User Settings */ private loadPersistedState; /** * Applies the full grid state (column widths, order, and sort) via the Grid API. * This is called after grid is ready to ensure all state is applied correctly. */ private applyFullGridState; /** * Persists grid state to User Settings */ private persistGridState; /** * Flushes any pending state changes immediately. * Call this before destroying the component or switching queries * to ensure all state changes are persisted. */ FlushState(): void; private applyVisualConfig; /** * Returns CSS classes for the container based on visual config */ GetContainerClasses(): Record; ShowExportDialog: boolean; ExportDialogConfig: ExportDialogConfig | null; ShowRowDetailPanel: boolean; RowDetailData: Record | null; RowDetailIndex: number; Refresh(): void; /** * Opens the export dialog with current grid data */ OpenExportDialog(): void; /** * Handle export dialog close */ OnExportDialogClosed(result: ExportDialogResult): void; /** * Export grid data directly without showing dialog */ Export(options?: Partial, download?: boolean): Promise; /** * Get the current grid data formatted for export */ private getExportData; /** * Get column definitions for export based on current grid columns */ private getExportColumns; private mapSqlTypeToExportType; ClearSelection(): void; GetSelectedRows(): Record[]; get RowCount(): number; get SelectionCount(): number; GetRowSelectionConfig(): RowSelectionOptions | undefined; GetRowId: (params: GetRowIdParams) => string; /** * Opens the row detail panel with the given row data */ OpenRowDetailPanel(rowData: Record, rowIndex: number): void; /** * Closes the row detail panel */ CloseRowDetailPanel(): void; /** * Navigate to the previous row in the detail panel */ NavigateRowDetail(direction: 'prev' | 'next'): void; /** * Handle entity link click from the row detail panel */ OnRowDetailEntityLinkClick(event: RowDetailEntityLinkEvent): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } //# sourceMappingURL=query-data-grid.component.d.ts.map