import { AfterViewInit, ChangeDetectorRef, ElementRef, EventEmitter, OnChanges, OnDestroy, OnInit, SimpleChanges, TemplateRef } from "@angular/core"; import { UntypedFormBuilder, UntypedFormGroup } from "@angular/forms"; import { MatDialog, MatDialogRef } from "@angular/material/dialog"; import { ConfigColumn, TmwTableComponent } from "tmw-table"; import { BaseField } from '../../../models/baseField.model'; import { Context } from "../../../models/context.model"; import { EndPointConfiguration } from "../../../models/endPointConfiguration.model"; import { ActionOnRecord, Form, FormFieldGroup, FormScalarTypeEnum, FormTypeEnum } from "../../../models/form.model"; import { UtilityHelperService } from "../../../services/utilityHelper.services"; import { DynamicModuleCompileConfig } from "../../../models/dynamicModuleCompileConfig.model"; import { DynamicModuleConfiguratorConfig } from "../../../models/dynamicModuleConfiguratorConfig.model"; import { DomSanitizer, SafeStyle } from "@angular/platform-browser"; import { DynamicLoaderDirectiveData, eventOut } from "../../../directives/dynamic-loader/dynamic-loader.directive"; import { Trigger, ActionButton, ActionFlagEnum, FireTrigger } from '../../../models/trigger.model'; import { Contestualization } from "../../../models/getter.model"; import { FieldExtraConfig } from "../../../models/fieldExtraConfig.model"; import { AttachmentType, TmwAttachmentDTO } from "tmw-attachments"; import { CdkDragDrop } from '@angular/cdk/drag-drop'; import * as i0 from "@angular/core"; export declare class EqpDynamicModuleConfiguratorComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy { private formBuilder; private dialog; private utilityHelperService; private sanitizer; private cdr; private elementRef; debugMode: boolean; fieldsExtraConfig: Array; configurations: DynamicModuleConfiguratorConfig; formID: string; viewMode: string; QueryEditorComponent: DynamicLoaderDirectiveData; triggers: any; actionButtons: any; contestualization: Array; formulaObject: any; configuratorTheme: Record | null; configuratorThemeCss: string | null; fireTrigger: EventEmitter; loader: boolean; /** * Token da usare negli endpoint da chiamare per recuperare o salvare i record. * Usato solo se viene popolata la proprietà "baseServerUrl". */ userToken: string; /** * Configurazione degli endpoint da chiamare per recuperare o salvare i dati. * Può essere definita dall'utente oppure lasciata null, viene popolata con dei * valori di default se viene valorizzata la proprietà "baseServerUrl" altrimenti * viene lasciata null e non viene eseguita nessuna chiamata al server. */ endPointConfiguration: EndPointConfiguration; /** * Url del server da chiamare per recuerare, salvare o eliminare i record. * Usato per creare la configurazione di default degli endpoint da chiamare. */ baseServerUrl: string; context: Context; downloadName: string; downloadJsonHref: any; stringifiedForm: string; importedModule: string; dialogImportRef: MatDialogRef>; dialogImport: TemplateRef; form: Form; backupForm: Form; saved: boolean; orgaID: string; UserID: number; innerFormManagment: boolean; innerFormRef: MatDialogRef>; viewConfig: DynamicModuleCompileConfig; formFormGroup: UntypedFormGroup; formCompleted: boolean; previewForm: Form; formFieldGroupName: string; actionAutocompleteOptions: Array<{ label: string; value: string; }>; FormTypeEnum: typeof FormTypeEnum; FormScalarTypeEnum: typeof FormScalarTypeEnum; AttachmentType: typeof AttachmentType; get previewBgStyle(): SafeStyle | null; get previewThemeStyle(): SafeStyle | null; get bgAttachmentList(): TmwAttachmentDTO[]; onBgImageChange(attachments: TmwAttachmentDTO[]): void; onBgImageDelete(): void; private static readonly FIELD_TYPE_LABELS; private static readonly FIELD_TYPE_CSS_CLASS; private static readonly MODEL_MAP; private static readonly AI_MODEL_PRICING; private extractModelFromText; onFormGraphicSuggest(): void; fieldsColumns: Array; fieldsTable: TmwTableComponent; selectedField: BaseField; indexSelectedField: number; actionOnRecordFormGroup: UntypedFormGroup; dialogFieldRef: MatDialogRef>; dialogField: TemplateRef; fieldSectionColumnTemplate: TemplateRef; selectedInnerForm: Form; indexSelectedInnerForm: number; dialogInnerFormRef: MatDialogRef>; dialogInnerForm: TemplateRef; innerFormConfig: DynamicModuleConfiguratorConfig; actionsOnRecordColumns: Array; actionsOnRecordTable: TmwTableComponent; selectedAction: ActionOnRecord; indexSelectedAction: number; dialogActionOnRecordRef: MatDialogRef>; dialogActionOnRecord: TemplateRef; actionButtonsColumns: Array; actionButtonsTable: TmwTableComponent; selectedActionButton: ActionButton; indexSelectedActionButton: number; dialogActionButtonRef: MatDialogRef>; dialogActionButton: TemplateRef; actionButtonsFormGroup: UntypedFormGroup; actionsFlag: typeof ActionFlagEnum; /** * Evento emesso quando si salva una form e non è stato specificato un endpoint da chiamare. */ saveFormEvent: EventEmitter
; /** * Evento emesso DOPO aver eseguito una chiamata al server per il salvataggiodi una form all'endpoint specificato. */ afterSaveFormEvent: EventEmitter; out: EventEmitter; dialogTriggersRef: MatDialogRef>; dialogTriggers: TemplateRef; selectedTrigger: Trigger; triggersColumns: Array; triggersTable: TmwTableComponent; showAllFields: boolean; showGraficaPanel: boolean; selectedContestualization: string; selectedContestualizationValue: number; showDeleteButton: boolean; selectedFields: Array; dialogAiEditRef: MatDialogRef>; dialogAiEdit: TemplateRef; dialogAiHistoryRef: MatDialogRef>; dialogAiHistory: TemplateRef; dialogContestualizationRef: MatDialogRef>; dialogContestualization: TemplateRef; dialogVeTooltip: TemplateRef; dialogVeReorder: TemplateRef; visualEditorActive: boolean; veSelectedField: BaseField | null; veSwapField: BaseField | null; dialogVeTooltipRef: MatDialogRef>; dialogVeReorderRef: MatDialogRef>; veShowGraphicInput: boolean; veGraphicHint: string; veApplyToAllOfType: boolean; veReorderFields: BaseField[]; private veGraphicSuggestActive; get veSelectedFieldTypeName(): string; aiEditPrompt: string; aiEditAttachments: Array<{ fileName: string; base64Content: string; mediaType: string; }>; aiEditAutosave: boolean; aiEditLoading: boolean; aiEditCountdown: number; aiEditEstimatedSec: number; private _aiCountdownRef; private _aiEditCancelled; aiEditIsOvertime: boolean; showAiPromptHistory: boolean; aiEditFieldContext: { code: string; } | null; lastPromptSplits: string[]; private static readonly AI_MIN_SPLIT_COUNT; private static readonly AI_MAX_SPLIT_COUNT; private _aiEditSplitCount; get aiEditSplitCount(): number; set aiEditSplitCount(value: number); incrementAiEditSplitCount(): void; decrementAiEditSplitCount(): void; aiFieldSuggestLoading: boolean; formGraphicSuggestLoading: boolean; formGraphicSuggestHint: string; showFormGraphicSuggestInput: boolean; formGraphicScope: string; generateBackground: boolean; aiGenerateBackground: boolean; presentFieldTypeOptions: { value: string; label: string; }[]; pendingAiDataGetterFields: BaseField[]; currentAiDataGetterField: BaseField | null; aiDataGetterLoading: boolean; get aiPromptHistory(): string[]; private readonly AI_SKILL_TOKENS; private readonly AI_TOKENS_PER_FIELD; private readonly AI_OUTPUT_TOKENS; private readonly AI_PDF_CHARS; private readonly AI_CHARS_PER_TOKEN; private readonly AI_EUR_USD_RATE; get aiEditDetectedModelId(): string; get aiEditDetectedModelLabel(): string; private get aiEditPricing(); private computeAiEditSplitCosts; get aiEditSplitWarmUpApplies(): boolean; private computeAiEditCostUsd; get aiEditCostFirstEur(): number; get aiEditCostSubsequentEur(): number; formatAiEditCost(eur: number): string; get isNewForm(): boolean; constructor(formBuilder: UntypedFormBuilder, dialog: MatDialog, utilityHelperService: UtilityHelperService, sanitizer: DomSanitizer, cdr: ChangeDetectorRef, elementRef: ElementRef); ngOnChanges(changes: SimpleChanges): void; private applyTheme; private parseCssTheme; ngAfterViewInit(): void; ngOnDestroy(): void; ngOnInit(): void; /** * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server * a cui si deve connettere e al token da passare per autenticarsi. * Se la proprietà baseServerUrl è null e non sono stati configurati i vari endpoint allora * non viene eseguita nessuna chiamata http per recuperare/salvare i dati. */ configureDefaultEndPoints(): void; stringSanitizer(value: any): boolean; setName(Name: string): void; setCode(Code: string): void; omit_special_char(event: any): boolean; onImport(event: any): void; setImportedForm(form: Form): Form; importModule(): void; closeImport(): void; /** * Funzione di esportazione modulo */ export(): void; /** * Metodo per recuperare tutti i record salvati per una particolare Form. * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare. */ getFormByID(): void; /** * Configuro l'export del form */ configureExport(res: Form): void; /** * Metodo invocato al cambio del tipo di visualizzazione della form. * Se l'utente sceglie una visualizzazione raggruppata il metodo aggiunge al FormGroup un nuovo * controllo per l'array dei nomi delle sezioni da creare. */ onChangeFormScalarType(): void; /** * Evento invocato al keyup nell'input per inserire i nomi delle sezioni per la visualizzazione * raggruppata della form. Quanto l'utente preme il tasto invio viene aggiunto il nuovo nome alle * sezioni dispobili se non ne esiste una con lo stesso nome. * @param event Evento che rappresenta il keyup sulla tastiera. */ onFormFieldGroupNameKeyUp(event: any): void; /** * Metodo per rimuovere la sezione selezionata da quelle disponibili per la form. * @param groupName Nome della sezione da eliminare. */ onDeleteFormFieldGroupName(groupName: string): void; onEditFormFieldGroupName(formFieldGroup: FormFieldGroup): void; /** Clona un oggetto escludendo riferimenti circolari e FormFormGroup */ private safeClone; /** * Metodo chiamato quando si vuole aggiungere un nuovo campo o si vuole modificare uno esistente. * Memorizza l'eventuale Field scelto one crea uno nuovo prima di aprire il dialog per modificarlo/aggiungerlo. * @param field Oggetto BaseField da modificare. Se null ne viene creata una nuova istanza per l'aggiunta. */ openFieldDialog(field?: BaseField): void; /** * Metodo che salva il campo appena creato o modificato. * Prima del salvataggio controlla se esiste un altro campo con la stessa label, in questo * case genere un errore (i campi devono avere nomi, e quindi label, univoche - i nomi vengono * ricavati unendo le parole che formano la label tramite "_"). * @param field Campo da salvare * @param reopen se presente riapre la dialog di modifica del campo pescando dalla lista il prossimo in caso di valore [1] o il precedente in caso di valore [-1] */ onSaveField(ev: { field: BaseField; reopen: number; }): void; /** * Metodo che controlla se lo step per l'aggiunta dei campi nella form è concluso. * @returns Se TRUE lo step viene considerato completato ed è possbile passare al successivo. */ isFieldStepCompleted(): boolean; /** * Metodo per aprire il dialog di creazione/modifica delle form di dettaglio. * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica. * @param innenrForm Form di dettaglio da modificare (se null allora vado in add). */ openInnerFormDialog(innenrForm?: Form): void; /** * Metodo scatenato al salvataggio di una form di dettaglio. * @param event Form creata/modificata dall'utente. Se è null allora l'utente ha abbandonato la configurazione. */ onSaveOrExitInnerForm(event: Form): void; /** * Metodo per aprire il dialog di creazione/modifica delle action. * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica. * @param action ActionOnRecord da modificare (se null allora vado in add). */ openActionOnRecordDialog(action?: ActionOnRecord): void; /** * Metodo per aprire il dialog di creazione/modifica dei bottoni azione. * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica. * @param action ActionButton da modificare (se null allora vado in add). */ openActionButtonDialog(ev?: ActionButton): void; /** * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula. * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null). * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input. * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input * oppure al keyup sulla tastiera di un tasto diverso dalle frecce. */ setActionAutocompleteOptions(keyboardEvent: KeyboardEvent): void; /** * Metodo per salvare l'azione creata/modificate. */ saveActionOnRecord(): void; /** * Metodo per salvare l'azione creata/modificate. */ saveActionButtons(element: ActionButton): void; /** * Metodo per chiudere il dialog della inner form. */ closeDialogInnerForm(): void; /** * Metodo per chiudere il dialog di gestione delle action. */ closeDialogActionOnRecord(): void; /** * Metodo per chiudere il dialog di gestione delle action buttons. */ closeDialogActionButtons(): void; /** * Metodo per segnare come conclusa la creazione della form e per crearne una copia * da visalizzare come anteprima. * @param completed Se TRUE segna la form come conclusa e ne crea una copia da visualizzare */ setFormStatus(completed: boolean): void; /** * Metodo per salvare la form creata alla fine del wizard. * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare * nel body della chiamata, altrimenti scatena l'evento "saveFormEvent". */ saveForm(): void; /** * Metodo per impostare la form e configurare colonne/FormGourp. * @param form Form da utilizzare. */ private setFormAndConfigure; toggleFormGraphicSuggestInput(): void; private refreshFieldTypeOptions; /** * Configura le colonne per le tabelle necessarie alla creazione della form: * - per la visualizzazione dei campi inseriti * - per le form di dettaglio create * - per le azioni configurate sui record della form */ private configureColumns; /** * Crea il FormGroup per l'oggetto Form */ private createFormForm; /** * Drag and Drop delle colonne del form */ onDragReleased(event: any): void; onDragEnded(event: any): void; /** * Crea il FormGroup epr l'aggiunta o la modifica di una action sui record della Form. */ private createActionOnRecordForm; /** * Chiude il dialog per aggiungere/modificare un Field senza salvare */ private closeFieldDialog; /** * Metodo per gestire l'apertura del dialog per la modifica di un Field. * Se il field è di tipo "Form di dettaglio" apre il dialog per la modifica di una * InnerForm altrimenti apre quello per la modifica di un Field. * @param field Campo da modificare */ private editField; /** * Metodo per gestire la duplicazione di un Field. * @param field Campo da modificare */ private duplicateField; private OrdinatedInsertField; private positionExchangeFields; /** * Metodo che genera una nuova GUID */ private generateGUID; /** * Metodo per rimuovere un Field all'interno di una Form. * Richiede conferma all'utente prima di rimuoverlo. * @param field BaseField da rimuovere */ private deleteElement; /** * Metodo per spostare un campo all'interno della form. * @param field Oggetto di tipo BaseField da spostare. * @param moveUp Se TRUE allora sposta verso l'alto il campo (abbassa l'indice) altrimenti il contrario. */ private moveElement; /** * Imposta l'ordinamento delle sezioni che compongono la form. */ private setFormFieldGroupOrdinalPosition; /** * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente * ha definito nella tabella in cui sono mostrati */ private setFieldOrdinalPosition; /** * Metodo per ricaricare i dati della tabella dei campi aggiunti in una form */ private reloadFieldsTable; /** * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente * ha definito nella tabella in cui sono mostrati */ private setActionOrdinalPosition; /** * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente * ha definito nella tabella in cui sono mostrati */ private setActionButtonOrdinalPosition; /** * Metodo per ricaricare i dati della tabella delle azioni aggiuntive sui record della Form. */ private reloadActionsOnRecordTable; /** * Metodo per ricaricare i dati della tabella delle azioni aggiuntive sui record della Form. */ private reloadActionButtonsOnRecordTable; onExternalComponentOut(ev: eventOut): void; private processNextAiDataGetterField; onAiDataGetterOut(ev: eventOut): void; /** * TRIGGERS */ openTriggersDialog(ev?: Trigger): void; saveTrigger(element: Trigger): void; deleteTrigger(element: Trigger): void; deleteActionButton(element: ActionButton): void; openAiEditDialog(): void; closeAiEditDialog(): void; openAiHistoryDialog(): void; private _stopAiCountdown; private _startAiCountdown; cancelAiEdit(): void; onAiEditForField(fieldCode: string): void; onAiGraphicSuggest(data: { code: string; hint: string; }): void; onAiEditFileChange(event: Event): void; removeAiEditAttachment(index: number): void; sendAiEdit(directPrompt?: string): void; onContestualizationSelect(): void; onContestualizationSelectValue(): void; applyContestualization(element: any): void; openContestualizationDialog(): void; closeContestualizationDialog(): void; onFireTrigger(ev: FireTrigger): void; toggleDeleteButton(event: Array): void; deleteSelectedFields(propertyName: string): void; toggleVisualEditor(): void; onVeFieldClick(ev: { field: BaseField; event: MouseEvent; }): void; veEditField(): void; veAiEdit(): void; veSendGraphic(): void; veOpenReorder(): void; veApplyReorder(): void; onVeDragDropReorder(event: CdkDragDrop): void; veStartSwap(): void; veDoSwap(targetField: BaseField): void; veCancelSwap(): void; veDeleteField(): void; private static readonly HINT_PALETTES; private static readonly HINT_STYLES; private static readonly HINT_ADJECTIVES; private buildHintText; randomizeHint(): void; randomizeVeHint(): void; private buildRandomGraphicHint; private refreshPreview; static ɵfac: i0.ɵɵFactoryDeclaration; static ɵcmp: i0.ɵɵComponentDeclaration; }