import * as i0 from '@angular/core'; import { AfterViewInit, ChangeDetectorRef, TemplateRef, EventEmitter, ViewContainerRef, ComponentRef, OnDestroy } from '@angular/core'; import { FieldType, FieldFormat } from '@laserfiche/lf-ui-components/shared'; import * as rxjs from 'rxjs'; import { Observable, Subject } from 'rxjs'; import { FormControl, FormGroup, FormArray } from '@angular/forms'; import { MatCheckboxChange } from '@angular/material/checkbox'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; import { CdkDragDrop } from '@angular/cdk/drag-drop'; import { AppLocalizationService } from '@laserfiche/lf-ui-components/internal-shared'; import { MatSelectChange } from '@angular/material/select'; interface LfFieldInfo { name: string; id: number; displayName: string; description?: string; fieldType: FieldType; length?: number; defaultValue?: string; isMultiValue?: boolean; isRequired?: boolean; constraint?: string; constraintError?: string; listValues?: Array; format?: FieldFormat; currency?: string; formatPattern?: string; } type LfFieldValue = string; interface FieldValue { fieldId: number; fieldName?: string; values?: Array<{ [key: string]: string; }>; fieldType?: FieldType; groupId?: number; flags?: number; } interface FieldValues { [fieldId: number]: FieldValue; } interface TemplateInfo { id: number; name: string; displayName: string; description?: string; fieldCount?: number; color?: LfColor; } interface TemplateValue { name: string; id: number; fieldValues: { [key: string]: FieldValue; }; } interface LfColor { a: number; r: number; g: number; b: number; } interface TemplateFieldInfo extends LfFieldInfo { rule?: Rule; groupId?: number; groupName?: string; } interface Rule { ancestors: number[]; } interface LfFieldAdhocContainerService { getAllFieldDefinitionsAsync(): Promise; } interface LfFieldTemplateContainerService { getAvailableTemplatesAsync(): Promise; getTemplateFieldsAsync(templateIdentifier: number | string): Promise; getTemplateDefinitionAsync(templateIdentifier: string | number): Promise; getDynamicFieldValueOptionsAsync(templateId: number, currentValues: FieldValues): Promise<{ [fieldId: number]: string[]; }>; } interface LfFieldContainerService extends LfFieldAdhocContainerService, LfFieldTemplateContainerService { } interface AdhocFieldInfo extends LfFieldInfo { inTemplateSelected?: boolean; } /** * @internal */ declare enum AddRemoveState { DEFAULT = "default", LOADING = "isLoading", HAS_ERROR = "hasError", DISPLAY_FIELD = "displayField" } /** * @internal */ declare class LfFieldAddRemoveComponent implements AfterViewInit { private adHocConnectorService; ref: ChangeDetectorRef; popupDialog: MatDialog; private localizationService; private readonly APPLY_CHANGES; private readonly DO_YOU_WANT_TO_APPLY_YOUR_FIELD_CHANGES; private readonly YES; private readonly NO; readonly CANCEL: Observable; readonly APPLY: Observable; readonly ADD_REMOVE_FIELDS: Observable; readonly NO_MATCHING_FIELDS_FOUND: Observable; readonly SEARCH_FIELDS: Observable; readonly AN_ERROR_OCCURED: Observable; readonly LOCALIZED_FIELD_TYPES: Map>; allFieldInfos: AdhocFieldInfo[]; displayFieldInfos: AdhocFieldInfo[]; selectedFieldIds: Set; areCheckboxChanges: boolean; filterFieldsControl: FormControl; fieldFilterText: string; state: AddRemoveState; adhocFieldContainerService: LfFieldAdhocContainerService; dialogRef?: MatDialogRef; popupModal?: TemplateRef; checkboxUpdate: EventEmitter; clickBack: EventEmitter; ngAfterViewInit(): void; initAsync: (adhocContainerService: LfFieldAdhocContainerService) => Promise; /** @internal */ get shouldShowErrorMessage(): boolean; /** @internal */ get isLoading(): boolean; onClickBack(): Promise; onModalButtonClick(event: string): void; onClickApply(): void; onClickCancel(): void; onConfirmNo(): void; private filterDisplayedFields; onClearFields(): void; onUpdateCheckbox(changeEvent: MatCheckboxChange, field: LfFieldInfo): void; ignoreEscapeKeydown(event: Event): void; private updateSelectedOptions; updateSortedFieldInfos(): Promise; private partitionFieldInfos; isFieldSelected(field: AdhocFieldInfo): boolean; getAppliedFields(): void; private loadFieldDefinitionsInOrderAsync; private getCurrentFieldOptionsAsync; /** @internal */ private orderFieldInfosByName; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class LfFieldComponent { /**@internal */ private fb; /**@internal */ private ref; /** @internal */ lfFieldInfo: LfFieldInfo; /** @internal */ lfFieldValue: LfFieldValue; /** @internal */ singleFieldParentForm: FormGroup; /** @internal */ showLoader: boolean; /** @internal */ fieldValueChanged: EventEmitter; /** @internal */ dynamicFieldValueOptions: string[] | undefined; /** @internal */ showField: boolean; /** @internal */ constructor(); /** @internal */ getSingleField(): FormControl; /** @internal */ isValid(): boolean; /** @internal */ forceValidation: () => boolean; /** @internal */ getOptions(): string[] | undefined; /** @internal */ initAsync: (field: LfFieldInfo, fieldValue?: LfFieldValue, dynamicFieldValueOptions?: string[]) => Promise; /** @internal */ private removeInvalidFieldValues; /** @internal */ private getInitialValue; /** @internal */ getFieldValue: () => FieldValue; /** @internal */ fieldDataChange(value: LfFieldValue): void; /** @internal */ get isLoading(): boolean; /** @internal */ set isLoading(val: boolean); static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class LfFieldMultivalueComponent { /**@internal */ private fb; /**@internal */ private cdr; /** @internal */ lfFieldInfo: LfFieldInfo; /** @internal */ lfFieldValues: LfFieldValue[]; /** @internal */ multiValueFieldParentForm: FormGroup; /** @internal */ showLoader: boolean; /** @internal */ fieldValuesChanged: EventEmitter<{ fieldValues: LfFieldValue[]; indexChanged: number; }>; /** @internal */ dynamicFieldOptions: string[][] | undefined; /** @internal */ showField: boolean; /** @internal */ constructor(); /** @internal */ private getArray; /** @internal */ getSingleField(index: number): FormControl; /** @internal */ getLfFieldInfo(currentIndex: number): LfFieldInfo; /** @internal */ isValid(): boolean; /** @internal */ initAsync: (fieldDefinition: LfFieldInfo, fieldValues?: LfFieldValue[], dynamicFieldOptions?: string[][]) => Promise; /** @internal */ forceValidation: () => boolean; /** @internal */ private removeInvalidFieldValues; /** @internal */ getOptions(): string[] | undefined; /** @internal */ syncFormControlDataToFieldValues(): void; /** @internal */ getFieldValue: () => FieldValue; /** @internal */ onChange(value: LfFieldValue, indexChanged: number): void; /** @internal */ private lastValueIsValid; /** @internal */ private fieldHasValue; /** @internal */ private isLastInArray; /** @internal */ private addNewBlankField; /** @internal */ removeField(indexChanged: number): void; /** @internal */ trackByIndex(index: number, option: string): string; /** @internal */ get isLoading(): boolean; /** @internal */ set isLoading(val: boolean); static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } /** @internal */ declare class LfFieldMetadataConnectorService { private allFieldValues; private readonly templateFields; private readonly adhocFieldsRefresh; private readonly adhocDialogOpened; constructor(); setFieldValue(fieldValue: FieldValue): void; setAllFieldValues(fieldValues: FieldValues): void; getAllFieldValues(): FieldValues; clearAllFieldValues(): void; selectTemplateFields(newFields: number[]): void; getTemplateFields(): Observable; adhocFieldDataUpdated(): Observable; updatedAdhocFieldData(): void; setAddRemoveContainerToggled(open: boolean): void; getAddRemoveContainerToggled(): Subject; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵprov: i0.ɵɵInjectableDeclaration; } /** @internal */ declare class LfFieldViewDirective { viewContainerRef: ViewContainerRef; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } /** @internal */ interface FieldDefinition { fieldInfo: TemplateFieldInfo; fieldValues?: LfFieldValue[]; } declare class LfFieldGroupComponent { /**@internal */ private fb; /**@internal */ private ref; /**@internal */ localizationService: AppLocalizationService; /** @internal */ fieldDefinitions: FieldDefinition[]; /** @internal */ fieldGroups: FormArray; /** @internal */ fieldValues: Map; /** @internal */ groupId: number; /** @internal */ dynamicFieldOptions: Map | undefined; /** @internal */ fieldValuesChanged: EventEmitter<{ fieldValue: FieldValue; indicesChanged?: number[]; }>; /** @internal */ showLoaderIndex: number | undefined; /** @internal */ readonly res_0_of_1: rxjs.Observable; /** @internal */ constructor(); /** @internal */ getFieldValues: () => Map; /** @internal */ initAsync: (fieldDefinitions: FieldDefinition[], dynamicFieldOptions?: Map) => Promise; /** @internal */ getOptions(fieldInfo: TemplateFieldInfo, index: number): string[] | undefined; /** @internal */ forceValidation: () => boolean; /** @internal */ isLoading(fieldInfo: TemplateFieldInfo, currentIndex: number): boolean; /** @internal */ showLoader(index: number): void; /** @internal */ private setFieldGroups; /** @internal */ private addFieldFormControl; /** @internal */ private updateFieldValues; /** @internal */ fieldDataChange(event: string, fieldInfo: TemplateFieldInfo, indexChanged: number): void; /** @internal */ getSingleField(index: number, fieldId: number): FormControl; /** @internal */ isValid(): boolean; /** @internal */ onDragAndDrop(event: CdkDragDrop): void; /** @internal */ fieldGroupControlsArray(): FormGroup[]; /** @internal */ onClickDelete(index: number): void; /** @internal */ private resetPositionValues; /** @internal */ onClickAdd(currentIndex: number): void; /** @internal */ onClickUp(currentIndex: number): void; /** @internal */ onClickDown(currentIndex: number): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare abstract class LfFieldContainerDirective { /** @internal */ metadataFieldConnectorService: LfFieldMetadataConnectorService; fieldValuesChanged: EventEmitter; /** @internal */ lfFieldView: LfFieldViewDirective; /** @internal */ componentRefs: ComponentRef[]; /** @internal */ groupComponentRefs: ComponentRef[]; /** @internal */ allFieldInfos: (TemplateFieldInfo | LfFieldInfo | AdhocFieldInfo)[]; /** @internal */ allFieldValues: FieldValues; /** @internal */ private readonly VALUE_ACCESSOR; /** @internal */ constructor(); /** @internal */ abstract clearAsync(): Promise; /** @internal */ abstract onFieldValueChangedAsync(fieldValues: string[], lfFieldInfo: LfFieldInfo, indicesChanged?: number[]): Promise; /** @internal */ abstract renderFieldsAsync(fieldInfos: (TemplateFieldInfo | LfFieldInfo | AdhocFieldInfo)[]): Promise; /** @internal */ abstract multivalueComponentInitAsync(componentRef: ComponentRef, fieldInfo: LfFieldInfo, stringValues: LfFieldValue[]): Promise; /** @internal */ abstract fieldComponentInitAsync(componentRef: ComponentRef, fieldInfo: LfFieldInfo, stringValues: LfFieldValue): Promise; forceValidation: () => boolean; /** * @internal * Returns whether container is valid without forcing validation */ isValid(): boolean; /** @internal */ setFieldValue(fieldId: number, values: string[]): void; /** @internal */ getOrCreateFieldValue(fieldId: number): FieldValue; /** @internal */ protected initializeFieldComponentAsync(fieldComponentRef: ComponentRef, fieldInfo: LfFieldInfo, value: string): Promise; /** @internal */ protected initializeMultivalueComponentAsync(multivalueComponentRef: ComponentRef, fieldInfo: LfFieldInfo, stringValues: string[]): Promise; /** @internal */ protected getValuesById(fieldId: number): string[]; /** @internal */ private createDefaultFieldValue; /** @internal */ private createFieldValueFromFieldInfo; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵdir: i0.ɵɵDirectiveDeclaration; } declare class LfFieldAdhocContainerComponent extends LfFieldContainerDirective implements OnDestroy, AfterViewInit { /**@internal */ private adhocFieldConnectorService; /**@internal */ private ref; /**@internal */ private localizationService; /** @internal */ addRemoveComponent: LfFieldAddRemoveComponent; dialogOpened: EventEmitter; dialogClosed: EventEmitter; /** @internal */ readonly ADD_REMOVE_FIELDS: rxjs.Observable; /** @internal */ readonly NO_ADDITIONAL_FIELDS_ASSIGNED: rxjs.Observable; /** @internal */ showAdhocModal: boolean; /** @internal */ adhocFieldContainerService: LfFieldAdhocContainerService; /** @internal */ templateFields: number[]; /** @internal */ private selectedFieldIds; /** @internal */ private templateFieldsSub; /** @internal */ constructor(); /** @internal */ ngAfterViewInit(): void; /** @internal */ ngOnDestroy(): void; getFieldValues: () => { [fieldName: string]: FieldValue; }; clearAsync: () => Promise; initAsync: (adhocFieldContainerService: LfFieldAdhocContainerService) => Promise; resetFieldDataAsync: (fields: { value: FieldValue; definition: LfFieldInfo; }[]) => Promise; updateFieldValuesAsync: (values: FieldValue[]) => Promise; /** @internal */ private resetComponentValues; /** @internal */ renderFieldsAsync(fieldInfos: (LfFieldInfo | AdhocFieldInfo)[]): Promise; /** @internal */ fieldComponentInitAsync(fieldComponentRef: ComponentRef, fieldInfo: LfFieldInfo, value: string): Promise; /** @internal */ multivalueComponentInitAsync(multivalueFieldComponentRef: ComponentRef, fieldInfo: LfFieldInfo, values: string[]): Promise; /** @internal */ private loadSelectedFieldValues; /** @internal */ getMappedFieldValues(fieldValues: FieldValue[]): FieldValues; /** @internal */ getFieldIds(fieldValues: FieldValue[]): Set; /** @internal */ private getInitialSelectedOptions; /** @internal */ fieldsEmpty(): boolean; /** @internal */ addRemoveFieldsAsync(adhocPanel?: HTMLElement): Promise; /** @internal */ onClickBackAsync(): Promise; /** @internal */ private toggleAdhocModal; /** @internal */ refreshFieldsAsync(): Promise; /** @internal */ getSelectedFieldInfos(): LfFieldInfo[]; /** @internal */ private updateTemplateFields; /** @internal */ onFieldValueChangedAsync(values: string[], fieldInfo: LfFieldInfo): Promise; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } interface LfFieldTemplateProviders { templateFieldContainerService: LfFieldTemplateContainerService; } /** * @internal */ declare enum DropDownState { DEFAULT = "default", LOADING = "isLoading", HAS_ERROR = "hasError" } /** * @internal */ declare enum TemplateState { DEFAULT = "default", LOADING = "isLoading", HAS_ERROR = "hasError", SHOW_TEMPLATE = "showTemplate" } declare class LfFieldTemplateContainerComponent extends LfFieldContainerDirective implements AfterViewInit, OnDestroy { /**@internal */ private localizationService; /**@internal */ private ref; templateSelectedChange: EventEmitter; /** @internal */ hideTemplate: boolean; /** @internal */ availableTemplates: TemplateInfo[]; /** @internal */ loadedTemplates: boolean; /** @internal */ templateFieldContainerService: LfFieldTemplateContainerService; /** @internal */ templateErrorMessage: Observable | undefined; /** @internal */ readonly emptyTemplateName: Observable; /** @internal */ templateSelected: TemplateInfo | undefined; /** @internal */ dynamicOptions: Map; /** @internal */ private adhocFieldsSub; /** @internal */ private adhocDialogOpenedSub; /** @internal */ readonly AN_ERROR_OCCURED: Observable; /** @internal */ dropdownState: DropDownState; /** @internal */ templateState: TemplateState; /** @internal */ private readonly TEMPLATE_HAS_FAILED_TO_LOAD; /** @internal */ ngAfterViewInit(): void; /** @internal */ ngOnDestroy(): void; initAsync: (providers: LfFieldTemplateProviders, templateIdentifier?: number | string) => Promise; clearAsync: () => Promise; getTemplateValue: () => TemplateValue | undefined; /** @internal */ get isDropdownError(): boolean; /** @internal */ get isDropdownLoading(): boolean; /** @internal */ get isDropdownDefault(): boolean; /** @internal */ get isTemplateLoading(): boolean; /** @internal */ get isTemplateError(): boolean; /** @internal */ get isTemplateDisplay(): boolean; /** @internal */ private resetComponentValues; /** @internal */ renderFieldsAsync(fieldInfos: (TemplateFieldInfo | LfFieldInfo)[]): Promise; /** @internal */ private initializeFieldGroupAsync; /** @internal */ private addDefinitionToExistingGroup; /** @internal */ private createAndAddNewGroupRef; /** @internal */ private initializeFieldGroupComponentAsync; /** @internal */ fieldComponentInitAsync(fieldComponentRef: ComponentRef, fieldInfo: LfFieldInfo, value: string): Promise; /** @internal */ multivalueComponentInitAsync(multivalueFieldComponentRef: ComponentRef, fieldInfo: LfFieldInfo, values: string[]): Promise; /** @internal */ compareTemplateInfoFunc(object1: TemplateInfo, object2: TemplateInfo): boolean; /** @internal */ onToggleDropdownAsync(open: boolean): Promise; /** @internal */ onTemplateChangedAsync(event: MatSelectChange): Promise; /** @internal */ private selectTemplateAsync; /** @internal */ private updateTemplateFieldsAsync; /** @internal */ private updateTemplateFieldInfoAsync; /** @internal */ private initBaseDynamicFieldAsync; /** @internal */ private getValueIfSingleOption; /** @internal */ private updateAllFieldInfosFromServiceAsync; /** @internal */ private getOrCreateDynamicOptions; /** @internal */ onFieldValueChangedAsync(fieldValues: string[], lfFieldInfo: TemplateFieldInfo, indicesChanged?: number[]): Promise; /** @internal */ private addFieldOptionsForIndexAsync; /** @internal */ private showLoader; /** @internal */ private updateDynamicFieldsAsync; /** @internal */ private getUpdatedChildValue; /** @internal */ private getDynamicFieldValueOptionsAsync; /** @internal */ private getRelevantValuesForIndex; /** @internal */ private getDynamicFieldChildren; /** @internal */ private getDynamicFieldValues; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } declare class LfFieldContainerComponent { /**@internal */ private ref; /**@internal */ localizationService: AppLocalizationService; collapsible: boolean; start_collapsed: boolean; fieldValuesChanged: EventEmitter; templateSelectedChanged: EventEmitter; dialogOpened: EventEmitter; dialogClosed: EventEmitter; /** @internal */ templateContainer: LfFieldTemplateContainerComponent; /** @internal */ adhocContainer: LfFieldAdhocContainerComponent; /** @internal */ private lfFieldContainerService; /** @internal */ panelOpenState: boolean; /** @internal */ readonly FIELDS: Observable; /** @internal */ readonly TEMPLATE: Observable; /** @internal */ SELECTED_TEMPLATE_NAME: Observable; /** @internal */ getSelectedTemplateName(): Observable; initAsync: (lfFieldContainerService: LfFieldContainerService, templateIdentifier?: number | string) => Promise; forceValidation: () => boolean; clearAsync: () => Promise; getFieldValues: () => { [fieldName: string]: FieldValue; }; getNumAdhocFields: () => number; resetFieldDataAsync: (fields: { value: FieldValue; definition: LfFieldInfo; }[]) => Promise; updateFieldValuesAsync: (values: FieldValue[]) => Promise; getTemplateValue: () => TemplateValue | undefined; /** @internal */ onFieldValuesChanged(): void; /** @internal */ onTemplateSelectedChange(selectedTemplateId: number): void; /** @internal */ onDialogOpened(): void; /** @internal */ onDialogClosed(): void; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; } export { LfFieldAdhocContainerComponent, LfFieldContainerComponent, LfFieldTemplateContainerComponent }; export type { FieldValue, LfFieldAdhocContainerService, LfFieldContainerService, LfFieldInfo, LfFieldTemplateContainerService, LfFieldTemplateProviders, TemplateFieldInfo };