import { EventEmitter, OnInit, OnChanges, SimpleChanges, ChangeDetectorRef, OnDestroy } from '@angular/core'; import { FormBuilder, FormGroup, FormArray, AbstractControl } from '@angular/forms'; import { DynamicSelectFieldConfig, SelectOption } from '../../dynamic-select/dynamic-select-field.component'; import { MatTable } from '@angular/material/table'; import * as i0 from "@angular/core"; export interface DatabaseQuery { id: string; query: string; variable: string; status?: 'passed' | 'failed' | 'pending'; assertionData?: any[]; /** Result rows for this query (shown in Output tab). */ queryResult?: any[]; } export interface DatabaseFormData { dbEnvironment: string; normalEnvironment?: string; queries: DatabaseQuery[]; advancedSettingsVariables?: any[]; } export declare class StepBuilderDatabaseComponent implements OnInit, OnChanges, OnDestroy { private fb; private cdr; /** Options for DB environment dropdown */ dbEnvironmentOptions: SelectOption[]; /** Options for Normal environment dropdown */ normalEnvironmentOptions: SelectOption[]; /** Initial queries list */ queries: DatabaseQuery[]; /** Query results data (deprecated in favor of per-query queryResult) */ queryResults: any[]; /** Loading state */ isLoading: boolean; /** Initial DB environment for edit mode */ initialDbEnvironment?: string; /** Initial Normal environment for edit mode */ initialNormalEnvironment?: string; /** Whether in edit mode */ editMode?: boolean; /** True while parent is creating the step (API in progress); show loader on Create/Update Step button */ isCreatingStep: boolean; /** Emit when step is created */ createStep: EventEmitter; /** Emit when cancelled */ cancelled: EventEmitter; /** Emit when query is run */ runQuery: EventEmitter<{ currentQuery: DatabaseQuery; query: string; variable: string; dbEnvironment: string; normalEnvironment?: string; }>; /** Emit when DB environment search is triggered */ searchDbEnvironment: EventEmitter; /** Emit when Normal environment search is triggered */ searchNormalEnvironment: EventEmitter; /** Emit when query is added */ addQuery: EventEmitter; /** Emit when query is deleted */ deleteQuery: EventEmitter; /** Emit when assertion data changes for a query */ assertionDataChange: EventEmitter<{ queryIndex: number; assertionData: any[]; }>; /** Emit when selected query index changes */ selectedQueryIndexChange: EventEmitter; /** Emit when active tab changes */ activeTabChange: EventEmitter<"output" | "verification" | "advanced">; databaseForm: FormGroup; selectedTab: 'output' | 'verification' | 'advanced'; selectedQueryIndex: number; assertionsForms: Map; displayedColumns: string[]; defaultExpectedType: string; private formSubscriptions; assertionsTable?: MatTable; advancedSettingsVariables: any[]; advancedVariablesForm: FormArray; constructor(fb: FormBuilder, cdr: ChangeDetectorRef); ngOnInit(): void; ngOnChanges(changes: SimpleChanges): void; private initializeFormWithInitialValues; get queriesFormArray(): FormArray; addNewQuery(): void; private addQueryToForm; deleteQueryById(queryId: string): void; getDbEnvironmentConfig(): DynamicSelectFieldConfig; getNormalEnvironmentConfig(): DynamicSelectFieldConfig; getCurrentQuery(): DatabaseQuery | null; getCurrentQueryFormGroup(): FormGroup | null; onRunQuery(): void; onSelectQuery(index: number): void; /** * Get the currently selected query index */ getSelectedQueryIndex(): number; /** * Get the currently active tab */ getActiveTab(): 'output' | 'verification' | 'advanced'; onTabChange(tab: 'output' | 'verification' | 'advanced'): void; onCopyResults(): void; onCancel(): void; isFormValid(): boolean; onCreateStep(): void; getTableColumns(): string[]; /** Get result rows for currently selected query. */ getCurrentQueryResult(): any[]; /** * Get assertion data for a specific query */ getAssertionDataForQuery(queryIndex: number): any[]; /** * Handle assertion data change from external component */ onAssertionDataChange(assertionData: any[], queryIndex: number): void; /** * Initialize assertion data for a query if it doesn't exist */ private ensureAssertionDataInitialized; /** * Initialize assertions form for a specific query */ private initializeAssertionsForm; /** * Get assertions form for current query */ getCurrentAssertionsForm(): FormGroup | null; /** * Get assertions form array for current query */ getAssertionsFormArray(): FormArray; /** * Load assertions into form for a specific query */ private loadAssertionsForQuery; /** * Subscribe to assertions form changes */ private subscribeToAssertionsFormChanges; /** * Emit assertion data for a specific query */ private emitAssertionDataForQuery; /** * Add a new assertion */ addAssertion(): void; /** * Remove an assertion */ removeAssertion(index: number): void; /** * Get form control at specific index */ getFormControlAt(index: number, controlName: string): AbstractControl | null; /** * Get expected type for an assertion */ getExpectedType(index: number): string; /** * Get expected value placeholder */ getExpectedValuePlaceholder(index: number): string; /** * Handle expected type change */ onExpectedTypeChange(index: number, value: string): void; /** * Expected value validator */ expectedValueValidator: (control: AbstractControl) => { [key: string]: any; }; /** * Get assertions data source for table */ get assertionsDataSource(): AbstractControl[]; /** * Track by function for table rows */ trackByIndex(index: number): any; ngOnDestroy(): void; /** * Initialize advanced settings variables for database steps. */ private initializeAdvancedSettings; /** * Build reactive form for advanced settings variables. */ private buildAdvancedVariablesForm; /** * Handle advanced boolean changes and keep data/form in sync. */ onAdvancedVariableBooleanChange(variableName: string, value: boolean): void; /** * Handle non-boolean advanced variable changes (reserved for future use). */ onAdvancedVariableValueChange(variableName: string, value: any): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }