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