import { EventEmitter, OnInit, OnDestroy, ChangeDetectorRef } from '@angular/core';
import { RunQueryResult } from '@memberjunction/core';
import { BaseAngularComponent } from '@memberjunction/ng-base-types';
import { MJQueryEntityExtended } from '@memberjunction/core-entities';
import { PageChangeEvent } from '@memberjunction/ng-pagination';
import { CompositionTokenClickEvent } from '@memberjunction/ng-code-editor';
import { QueryDataGridComponent } from '../query-data-grid/query-data-grid.component';
import { QueryGridSelectionMode, QueryGridState, QueryGridVisualConfig, QueryParameterValues, QueryEntityLinkClickEvent, QueryGridStateChangedEvent, QuerySelectionChangedEvent, QueryRowClickEvent } from '../query-data-grid/models/query-grid-types';
import * as i0 from "@angular/core";
/**
* A composite component that provides a complete query viewing experience.
* Features:
* - Automatic parameter form display when query has parameters
* - Grid state persistence to User Settings
* - Parameter persistence to User Settings
* - Entity linking for clickable record IDs
* - Auto-run capability when all required params have saved values
*
* @example
* ```html
*
*
* ```
*/
export declare class QueryViewerComponent extends BaseAngularComponent implements OnInit, OnDestroy {
private cdr;
private _queryId;
/**
* The ID of the query to display
*/
set QueryId(value: string | null);
get QueryId(): string | null;
/**
* Whether to auto-run the query when all required params have saved values
*/
AutoRun: boolean;
/**
* Selection mode for the grid
*/
SelectionMode: QueryGridSelectionMode;
/**
* Whether to show the toolbar
*/
ShowToolbar: boolean;
/**
* Visual configuration for the grid
*/
VisualConfig: QueryGridVisualConfig;
/**
* Whether to persist grid state
*/
PersistState: boolean;
/**
* Whether to persist parameter values
*/
PersistParameters: boolean;
/**
* Number of rows per page for server-side paging.
* Set to 0 to disable paging and load all rows at once.
*/
PageSize: number;
/**
* Fired when an entity link is clicked in the grid
*/
EntityLinkClick: EventEmitter;
/**
* Fired when a row is double-clicked
*/
RowDoubleClick: EventEmitter;
/**
* Fired when selection changes
*/
SelectionChange: EventEmitter;
/**
* Fired when query execution starts
*/
QueryStart: EventEmitter;
/**
* Fired when query execution completes
*/
QueryComplete: EventEmitter;
/**
* Fired when query execution fails
*/
QueryError: EventEmitter;
/**
* Fired when user wants to open the full query record
*/
OpenQueryRecord: EventEmitter<{
queryId: string;
queryName: string;
}>;
/**
* Fired when a composition token ({{query:"..."}}) is clicked in the SQL info panel
*/
CompositionTokenClick: EventEmitter;
DataGrid: QueryDataGridComponent;
QueryInfo: MJQueryEntityExtended | null;
QueryData: Record[];
IsLoading: boolean;
ShowParamsPanel: boolean;
ShowInfoPanel: boolean;
HasRun: boolean;
LastError: string | null;
ExecutionTimeMs: number | null;
SavedGridState: QueryGridState | null;
SavedParams: QueryParameterValues;
/** Paging state */
QueryTotalRowCount: number;
CurrentPageNumber: number;
private destroy$;
private userInfoEngine;
constructor(cdr: ChangeDetectorRef);
ngOnInit(): void;
ngOnDestroy(): void;
private onQueryIdChanged;
private canAutoRunWithSavedParams;
private loadSavedState;
private saveGridState;
private saveParameters;
private getUserSetting;
private setUserSetting;
RunQuery(params: QueryParameterValues, pageNumber?: number): Promise;
OnParametersSubmit(params: QueryParameterValues): void;
OnParamsPanelClose(): void;
OnGridStateChange(event: QueryGridStateChangedEvent): void;
OnEntityLinkClick(event: QueryEntityLinkClickEvent): void;
OnRowDoubleClick(event: QueryRowClickEvent): void;
OnSelectionChange(event: QuerySelectionChangedEvent): void;
OnPageChange(event: PageChangeEvent): void;
OnRefreshRequest(): void;
OpenParametersPanel(): void;
OpenInfoPanel(): void;
CloseInfoPanel(): void;
OnOpenQueryRecord(event: {
queryId: string;
queryName: string;
}): void;
OnCompositionTokenClick(event: CompositionTokenClickEvent): void;
Refresh(): void;
get HasParameters(): boolean;
/**
* Normalizes array-typed parameters. Handles the case where saved state
* contains JSON fragment arrays (e.g. `['["A"', '"B"]']`) from the old
* comma-split bug. Joins the fragments back into a string, detects JSON
* array syntax, and parses cleanly.
*/
private normalizeArrayParams;
static ɵfac: i0.ɵɵFactoryDeclaration;
static ɵcmp: i0.ɵɵComponentDeclaration;
}
//# sourceMappingURL=query-viewer.component.d.ts.map