{"version":3,"file":"eqproject-eqp-dynamic-module.mjs","sources":["../../../projects/eqp-dynamic-module/src/lib/models/context.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleCompileConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListFormRecordActionsDefault.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleListConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleRepairConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleViewModeEnum.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseObj.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/baseField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/imageField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/endPointConfiguration.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/form.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/eqp-dynamic-module-dialog.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/textField.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/custom-form-validators.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/global.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/spinner.service.ts","../../../projects/eqp-dynamic-module/src/lib/services/utilityHelper.services.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleFilterResultViewModeEnum.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/record.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/dateField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-form-record/list-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/models/statistic.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/hlist-form-record/hlist-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/models/trigger.model.ts","../../../projects/eqp-dynamic-module/src/lib/services/db-date.service.ts","../../../projects/eqp-dynamic-module/src/lib/models/logicOperator.model.ts","../../../projects/eqp-dynamic-module/src/lib/utils/google-fonts-injector.ts","../../../projects/eqp-dynamic-module/src/lib/directives/speech-to-text/speech-to-text.directive.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/text-field-template/text-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/booleanField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/boolean-field-template/boolean-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/date-field-template/date-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/textareaField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/textarea-field-template/textarea-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/numericField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/numeric-field-template/numeric-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/listValueField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/list-value-field-template/list-value-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/fields/attachmentField.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/attachment-field-template/attachment-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-drawer/i18n.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-drawer/tmw-image-drawer.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-template/image-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/models/dynAttachment.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-field-selector-template/image-field-selector-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/label-field-template/label-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/label-field-template/label-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-marker/tmw-image-marker.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/tmw-image-marker/tmw-image-marker.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/directives/dynamic-loader/dynamic-loader.directive.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dbgetter/dbgetter.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dbgetter/dbgetter.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/field-templates/action-button-field-template/action-button-field-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-fix/dynamic-module-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/add-form-record/add-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/view-form-record/view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/single-record/single-record.component.html","../../../projects/eqp-dynamic-module/src/lib/models/graph.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graph/graph.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/graphs/graphs.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/list-view-form-record/list-view-form-record.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/spinner/spinner.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-records/repair-form-fields/repair-form-fields.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/form-statistics/filter-form-statistic/filter-form-statistic.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component.html","../../../projects/eqp-dynamic-module/src/lib/modules/material.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorSpecificConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleGeneralConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfiguratorConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/actionButton.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fieldExtraConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/modules/formula.model.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/add-formula-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-formula-field/dialog-data-example.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/action-button-creator/action-button-creator.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/action-button-creator/action-button-creator.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/add-form-field/add-form-field.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-creator.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-creator.component.html","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component.html","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component.ts","../../../projects/eqp-dynamic-module/src/lib/components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component.html","../../../projects/eqp-dynamic-module/src/lib/eqp-dynamic-module.module.ts","../../../projects/eqp-dynamic-module/src/lib/models/dynamicModuleConfig.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/entity.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/imageSelectorField.model.ts","../../../projects/eqp-dynamic-module/src/lib/models/fields/lookupField.model.ts","../../../projects/eqp-dynamic-module/src/public-api.ts","../../../projects/eqp-dynamic-module/src/eqproject-eqp-dynamic-module.ts"],"sourcesContent":["export class Context {\r\n    User: ContextUser = new ContextUser();\r\n    Organizzation: string;\r\n}\r\n\r\nexport class ContextUser {\r\n    Name: string;\r\n    Surname: string;\r\n    Role: string;\r\n}","export class DynamicModuleCompileConfig {\r\n  /**\r\n   * Show/Hide module name in COMPILE/LIST\r\n   */\r\n  showTitle: boolean;\r\n\r\n  /**\r\n   * Show/Hide form save button\r\n   */\r\n  showSaveButton: boolean;\r\n  /**\r\n   * Show/Hide form back/annulla button\r\n   */\r\n  showBackButton: boolean;\r\n  /**\r\n   * Set id for save\r\n   */\r\n  userID: string;\r\n  /**\r\n   * Bag di informazioni utilizzate lato server per filtrare le risposte sulla base di parametnri dell'applicazione ospitante\r\n   */\r\n  additionalParams: any;\r\n  /**\r\n   * Bag di informazioni utilizzate lato client per operazioni dinamiche come label custom\r\n   */\r\n  additionalInfo: any;  \r\n  /**\r\n   * Prefilter Params for filtering\r\n   */\r\n  prefilterParams: any;  \r\n  /**\r\n   * Mostra bottone \"nuova ricerca\"\r\n   */\r\n  showNewSearchButton: boolean;\r\n\r\n  constructor(\r\n    showTitle: boolean = true,\r\n    showSaveButton: boolean = true,\r\n    showBackButton: boolean = true,\r\n    userID: string = \"0\",\r\n    additionalParams: any = null,\r\n    additionalInfo: any = null,\r\n    prefilterParams: any = null,\r\n    showNewSearchButton: boolean = true\r\n  ) {\r\n    this.showTitle = showTitle;\r\n    this.showSaveButton = showSaveButton;\r\n    this.showBackButton = showBackButton;\r\n    this.userID = userID;\r\n    this.additionalParams = additionalParams;\r\n    this.additionalInfo = additionalInfo;\r\n    this.prefilterParams = prefilterParams;\r\n    this.showNewSearchButton = showNewSearchButton;\r\n  }\r\n}\r\n","export class DynamicModuleListFormRecordActionsDefault {\r\n  /*\r\n   * pulsante aggiungi in alto\r\n  */\r\n  add: boolean\r\n  /*\r\n   * pulsante visualizza nel menu della risposta\r\n  */\r\n  view: boolean\r\n  /*\r\n   * pulsante modifica nel menu della risposta\r\n  */\r\n  edit: boolean\r\n  /*\r\n   * pulsante duplica nel menu della risposta\r\n  */\r\n  duplicate: boolean\r\n  /*\r\n   * pulsante elimina nel menu della risposta\r\n  */\r\n  delete: boolean\r\n  /*\r\n   * pulsante elimina nel menu della risposta\r\n  */\r\n  graphs: boolean  \r\n\r\n  constructor(add: boolean = true, view: boolean = true, edit: boolean = true, duplicate: boolean = true, del: boolean = true, graphs: boolean = true){\r\n    this.add = add\r\n    this.view = view\r\n    this.edit = edit\r\n    this.duplicate = duplicate\r\n    this.delete = del\r\n    this.graphs = graphs\r\n  }\r\n\r\n}\r\n","import { DynamicModuleListFormRecordActionsDefault } from \"./dynamicModuleListFormRecordActionsDefault\";\r\nimport { Record, RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleListConfig {\r\n  /**\r\n   * Show/Hide module name in COMPILE/LIST\r\n   */\r\n  showTitle: boolean = true;\r\n\r\n  /**\r\n   * Lista delle azioni di default da mostrare per visualizzare/modificare/duplicare/eliminare in LIST MODE\r\n   */\r\n  defaultListActions: DynamicModuleListFormRecordActionsDefault\r\n\r\n  /**\r\n   * Lista dei record da mostrare in LIST MODE\r\n   */\r\n  values: Array<Record>;\r\n\r\n  /**\r\n   * Lista degli eventuali bottoni esterni dipendenti dall'applicazione utilizzatrice in aggiunta ai defaultListActions\r\n   */\r\n  externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n\r\n  /**\r\n   * Bag di informazioni utilizzate lato client per operazioni dinamiche come label custom\r\n   * Utilizzata per aggironare alcuni valori dell additionInfo delle risposte\r\n   */\r\n  updateInfo: any;\r\n  \r\n  /**\r\n   * Lista di chiavi da utilizzare per comporre il titolo dell'accordion del record\r\n   * le strignhe vengono cercate nell'AdditionalInfo del record e se non trovate non viene stampato niente\r\n   */\r\n  listViewRecordTitle: Array<string>;\r\n\r\n  /**\r\n   * L'Id utente per filtrare le risposte\r\n   */\r\n  userID: string = \"0\";\r\n\r\n  /**\r\n   * Controllo se è draggabile\r\n   */\r\n\r\n  isDraggableListView: boolean = true;\r\n\r\n  constructor(\r\n    showTitle: boolean = true,\r\n    values: Array<Record> = null,\r\n    defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(),\r\n    userID: string = \"0\",\r\n    externalButtons: Array<RecordButton> = new Array<RecordButton>(),\r\n    updateInfo = null,\r\n    listViewRecordTitle = new Array<string>(),\r\n    isDraggableListView: boolean = true\r\n  ) {\r\n    this.showTitle = showTitle;\r\n    this.values = values;\r\n    this.defaultListActions = defaultListActions;\r\n    this.userID = userID;\r\n    this.externalButtons = externalButtons;\r\n    this.updateInfo = updateInfo;\r\n    this.listViewRecordTitle = listViewRecordTitle;\r\n    this.isDraggableListView = isDraggableListView;\r\n  }\r\n}\r\n","export class DynamicModuleRepairConfig {\r\n  /*\r\n   * stringa da passare in REPAIR MODE\r\n   */\r\n  FormJSON: string = \"\";\r\n\r\n  constructor(formJson: string){\r\n    this.FormJSON = formJson;\r\n  }\r\n}\r\n","export enum DynamicModuleViewModeEnum {\r\n    NONE = 0,\r\n    VIEW = 1,\r\n    COMPILE = 2,\r\n    LIST = 3,\r\n    REPAIR = 4,\r\n    LISTWIEW = 5,\r\n    FILTER = 6,\r\n    GRAPHS = 7,\r\n    HLIST = 8,\r\n    EXTERNAL_FILTER = 9\r\n}","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class BaseObj {\r\n    ID: string;\r\n}","import { UntypedFormGroup } from '@angular/forms';\r\nimport { BaseObj } from './baseObj.model';\r\nimport { Contestualization } from './getter.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum } from './statistic.model';\r\n\r\n/**\r\n * Contiene le informazioni di base del campo, indipendentemente dal tipo.\r\n * Questa classe è volutamente astratta perché il tipo di campo è dettato dal tipo\r\n */\r\nexport class BaseField extends BaseObj {\r\n    /**\r\n     * Nome del campo che per progettazione è una sostituzione della label\r\n     * Il vero identificativo del campo è l'ID\r\n     */\r\n    Name: string;\r\n    Label: string;\r\n    Description: string;\r\n    Required: boolean;\r\n    Formula: string;\r\n    Tooltip: string;\r\n    OrdinalPosition: number;\r\n    Disabled: boolean;\r\n    Readonly: boolean;\r\n    ReadonlyIf: string;\r\n    Aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n    FieldstyleCSS: string;\r\n    LabelstyleCSS: string;\r\n\r\n    // rappresentazione grafica di default per gli elementi di risposta\r\n    AnswerStyle: AnswerStyle = { InListView: true, Invisibility: FieldInvisibilityEnum.NASCOSTO, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [] };\r\n\r\n\r\n    /**\r\n     * Entità a cui appartiene il campo. Si tenga presente che sono ammessi anche campi\r\n     * di sola visualizzazione e calcolati, da utilizzare nelle form, \r\n     * e per questo motivo possono essere con Entity == null\r\n    */\r\n    EntityID: string;\r\n\r\n    FieldGroup: string;\r\n    ColSpanSizes: Array<ColSpanSizesEnum>;\r\n    VisibleIf: string; // condizione di visualizzazione\r\n    InListView: boolean; // visualizzazione (impostata di default oppure condizionata calcolata durante la compilazione del questionario)\r\n    Invisibility: FieldInvisibilityEnum;\r\n    Maintain_Value: boolean = false;\r\n\r\n    // Proprità client\r\n    FieldType: FieldTypeEnum;\r\n    FieldValue: any;\r\n\r\n    DataGetter: DataGetter = new DataGetter();\r\n    DataGetterValueBase64String: string = \"\";\r\n\r\n    FormFormGroup: UntypedFormGroup;\r\n}\r\n\r\n\r\nexport class AnswerStyle {\r\n    InListView: boolean // visible\r\n    Invisibility: FieldInvisibilityEnum\r\n    VisibleIf: string // formula visible\r\n    FieldstyleCSS: string\r\n    LabelstyleCSS: string\r\n    ColSpanSizes: Array<ColSpanSizesEnum>\r\n};\r\n\r\nexport class DataGetter {\r\n    DataGetterType: DataGetterTypeEnum = DataGetterTypeEnum.Manuale;\r\n    DataGetterValue: any = null;\r\n    DataGetterColumnForce: any = null;\r\n    DataGetterCardinality: DataGetterCardinalityEnum = DataGetterCardinalityEnum['PIU RECENTE']; // Usato solo in caso di DM Getter\r\n    DataGetterContestualization: Contestualization; // Usato per contestualizzare il DM Getter\r\n    DataGetterHasResetButton: boolean = true; // ha il pulsante reset?\r\n    DataGetterCodeVersion?: number; // Se è presente la versione del codice del DataGetter è almeno 2 ovvero funziona con Omnisearch AI. Tutti i form che non hanno questo parametro sono da considerarsi legacy.\r\n    DataGetterSpeechText?: string; // Prompt AI generato automaticamente dal configurator AI per caricare il DataGetter in maniera silent\r\n}\r\n\r\nexport enum FieldTypeEnum {\r\n    'Campo di testo' = 1,\r\n    'Area di testo' = 2,\r\n    'Booleano' = 3,\r\n    'Data e/o ora' = 4,\r\n    'Campo numerico' = 5,\r\n    'Allegato' = 6,\r\n    'Immagine' = 7,\r\n    'Elenco generico' = 8,\r\n    'Lookup' = 9,\r\n    'Form di dettaglio' = 10,\r\n    'Elenco immagini' = 11,\r\n    \"Etichetta\" = 12,\r\n    \"Immagine con markers\" = 13,\r\n    \"Bottone\" = 14\r\n}\r\n// se si aggiungono nuove modalità di recupero\r\n// devono essere gestite in add-form-record > getResponseValues\r\nexport enum DataGetterTypeEnum {\r\n    'Manuale' = 1,\r\n    'Formula' = 2,\r\n    'Da database' = 3,\r\n    'Da modulo dinamico' = 4\r\n}\r\n\r\nexport enum ColSpanSizesEnum {\r\n    'col-sm-3' = 1,\r\n    'col-sm-4' = 2,\r\n    'col-sm-6' = 3,\r\n    'col-sm-12' = 4,\r\n\r\n    'col-md-3' = 5,\r\n    'col-md-4' = 6,\r\n    'col-md-6' = 7,\r\n    'col-md-12' = 8,\r\n\r\n    'col-lg-3' = 9,\r\n    'col-lg-4' = 10,\r\n    'col-lg-6' = 11,\r\n    'col-lg-12' = 12,\r\n\r\n    'align-self-start' = 13,\r\n    'align-self-center' = 14,\r\n    'align-self-end' = 15,\r\n\r\n    'col-sm-1' = 16,\r\n    'col-sm-2' = 17,\r\n    'col-sm-5' = 18,\r\n    'col-sm-7' = 19,\r\n    'col-sm-8' = 20,\r\n    'col-sm-9' = 21,\r\n    'col-sm-10' = 22,\r\n    'col-sm-11' = 23,\r\n\r\n    'col-md-1' = 24,\r\n    'col-md-2' = 25,\r\n    'col-md-5' = 26,\r\n    'col-md-7' = 27,\r\n    'col-md-8' = 28,\r\n    'col-md-9' = 29,\r\n    'col-md-10' = 30,\r\n    'col-md-11' = 31,\r\n\r\n    'col-lg-1' = 32,\r\n    'col-lg-2' = 33,\r\n    'col-lg-5' = 34,\r\n    'col-lg-7' = 35,\r\n    'col-lg-8' = 36,\r\n    'col-lg-9' = 37,\r\n    'col-lg-10' = 38,\r\n    'col-lg-11' = 39\r\n}\r\n\r\nexport enum FieldInvisibilityEnum {\r\n    'NASCOSTO' = 1,\r\n    'NASCOSTO CON AREA VISIBILE' = 2\r\n}\r\n\r\nexport enum DataGetterCardinalityEnum {\r\n    // 'TUTTE LE RISPOSTE' = 0,\r\n    'PIU RECENTE' = 1,\r\n    // 'PRIMA E ULTIMA' = 2,\r\n    // 'NESSUNA' = 3,\r\n    'MENO RECENTE' = 4,\r\n    'CONTESTUALIZZATA ALLA RISPOSTA' = 5\r\n\r\n}","import { BaseField } from \"../baseField.model\";\r\nimport { DynAttachment } from \"../dynAttachment\";\r\n\r\nexport class ImageFieldStyleCSS {\r\n    // Contenitore esterno (.imageContainer)\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    // Descrizione / label (.image-label)\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    // Bottone Disegna (visibile solo se EnableDrawing=true)\r\n    BottoneDisegnaNormale?: string;\r\n    BottoneDisegnaMouseover?: string;\r\n}\r\n\r\nexport class ImageField extends BaseField {\r\n\r\n    DynAttachment: DynAttachment;\r\n    DynAttachmentID: number;\r\n    ResizedImagesHeightPx: number = 128;\r\n    EnableDrawing: boolean = false;\r\n    ImageFieldStyleCSS?: ImageFieldStyleCSS;\r\n\r\n}\r\n\r\nexport enum ImageFolderEnum {\r\n    \"Regular\" = 1,\r\n    \"Resized\" = 2,\r\n    \"Thumbnail\" = 3,\r\n   \r\n}","import { ImageFolderEnum } from \"./fields/imageField.model\";\r\n\r\nexport class EndPointConfiguration {\r\n  Records: {\r\n    GetWithContextualizationByFormCodeEndPoint?: EndPointData;\r\n    GetByFormIDEndPoint?: EndPointData;\r\n    GetByFormCodeEndPoint?: EndPointData;\r\n    GetAllByEntAndUserIDEndPoint?: EndPointData;\r\n    GetByIDEndPoint?: EndPointData;\r\n    SaveEndPoint?: EndPointData;\r\n    DuplicateEndPoint?: EndPointData;\r\n    DeleteEndPoint?: EndPointData;\r\n    RepairEndPoint?: EndPointData;\r\n    ApplyFilter?: EndPointData;\r\n    GetAllAttachmentsEndPoint?: EndPointData;\r\n  };\r\n  Forms: {\r\n    GetAttachmentWithBases64: EndPointData;\r\n    GetByIDEndPoint: EndPointData;\r\n    GetAllFormEndPoint: EndPointData;\r\n    GetByIDAndVersionEndPoint: EndPointData;\r\n    SaveEndPoint: EndPointData;\r\n    SaveAttachmentEndPoint: EndPointData;\r\n    ExportByIDEndPoint: EndPointData;\r\n    SpeechToFormEditEndPoint: EndPointData;\r\n    SpeechToGraphicsEndPoint?: EndPointData;\r\n  };\r\n\r\n  constructor(baseUrl: string = null, userToken: string = null) {\r\n    if (baseUrl != null) {\r\n      this.Records = {\r\n        GetWithContextualizationByFormCodeEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/GetWithContextualizationByFormCodeEndPoint\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"FormCode\",\r\n              ParamValue: \"TESTFORMCODE\",\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"mode\",\r\n              ParamValue: 0,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"UserID\",\r\n              ParamValue: 0,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"OrgaID\",\r\n              ParamValue: 0,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"ContestualizationParam\",\r\n              ParamValue: \"FK_Something\",\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"ContestualizationId\",\r\n              ParamValue: 0,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            }\r\n          ]\r\n        },\r\n        GetByFormCodeEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/GetSerializedValuesByFormCode\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"FormCode\",\r\n              ParamValue: \"TESTFORMCODE\",\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"mode\",\r\n              ParamValue: 2,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"UserID\",\r\n              ParamValue: 65,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"OrgaID\",\r\n              ParamValue: 2,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            }\r\n          ],\r\n        },\r\n        GetByFormIDEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/getall\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"test\",\r\n              ParamValue: true,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ],\r\n        },\r\n        GetAllAttachmentsEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/getallattachments\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"test\",\r\n              ParamValue: true,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ],\r\n        },\r\n        GetAllByEntAndUserIDEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/GetAllByUserID\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"EntID\",\r\n              ParamValue: true,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"UserID\",\r\n              ParamValue: true,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ],\r\n        },\r\n        GetByIDEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/getByID\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n        },\r\n        SaveEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/save\",\r\n          RequestMethod: RequestMethodEnum.POST,\r\n          Params: [\r\n            {\r\n              ParamName: \"CompanyID\",\r\n              ParamValue: 3,\r\n              ParamType: ParamTypeEnum[\"In Body\"],\r\n            },\r\n            {\r\n              ParamName: \"sendNotification\",\r\n              ParamValue: true,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ],\r\n        },\r\n        DuplicateEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/duplicate\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n        },\r\n        DeleteEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/delete\",\r\n          RequestMethod: RequestMethodEnum.DELETE,\r\n        },\r\n        ApplyFilter: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/v1/applyfilter\",\r\n          RequestMethod: RequestMethodEnum.POST,\r\n          Params: [\r\n            {\r\n              ParamName: \"filter\",\r\n              ParamValue: 3,\r\n              ParamType: ParamTypeEnum[\"In Body\"],\r\n            },\r\n          ],\r\n        },\r\n      };\r\n      this.Forms = {\r\n        GetAttachmentWithBases64: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/getattachmentwithbases64\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"AttachmentID\",\r\n              ParamValue: 5,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"Types\",\r\n              ParamValue: [ImageFolderEnum.Regular],\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ],\r\n        },\r\n        GetByIDEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/form\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n        },\r\n        GetAllFormEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/all\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"orgaid\",\r\n              ParamValue: 2,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            }\r\n          ],\r\n        },\r\n        GetByIDAndVersionEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/getbyidadnversion\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n        },\r\n        SaveEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/form\",\r\n          RequestMethod: RequestMethodEnum.POST,\r\n        },\r\n        SaveAttachmentEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/saveattachmentfilebase\",\r\n          RequestMethod: RequestMethodEnum.POST,\r\n        },\r\n        ExportByIDEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/exportbyid\",\r\n          RequestMethod: RequestMethodEnum.GET,\r\n          Params: [\r\n            {\r\n              ParamName: \"id\",\r\n              ParamValue: \"\",\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            }\r\n          ],\r\n        },\r\n        SpeechToFormEditEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/SpeechToForm\",\r\n          RequestMethod: RequestMethodEnum.POST,\r\n        },\r\n        SpeechToGraphicsEndPoint: {\r\n          Token: userToken,\r\n          Url: baseUrl + \"/conf/SpeechToGraphics\",\r\n          RequestMethod: RequestMethodEnum.POST,\r\n        },\r\n      };\r\n    }\r\n  }\r\n}\r\n\r\nexport class EndPointData {\r\n  Url: string;\r\n  Token?: string;\r\n  RequestMethod: RequestMethodEnum;\r\n  Params?: EndPointDataParams[];\r\n}\r\n\r\nexport class EndPointDataParams {\r\n  ParamName: string;\r\n  ParamValue: any = null;\r\n  ParamType: ParamTypeEnum;\r\n}\r\n\r\nexport enum ParamTypeEnum {\r\n  \"Query param\" = 1,\r\n  \"In route\" = 2,\r\n  \"In Body\" = 3,\r\n}\r\n\r\nexport enum RequestMethodEnum {\r\n  GET = \"GET\",\r\n  POST = \"POST\",\r\n  PUT = \"PUT\",\r\n  DELETE = \"DELETE\",\r\n}\r\n","import { BaseObj } from \"./baseObj.model\";\r\nimport { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\nimport { ActionButton, Trigger } from \"./trigger.model\";\r\nimport { FieldExtraValues } from \"./fieldExtraConfig.model\";\r\n\r\n/**\r\n * Classe che rappresenta una Form completa.\r\n * Si tratta dell'oggetto che viene rappresentato a video e con cui l'utente interagisce.\r\n */\r\nexport class Form extends BaseObj implements IRootObject {\r\n    Code: string;\r\n    Name: string;\r\n    Description: string;\r\n    Version: number;\r\n    OrgaID: string;\r\n    ProjectName: string;\r\n    // FormType: FormTypeEnum;\r\n    FormScalarType: FormScalarTypeEnum;\r\n    FormFieldsGroups: Array<FormFieldGroup>;\r\n\r\n    /**\r\n     * Elenco dei campi rappresentati nella form\r\n     * possono appartenere ad una sola entità\r\n     */\r\n\r\n    Fields: Array<BaseField>;\r\n    FldExtraConfigValues: Array<FieldExtraValues>;\r\n    ActionsOnRecord: Array<ActionOnRecord>;\r\n\r\n    /**\r\n     * Triggers\r\n     */\r\n\r\n    Triggers: Array<Trigger>;\r\n    ActionButtons: Array<ActionButton>;\r\n\r\n    /**\r\n     * Elenco delle form contenute nella form base, ad esempio possono essere le varie form di\r\n     * dettaglio\r\n     */\r\n\r\n    InnerForms: Array<Form>;\r\n    CreationDate: Date;\r\n    CreationUser: number;\r\n    ModifyDate: Date;\r\n    ModifyUser: number;\r\n    RootEntityID: string;\r\n\r\n    // Tema\r\n    ThemeCSS?: string;\r\n    AIPrompts?: string;\r\n    TitleCSS?: string;\r\n    DynaFormsThemeID?: string;\r\n    BgImageBase64?: string;\r\n    BgImageUrl?: string;\r\n\r\n    // Proprietà client\r\n    OldName?: string;\r\n    ObjectFields: any[];\r\n    ObjectFldExtraConfigValues: any[];\r\n    ObjectTriggers: any;\r\n    ObjectActionButtons: any;\r\n}\r\n\r\nexport class FormFieldGroup {\r\n    Name: string;\r\n    OrdinalPosition?: number;\r\n}\r\n\r\nexport class ActionOnRecord {\r\n    Name: string;\r\n    Icon: string;\r\n    Action: string; //Codice js\r\n    OrdinalPosition: number;\r\n}\r\n\r\nexport enum FormTypeEnum {\r\n    SCALAR = 1,     /* form di tipo scalare */\r\n    LIST = 2        /* form di tipo lista che viene rappresentata con molti record */\r\n}\r\n\r\nexport enum FormScalarTypeEnum {\r\n    \"Semplice\" = 1, //FLAT\r\n    \"A step\" = 2, //STEPPER\r\n    \"In tab\" = 3, //GROUPED_BY_TAB\r\n    \"In accordion\" = 4 //GROUPED_BY_ACCORDION\r\n}","import { Injectable } from \"@angular/core\";\r\nimport Swal from 'sweetalert2';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class EqpDynamicModuleDialogService {\r\n\r\n    constructor() { }\r\n    \r\n    /**\r\n     * Mostra uno sweet alert di tipo SUCCESS con il messaggio passato come parametro.\r\n     * @param message Messaggio da mostrare nello sweetalert\r\n     * @param title Titolo dello sweetalert (di default mostra 'Operazione completata')\r\n     */\r\n    static Success(message: string, title: string = null) {\r\n        let currentTitle = title != null ? title : 'Operazione completata con successo.';\r\n        Swal.fire(currentTitle, message, 'success');\r\n    }\r\n\r\n    /**\r\n     * Mostra uno sweet alert di tipo ERROR con il messaggio passato come parametro.\r\n     * @param message Messaggio d'errore da mostrare nello sweetalert\r\n     * @param title Titolo dello sweetalert (di default mostra 'Errore')\r\n     */\r\n    static Error(message: string | string[], title: string = null) {\r\n        let currentTitle = title != null ? title : 'Errore';\r\n        if (Array.isArray(message)) {\r\n            currentTitle = title != null ? title : 'Errore';\r\n            let htmlErrors: string = message.join(\"<br>\");\r\n            Swal.fire({\r\n                title: currentTitle,\r\n                html: htmlErrors,\r\n                icon: 'error'\r\n            });\r\n        }\r\n        else {\r\n            Swal.fire(currentTitle, message, 'error');\r\n        }\r\n    }\r\n\r\n\r\n  /**\r\n   * Mostra uno sweetalert di tipo CONFIRM con il messaggio passato come parametro.\r\n   * Alla pressione del tasto CONFERMA viene invocata la funzione confirmCallback.\r\n   * Se viene passata anche la funzione cancellCallback viene invocata quando viene premuto il tasto ANNULLA\r\n   * @param message Messaggio da mostrare nello sweetalert (può contenere una lista di messaggi)\r\n   * @param confirmCallback Funzione di callback da invocare quando viene premuto il tasto CONFERMA\r\n   * @param isWarning Se TRUE allora utilizza l'icona di WARNING all'interno dello sweetalert\r\n   * @param title Titolo dello sweetalert (di default mostra 'Sei sicuro di voler procedere?')\r\n   * @param customWidth Larghezza da impostare per lo sweetalert (default: 32rem)\r\n   * @param cancelCallback Funzione di callback da invocare alla pressione del tasto ANNULLA (opzionale)\r\n   * @param confirmButtonText Testo da mostrare nel pulsante di conferma (default: Conferma)\r\n   * @param cancelButtonText Testo da mostrare nel pulsante di annulla (default: Chiudi)\r\n   */\r\n  \r\n    static Confirm(message: string | string[], confirmCallback: any, isWarning: boolean = false,\r\n        title: string = null, customWidth: string = null, cancelCallback: any = null, confirmButtonText: string = null, cancelButtonText: string = null, haveDenyButton: boolean = false, denyButtonText: string = null, denyCallback: any = null, allowOutsideClick = false) {\r\n\r\n        let currentTitle = title != null ? title : 'Sei sicuro di voler procedere?';\r\n        if (Array.isArray(message)) {\r\n        message = message.join(\"<br>\");\r\n        }\r\n\r\n        Swal.fire({\r\n        title: currentTitle,\r\n        html: message,\r\n        width: customWidth ? customWidth : '32rem',\r\n        icon: !isWarning ? 'question' : 'warning',\r\n        confirmButtonText: confirmButtonText ? confirmButtonText : 'Conferma',\r\n        showCancelButton: true,\r\n        denyButtonText: denyButtonText ? denyButtonText : 'No',\r\n        showDenyButton: haveDenyButton,\r\n        cancelButtonText: cancelButtonText ? cancelButtonText : 'Chiudi',\r\n        allowOutsideClick: allowOutsideClick,\r\n        allowEscapeKey: false\r\n        }).then((result) => {\r\n        if (result.value && confirmCallback) {\r\n            confirmCallback();\r\n        } else if (result.isDenied) {\r\n            denyCallback();\r\n        } else if (cancelCallback) {\r\n            cancelCallback();\r\n        }\r\n        });\r\n    }\r\n\r\n    /**\r\n     * Mostra uno sweetalert di tipo INFO con il messaggio passato come parametro\r\n     * @param message Messaggio da mostrare nello sweetalert\r\n     * @param title Titolo dello sweetalert (di default mostra 'Info')\r\n     */\r\n    static Info(message: string, title: string = null, isToast: boolean = null) {\r\n        let currentTitle = title != null ? title : \"Informazione:\";\r\n        Swal.fire(currentTitle, message, 'info');\r\n    }\r\n\r\n    /**\r\n     * Mostra uno sweetalert di tipo WARNING con il messaggio passato come parametro\r\n     * @param message Messaggio da mostrare nello sweetalert\r\n     * @param title Titolo dello sweetalert (di default mostra 'Attenzione!')\r\n     */\r\n    static Warning(message: string | string[], title: string = null, isToast: boolean = null) {\r\n        let currentTitle = title != null ? title : \"Attenzione!\";\r\n\r\n        if (Array.isArray(message)) {\r\n            const htmlWarnings = `<div style=\"max-height:40vh;overflow-y:auto;text-align:left;padding-right:6px;\">${message.join('<br><br>')}</div>`;\r\n            Swal.fire({\r\n                title: currentTitle,\r\n                html: htmlWarnings,\r\n                icon: 'warning'\r\n            });\r\n        } else {\r\n            Swal.fire(currentTitle, message, 'warning');\r\n        }\r\n    }\r\n\r\n    /**\r\n     *\r\n     * @param message Messaggio da mostrare nel prompt\r\n     * @param confirmCallback Funzione di callback da richiamare sul conferma\r\n     */\r\n    static Prompt(message: string, confirmCallback: any, inputValue: any = \"\") {\r\n        Swal.fire({\r\n        title: message,\r\n        input: 'text',\r\n        inputAttributes: {\r\n            autocapitalize: 'off'\r\n        },\r\n        inputValue: inputValue,\r\n        showCancelButton: true,\r\n        confirmButtonText: 'Conferma',\r\n        cancelButtonText: 'Esci',\r\n        showLoaderOnConfirm: true,\r\n        allowOutsideClick: false\r\n        }).then((result) => {\r\n        if (result.value && confirmCallback) {\r\n            confirmCallback(result.value);\r\n        }\r\n        })\r\n    }\r\n\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class TextFieldStyleCSS {\r\n    // Contenitore (mat-form-field wrapper)\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerFocused?: string;\r\n    ContainerNotValid?: string;\r\n    ContainerReadonly?: string;\r\n    // Casella di testo (input)\r\n    InputNormale?: string;\r\n    InputMouseover?: string;\r\n    InputFocused?: string;\r\n    InputNotValid?: string;\r\n    InputReadonly?: string;\r\n    // Descrizione (mat-label floating)\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    DescrizioneFocused?: string;\r\n    DescrizioneNotValid?: string;\r\n    DescrizioneReadonly?: string;\r\n    // Icona (prefix o suffix, indipendentemente dalla posizione)\r\n    IconaNormale?: string;\r\n    IconaMouseover?: string;\r\n    IconaFocused?: string;\r\n    IconaNotValid?: string;\r\n    IconaReadonly?: string;\r\n    // Microfono (speech-to-text icon)\r\n    MicrofonoNormale?: string;\r\n    MicrofonoMouseover?: string;\r\n    MicrofonoFocused?: string;\r\n    MicrofonoNotValid?: string;\r\n    MicrofonoReadonly?: string;\r\n    // Testo errore (mat-error)\r\n    ErroreNormale?: string;\r\n    ErroreMouseover?: string;\r\n    ErroreFocused?: string;\r\n    ErroreNotValid?: string;\r\n    ErroreReadonly?: string;\r\n}\r\n\r\n/**Campo di testo */\r\nexport class TextField extends BaseField {\r\n    TextMask: TextMaskEnum;\r\n    MaxLenght: number;\r\n    MinLenght: number;\r\n    Microphone: boolean;\r\n    IconName: string;\r\n    IconPosition: TextFieldIconPositionEnum;\r\n    TextFieldStyleCSS?: TextFieldStyleCSS;\r\n}\r\n\r\nexport enum TextMaskEnum {\r\n    'Password' = 1,\r\n    'Email' = 2,\r\n    'Telefono' = 3,\r\n    'Url' = 4\r\n}\r\n\r\nexport enum TextFieldIconPositionEnum {\r\n    'Sinistra' = 1,\r\n    'Destra' = 2\r\n}\r\n\r\nexport const UrlRegex = '(https?://)?([\\\\da-z.-]+)\\\\.([a-z.]{2,6})[/\\\\w .-]*/?';\r\nexport const TelRegex = '([+]?[0-9]{10,14})';\r\n","import { AbstractControl, ValidationErrors } from \"@angular/forms\";\r\n\r\nexport class ArrayValidators {\r\n  public static minLenght(minLenght: number): (AbstractControl) => ValidationErrors | null {\r\n    var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n      return !!control && !!control.value && Array.isArray(control.value) && control.value.length >= minLenght\r\n        ? null\r\n        : { hasMinLenght: false };\r\n    };\r\n    return validationFunction;\r\n  }\r\n\r\n  public static maxLenght(maxLenght: number): (AbstractControl) => ValidationErrors | null {\r\n    var validationFunction = (control: AbstractControl): ValidationErrors | null => {\r\n      return !!control && !!control.value && Array.isArray(control.value) && control.value.length <= maxLenght\r\n        ? null\r\n        : { hasMinLenght: false };\r\n    };\r\n    return validationFunction;\r\n  }\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport { SpeechToTextDirective } from \"../../lib/directives/speech-to-text/speech-to-text.directive\";\r\n\r\n@Injectable({\r\n  providedIn: 'root'\r\n})\r\nexport class GlobalService {\r\n\r\n  public static debugMode = false;\r\n  \r\n  //#region variabili microfono\r\n  static isSpeechToTextStarted = false\r\n  static speechDirective : SpeechToTextDirective\r\n  //#endregion variabili microfono\r\n\r\n  constructor(private http: HttpClient) {\r\n  }\r\n\r\n  static debugLog(message: string, element?: any){\r\n    if(this.debugMode){\r\n      console.log(message, element);\r\n    }\r\n  }\r\n\r\n  //key1|value1 ; key2 | value2\r\n  static  stringToValuePairs(valueString: string): { [key: string]: string } {\r\n    const valuePairs: { [key: string]: string } = {};\r\n    const keyvals = valueString.split(\";\");\r\n    keyvals.forEach((x) => {\r\n      const parts = x.split(\"|\");\r\n      if(parts.length == 1){\r\n        valuePairs[parts[0].trim()] = parts[0].trim();\r\n      } else if (parts.length > 1){\r\n        valuePairs[parts[0].trim()] = parts[1].trim();\r\n      }\r\n    })\r\n    return valuePairs;\r\n  }\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { Subject } from 'rxjs';\r\n\r\n@Injectable({\r\n    providedIn: 'root'\r\n})\r\nexport class SpinnerService {\r\n    isLoading = new Subject<boolean>();\r\n\r\n    private requestsCount: number = 0;\r\n\r\n    /**\r\n     * Mostra lo spinner\r\n     */\r\n    show() {\r\n        setTimeout(() => {\r\n            this.isLoading.next(true);\r\n        }, 100);\r\n    }\r\n\r\n    /**\r\n     * Nasconde lo spinner\r\n     */\r\n    hide() {\r\n        setTimeout(() => {\r\n            this.isLoading.next(false);\r\n        }, 100);\r\n    }\r\n\r\n    addRequestCounter() {\r\n        this.requestsCount++;\r\n        this.show();\r\n    }\r\n\r\n    removeRequestCounter() {\r\n        this.requestsCount--;\r\n        if (this.requestsCount == 0)\r\n            this.hide();\r\n    }\r\n}","import { HttpClient } from \"@angular/common/http\";\r\nimport { Injectable } from \"@angular/core\";\r\nimport {\r\n  AbstractControl,\r\n  UntypedFormBuilder,\r\n  UntypedFormControl,\r\n  UntypedFormGroup,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n  Validators,\r\n} from \"@angular/forms\";\r\nimport {\r\n  BaseField,\r\n  ColSpanSizesEnum,\r\n  FieldInvisibilityEnum,\r\n  FieldTypeEnum,\r\n} from \"../models/baseField.model\";\r\nimport { Context } from \"../models/context.model\";\r\nimport {\r\n  EndPointConfiguration,\r\n  EndPointData,\r\n  EndPointDataParams,\r\n  ParamTypeEnum,\r\n  RequestMethodEnum,\r\n} from \"../models/endPointConfiguration.model\";\r\nimport { AttachmentField } from \"../models/fields/attachmentField.model\";\r\nimport { ImageField } from \"../models/fields/imageField.model\";\r\nimport { ListValueField } from \"../models/fields/listValueField.model\";\r\nimport { TextareaField } from \"../models/fields/textareaField.model\";\r\nimport {\r\n  TextMaskEnum,\r\n  TextField,\r\n  UrlRegex,\r\n  TelRegex,\r\n} from \"../models/fields/textField.model\";\r\nimport { Form } from \"../models/form.model\";\r\nimport { Record } from \"../models/record.model\";\r\nimport { ArrayValidators } from \"./custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"./eqp-dynamic-module-dialog.service\";\r\nimport { SpinnerService } from \"./spinner.service\";\r\nimport { GlobalService } from \"./global.service\";\r\nimport { ImageSelectorField } from \"../models/fields/imageSelectorField.model\";\r\nimport { DynAttachment } from \"../models/dynAttachment\";\r\n\r\n@Injectable({\r\n  providedIn: \"root\",\r\n})\r\nexport class UtilityHelperService {\r\n  public static context: Context = new Context();\r\n\r\n  debugMode: boolean = false;\r\n  debugLog(message: string, item?: any) {\r\n    if (this.debugMode) {\r\n      if (item) {\r\n        console.log(message, item)\r\n      } else {\r\n        console.log(message)\r\n      }\r\n    }\r\n  }\r\n\r\n  constructor(\r\n    private formBuilder: UntypedFormBuilder,\r\n    private http: HttpClient,\r\n    private spinnerService: SpinnerService\r\n  ) { }\r\n\r\n  // rec e ctx servono per ambiente di eval()\r\n  public static EvaluateFieldFormula(\r\n    formula: string,\r\n    rec: Record,\r\n    ctx: any\r\n  ): any {\r\n    try {\r\n      //! questo metodo è più sicuro ma richiede di trasformare tutte le vecchie formule in modo da avere un return\r\n      // creo una funzione che accetta rec e ctx\r\n      // const fn = new Function(\"rec\", \"ctx\", `return ${formula};`);\r\n      // eseguo passando i valori\r\n      // const evaluatedValue = fn(rec, ctx);\r\n\r\n      //! questo metodo è poco sicuro ma è nato così\r\n      const evaluatedValue = eval(formula);\r\n      // vecchio return ? : che trasformava in null le seguenti occorrenze\r\n      // 0, \"\", false, null, undefined\r\n      // return evaluatedValue ? evaluatedValue : null;\r\n\r\n      // nuovo return ?? trasforma a null solamente le seguenti occorrenze\r\n      // null, undefined\r\n      return evaluatedValue ?? null;\r\n\r\n    } catch (err: any) {\r\n      console.error(\"Errore nell'esecuzione:\", err.message);\r\n      return null;\r\n    }\r\n  }\r\n\r\n  public static SetContext(ctx: Context) {\r\n    this.context = ctx;\r\n  }\r\n  public static isNumeric(n) {\r\n    return !isNaN(n);\r\n  }\r\n\r\n  public static initStyles(stylecss) {\r\n    return stylecss.split(\";\").reduce((a, b) => {\r\n      const keypar = b.split(\":\");\r\n      if (keypar.length > 1) a[keypar[0].trim()] = keypar[1].trim();\r\n      return a;\r\n    }, {});\r\n  }\r\n\r\n  public static GetFieldType(field: BaseField) {\r\n    switch (field.FieldType) {\r\n      case FieldTypeEnum[\"Campo di testo\"]: {\r\n        const t: TextField = Object.assign(new TextField(), field);\r\n        return t;\r\n        break;\r\n      }\r\n      default: {\r\n        break;\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per impostare i valori da suggerire nell'autocomplete per i campi in cui l'utente deve scrivere comandi javascript.\r\n   * In base all'ultimo carattere digitato viene impostato un elenco di oggetti o proprietà che l'utente ha a disposizione in quel momento.\r\n   * @param fields Array di BaseField aggiunti alla Form\r\n   * @param typedFormula Stringa digitata dall'utente\r\n   * @summary Il metodo imposta i suggerimenti basandosi su 3 casi:\r\n   *  1) l'utente non ha digitato nulla o la stringa digitata dall'utente finisce con uno spazio vuoto\r\n   *  2) la stringa digitata dall'utente finisce con un \".\"\r\n   *  3) la stringa digitata dall'utente non coincide con nessun altro caso sopra (finisce con un carattere qualunque)\r\n   */\r\n  public static GetAutocompleteOptions(\r\n    fields: Array<BaseField>,\r\n    typedFormula: string\r\n  ): Array<{ label: string; value: string }> {\r\n    let autocompleteOptions: Array<{ label: string; value: string }> = [];\r\n\r\n    // Recupero i nomi di tutti i campi creati fino ad ora nella form.\r\n    const availableRecProperties: Array<string> = fields.map((f) =>\r\n      f.Label.split(\" \").join(\"_\")\r\n    );\r\n\r\n    // Nel casi in cui l'utente non ha inserito nulla oppure la stringa finisce con uno spazio vuoto o un simbolo diverso da \".\"\r\n    // (un carattere non alfanumerico) imposto come suggerimenti solo \"rec\" e \"ctx\", ovvero gli unici due oggetti a cui l'utente ha accesso.\r\n    if (\r\n      !typedFormula ||\r\n      (!typedFormula.endsWith(\".\") &&\r\n        new RegExp(\"[^0-9a-zA-Z_]\").test(\r\n          typedFormula.substring(typedFormula.length - 1, typedFormula.length)\r\n        ))\r\n    ) {\r\n      autocompleteOptions = [\r\n        { label: \"rec\", value: (typedFormula ? typedFormula : \"\") + \"rec\" },\r\n        { label: \"ctx\", value: (typedFormula ? typedFormula : \"\") + \"ctx\" },\r\n      ];\r\n    }\r\n    // Se la stringa finisce con un \".\" vuol dire che l'utente sta cercando di accedere ad una proprietà di un oggetto\r\n    // a sua disposizione. Recupero il nome dell'ultimo oggetto digitato dall'utente e se l'oggetto scelto è \"rec\" o \"ctx\"\r\n    // allora suggerisco le proprietà che esistono all'interno di questi oggetti altrimenti non mostro nulla.\r\n    else if (typedFormula.endsWith(\".\")) {\r\n      const formulaPieces: Array<string> = typedFormula\r\n        .split(\" \")\r\n      [typedFormula.split(\" \").length - 1].split(\".\");\r\n      if (formulaPieces[formulaPieces.length - 2] === \"rec\") {\r\n        autocompleteOptions = availableRecProperties.map((f) => {\r\n          return { label: f, value: typedFormula + f };\r\n        });\r\n      } else if (formulaPieces[formulaPieces.length - 2] === \"ctx\") {\r\n        autocompleteOptions = Object.keys(UtilityHelperService.context).map(\r\n          (f) => {\r\n            return { label: f, value: typedFormula + f };\r\n          }\r\n        );\r\n      } else if (\r\n        formulaPieces.length > 2 &&\r\n        formulaPieces[formulaPieces.length - 3] === \"ctx\" &&\r\n        formulaPieces[formulaPieces.length - 2] === \"User\"\r\n      ) {\r\n        autocompleteOptions = Object.keys(\r\n          UtilityHelperService.context.User\r\n        ).map((f) => {\r\n          return { label: f, value: typedFormula + f };\r\n        });\r\n      } else {\r\n        autocompleteOptions = [];\r\n      }\r\n    }\r\n    // In tutti gli altri casi, ovvero quando la stringa digitata finisce con un carattere diverso da quelli\r\n    // controllati finora, vuol dire che l'utente sta digitanto il nome di un oggetto, una proprietà o una\r\n    // funzione javascript. Controllo la parola che l'utente sta digitando e se fa parte di uno degli oggetti a disposizione\r\n    // o una proprietà di essi allora suggerisco i possibili match.\r\n    else {\r\n      const availableOptions: Array<{ label: string; value: string }> = [];\r\n\r\n      // Prendo tutti i blocchi di caratteri digitati dall'utente\r\n      const allFormulaWords: Array<string> = typedFormula.split(\" \");\r\n      // Prendo l'ultimo blocco di caratteri digitato dall'utente\r\n      const lastTypedString: string =\r\n        allFormulaWords[allFormulaWords.length - 1];\r\n\r\n      // Se la l'ultima stringa digitata non contiene caratteri speciali allora splitto la stringa\r\n      // sui \".\" e imposto i suggerimenti in base al path della prorpietà che si sta digitando.\r\n      if (!new RegExp(\"[^0-9a-zA-Z_.]\").test(lastTypedString)) {\r\n        const propertyPath = lastTypedString.split(\".\");\r\n        const lastTypedWork = propertyPath[propertyPath.length - 1];\r\n\r\n        let propertiesToCheck: Array<string> = [];\r\n\r\n        if (propertyPath.length == 1) {\r\n          propertiesToCheck = [\"rec\", \"ctx\"];\r\n        } else if (\r\n          propertyPath.length > 1 &&\r\n          propertyPath[propertyPath.length - 2] === \"ctx\"\r\n        ) {\r\n          propertiesToCheck = Object.keys(UtilityHelperService.context);\r\n        } else if (\r\n          propertyPath.length > 2 &&\r\n          propertyPath[propertyPath.length - 3] === \"ctx\" &&\r\n          propertyPath[propertyPath.length - 2] === \"User\"\r\n        ) {\r\n          propertiesToCheck = Object.keys(UtilityHelperService.context.User);\r\n        } else if (\r\n          propertyPath.length > 1 &&\r\n          propertyPath[propertyPath.length - 2] === \"rec\"\r\n        ) {\r\n          propertiesToCheck = availableRecProperties;\r\n        }\r\n\r\n        // Eseguo il controllo sulle proprietà recuperate, aggiungo ai suggerimenti tutti i nomi che iniziano con\r\n        // quello che sta digitando l'utente.\r\n        propertiesToCheck.forEach((prop) => {\r\n          if (prop.startsWith(lastTypedWork)) {\r\n            availableOptions.push({\r\n              label: prop,\r\n              value:\r\n                typedFormula +\r\n                prop.substring(lastTypedWork.length, prop.length),\r\n            });\r\n          }\r\n        });\r\n      }\r\n\r\n      autocompleteOptions = availableOptions;\r\n    }\r\n\r\n    return autocompleteOptions;\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n   * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n   * delle classi di default.\r\n   * @param field BaseField da visualizzare.\r\n   * @returns Restituisce una stringa contenente le classi css da applicare.\r\n   */\r\n  getFieldSyleClass(field: BaseField, showAllFields: boolean = false): string {\r\n\r\n    var colspanvalues = \"\";\r\n    var visibilityvalues = \"\";\r\n    if (field.ColSpanSizes && field.ColSpanSizes.length > 0) {\r\n      colspanvalues = field.ColSpanSizes.map((size) =>\r\n        ColSpanSizesEnum[size].toString()).join(\" \");\r\n    } else {\r\n      colspanvalues = this.getDefaultStyleClass(field, 'align-self-end');\r\n    }\r\n\r\n    if (!field.InListView && !showAllFields) {\r\n      if (field.Invisibility == FieldInvisibilityEnum.NASCOSTO) { visibilityvalues = \"visibility_hidden\"; }\r\n      if (field.Invisibility == FieldInvisibilityEnum[\"NASCOSTO CON AREA VISIBILE\"]) { visibilityvalues = \"visibility_transparent\"; }\r\n    }\r\n\r\n    return colspanvalues + \" \" + visibilityvalues;\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato dall'html per impostare le classi css per visualizzare il campo all'interno della form.\r\n   * Se per il field sono state specificate delle classi allora vengono applcate quelle, altrimenti vengono usate\r\n   * delle classi di default.\r\n   * @param field BaseField da visualizzare.\r\n   * @returns Restituisce una stringa contenente le classi css da applicare.\r\n   */\r\n  getFieldAnswerStyleClass(field: BaseField): string {\r\n\r\n    var colspanvalues = \"\";\r\n    var visibilityvalues = \"\";\r\n\r\n    if (field.AnswerStyle && field.AnswerStyle.ColSpanSizes && field.AnswerStyle.ColSpanSizes.length > 0) {\r\n\r\n      colspanvalues = field.AnswerStyle.ColSpanSizes.map((size) =>\r\n        ColSpanSizesEnum[size].toString()\r\n      ).join(\" \");\r\n    } else {\r\n      colspanvalues = this.getDefaultStyleClass(field, 'align-self-start');\r\n    }\r\n\r\n    if (!field.AnswerStyle.InListView) {\r\n      if (field.AnswerStyle.Invisibility == FieldInvisibilityEnum.NASCOSTO) { visibilityvalues = \"visibility_hidden\"; }\r\n      if (field.AnswerStyle.Invisibility == FieldInvisibilityEnum[\"NASCOSTO CON AREA VISIBILE\"]) { visibilityvalues = \"visibility_transparent\"; }\r\n    }\r\n\r\n    return colspanvalues + \" \" + visibilityvalues;\r\n  }\r\n\r\n  private getDefaultStyleClass(field: BaseField, defaultAlign: string): string {\r\n\r\n    switch (field.FieldType) {\r\n      case FieldTypeEnum[\"Campo di testo\"]:\r\n        //GlobalService.debugLog('Campo di testo')\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Area di testo\"]:\r\n        //GlobalService.debugLog('Area di testo')\r\n        return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Booleano\"]:\r\n        //GlobalService.debugLog('Booleano')\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Data e/o ora\"]:\r\n        //GlobalService.debugLog('Data e/o ora')\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Campo numerico\"]:\r\n        //GlobalService.debugLog('Campo numerico')\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Allegato\"]:\r\n        //GlobalService.debugLog('Allegato')\r\n        if (\r\n          (field as AttachmentField).isMultiAttach ||\r\n          ((field as AttachmentField).MetadataFields &&\r\n            (field as AttachmentField).MetadataFields.length > 0)\r\n        ) {\r\n          return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n        } else {\r\n          return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n        }\r\n      case FieldTypeEnum[\"Immagine\"]:\r\n      //GlobalService.debugLog('Immagine')\r\n      /*\r\n      if (\r\n        (field as ImageField).AttachDefinition.IsMultiAttach ||\r\n        ((field as ImageField).AttachDefinition.MetadataFields &&\r\n          (field as ImageField).AttachDefinition.MetadataFields.length > 0)\r\n      ) {\r\n        return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n      } else {\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      }*/\r\n\r\n      case FieldTypeEnum[\"Elenco generico\"]:\r\n        //GlobalService.debugLog('Elenco generico')\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Lookup\"]:\r\n        //GlobalService.debugLog('Lookup')\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Form di dettaglio\"]:\r\n        //GlobalService.debugLog('Form di dettaglio')\r\n        return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Elenco immagini\"]:\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Etichetta\"]:\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n    }\r\n  }\r\n\r\n  getFieldFilterStyleClass(field: BaseField, numberOfColumns: number): string {\r\n    return this.getDefaultStyleClassWithNumberColumns(field, 'align-self-start', numberOfColumns);\r\n  }\r\n\r\n  private getDefaultStyleClassWithNumberColumns(field: BaseField, defaultAlign: string, numberOfColumns: number): string {\r\n\r\n    var colClassNum = Math.floor(12 / numberOfColumns);\r\n\r\n    switch (field.FieldType) {\r\n      case FieldTypeEnum[\"Campo di testo\"]:\r\n        //GlobalService.debugLog('Campo di testo')\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n      case FieldTypeEnum[\"Area di testo\"]:\r\n        //GlobalService.debugLog('Area di testo')\r\n        return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Booleano\"]:\r\n        //GlobalService.debugLog('Booleano')\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n      case FieldTypeEnum[\"Data e/o ora\"]:\r\n        //GlobalService.debugLog('Data e/o ora')\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n      case FieldTypeEnum[\"Campo numerico\"]:\r\n        //GlobalService.debugLog('Campo numerico')\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n      case FieldTypeEnum[\"Allegato\"]:\r\n        //GlobalService.debugLog('Allegato')\r\n        if (\r\n          (field as AttachmentField).isMultiAttach ||\r\n          ((field as AttachmentField).MetadataFields &&\r\n            (field as AttachmentField).MetadataFields.length > 0)\r\n        ) {\r\n          return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n        } else {\r\n          return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n        }\r\n      case FieldTypeEnum[\"Immagine\"]:\r\n      //GlobalService.debugLog('Immagine')\r\n      /*\r\n      if (\r\n        (field as ImageField).AttachDefinition.IsMultiAttach ||\r\n        ((field as ImageField).AttachDefinition.MetadataFields &&\r\n          (field as ImageField).AttachDefinition.MetadataFields.length > 0)\r\n      ) {\r\n        return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n      } else {\r\n        return \"col-sm-12 col-md-4 col-lg-4 \" + defaultAlign;\r\n      }*/\r\n\r\n      case FieldTypeEnum[\"Elenco generico\"]:\r\n        //GlobalService.debugLog('Elenco generico')\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n      case FieldTypeEnum[\"Lookup\"]:\r\n        //GlobalService.debugLog('Lookup')\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n      case FieldTypeEnum[\"Form di dettaglio\"]:\r\n        //GlobalService.debugLog('Form di dettaglio')\r\n        return \"col-sm-12 col-md-12 col-lg-12 \" + defaultAlign;\r\n      case FieldTypeEnum[\"Elenco immagini\"]:\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n      case FieldTypeEnum[\"Etichetta\"]:\r\n        return \"col-sm-12 col-md-\" + colClassNum + \" col-lg-\" + colClassNum + \" \" + defaultAlign;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per creare il FormGroup che rappresenta una Form a partire dai suoi BaseField.\r\n   * @param formFields Lista dei BaseField che compongono la form.\r\n   * @param record Oggetto di tipo Record che contiene i valori dei campi.\r\n   * @param onlyView Se TRUE disabilita la form per renderla in sola lettura.\r\n   * @param includeCurrentFormInField Se TRUE popola la proprietà FormFormGroup all'interno di ogni BaseField con il FormGroup corrente.\r\n   * @returns Restituisce un FormGroup rappresentate la Form a cui appartengono i BaseField ricevuti in input.\r\n   */\r\n  public CreateFormFormGroup(\r\n    formFields: Array<BaseField>,\r\n    record: Record,\r\n    onlyView = false,\r\n    includeCurrentFormInField = true\r\n  ): UntypedFormGroup {\r\n    // //GlobalService.debugLog(\"formFields\", formFields);\r\n    // //GlobalService.debugLog(\"record\", record);\r\n    // //GlobalService.debugLog(\"onlyView\", onlyView);\r\n    // //GlobalService.debugLog(\"includeCurrentFormInField\", includeCurrentFormInField);\r\n\r\n    const formForm: UntypedFormGroup = this.formBuilder.group([]);\r\n\r\n    formFields.forEach((field) => {\r\n      //   //GlobalService.debugLog(field);\r\n      formForm.addControl(\r\n        field.Name,\r\n        this.createFieldFormControl(field, record)\r\n      );\r\n      if (includeCurrentFormInField) {\r\n        // //GlobalService.debugLog(field);\r\n\r\n        field.FormFormGroup = formForm;\r\n      }\r\n    });\r\n    if (onlyView) {\r\n      formForm.disable();\r\n    }\r\n\r\n    return formForm;\r\n  }\r\n\r\n  /**\r\n   * Funzione per creare e aggiungere al FormGroup rappresentante la form un nuovo FormControl a partire da un Field.\r\n   * In nuovo FormControl avrà il nome del campo passato e verranno impostati i Validators in base al tipo del campo stesso.\r\n   * @param field BaseField per cui creare il FormControl da inserire nel FormGroup dela form.\r\n   */\r\n  /**\r\n   * Validator \"required\" che legge dal record invece che da control.value.\r\n   * Serve per far funzionare la validazione quando il valore viene impostato via formula/ActionButton\r\n   * (che aggiornano record[fieldName] direttamente senza passare dal FormControl).\r\n   */\r\n  private createRecordRequiredValidator(record: Record, fieldName: string): ValidatorFn {\r\n    return (): ValidationErrors | null => {\r\n      const v = record[fieldName];\r\n      const isEmpty = v == null || ((typeof v === 'string' || Array.isArray(v)) && v.length === 0);\r\n      return isEmpty ? { required: true } : null;\r\n    };\r\n  }\r\n\r\n  private createFieldFormControl(\r\n    field: BaseField,\r\n    record: Record\r\n  ): AbstractControl {\r\n    const validators: Array<ValidatorFn> = [];\r\n\r\n    if (field.Required) validators.push(this.createRecordRequiredValidator(record, field.Name));\r\n\r\n    switch (field.FieldType) {\r\n      case FieldTypeEnum[\"Campo di testo\"]:\r\n        if ((field as TextField).MaxLenght) {\r\n          validators.push(Validators.maxLength((field as TextField).MaxLenght));\r\n        }\r\n        if ((field as TextField).MinLenght) {\r\n          validators.push(Validators.minLength((field as TextField).MinLenght));\r\n        }\r\n        switch (Number((field as TextField).TextMask)) {\r\n          case TextMaskEnum.Url:\r\n            validators.push(Validators.pattern(UrlRegex));\r\n            break;\r\n          case TextMaskEnum.Email:\r\n            validators.push(Validators.email);\r\n            break;\r\n          case TextMaskEnum.Telefono:\r\n            validators.push(Validators.pattern(TelRegex));\r\n            break;\r\n        }\r\n        break;\r\n      case FieldTypeEnum[\"Area di testo\"]:\r\n        if ((field as TextareaField).MaxLenght) {\r\n          validators.push(\r\n            Validators.maxLength((field as TextareaField).MaxLenght)\r\n          );\r\n        }\r\n        if ((field as TextareaField).MinLenght) {\r\n          validators.push(\r\n            Validators.minLength((field as TextareaField).MinLenght)\r\n          );\r\n        }\r\n        break;\r\n      case FieldTypeEnum.Allegato:\r\n      case FieldTypeEnum.Immagine:\r\n        if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n        break;\r\n      case FieldTypeEnum[\"Elenco generico\"]:\r\n        if ((field as ListValueField).IsMultiChoiche)\r\n          if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n        break;\r\n      case FieldTypeEnum[\"Elenco immagini\"]:\r\n        if ((field as ImageSelectorField).IsMultiChoiche)\r\n          if (field.Required) validators.push(ArrayValidators.minLenght(1));\r\n        break;\r\n    }\r\n\r\n    return new UntypedFormControl(record[field.Name], validators);\r\n\r\n  }\r\n\r\n  /**\r\n   * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n   * a cui si deve connettere e al token da passare per autenticarsi.\r\n   * @param baseServerUrl Stringa dell'url base del server (es: \"http://localhost:5000\").\r\n   * @param userToken Token dell'utente loggato da usare per autenticarsi se necessario.\r\n   * @returns Resituisce la configurazione completa degli endPoint da usare di default.\r\n   */\r\n  public ConfigureDefaultEndPoints(\r\n    baseServerUrl: string,\r\n    userToken: string\r\n  ): EndPointConfiguration {\r\n    let endPointConfiguration: EndPointConfiguration =\r\n      new EndPointConfiguration(baseServerUrl, userToken);\r\n\r\n    // endPointConfiguration.Records = {\r\n    //   GetByFormIDEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/v1/getall\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.GET,\r\n    //   },\r\n    //   GetAllByEntAndUserIDEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/v1/GetAllByUserID\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.GET,\r\n    //   },\r\n    //   GetByIDEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/v1/getByID\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.GET,\r\n    //   },\r\n    //   SaveEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/v1/save\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.POST,\r\n    //   },\r\n    //   DuplicateEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/v1/duplicate\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.GET,\r\n    //   },\r\n    //   DeleteEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/v1/delete\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.DELETE,\r\n    //   },\r\n    // };\r\n    // endPointConfiguration.Forms = {\r\n    //   GetByIDEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/conf/form\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.GET,\r\n    //   },\r\n    //   GetByIDAndVersionEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/conf/GetByIDAndVersion\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.GET,\r\n    //   },\r\n    //   SaveEndPoint: {\r\n    //     Url: baseServerUrl + \"/api/conf/form\",\r\n    //     Token: userToken,\r\n    //     RequestMethod: RequestMethodEnum.POST,\r\n    //   },\r\n    // };\r\n    return endPointConfiguration;\r\n  }\r\n  /**\r\n   *\r\n   * @param expression prende una stringa in input e verifica che ogni parentesi aperta venga anche chiusa\r\n   * @returns true se le parentesi sono pari e ogni parentesi chiude se stessa, false se mancano parentesi o non vengono chiuse\r\n   */\r\n  public static stringCheckParentesis(expression, required = false) {\r\n    if (expression == undefined || expression == null) {\r\n      return required ? false : true;\r\n    }\r\n    let stack = [];\r\n    let current;\r\n    const matchLookup = {\r\n      \"(\": \")\",\r\n      \"[\": \"]\",\r\n      \"{\": \"}\",\r\n    };\r\n\r\n    for (let i = 0; i < expression.length; i++) {\r\n      current = expression[i]; //easier than writing it over and over\r\n\r\n      if (current === \"(\" || current === \"[\" || current === \"{\") {\r\n        stack.push(current);\r\n      } else if (current === \")\" || current === \"]\" || current === \"}\") {\r\n        const lastBracket = stack.pop();\r\n\r\n        if (matchLookup[lastBracket] !== current) {\r\n          //if the stack is empty, .pop() returns undefined, so this expression is still correct\r\n\r\n          return false; //terminate immediately - no need to continue scanning the string\r\n        }\r\n      }\r\n    }\r\n\r\n    return stack.length === 0; //any elements mean brackets left open\r\n  }\r\n\r\n  /**\r\n   * Metodo che data la configurazione di un endpoint costruisce l'url da chiamare, gli eventuali parametri\r\n   * da passare (nel body o nella rotta) ed effettua la chiamata. Al termine della chiamata esegue le eventuali\r\n   * funzioni di callback (sia in caso di successo che in caso di errore) passate in input.\r\n   * @param endPointData Cofigurazione dell'endpoint da chiamare.\r\n   * @param dynamicModuleParams Array dei parametri aggiunti dal modulo dinamico a quelli già configurati\r\n   * (ad esempio il record o la form da salvare oppure l'ID per recuperare una particolare entità).\r\n   * @param callback Metodo da eseguire in caso di successo dopo la chiamata http.\r\n   * NOTA: in input viene passata la risposta della chiamata stessa.\r\n   * @param errorCallBack Metodo da eseguire in caso di errore dopo la chiamata http.\r\n   * NOTA: in input viene passato l'errore generato della chiamata stessa.\r\n   */\r\n  public RunEndPointCall(\r\n    endPointData: EndPointData,\r\n    dynamicModuleParams: Array<EndPointDataParams> = null,\r\n    callback: (e: Form | Array<Form> | Record | Array<Record> | DynAttachment | Array<DynAttachment> | string | { Form: Form, Warnings: string[], CostCents: number, ElapsedMs: number }) => void = null,\r\n    errorCallBack: (err: unknown) => void = null\r\n  ): void {\r\n    this.spinnerService.addRequestCounter();\r\n\r\n    let url = `${endPointData.Url}`;\r\n    let queryParams: string = null;\r\n    const bodyParams = {\r\n      AdditionalParams: {},\r\n    };\r\n\r\n    //#region mergeParam\r\n    // unisco i dati di default definiti nella configurazione della chiamata con i dati che imposto nella chiamata specifica\r\n    if (endPointData.Params == undefined || endPointData.Params == null) {\r\n      endPointData.Params = [];\r\n    }\r\n    if (dynamicModuleParams == undefined || dynamicModuleParams == null) {\r\n      dynamicModuleParams = [];\r\n    }\r\n\r\n    const mergedParams: Array<EndPointDataParams> = [...endPointData.Params];\r\n\r\n    dynamicModuleParams.forEach((obj) => {\r\n      const existingIndex = mergedParams.findIndex(\r\n        (item) => item.ParamName === obj.ParamName\r\n      );\r\n\r\n      if (existingIndex !== -1) {\r\n        mergedParams[existingIndex].ParamValue = obj.ParamValue;\r\n        mergedParams[existingIndex].ParamType = obj.ParamType;\r\n      } else {\r\n        mergedParams.push(obj);\r\n      }\r\n    });\r\n\r\n    if (mergedParams) {\r\n      mergedParams.forEach((param) => {\r\n        switch (param.ParamType) {\r\n          case ParamTypeEnum[\"Query param\"]: {\r\n            const stringParam: string =\r\n              param.ParamName + \"=\" + param.ParamValue;\r\n            queryParams =\r\n              (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n            break;\r\n          }\r\n          case ParamTypeEnum[\"In route\"]: {\r\n            url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n            break;\r\n          }\r\n          case ParamTypeEnum[\"In Body\"]: {\r\n            bodyParams[param.ParamName] = param.ParamValue;\r\n            break;\r\n          }\r\n        }\r\n      });\r\n    }\r\n    //#endregion mergeParam\r\n\r\n    //#region addDefaultParams\r\n    // Se nella configurazione sono stati definiti parametri da aggiungere alla chiamata questi vengono ciclati\r\n    // e aggiunti nel punto in cui devono essere usati.\r\n    // if (endPointData.Params) {\r\n    //     endPointData.Params.forEach(param => {\r\n    //         switch (param.ParamType) {\r\n    //             case ParamTypeEnum['Query param']: {\r\n    //                 const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n    //                 queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n    //                 break;\r\n    //             }\r\n    //             case ParamTypeEnum['In route']: {\r\n    //                 url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n    //                 break;\r\n    //             }\r\n    //             case ParamTypeEnum['In Body']: {\r\n    //                 bodyParams.AdditionalParams[param.ParamName] = param.ParamValue;\r\n    //                 break;\r\n    //             }\r\n    //         }\r\n    //     });\r\n    // }\r\n    //#endregion addDefaultParams\r\n\r\n    //#region addSpecificParams\r\n    // Se sono stati passati parametri da aggiungere alla chiamata definiti all'interno del modulo dinamico\r\n    // vengono ciclati e aggiunti nel punto in cui devono essere usati dopo quelli definiti nella configurazione.\r\n    // if (dynamicModuleParams) {\r\n    //     dynamicModuleParams.forEach(param => {\r\n    //         switch (param.ParamType) {\r\n    //             case ParamTypeEnum['Query param']: {\r\n    //                 const stringParam: string = param.ParamName + \"=\" + param.ParamValue;\r\n    //                 queryParams = (queryParams == null ? \"\" : queryParams + \"&\") + stringParam;\r\n    //                 break;\r\n    //             }\r\n    //             case ParamTypeEnum['In route']: {\r\n    //                 url = url + (url.endsWith(\"/\") ? \"\" : \"/\") + param.ParamValue;\r\n    //                 break;\r\n    //             }\r\n    //             case ParamTypeEnum['In Body']: {\r\n    //                 bodyParams[param.ParamName] = param.ParamValue;\r\n    //                 break;\r\n    //             }\r\n    //         }\r\n    //     })\r\n    // }\r\n    //#endregion addSpecificParams\r\n\r\n    if (queryParams != null) {\r\n      url =\r\n        (url.endsWith(\"/\") ? url.substring(0, url.length - 1) : url) +\r\n        \"?\" +\r\n        queryParams;\r\n    }\r\n\r\n    this.http\r\n      .request(endPointData.RequestMethod, url, {\r\n        headers: endPointData.Token\r\n          ? { Authorization: endPointData.Token }\r\n          : null,\r\n        body: ![RequestMethodEnum.DELETE, RequestMethodEnum.GET].includes(\r\n          endPointData.RequestMethod\r\n        )\r\n          ? bodyParams\r\n          : null,\r\n      })\r\n      .subscribe(\r\n        (res: Form | Record | Array<Record>) => {\r\n          this.spinnerService.removeRequestCounter();\r\n          if (callback) {\r\n            callback(res);\r\n          }\r\n        },\r\n        (error) => {\r\n          this.spinnerService.removeRequestCounter();\r\n          if (errorCallBack) {\r\n            errorCallBack(error);\r\n          }\r\n          EqpDynamicModuleDialogService.Error(error.message);\r\n          throw new Error(error.message);\r\n          //GlobalService.debugLog(\"RunEndPointCall - subscribe - end\");\r\n        }\r\n      );\r\n\r\n  }\r\n\r\n  /**\r\n   * Variante SSE di RunEndPointCall: legge la risposta come stream text/event-stream.\r\n   * Emette tre callback: onEstimate (stima pre-call SKILLFORK), onResult (payload completo), onError.\r\n   */\r\n  public RunSseEndPointCall(\r\n    endPointData: EndPointData,\r\n    dynamicModuleParams: Array<EndPointDataParams>,\r\n    onEstimate: (estimatedSeconds: number) => void,\r\n    onResult: (res: any) => void,\r\n    onError: (err: any) => void,\r\n    skipSpinner: boolean = false\r\n  ): void {\r\n    if (!skipSpinner) this.spinnerService.addRequestCounter();\r\n\r\n    let url = `${endPointData.Url}`;\r\n    let queryParams: string = null;\r\n    const bodyParams: any = { AdditionalParams: {} };\r\n\r\n    const mergedParams: Array<EndPointDataParams> = [...(endPointData.Params ?? [])];\r\n    (dynamicModuleParams ?? []).forEach((obj) => {\r\n      const existingIndex = mergedParams.findIndex(item => item.ParamName === obj.ParamName);\r\n      if (existingIndex !== -1) {\r\n        mergedParams[existingIndex].ParamValue = obj.ParamValue;\r\n        mergedParams[existingIndex].ParamType = obj.ParamType;\r\n      } else {\r\n        mergedParams.push(obj);\r\n      }\r\n    });\r\n\r\n    mergedParams.forEach((param) => {\r\n      switch (param.ParamType) {\r\n        case ParamTypeEnum['Query param']:\r\n          queryParams = (queryParams ?? '') + (queryParams ? '&' : '') + `${param.ParamName}=${param.ParamValue}`;\r\n          break;\r\n        case ParamTypeEnum['In route']:\r\n          url = url + (url.endsWith('/') ? '' : '/') + param.ParamValue;\r\n          break;\r\n        case ParamTypeEnum['In Body']:\r\n          bodyParams[param.ParamName] = param.ParamValue;\r\n          break;\r\n      }\r\n    });\r\n\r\n    if (queryParams) {\r\n      url = (url.endsWith('/') ? url.slice(0, -1) : url) + '?' + queryParams;\r\n    }\r\n\r\n    const headers: { [key: string]: string } = { 'Content-Type': 'application/json' };\r\n    if (endPointData.Token) headers['Authorization'] = endPointData.Token;\r\n\r\n    let finalized = false;\r\n    const finalize = (fn: () => void) => {\r\n      if (!finalized) {\r\n        finalized = true;\r\n        if (!skipSpinner) this.spinnerService.removeRequestCounter();\r\n        fn();\r\n      }\r\n    };\r\n\r\n    (async () => {\r\n      let response: Response;\r\n      try {\r\n        response = await fetch(url, { method: 'POST', headers, body: JSON.stringify(bodyParams) });\r\n      } catch (err) {\r\n        finalize(() => onError && onError(err));\r\n        return;\r\n      }\r\n\r\n      if (!response.ok) {\r\n        let msg = `Errore HTTP ${response.status}`;\r\n        try { msg = await response.text(); } catch {}\r\n        finalize(() => onError && onError({ message: msg, code: response.status }));\r\n        return;\r\n      }\r\n\r\n      const reader = response.body!.getReader();\r\n      const decoder = new TextDecoder();\r\n      let buffer = '';\r\n\r\n      try {\r\n        while (true) {\r\n          const { done: streamDone, value } = await reader.read();\r\n          if (streamDone) break;\r\n          buffer += decoder.decode(value, { stream: true });\r\n\r\n          const chunks = buffer.split('\\n\\n');\r\n          buffer = chunks.pop()!;\r\n\r\n          for (const chunk of chunks) {\r\n            const lines = chunk.split('\\n');\r\n            const eventType = lines.find(l => l.startsWith('event:'))?.slice(6).trim();\r\n            const data = lines.find(l => l.startsWith('data:'))?.slice(5).trim();\r\n            if (!eventType || !data) continue;\r\n\r\n            try {\r\n              const payload = JSON.parse(data);\r\n              if (eventType === 'estimate') {\r\n                onEstimate && onEstimate(payload.estimatedExecutionSeconds);\r\n              } else if (eventType === 'result') {\r\n                finalize(() => onResult && onResult(payload));\r\n              } else if (eventType === 'error') {\r\n                finalize(() => onError && onError({ message: payload.message, code: payload.code }));\r\n              }\r\n            } catch {}\r\n          }\r\n        }\r\n      } catch (err) {\r\n        finalize(() => onError && onError(err));\r\n      }\r\n    })();\r\n  }\r\n\r\n\r\n  static base64ToBlob(b64Data, contentType = '', sliceSize = 512) {\r\n    let byteCharacters = atob(b64Data);\r\n    let byteArrays = [];\r\n\r\n    for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n      let slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n      let byteNumbers = new Array(slice.length);\r\n      for (let i = 0; i < slice.length; i++) {\r\n        byteNumbers[i] = slice.charCodeAt(i);\r\n      }\r\n\r\n      let byteArray = new Uint8Array(byteNumbers);\r\n      byteArrays.push(byteArray);\r\n    }\r\n\r\n    let blob = new Blob(byteArrays, { type: contentType });\r\n    return blob;\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n\r\n  /* utilizzati in TMED ->*/\r\n\r\n  public static parseValueString(field, record) {\r\n    var output = null;\r\n    if (field.Formula) {\r\n      output = {};\r\n      const temp: string = UtilityHelperService.EvaluateFieldFormula(field.Formula, record, null);\r\n      output = GlobalService.stringToValuePairs(temp);\r\n    } else if (field.ValuePairs != null) {\r\n      output = field.ValuePairs;\r\n    } else if (field.ValueString != null && field.ValueString != \"\") {\r\n      output = GlobalService.stringToValuePairs(field.ValueString);\r\n    }\r\n\r\n    return output;\r\n  }\r\n\r\n\r\n  /*<-*/\r\n\r\n}\r\n","export enum DynamicModuleFilterResultViewModeEnum {\r\n    EXTERNAL_ONLY = 0,\r\n    INTERNAL_LISTVIEW = 1,\r\n    INTERNAL_EQPTABLE = 2,\r\n    FILTERS_ONLY = 3,\r\n    FILTERS_ONLY_WITH_XY = 4\r\n}","export class Record {\r\n    ID: string;\r\n    EntID: string;\r\n    Version: number;\r\n    userID: string;\r\n    AnswerDate: string;\r\n    HTMLreadableValues: string;\r\n    AdditionalParams: any;\r\n    AdditionalInfo: any;\r\n    [key: string]: any;\r\n    FK_InsertUser: any; // int o string\r\n    InsertDate: Date;\r\n    FK_UpdateUser: any; // int o string\r\n    UpdateDate: Date;\r\n}\r\n\r\nexport class DynRecord {\r\n    ID: string;\r\n    EntID: string;\r\n    Version: number;\r\n    userID: string;\r\n    Values: { [key: string]: any; } = {};\r\n    SerializedValues: string;\r\n    HTMLreadableValues: string;\r\n    AnswerDate: string;\r\n    AdditionalParams: string;\r\n    AdditionalInfo: any;\r\n    PrefilterParams: string;\r\n    FK_InsertUser: any; // int o string\r\n    InsertDate: Date;\r\n    FK_UpdateUser: any; // int o string\r\n    UpdateDate: Date;\r\n}\r\n\r\nexport class RecordButton {\r\n\tpublic icon: string;\r\n\tpublic text: string;\r\n\tpublic visible: boolean;\r\n\tpublic fn: Function;\r\n\tpublic extraClass: string; \r\n}","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class DateFieldStyleCSS {\r\n    // Contenitore esterno (wrapper #uid)\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerFocused?: string;\r\n    ContainerNotValid?: string;\r\n    ContainerReadonly?: string;\r\n    // Label / descrizione\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    DescrizioneFocused?: string;\r\n    DescrizioneNotValid?: string;\r\n    DescrizioneReadonly?: string;\r\n    // Contenitore interno (containerStyle del tmw-datetimepicker)\r\n    ContenitoreInternoNormale?: string;\r\n    ContenitoreInternoMouseover?: string;\r\n    ContenitoreInternoFocused?: string;\r\n    ContenitoreInternoNotValid?: string;\r\n    ContenitoreInternoReadonly?: string;\r\n    // Casella di testo (inputStyle del tmw-datetimepicker)\r\n    CampoDataNormale?: string;\r\n    CampoDataMouseover?: string;\r\n    CampoDataFocused?: string;\r\n    CampoDataNotValid?: string;\r\n    CampoDataReadonly?: string;\r\n    // Bottone calendario (calendarButtonStyle del tmw-datetimepicker)\r\n    IconaCalendarioNormale?: string;\r\n    IconaCalendarioMouseover?: string;\r\n    IconaCalendarioFocused?: string;\r\n    IconaCalendarioNotValid?: string;\r\n    IconaCalendarioReadonly?: string;\r\n    // Bottone orologio (clockButtonStyle del tmw-datetimepicker)\r\n    IconaOrologioNormale?: string;\r\n    IconaOrologioMouseover?: string;\r\n    IconaOrologioFocused?: string;\r\n    IconaOrologioNotValid?: string;\r\n    IconaOrologioReadonly?: string;\r\n    // Bottone cancellazione (closeButtonStyle del tmw-datetimepicker)\r\n    IconaCancellazioneNormale?: string;\r\n    IconaCancellazioneMouseover?: string;\r\n    IconaCancellazioneFocused?: string;\r\n    IconaCancellazioneNotValid?: string;\r\n    IconaCancellazioneReadonly?: string;\r\n    // Tooltip (tooltipStyle del tmw-datetimepicker)\r\n    TooltipNormale?: string;\r\n    TooltipMouseover?: string;\r\n    TooltipFocused?: string;\r\n    TooltipNotValid?: string;\r\n    TooltipReadonly?: string;\r\n}\r\n\r\n/**Rappresenta la configurazione di un campo Data o Data e ora, o solo ora */\r\nexport class DateField extends BaseField {\r\n    IsOnlyDate: DateTimeTypeEnum;\r\n    MinDate: Date;\r\n    MaxDate: Date;\r\n    DateFormat: string = \"dd/MM/YYYY\";\r\n    IconsPosition?: 'left' | 'right';\r\n    CloseIconPosition?: 'left' | 'right';\r\n    UseTooltip?: boolean;\r\n    DateFieldStyleCSS?: DateFieldStyleCSS;\r\n}\r\n\r\nexport enum DateTimeTypeEnum {\r\n    \"Solo data\" = 1,\r\n    \"Solo orario\" = 2,\r\n    \"Data e ora\" = 3\r\n}","import {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  ViewChild,\r\n  Output,\r\n  EventEmitter,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  ChangeDetectorRef,\r\n} from \"@angular/core\";\r\nimport {\r\n  CellAlignmentEnum,\r\n  ConfigColumn,\r\n  TmwTableComponent,\r\n  NumberColumnPipe,\r\n  TypeColumn,\r\n} from \"tmw-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { BaseField, FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport {\r\n  DateField,\r\n  DateTimeTypeEnum,\r\n} from \"../../../../models/fields/dateField.model\";\r\nimport { ListValueField } from \"../../../../models/fields/listValueField.model\";\r\nimport { NumericField } from \"../../../../models/fields/numericField.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport {\r\n  EndPointConfiguration,\r\n  EndPointDataParams,\r\n  ParamTypeEnum,\r\n} from \"../../../../models/endPointConfiguration.model\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\nimport { ActionButton } from '../../../../models/trigger.model';\r\n\r\n\r\n@Component({\r\n  selector: \"list-form-record\",\r\n  templateUrl: \"list-form-record.component.html\",\r\n  styleUrls: [\"./list-form-record.component.scss\"],\r\n})\r\nexport class ListFormRecordComponent implements OnInit, OnChanges {\r\n\r\n  @Input() configurations: DynamicModuleListConfig;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n  // l'una o l'altra per due modalità d'uso\r\n  @Input() formID: string;\r\n  @Input() form: Form = null; // boh ma c'era prima\r\n  @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n  @Input() contestualizationParams: any = null;\r\n\r\n  defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n    new DynamicModuleListFormRecordActionsDefault();\r\n  showTitle = true;\r\n  // values: Array<Record>;\r\n  @ViewChild(\"tableRecords\", { static: true }) tableRecords: TmwTableComponent;\r\n\r\n  columns = new Array<ConfigColumn>();\r\n  loader: boolean = false;\r\n\r\n  @Output() onViewRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() onAddViewEditRecord: EventEmitter<{record: Record;onlyView: boolean;}> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n    \r\n  @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() onAfterDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  constructor(\r\n    private utilityHelperService: UtilityHelperService,\r\n    private changeDetector: ChangeDetectorRef\r\n  ) {}\r\n\r\n  ngOnInit(): void {    \r\n    this.defaultListActions = this.configurations.defaultListActions;\r\n    this.showTitle = this.configurations.showTitle;\r\n    // this.values = this.configurations.values\r\n    GlobalService.debugLog('list-form-record - ngOnInit - configurations', this.configurations);\r\n\r\n    this.getFormByID();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    GlobalService.debugLog('list-form-record - changes', changes);\r\n    // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n    // if (changes['configurations'] != undefined && changes['configurations'].firstChange == false) {\r\n    //   this.configurations.values = changes['configurations'].currentValue;\r\n    //   this.reloadTables();\r\n    // }\r\n  }\r\n\r\n  async getFormByID(id: string = this.formID) {\r\n    GlobalService.debugLog('list-form-record - getFormByID', this.form);\r\n\r\n    if (this.form == null) {\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: id,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      await this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n          this.form = res;\r\n          this.configureColumns();\r\n        },\r\n        (err) => {}\r\n      );\r\n    } else {\r\n      this.configureColumns();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n   * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n   * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n   * a partire dai quali vengono ricreati i Record usati nel client.\r\n   */\r\n  async getRecordsByFormID() {\r\n    try{\r\n      if (\r\n        this.endPointConfiguration &&\r\n        this.endPointConfiguration.Records &&\r\n        this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n      ) {\r\n        let dynamicModuleParams = [\r\n            {\r\n              ParamName: \"EntID\",\r\n              ParamValue: this.form.ID,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ];\r\n        if(this.configurations.userID == null || this.configurations.userID == \"0\"){          \r\n          await this.utilityHelperService.RunEndPointCall(\r\n            this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n            dynamicModuleParams,\r\n            (res: Array<DynRecord>) => {\r\n              // segno anche l'ID dell'utente che risponde\r\n              this.columns.push(\r\n                {\r\n                  key: \"userID\",\r\n                  display: \"Utente\",\r\n                  styles: { flex: \"0 0 6%\" },\r\n                }\r\n              );\r\n              this.loadAnswersAndCreateColumns(res);\r\n            }\r\n          );\r\n        } else {          \r\n          let dynamicModuleParams = [\r\n            {\r\n              ParamName: \"EntID\",\r\n              ParamValue: this.form.ID,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n            {\r\n              ParamName: \"UserID\",\r\n              ParamValue: this.configurations.userID,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            }\r\n          ];\r\n          \r\n          await this.utilityHelperService.RunEndPointCall(\r\n            this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n            dynamicModuleParams,\r\n            (res: Array<DynRecord>) => {\r\n              this.loadAnswersAndCreateColumns(res);\r\n            }\r\n          );\r\n  \r\n        }\r\n      }\r\n    } catch(e){\r\n      console.error('exception', e)\r\n    }\r\n  }\r\n\r\n  /**\r\n   * prende la lista di risposte di un modulo e prepara sia i dati che le colonne da mostrare\r\n   * @param res : lista di risposte di un modulo\r\n   */\r\n  loadAnswersAndCreateColumns(res: Array<DynRecord>){\r\n    this.configurations.values = new Array<Record>();\r\n\r\n    res.forEach((r) => {\r\n      var tmpRec: Record = new Record();\r\n      tmpRec = JSON.parse(r.SerializedValues);\r\n      tmpRec.ID = r.ID;\r\n      tmpRec.EntID = r.EntID;\r\n      tmpRec.Version = r.Version;\r\n      tmpRec.userID = r.userID;\r\n      tmpRec.AnswerDate = r.AnswerDate;\r\n\r\n      var foundkey = true;\r\n\r\n      if (this.contestualizationParams != null){\r\n        if (r.AdditionalParams != null && r.AdditionalParams != \"\"){\r\n          var adp = JSON.parse(r.AdditionalParams);\r\n          Object.keys(this.contestualizationParams).forEach((key) => {\r\n            if (adp == null || !adp.hasOwnProperty(key) || this.contestualizationParams[key].indexOf(adp[key]) == -1){\r\n              foundkey = false;\r\n            }\r\n          });\r\n        }\r\n      }\r\n\r\n      // Se la contestualizzazione è presente e il record è eleggibile, o se non c'è contestualizzazione, aggiunti il record\r\n      if (foundkey){\r\n        this.configurations.values.push(tmpRec);\r\n      }\r\n\r\n    });\r\n\r\n\r\n    \r\n\r\n    this.createAdditionalActions();\r\n    this.createColumnsFromFormFields();\r\n\r\n    this.loader = true;\r\n    setTimeout((_) => {\r\n      this.changeDetector.detectChanges();\r\n    }, 0); // refresh ui\r\n}\r\n\r\n  /**\r\n   * Metodo per configurare le colonne della eqp-table.\r\n   */\r\n  private configureColumns() {\r\n    this.columns = [\r\n      {\r\n        key: \"action\",\r\n        display: \"\",\r\n        type: TypeColumn.MenuAction,\r\n        buttonMenuIcon: \"dots-vertical\",\r\n        styles: { flex: \"0 0 6%\" },\r\n        actions: [],\r\n      },\r\n    ];\r\n\r\n    if (this.defaultListActions.view == true) {\r\n      this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Visualizza\",\r\n          icon: \"info-circle\",\r\n          fn: (element, index, col) => this.viewRecord(element),\r\n        });\r\n    }\r\n    if (this.defaultListActions.edit == true) {\r\n      this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Modifica\",\r\n          icon: \"edit\",\r\n          fn: (element, index, col) => this.viewOrEditRecord(element, false),\r\n        });\r\n    }\r\n    if (this.defaultListActions.duplicate == true) {\r\n      /*this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Duplica\",\r\n          icon: \"file_copy\",\r\n          fn: (element, index, col) => this.duplicateRecord(element),\r\n        });*/\r\n    }\r\n    if (this.defaultListActions.delete == true) {\r\n      this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Elimina\",\r\n          icon: \"trash\",\r\n          fn: (element, index, col) => this.deleteRecord(element),\r\n        });\r\n    }\r\n\r\n    this.externalButtons.forEach((button) => {\r\n      this.columns\r\n      .find((c) => c.key === \"action\")\r\n      .actions.push({\r\n        name: button.text,\r\n        icon: button.icon,\r\n        fn: (element, index, col) => button.fn(),\r\n      });\r\n    });\r\n\r\n    this.getRecordsByFormID();\r\n  }\r\n\r\n  /**\r\n   * Metodo per aggiungere nella colonna \"action\" della eqp-table le azioni sui record\r\n   * definite dall'utente all'interno della Form.\r\n   */\r\n  private createAdditionalActions() {\r\n    GlobalService.debugLog('list-form-record - createAdditionalActions', this.form);\r\n\r\n    if (this.form.ActionsOnRecord && this.form.ActionsOnRecord.length > 0) {\r\n      this.form.ActionsOnRecord.sort((a, b) =>\r\n        a.OrdinalPosition > b.OrdinalPosition\r\n          ? 1\r\n          : b.OrdinalPosition > a.OrdinalPosition\r\n          ? -1\r\n          : 0\r\n      ).forEach((action) => {\r\n        this.columns\r\n          .find((c) => c.key === \"action\")\r\n          .actions.push({\r\n            name: action.Name,\r\n            icon: action.Icon,\r\n            fn: (element, index, col) => {\r\n              const rec = element;\r\n              const ctx = UtilityHelperService.context;\r\n              eval(action.Action);\r\n              // TODO: salvare le modifiche\r\n            },\r\n          });\r\n      });\r\n    }\r\n  }\r\n\r\n  \r\n  /**\r\n   * Metodo per creare la configurazione delle colonne per la eqp-table.\r\n   * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.\r\n   * Le colonne vengono create per i BaseField con il flag InListView a TRUE\r\n   * oppure, nel caso non siano stati specificati i campi da visualizzare,\r\n   * seleziona i primi 6.\r\n   */\r\n  private createColumnsFromFormFields() {\r\n    GlobalService.debugLog('list-form-record - createColumnsFromFormFields', this.form);\r\n\r\n    var fieldsForColumns: Array<BaseField>;\r\n    if (this.form.Fields.find((f) => f.InListView)) {\r\n      fieldsForColumns = this.form.Fields.filter((f) => f.InListView);\r\n    } else {\r\n      fieldsForColumns = this.form.Fields.filter((f) => f.OrdinalPosition < 6);\r\n    }\r\n    fieldsForColumns\r\n      .sort((a, b) =>\r\n        a.OrdinalPosition > b.OrdinalPosition\r\n          ? 1\r\n          : b.OrdinalPosition > a.OrdinalPosition\r\n          ? -1\r\n          : 0\r\n      )\r\n      .forEach((field) => {\r\n        this.columns.push(this.createFieldColumn(field));\r\n      });\r\n      console.log(\"colonne\", this.columns)\r\n  }\r\n\r\n  /**\r\n   * Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.\r\n   * @param field BaseField per cui creare la colonna nella eqp-table\r\n   * @returns Restituisce una ConfigColumn per la eqp-table\r\n   */\r\n  private createFieldColumn(field: BaseField): ConfigColumn {\r\n    var column: ConfigColumn = { key: field.Name, display: field.Label };\r\n    switch (field.FieldType) {\r\n      case FieldTypeEnum[\"Booleano\"]:\r\n        column.type = TypeColumn.Boolean;\r\n        column.booleanValues = {\r\n          false: '<i class=\"fa fa-times error-color\"></i>',\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n        };\r\n        column.styles = {\r\n          flex: \"0 0 7%\",\r\n          cellAlignment: CellAlignmentEnum.CENTER,\r\n        };\r\n        break;\r\n      case FieldTypeEnum[\"Data e/o ora\"]:\r\n        if (\r\n          (field as DateField).IsOnlyDate != DateTimeTypeEnum[\"Solo orario\"]\r\n        ) {\r\n          column.type = TypeColumn.Date;\r\n          if (\r\n            (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Data e ora\"]\r\n          ) {\r\n            column.format = \"dd/MM/yyyy HH:mm\";\r\n          } else if (\r\n            (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Solo data\"]\r\n          ) {\r\n            column.format = (field as DateField).DateFormat\r\n              ? (field as DateField).DateFormat.replace(\"DD\", \"dd\")\r\n              : \"dd/MM/yyyy\";\r\n          }\r\n        }\r\n        break;\r\n      case FieldTypeEnum[\"Campo numerico\"]:\r\n        if ((field as NumericField).CurrencySymbol) {\r\n          column.numberPipe = NumberColumnPipe.CURRENCY;\r\n          column.currencyPipeCode = (field as NumericField).CurrencySymbol;\r\n        } else if (!(field as NumericField).IsInteger) {\r\n          column.numberPipe = NumberColumnPipe.DECIMAL;\r\n        }\r\n        break;\r\n      case FieldTypeEnum[\"Allegato\"]:\r\n        column.value = () => \"Allegato\";\r\n        break;\r\n      case FieldTypeEnum[\"Immagine\"]:\r\n        column.value = () => \"Immagine\";\r\n\r\n      /*\r\n        column.value = (element: Record) => {\r\n          if (\r\n            (field as AttachmentField).IsMultiAttach ||\r\n            ((field as ImageField).AttachDefinition &&\r\n              (field as ImageField).AttachDefinition.IsMultiAttach)\r\n          ) {\r\n            return element[field.Name] != null && element[field.Name].length > 0\r\n              ? (element[field.Name] as Array<IAttachmentDTO>)\r\n                  .map((a) => a.FileName)\r\n                  .join(\", \")\r\n              : null;\r\n          } else {\r\n            return element[field.Name] != null && element[field.Name].length > 0\r\n              ? (element[field.Name] as Array<IAttachmentDTO>)[0].FileName\r\n              : null;\r\n          }\r\n        };\r\n        column.isSortable = false;\r\n        column.isSearchable = false;\r\n      */\r\n     \r\n        break;\r\n      case FieldTypeEnum[\"Elenco generico\"]:\r\n        column.value = (element: Record) => {\r\n          if (!(field as ListValueField).ValuePairs){\r\n            if( (field as ListValueField).ValueString){ \r\n              (field as ListValueField).ValuePairs = GlobalService.stringToValuePairs((field as ListValueField).ValueString);\r\n            }\r\n            if(field.Formula){\r\n              const temp: string = UtilityHelperService.EvaluateFieldFormula(field.Formula, element, \"this.formulaObject\");\r\n              // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n              // dobbiamo ottenere un dizionario di quei valori\r\n              // devo controllare se ci sono cambiamenti nel valuepairs e resettare solamente in quel caso\r\n              (field as ListValueField).ValuePairs = GlobalService.stringToValuePairs(temp);\r\n            }\r\n          }\r\n          if(element[field.Name] ){\r\n            if ((field as ListValueField).IsMultiChoiche) {\r\n              if (!element[field.Name] || element[field.Name].length == 0) {\r\n                return null;\r\n              } else {\r\n                if( (field as ListValueField).ValuePairs){\r\n                  return Object.keys((field as ListValueField).ValuePairs)\r\n                    .filter((k) =>\r\n                      element[field.Name].includes(\r\n                        (field as ListValueField).ValuePairs[k]\r\n                      )\r\n                    )\r\n                    .join(\", \");\r\n                } \r\n              }\r\n            } else {\r\n              return Object.keys((field as ListValueField).ValuePairs).find(\r\n                (k) =>\r\n                  (field as ListValueField).ValuePairs[k] == element[field.Name]\r\n              );\r\n            }\r\n          }\r\n        };\r\n        column.isSortable = false;\r\n        column.isSearchable = false;\r\n        break;\r\n      case FieldTypeEnum[\"Lookup\"]:\r\n        // TODO\r\n        column.value = () => \"Lookup\";\r\n        break;\r\n      default:\r\n        // column.value = () => FieldTypeEnum[field.FieldType];\r\n        break;\r\n    }\r\n\r\n    return column;\r\n  }\r\n\r\n  viewRecord(record: Record){\r\n    this.onViewRecord.emit(record);\r\n  }\r\n  /**\r\n   * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n   * selezionato sulla eqp-table.\r\n   * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n   * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n   */\r\n  private viewOrEditRecord(record: Record, onlyView: boolean) {\r\n    this.onAddViewEditRecord.emit({ record, onlyView });\r\n  }\r\n\r\n  /**\r\n   * Metodo per eliminare un record dalla lista.\r\n   * @param record Record da eliminare selezionato sulla eqp-table.\r\n   */\r\n  deleteRecord(record: Record) {\r\n    this.onDeleteRecord.emit(record);\r\n  }\r\n\r\n  /**\r\n   * Metodo per ricaricare i dati della eqp-table.\r\n   */\r\n  private reloadTables() {\r\n    if (this.tableRecords) {\r\n      this.tableRecords.reloadDatatable();\r\n    }\r\n  }\r\n}\r\n","<mat-card class=\"list-form-record\">\r\n  <mat-card-header class=\"align-items-center justify-content-between\">\r\n    <mat-card-title *ngIf=\"loader && showTitle\">Elenco {{ form.Name }}</mat-card-title>\r\n    <!-- <mat-card-subtitle>Start</mat-card-subtitle> -->\r\n    <mat-card-actions>\r\n      <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n        (click)=\"onAddViewEditRecord.emit(null)\">\r\n        <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\">Aggiungi</span>\r\n      </button>\r\n      <!-- <button mat-button>LIKE</button> -->\r\n      <!-- <button mat-button>SHARE</button> -->\r\n    </mat-card-actions>\r\n  </mat-card-header>\r\n  <mat-card-content>\r\n\r\n    <tmw-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n      [data]=\"configurations.values\" [columns]=\"columns\"></tmw-table>\r\n  </mat-card-content>\r\n  <mat-card-footer>\r\n    <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n  </mat-card-footer>\r\n</mat-card>\r\n\r\n\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n  <div class=\"col-md-6\">\r\n    <h4 *ngIf=\"showTitle\">\r\n      <b>Elenco {{ form.Name }}</b>\r\n    </h4>\r\n  </div>\r\n  <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n    <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n      (click)=\"onAddViewEditRecord.emit(null)\">\r\n      <mat-icon>add</mat-icon>\r\n      <span style=\"margin-left: 10px\">Aggiungi</span>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n  [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->","import { FieldTypeEnum } from \"./baseField.model\";\r\nimport { LogicOperatorBoolean, LogicOperatorDate, LogicOperatorImageSelector, LogicOperatorListValue, LogicOperatorNumeric, LogicOperatorText } from \"./logicOperator.model\";\r\n\r\nexport class Statistic{\r\n    fieldtype:FieldTypeEnum;\r\n    key: string;\r\n    value: string;\r\n    logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate | LogicOperatorImageSelector;\r\n    visible: boolean = false;\r\n    aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum> = null;\r\n    operatorsGroupBy: Array<NumberAggregationFunctionEnum> = null;\r\n}\r\n\r\nexport class FilterStatistic {\r\n    Statistics: Array<Statistic> = new Array<Statistic>();\r\n    PrefilterParams?: any;\r\n    AdditionalParams?: any;\r\n}\r\n\r\nexport enum NumberAggregationFunctionEnum {\r\n  \"COUNT\" = 22,\r\n  \"SUM\" = 23,\r\n  \"AVG\" = 24,\r\n  \"STDEV\" = 25,\r\n  \"MIN\" = 26,\r\n  \"MAX\" = 27,\r\n}\r\n\r\nexport enum NotNumberAggregationFunctionEnum {\r\n  \"COUNT\" = 22,\r\n  \"MIN\" = 26,\r\n  \"MAX\" = 27,\r\n}","import {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  ViewChild,\r\n  Output,\r\n  EventEmitter,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  ChangeDetectorRef,\r\n} from \"@angular/core\";\r\nimport {\r\n  ConfigColumn,\r\n  TmwTableComponent,\r\n  TypeColumn,\r\n} from \"tmw-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { BaseField, FieldTypeEnum, AnswerStyle } from '../../../../models/baseField.model';\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport {\r\n  DateField,\r\n  DateTimeTypeEnum,\r\n} from \"../../../../models/fields/dateField.model\";\r\nimport { ListValueField } from \"../../../../models/fields/listValueField.model\";\r\nimport { NumericField } from \"../../../../models/fields/numericField.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport {\r\n  EndPointConfiguration,\r\n  EndPointDataParams,\r\n  ParamTypeEnum,\r\n} from \"../../../../models/endPointConfiguration.model\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\nimport { ModeEnum } from \"tmw-picker\";\r\nimport { ImageSelectorField } from \"../../../../models/fields/imageSelectorField.model\";\r\nimport { DynAttachment } from \"../../../../models/dynAttachment\";\r\nimport { DatePipe } from \"@angular/common\";\r\nimport { ActionButton } from '../../../../models/trigger.model';\r\nimport { NumberAggregationFunctionEnum } from '../../../../models/statistic.model';\r\n\r\n\r\n@Component({\r\n  selector: \"hlist-form-record\",\r\n  templateUrl: \"hlist-form-record.component.html\",\r\n  styleUrls: [\"./hlist-form-record.component.scss\"],\r\n})\r\nexport class HListFormRecordComponent implements OnInit, OnChanges {\r\n  @Input() configurations: DynamicModuleListConfig;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n  // l'una o l'altra per due modalità d'uso\r\n  @Input() formID: string;\r\n  @Input() form: Form = null; // boh ma c'era prima\r\n  @Input() formulaObject: any = {};\r\n  @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n\r\n  defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n    new DynamicModuleListFormRecordActionsDefault();\r\n  showTitle = true;\r\n  @ViewChild(\"tableRecords\", { static: true }) tableRecords: TmwTableComponent;\r\n\r\n  columns = new Array<ConfigColumn>();\r\n  loadedFilters: boolean = false;\r\n  loadedTable: boolean = false;\r\n\r\n  @Output() onViewRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() onAddViewEditRecord: EventEmitter<{ record: Record; onlyView: boolean; }> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n\r\n  @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() onAfterDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  modes = ModeEnum;\r\n  minDate = new Date();\r\n  maxDate = new Date();\r\n\r\n  // le proprietà della risposta da stampare nelle righe\r\n  properties = [];\r\n  // le label associate alle proprietà da stampare che condividono lo stesso indice\r\n  propertiesLabel = [];\r\n  selectedProperties: string[];\r\n\r\n  // i dati delle risposte da stampare\r\n  filteredAnswers //le risposte filtrate \r\n\r\n  // Colonne da visualizzare (fissa la prima colonna e genera dinamicamente le altre)\r\n  displayedColumns = [];\r\n  existingAggregations: Array<NumberAggregationFunctionEnum> = null;\r\n  numberAggregationFunctionEnum = NumberAggregationFunctionEnum;\r\n\r\n  //#region Constructor\r\n  constructor(\r\n    private utilityHelperService: UtilityHelperService,\r\n    private changeDetector: ChangeDetectorRef,\r\n    private datepipe: DatePipe\r\n  ) {\r\n    // this.propertiesLabel[\"AnswerDate\"] = \"Data\";\r\n  }\r\n  //#endregion Constructor\r\n\r\n  //#region ngOnIntit\r\n  ngOnInit(): void {\r\n    this.defaultListActions = this.configurations.defaultListActions;\r\n    this.showTitle = this.configurations.showTitle;\r\n    GlobalService.debugLog('list-form-record - ngOnInit - configurations', this.configurations);\r\n\r\n    this.getFormByID();\r\n  }\r\n  //#endregion ngOnIntit\r\n\r\n  //#region ngOnChanges\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    GlobalService.debugLog('list-form-record - changes', changes);\r\n    // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n    // if (changes['configurations'] != undefined && changes['configurations'].firstChange == false) {\r\n    //   this.configurations.values = changes['configurations'].currentValue;\r\n    //   this.reloadTables();\r\n    // }\r\n  }\r\n  //#endregion ngOnChanges\r\n\r\n  //#region getFormByID\r\n  async getFormByID(id: string = this.formID) {\r\n    GlobalService.debugLog('list-form-record - getFormByID', this.form);\r\n\r\n    if (this.form == null) {\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: id,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      await this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n          this.form = res;\r\n          this.configureColumns();\r\n        },\r\n        (err) => { }\r\n      );\r\n    } else {\r\n      this.configureColumns();\r\n    }\r\n  }\r\n  //#endregion getFormByID\r\n\r\n  //#region getRecordsByFormID\r\n  /**\r\n   * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n   * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n   * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n   * a partire dai quali vengono ricreati i Record usati nel client.\r\n   */\r\n  async getRecordsByFormID() {\r\n    /**\r\n     * prende le risposte e le rende piatte, adatte a diventare una riga da tabella\r\n     * mette tutte le risposte nelle strutture necessarie per il recupero e la visualizzazione\r\n     * @param answers \r\n     */\r\n    const rearrangeAnswersAndPopulateLists = (answers) => {\r\n      this.configurations.values = new Array<Record>();\r\n      answers.forEach((answer) => {\r\n        var tmpRec: Record = new Record();\r\n        tmpRec = JSON.parse(answer.SerializedValues);\r\n        tmpRec.ID = answer.ID;\r\n        tmpRec.EntID = answer.EntID;\r\n        tmpRec.Version = answer.Version;\r\n        tmpRec.userID = answer.userID;\r\n        tmpRec.AnswerDate = answer.AnswerDate;\r\n        this.configurations.values.push(tmpRec);\r\n      });\r\n    }\r\n\r\n    /**\r\n     * prepara la lista delle colonne da mostrare (una per ogni risposta, più la colonna delle proprietà)\r\n     * imposta la lista delle risposte da visualizzare\r\n     * libera le variabili di caricamento per mostrare i contenuti della vista\r\n     */\r\n    const nameColumnsAndStartView = () => {\r\n      //destruttura l'array risposte e per ogni risposta genera un elemento col[i]\r\n      this.displayedColumns = [\"property\", ...this.configurations.values.map((_, i) => `col${i}`)];\r\n      this.filteredAnswers = this.configurations.values;\r\n      this.setMinMaxDates();\r\n\r\n      this.loadedFilters = true;\r\n      this.loadedTable = true;\r\n      setTimeout((_) => {\r\n        this.changeDetector.detectChanges();\r\n      }, 0); // refresh ui\r\n    }\r\n\r\n    if (this.configurations.values) {\r\n      // vengo da un'altra visualizzazione che ha già recuperato le risposte\r\n      GlobalService.debugLog(\"hList - getRecordsByFormID A\", this.configurations)\r\n      nameColumnsAndStartView();\r\n    } else {\r\n      // sono in una nuova istanza in cui devo recuperare le risposte\r\n      GlobalService.debugLog(\"hList - getRecordsByFormID B\", this.configurations)\r\n      try {\r\n        if (\r\n          this.endPointConfiguration &&\r\n          this.endPointConfiguration.Records &&\r\n          this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n        ) {\r\n          let dynamicModuleParams = [\r\n            {\r\n              ParamName: \"EntID\",\r\n              ParamValue: this.form.ID,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ];\r\n          if (this.configurations.userID == null) {\r\n            // non ho specificato un utente\r\n            // vedo tutte le risposte del modulo\r\n            await this.utilityHelperService.RunEndPointCall(\r\n              this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n              dynamicModuleParams,\r\n              (res: Array<DynRecord>) => {\r\n                rearrangeAnswersAndPopulateLists(res);\r\n                nameColumnsAndStartView();\r\n              }\r\n            );\r\n          } else {\r\n            // conosco l'utente\r\n            // voglio solamente le sue risposte\r\n            dynamicModuleParams.push(\r\n              {\r\n                ParamName: \"UserID\",\r\n                ParamValue: this.configurations.userID,\r\n                ParamType: ParamTypeEnum[\"Query param\"],\r\n              });\r\n            await this.utilityHelperService.RunEndPointCall(\r\n              this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n              dynamicModuleParams,\r\n              (res: Array<DynRecord>) => {\r\n                rearrangeAnswersAndPopulateLists(res);\r\n                nameColumnsAndStartView();\r\n              }\r\n            );\r\n\r\n          }\r\n        }\r\n      } catch (e) {\r\n        console.error('exception', e)\r\n      }\r\n    }\r\n  }\r\n  //#endregion getRecordsByFormID\r\n\r\n\r\n  //#region configureColumns\r\n  /**\r\n   * Metodo per configurare le colonne della eqp-table.\r\n   */\r\n  private configureColumns() {\r\n    this.columns = [\r\n      {\r\n        key: \"action\",\r\n        display: \"\",\r\n        type: TypeColumn.MenuAction,\r\n        buttonMenuIcon: \"dots-vertical\",\r\n        styles: { flex: \"0 0 6%\" },\r\n        actions: [],\r\n      },\r\n    ];\r\n\r\n    if (this.defaultListActions.view == true) {\r\n      this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Visualizza\",\r\n          icon: \"info-circle\",\r\n          fn: (element, index, col) => this.viewRecord(element),\r\n        });\r\n    }\r\n    if (this.defaultListActions.edit == true) {\r\n      this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Modifica\",\r\n          icon: \"edit\",\r\n          fn: (element, index, col) => this.viewOrEditRecord(element, false),\r\n        });\r\n    }\r\n    if (this.defaultListActions.duplicate == true) {\r\n      /*this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Duplica\",\r\n          icon: \"file_copy\",\r\n          fn: (element, index, col) => this.duplicateRecord(element),\r\n        });*/\r\n    }\r\n    if (this.defaultListActions.delete == true) {\r\n      this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: \"Elimina\",\r\n          icon: \"trash\",\r\n          fn: (element, index, col) => this.deleteRecord(element),\r\n        });\r\n    }\r\n\r\n    this.externalButtons.forEach((button) => {\r\n      this.columns\r\n        .find((c) => c.key === \"action\")\r\n        .actions.push({\r\n          name: button.text,\r\n          icon: button.icon,\r\n          fn: (element, index, col) => button.fn(),\r\n        });\r\n    });\r\n\r\n    this.createAdditionalActions();\r\n    this.createColumnsFromFormFields();\r\n    this.getRecordsByFormID();\r\n  }\r\n  //#endregion configureColumns\r\n\r\n  //#region createAdditionalActions\r\n  /**\r\n   * Metodo per aggiungere nella colonna \"action\" della eqp-table le azioni sui record\r\n   * definite dall'utente all'interno della Form.\r\n   */\r\n  private createAdditionalActions() {\r\n    GlobalService.debugLog('list-form-record - createAdditionalActions', this.form);\r\n\r\n    if (this.form.ActionsOnRecord && this.form.ActionsOnRecord.length > 0) {\r\n      this.form.ActionsOnRecord.sort((a, b) =>\r\n        a.OrdinalPosition > b.OrdinalPosition\r\n          ? 1\r\n          : b.OrdinalPosition > a.OrdinalPosition\r\n            ? -1\r\n            : 0\r\n      ).forEach((action) => {\r\n        this.columns\r\n          .find((c) => c.key === \"action\")\r\n          .actions.push({\r\n            name: action.Name,\r\n            icon: action.Icon,\r\n            fn: (element, index, col) => {\r\n              const rec = element;\r\n              const ctx = UtilityHelperService.context;\r\n              eval(action.Action);\r\n              // TODO: salvare le modifiche\r\n            },\r\n          });\r\n      });\r\n    }\r\n  }\r\n  //#endregion createAdditionalActions\r\n\r\n\r\n  //#region createColumnsFromFormFields\r\n  /**\r\n   * Metodo per creare la configurazione delle colonne per la eqp-table.\r\n   * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.\r\n   * Le colonne vengono create per i BaseField con il flag InListView a TRUE\r\n   * oppure, nel caso non siano stati specificati i campi da visualizzare,\r\n   * seleziona i primi 6.\r\n   */\r\n  private createColumnsFromFormFields() {\r\n    GlobalService.debugLog('list-form-record - createColumnsFromFormFields', this.form);\r\n\r\n    var fieldsForColumns: Array<BaseField>;\r\n    fieldsForColumns = this.form.Fields.filter((f) => {\r\n      //nascondere campi etichetta\r\n      if(f.FieldType == FieldTypeEnum[\"Etichetta\"]){\r\n        return false;\r\n      }\r\n      if (f.AnswerStyle) {\r\n        return f.AnswerStyle.InListView;\r\n      } else {\r\n        return f.InListView;\r\n      }\r\n    });\r\n\r\n    this.existingAggregations = [];\r\n\r\n    fieldsForColumns\r\n      .sort((a, b) =>\r\n        a.OrdinalPosition > b.OrdinalPosition\r\n          ? 1\r\n          : b.OrdinalPosition > a.OrdinalPosition\r\n            ? -1\r\n            : 0\r\n      )\r\n      .forEach((field) => {\r\n        \r\n        // this.columns.push(this.createFieldColumn(field));\r\n        this.properties.push({ label: field.Label, type: field.FieldType, config: field });\r\n        this.propertiesLabel[field.Label] = field.Description;\r\n\r\n        if (field.Aggregations != null && field.Aggregations.length > 0 ){\r\n          field.Aggregations.forEach((aggregation) => {  \r\n            if (this.existingAggregations.indexOf(aggregation) == -1){\r\n              this.existingAggregations.push(aggregation);\r\n              //this.propertiesLabel[NumberAggregationFunctionEnum[aggregation].toString().toUpperCase()] = \r\n            }\r\n          }); \r\n        }\r\n\r\n        \r\n\r\n      });\r\n      \r\n    this.selectedProperties = this.properties;\r\n\r\n  }\r\n  //#endregion createColumnsFromFormFields\r\n\r\n  //#region createFieldColumn\r\n  /**\r\n   * Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.\r\n   * @param field BaseField per cui creare la colonna nella eqp-table\r\n   * @returns Restituisce una ConfigColumn per la eqp-table\r\n   */\r\n  // private createFieldColumn(field: BaseField): ConfigColumn {\r\n  //   var column: ConfigColumn = { key: field.Name, display: field.Label };\r\n  //   switch (field.FieldType) {\r\n  //     case FieldTypeEnum[\"Booleano\"]:\r\n  //       column.type = TypeColumn.Boolean;\r\n  //       column.booleanValues = {\r\n  //         false: '<i class=\"fa fa-times error-color\"></i>',\r\n  //         true: '<i class=\"fa fa-check success-color\"></i>',\r\n  //       };\r\n  //       column.styles = {\r\n  //         flex: \"0 0 7%\",\r\n  //         cellAlignment: CellAlignmentEnum.CENTER,\r\n  //       };\r\n  //       break;\r\n  //     case FieldTypeEnum[\"Data e/o ora\"]:\r\n  //       if (\r\n  //         (field as DateField).IsOnlyDate != DateTimeTypeEnum[\"Solo orario\"]\r\n  //       ) {\r\n  //         column.type = TypeColumn.Date;\r\n  //         if (\r\n  //           (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Data e ora\"]\r\n  //         ) {\r\n  //           column.format = \"dd/MM/yyyy HH:mm\";\r\n  //         } else if (\r\n  //           (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Solo data\"]\r\n  //         ) {\r\n  //           column.format = (field as DateField).DateFormat\r\n  //             ? (field as DateField).DateFormat.replace(\"DD\", \"dd\")\r\n  //             : \"dd/MM/yyyy\";\r\n  //         }\r\n  //       }\r\n  //       break;\r\n  //     case FieldTypeEnum[\"Campo numerico\"]:\r\n  //       if ((field as NumericField).CurrencySymbol) {\r\n  //         column.numberPipe = NumberColumnPipe.CURRENCY;\r\n  //         column.currencyPipeCode = (field as NumericField).CurrencySymbol;\r\n  //       } else if (!(field as NumericField).IsInteger) {\r\n  //         column.numberPipe = NumberColumnPipe.DECIMAL;\r\n  //       }\r\n  //       break;\r\n  //     case FieldTypeEnum[\"Allegato\"]:\r\n  //     case FieldTypeEnum[\"Immagine\"]:\r\n\r\n  //       /*\r\n  //         column.value = (element: Record) => {\r\n  //           if (\r\n  //             (field as AttachmentField).IsMultiAttach ||\r\n  //             ((field as ImageField).AttachDefinition &&\r\n  //               (field as ImageField).AttachDefinition.IsMultiAttach)\r\n  //           ) {\r\n  //             return element[field.Name] != null && element[field.Name].length > 0\r\n  //               ? (element[field.Name] as Array<IAttachmentDTO>)\r\n  //                   .map((a) => a.FileName)\r\n  //                   .join(\", \")\r\n  //               : null;\r\n  //           } else {\r\n  //             return element[field.Name] != null && element[field.Name].length > 0\r\n  //               ? (element[field.Name] as Array<IAttachmentDTO>)[0].FileName\r\n  //               : null;\r\n  //           }\r\n  //         };\r\n  //         column.isSortable = false;\r\n  //         column.isSearchable = false;\r\n  //       */\r\n\r\n  //       break;\r\n  //     case FieldTypeEnum[\"Elenco generico\"]:\r\n  //       column.value = (element: Record) => {\r\n  //         if ((field as ListValueField).IsMultiChoiche) {\r\n  //           if (!element[field.Name] || element[field.Name].length == 0) {\r\n  //             return null;\r\n  //           } else {\r\n  //             return Object.keys((field as ListValueField).ValuePairs)\r\n  //               .filter((k) =>\r\n  //                 element[field.Name].includes(\r\n  //                   (field as ListValueField).ValuePairs[k]\r\n  //                 )\r\n  //               )\r\n  //               .join(\", \");\r\n  //           }\r\n  //         } else {\r\n  //           return Object.keys((field as ListValueField).ValuePairs).find(\r\n  //             (k) =>\r\n  //               (field as ListValueField).ValuePairs[k] == element[field.Name]\r\n  //           );\r\n  //         }\r\n  //       };\r\n  //       column.isSortable = false;\r\n  //       column.isSearchable = false;\r\n  //       break;\r\n  //     case FieldTypeEnum[\"Lookup\"]:\r\n  //       // TODO\r\n  //       break;\r\n  //   }\r\n  //   return column;\r\n  // }\r\n  //#endregion createFieldColumn\r\n\r\n  //#region viewRecord\r\n  viewRecord(record: Record) {\r\n    this.onViewRecord.emit(record);\r\n  }\r\n  //#endregion viewRecord\r\n\r\n  /**\r\n   * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n   * selezionato sulla eqp-table.\r\n   * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n   * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n   */\r\n  private viewOrEditRecord(record: Record, onlyView: boolean) {\r\n    this.onAddViewEditRecord.emit({ record, onlyView });\r\n  }\r\n\r\n  /**\r\n   * Metodo per eliminare un record dalla lista.\r\n   * @param record Record da eliminare selezionato sulla eqp-table.\r\n   */\r\n  deleteRecord(record: Record) {\r\n    this.onDeleteRecord.emit(record);\r\n  }\r\n\r\n  /**\r\n   * Metodo per ricaricare i dati della eqp-table.\r\n   */\r\n  private reloadTables() {\r\n    if (this.tableRecords) {\r\n      this.tableRecords.reloadDatatable();\r\n    }\r\n  }\r\n\r\n  //#region onSelectionChange\r\n  /**\r\n   * Funzione che viene chiamata al cambio di selezione dei parametri da mostrare\r\n   * aggiorna la lista delle proprietà selezionate che gestisce le righe mostrate per ogni risposta\r\n   * @param selectedProperties \r\n   */\r\n  onSelectionChange(selectedProperties) {\r\n    GlobalService.debugLog(\"onSelectionChange selectedProperties.value\",selectedProperties.value);\r\n    if (selectedProperties.value.length > 0) {\r\n      this.selectedProperties = selectedProperties.value;\r\n    } else {\r\n      this.selectedProperties = this.properties;\r\n    }\r\n    GlobalService.debugLog(\"this.selectedProperties assegnata\",this.selectedProperties);\r\n  }\r\n  //#endregion onSelectionChange\r\n\r\n  //#region filterDataAnswers\r\n  /**\r\n   * funzione che filtra le risposte in base al range di date basandosi sul campo fisso AnswerDate per il paragone\r\n   */\r\n  filterDataAnswers() {\r\n    setTimeout(() => {\r\n      this.filteredAnswers = [];\r\n\r\n      if(!this.minDate){\r\n        // Converto le date di AnswerDate in oggetti Date e ordino\r\n        const dates = this.configurations.values.map(value => new Date(value.AnswerDate));    \r\n        // Trovo la data più recente (max) e la più vecchia (min)\r\n        this.minDate = new Date(Math.min(...dates.map(date => date.getTime())));\r\n      }\r\n\r\n      if(!this.maxDate){\r\n        // Converto le date di AnswerDate in oggetti Date e ordino\r\n        const dates = this.configurations.values.map(value => new Date(value.AnswerDate));    \r\n        // Trovo la data più recente (max) e la più vecchia (min)\r\n        this.maxDate = new Date(Math.max(...dates.map(date => date.getTime())));\r\n      }\r\n      this.maxDate.setHours(23, 59, 59, 59);\r\n\r\n      this.filteredAnswers = this.configurations.values.filter( value => new Date(value.AnswerDate) >= this.minDate && new Date(value.AnswerDate) <= this.maxDate);\r\n\r\n      if (this.existingAggregations != null && this.existingAggregations.length > 0){\r\n            this.existingAggregations.forEach((aggregation) => {\r\n              var record = JSON.parse(JSON.stringify(this.filteredAnswers[0]));\r\n              record.ID = \"0\";\r\n              record.AnswerDate = NumberAggregationFunctionEnum[aggregation].toString().toUpperCase();\r\n              this.filteredAnswers.push(record);\r\n            });\r\n\r\n            this.fillAggregationColumns();\r\n      }\r\n\r\n\r\n      this.displayedColumns = [\"property\", ...this.filteredAnswers.map((_, i) => `col${i}`)];\r\n\r\n    }, 100);\r\n  }\r\n  //#endregion filterDataAnswers\r\n\r\n  //#region setMinMaxDates\r\n  // Funzione per ottenere la data più recente e quella più vecchia\r\n  setMinMaxDates() {\r\n    // Converto le date di AnswerDate in oggetti Date e ordino\r\n    const dates = this.configurations.values.map(value => new Date(value.AnswerDate));\r\n\r\n    // Trovo la data più recente (max) e la più vecchia (min)\r\n    this.minDate = new Date(Math.min(...dates.map(date => date.getTime())));\r\n    this.maxDate = new Date(Math.max(...dates.map(date => date.getTime())));\r\n  }\r\n  //#endregion setMinMaxDates\r\n\r\n  //#region fillAggregationColumns\r\n  fillAggregationColumns(){\r\n    this.filteredAnswers.filter(x => x.ID == '0').forEach((aggrCol) => {\r\n      Object.keys(aggrCol).forEach((key) => {\r\n\r\n        //if (key != \"AnswerDate\"){ aggrCol[key] = \"\"; }\r\n\r\n        var field = this.form.Fields.find(x => x.Label == key);\r\n        if (field == null){ return; }\r\n        var aggregations: any = field.Aggregations;\r\n\r\n        if (aggregations != null){\r\n          if (aggrCol.AnswerDate == \"COUNT\" && aggregations.indexOf(NumberAggregationFunctionEnum[\"COUNT\"]) != -1){ \r\n            aggrCol[key] = this.filteredAnswers.filter(x => x.ID != '0').length;          \r\n          }\r\n          else if (aggrCol.AnswerDate == \"SUM\" && aggregations.indexOf(NumberAggregationFunctionEnum[\"SUM\"]) != -1){ \r\n            var sum = 0;\r\n            this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { sum += parseInt(el[key]); });\r\n            aggrCol[key] = sum;          \r\n          } \r\n          else if (aggrCol.AnswerDate == \"AVG\" && aggregations.indexOf(NumberAggregationFunctionEnum[\"AVG\"]) != -1){ \r\n            var avg = 0;\r\n            this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { avg += parseInt(el[key]); });\r\n            aggrCol[key] = avg / this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).length;          \r\n          }   \r\n          else if (aggrCol.AnswerDate == \"MIN\" && aggregations.indexOf(NumberAggregationFunctionEnum[\"MIN\"]) != -1){ \r\n            var min = null;\r\n            this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { if (min == null || el[key] < min) { min = el[key]; } });\r\n            aggrCol[key] = min;          \r\n          }     \r\n          else if (aggrCol.AnswerDate == \"MAX\" && aggregations.indexOf(NumberAggregationFunctionEnum[\"MAX\"]) != -1){ \r\n            var max = null;\r\n            this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { if (min == null || el[key] > max) { max = el[key]; } });\r\n            aggrCol[key] = max;          \r\n          }     \r\n          else if (aggrCol.AnswerDate == \"STDEV\" && aggregations.indexOf(NumberAggregationFunctionEnum[\"STDEV\"]) != -1){ \r\n            var values = [];\r\n            this.filteredAnswers.filter(x => x.ID != '0' && !isNaN(x[key])).forEach(el => { values.push(parseInt(el[key])); });\r\n            aggrCol[key] = this.standardDeviation(values);          \r\n          } else {\r\n            aggrCol[key] = \"\";\r\n          }                                     \r\n        } else if (aggregations == null || aggregations.length == 0) {\r\n          aggrCol[key] = \"\";\r\n        }\r\n\r\n\r\n\r\n      });\r\n    });\r\n\r\n        return;\r\n  }\r\n  //#endregion fillAggregationColumns\r\n\r\n  standardDeviation(arr, usePopulation = false) {\r\n    const mean = arr.reduce((acc, val) => acc + val, 0) / arr.length;\r\n    return Math.sqrt(\r\n      arr\r\n        .reduce((acc, val) => acc.concat((val - mean) ** 2), [])\r\n        .reduce((acc, val) => acc + val, 0) /\r\n        (arr.length - (usePopulation ? 0 : 1))\r\n    );\r\n  };   \r\n\r\n  //#region printValue\r\n  printValue(fieldType, value, fieldconfig, record) {\r\n    switch (fieldType) {\r\n      case FieldTypeEnum[\"Elenco generico\"]: {\r\n        if (value == \"\"){ return value; }\r\n        if(!value){\r\n          return \"N/A\";\r\n        } \r\n        let output;\r\n        let ValuePairs: {[key:string]: any;} = [];\r\n        // PREPARO/LEGGO I VALUEPAIRS\r\n        if (fieldconfig.Formula != null && fieldconfig.Formula) {\r\n          var temp = UtilityHelperService.EvaluateFieldFormula(\r\n            fieldconfig.Formula,\r\n            record,\r\n            this.formulaObject\r\n          );\r\n        if(typeof temp === 'string') {\r\n          let temp2 = temp.split(\";\");\r\n          temp = []\r\n          temp2.forEach(item => {\r\n            const arrItem = item.split(\"|\");\r\n            if(arrItem.length > 1){\r\n              temp[arrItem[1].trim()] = arrItem[0].trim();\r\n            } else {\r\n              temp[arrItem[0].trim()] = arrItem[0].trim();\r\n            }\r\n          })\r\n        }\r\n\r\n        for (let key2 in temp) {\r\n          ValuePairs[temp[key2]] = key2;\r\n          }\r\n        } else if ((<ListValueField>fieldconfig).ValuePairs != null && (<ListValueField>fieldconfig).ValuePairs.length > 0) {\r\n          // va bene così\r\n          ValuePairs = JSON.parse(JSON.stringify((<ListValueField>fieldconfig).ValuePairs));\r\n        } else if ((<ListValueField>fieldconfig).ValueString != null && (<ListValueField>fieldconfig).ValueString != \"\") {\r\n          // va presa la strigna e rimappata nel diario\r\n          ValuePairs = GlobalService.stringToValuePairs((<ListValueField>fieldconfig).ValueString);\r\n        }\r\n\r\n        // INVERTO I VALUEPAIRS CHIAVE/VALORE IN VALROE/CHIAVE\r\n        let inverted = {};\r\n        //GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>field).ValuePairs);\r\n        // ValuePairs: {Si: 'Si', No: 'No'}\r\n        for (let key in ValuePairs) {\r\n          inverted[ValuePairs[key]] = key;\r\n        }\r\n        ValuePairs = inverted;\r\n\r\n        // LEGGO I VALORI CHE VOGLIO STAMPARE \r\n        if (record[fieldconfig.Name] != null && (<ListValueField>fieldconfig).IsMultiChoiche) {\r\n          // caso MULTISCELTA\r\n          let outValue = \"\";\r\n          record[fieldconfig.Name].forEach((element, i) => {\r\n            outValue += ValuePairs[element];\r\n            outValue += i == record[fieldconfig.Name].length - 1 ? \"\" : \", \"\r\n          });\r\n          output = outValue;\r\n        } else {\r\n          // caso SCELTA SINGOLA\r\n          output = ValuePairs[record[fieldconfig.Name]];\r\n        }\r\n        return output;\r\n      };\r\n      case FieldTypeEnum[\"Campo numerico\"]: {\r\n        if (value == \"\"){ return value; }\r\n        if ((<NumericField>fieldconfig).IsInteger) {\r\n          if ((<NumericField>fieldconfig).DecimalSeparator == null) {\r\n            return Math.floor(value);\r\n          } else {\r\n            const decimals = fieldconfig.DecimalPrecision * 10;\r\n            return Math.round(value * decimals) / decimals;\r\n          }\r\n        } else {\r\n          const decimals = fieldconfig.DecimalPrecision * 10;\r\n          return Math.round(value * decimals) / decimals;\r\n        }\r\n        break;\r\n      };\r\n\r\n      case FieldTypeEnum['Immagine']: {\r\n        return \"immagine\";\r\n        GlobalService.debugLog(\"immagine \" + fieldconfig.Name + \" : \" + value)\r\n        // // Recupero il BASE64 dell'immagine Resized via promise client\r\n        // var resizedBase64 = await this.resizeBase64Image(\"data:image/\" + value.FileExtension + \";base64,\" + value.FileDataBase64);\r\n\r\n        // // Aggiungo l'HTML con il nuovo BASE64\r\n        // return \"<img src='\" + resizedBase64 + \"' style='height: \" + value.ResizedImageHeightPx + \"px'>\";\r\n\r\n        break;\r\n      };\r\n\r\n\r\n      case FieldTypeEnum['Allegato']: {\r\n        return \"Allegato\";\r\n        // GlobalService.debugLog(\"Allegato \" + field.Name + \" : \" + value, record)\r\n\r\n        if (value != null) {\r\n          let resizedBase64;\r\n          // if (value[0].IsImage) {\r\n          //   // Recupero il BASE64 dell'immagine Resized via promise client\r\n          //   resizedBase64 = await this.resizeBase64Image(\"data:image/\" + value[0].FileExtension + \";base64,\" + value[0].FileDataBase64);\r\n          //   // GlobalService.debugLog(\"Allegato resizedBase64\", resizedBase64)\r\n          //   // Aggiungo l'HTML con il nuovo BASE64\r\n          //   return '<img class=\"image-preview\" src=\"' + resizedBase64 + '\" style=\"height: ' + value[0].ResizedImageHeightPx + 'px\">';\r\n          // } else if (value[0].FileContentType == \"application/pdf\") {\r\n          //   return '<iframe src=\"data:application/pdf;base64,' + value[0].FileDataBase64 + '\"style=\"min-height: 300px; height: 100%;\"></iframe>';\r\n          // } else {\r\n          //   return '<iframe src=\"data:\"' + value[0].FileExtension + '\";base64,' + value[0].FileDataBase64 + '\"style=\"min-height: 300px; height: 100%;\"></iframe>';\r\n          // }\r\n\r\n          // Aggiungo l'HTML con il nuovo BASE64\r\n          // return  \"<img src='\" + resizedBase64 + \"' style='height: \" + value[0].ResizedImageHeightPx + \"px'>\";\r\n          // GlobalService.debugLog(\"Allegato outputValuesArray\", outputValuesArray[field.Name])\r\n        }\r\n\r\n        break;\r\n      };\r\n\r\n      case FieldTypeEnum['Immagine con markers']: {\r\n        return \"Immagine con markers\";\r\n\r\n        // Recupero il BASE64 dell'immagine Resized via promise client\r\n        // var resizedBase64 = await this.resizeBase64Image(\"data:image/\" + value.FileExtension + \";base64,\" + value.FileDataBase64);\r\n\r\n        // Aggiungo l'HTML con il nuovo BASE64\r\n        // return \"<img src='\" + resizedBase64 + \"' style='height: \" + value.ResizedImageHeightPx + \"px'>\";\r\n\r\n        break;\r\n      };\r\n\r\n      case FieldTypeEnum['Elenco immagini']: {\r\n        return \"Elenco immagini\";\r\n        let outputValuesArray = \"\";\r\n        if (value != null && (<ImageSelectorField>fieldconfig).IsMultiChoiche) {\r\n          value.forEach((imageobj: number) => {\r\n            var attachmentInForm: DynAttachment = (<ImageSelectorField>fieldconfig).AttachmentList.find(x => x.ID == imageobj);\r\n            if (attachmentInForm != null) {\r\n              outputValuesArray += attachmentInForm.ButtonKey + \", \";\r\n            }\r\n          });\r\n          var parts = outputValuesArray.split(\", \");\r\n          return parts.slice(0, parts.length - 1).join(\", \");\r\n        }\r\n        else {\r\n          var attachmentInForm: DynAttachment = (<ImageSelectorField>fieldconfig).AttachmentList.find(x => x.ID == value);\r\n          if (attachmentInForm != null) {\r\n            return attachmentInForm.ButtonKey;\r\n          }\r\n        }\r\n\r\n        break;\r\n      };\r\n      case FieldTypeEnum['Data e/o ora']: {\r\n        if (value == \"\"){ return value; }\r\n        GlobalService.debugLog(\"Data e/o ora\", fieldconfig);\r\n        if ((<DateField>fieldconfig).DateFormat != null) {\r\n          let fixDateFormat = (<DateField>fieldconfig).DateFormat.replace(\"DD\", \"dd\");\r\n          return this.datepipe.transform(value, fixDateFormat);\r\n        }\r\n        else {\r\n          if ((<DateField>fieldconfig).IsOnlyDate == DateTimeTypeEnum['Solo data']) {\r\n            return this.datepipe.transform(value, \"dd/MM/yyyy\");\r\n          } else if ((<DateField>fieldconfig).IsOnlyDate == DateTimeTypeEnum['Data e ora']) {\r\n            return this.datepipe.transform(value, \"dd/MM/yyyy HH:mm\");\r\n          } else if ((<DateField>fieldconfig).IsOnlyDate == DateTimeTypeEnum['Solo orario']) {\r\n            return this.datepipe.transform(value, \"HH:mm\");\r\n          }\r\n        }\r\n        break;\r\n      }\r\n\r\n      default: {\r\n        return value;\r\n      }\r\n    }\r\n\r\n  }\r\n  //#endregion printValue\r\n\r\n  //#region resizeBase64Image\r\n  private async resizeBase64Image(base64Image: string) {\r\n    return new Promise((resolve, reject) => {\r\n      const imagetype = /data:image\\/([\\w]+);/;\r\n      const match = base64Image.match(imagetype);\r\n      const img = new Image();\r\n      img.src = base64Image;\r\n      img.onload = function () {\r\n        const canvas = document.createElement(\"canvas\");\r\n        const ctx = canvas.getContext('2d');\r\n        const width = img.width;\r\n        const height = img.height;\r\n        const aspectRatio = width / height;\r\n\r\n        const newHeight = 128;\r\n        const newWidth = newHeight * aspectRatio;\r\n\r\n        canvas.width = newWidth;\r\n        canvas.height = newHeight;\r\n        ctx.drawImage(img, 0, 0, newWidth, newHeight);\r\n        let quality = 0.8;\r\n        let dataURL = canvas.toDataURL('image/' + match[1], quality);\r\n        resolve(dataURL);\r\n      };\r\n    });\r\n  }\r\n  //#endregion resizeBase64Image\r\n}\r\n","<mat-card class=\"list-form-record\">\r\n  <mat-card-header class=\"align-items-center justify-content-between\">\r\n    <mat-card-title *ngIf=\"loadedFilters && showTitle\"\r\n      >Elenco {{ form.Name }}</mat-card-title\r\n    >\r\n    <!-- <mat-card-actions>\r\n      <button\r\n        class=\"btn btn-primary\"\r\n        mat-raised-button\r\n        color=\"primary\"\r\n        type=\"button\"\r\n        (click)=\"onAddViewEditRecord.emit(null)\"\r\n      >\r\n        <mat-icon>add</mat-icon>\r\n        <span style=\"margin-left: 10px\">Aggiungi</span>\r\n      </button>\r\n    </mat-card-actions> -->\r\n  </mat-card-header>\r\n  <mat-card-content>\r\n    <!--#region FILTERS -->\r\n    <div class=\"row mt-2\" *ngIf=\"loadedFilters\">\r\n      <div class=\"col-sm-12 col-md-3 align-content-end\">\r\n        <tmw-datetimepicker\r\n          class=\"date\"\r\n          [placeholder]=\"'Periodo inizio'\"\r\n          [label]=\"'Periodo inizio'\"\r\n          [(ngModel)]=\"minDate\"\r\n          (dateChange)=\"filterDataAnswers()\"\r\n          [pickerMode]=\"modes.DATEPICKER\"\r\n          [outputFormat]=\"'dd/MM/yyyy'\"\r\n          [showSeconds]=\"false\"\r\n        >\r\n        </tmw-datetimepicker>\r\n      </div>\r\n      <div class=\"col-sm-12 col-md-3 align-content-end\">\r\n        <tmw-datetimepicker\r\n          class=\"date\"\r\n          [placeholder]=\"'Periodo fine'\"\r\n          [label]=\"'Periodo fine'\"\r\n          [(ngModel)]=\"maxDate\"\r\n          (dateChange)=\"filterDataAnswers()\"\r\n          [pickerMode]=\"modes.DATEPICKER\"\r\n          [outputFormat]=\"'dd/MM/yyyy'\"\r\n          [showSeconds]=\"false\"\r\n        >\r\n        </tmw-datetimepicker>\r\n      </div>\r\n      <div class=\"col-sm-12 col-md-3\">\r\n        <mat-form-field appearance=\"outline\">\r\n          <mat-label>Selezione dei campi</mat-label>\r\n          <mat-select (selectionChange)=\"onSelectionChange($event)\" multiple>\r\n            <mat-option *ngFor=\"let property of properties\" [value]=\"property\">\r\n              {{ propertiesLabel[property.label] }}\r\n            </mat-option>\r\n          </mat-select>\r\n        </mat-form-field>\r\n      </div>\r\n      <!-- <div class=\"col-sm-12 col-md-3 mt-2\">\r\n        <button\r\n          [disabled]=\"\r\n            selectedProperties == null || selectedProperties.length == 0\r\n          \"\r\n          class=\"btn btn-graph-generate button-next me-2\"\r\n          mat-raised-button\r\n          color=\"primary\"\r\n          (click)=\"filterDataAnswers()\"\r\n        >\r\n          Genera\r\n        </button>\r\n      </div> -->\r\n    </div>\r\n    <!--#endregion FILTERS -->\r\n\r\n    <!--#region TABLE -->\r\n    <div\r\n    *ngIf=\"filteredAnswers && filteredAnswers.length > 0; else no_answers\"\r\n      class=\"table-container mt-3 mb-2\"\r\n    >\r\n      <table\r\n        mat-table\r\n        [dataSource]=\"selectedProperties\"\r\n        class=\"mat-elevation-z8 mat-table-fixed\"\r\n      >\r\n        <!-- Colonna fissa per le proprietà -->\r\n        <ng-container matColumnDef=\"property\" sticky>\r\n          <th mat-header-cell *matHeaderCellDef class=\"sticky-column\">\r\n            Data Inserimento\r\n          </th>\r\n          <td\r\n            mat-cell\r\n            *matCellDef=\"let selectedProperties\"\r\n            class=\"sticky-column\"\r\n          >\r\n            {{ propertiesLabel[selectedProperties.label] }}\r\n          </td>\r\n        </ng-container>\r\n\r\n        <!-- Genera dinamicamente le colonne per ogni risposta -->\r\n        <ng-container\r\n          *ngFor=\"let value of filteredAnswers; let i = index\"\r\n          [matColumnDef]=\"'col' + i\"\r\n        >\r\n          <th mat-header-cell *matHeaderCellDef>\r\n            <span *ngIf=\"value.ID != '0'\">{{ value.AnswerDate | date : \"dd/MM/yyyy HH:mm\" }}</span>\r\n            <span *ngIf=\"value.ID == '0'\">{{ value.AnswerDate }}</span>\r\n          </th>\r\n          <!-- <th mat-header-cell *matHeaderCellDef> {{ value.AnswerDate | date:'dd/MM/yyyy HH:mm' }} </th> -->\r\n          <td mat-cell *matCellDef=\"let selectedProperties\">\r\n            {{\r\n              selectedProperties.label === \"AnswerDate\"\r\n                ? (value.AnswerDate | date : \"dd/MM/yyyy HH:mm\")\r\n                : printValue(\r\n                    selectedProperties.type,\r\n                    value[selectedProperties.label],\r\n                    selectedProperties.config,\r\n                    value\r\n                  ) ?? \"N/A\"\r\n            }}\r\n            <!-- - \r\n            {{selectedProperties.type}}\r\n            {{selectedProperties.label}} -->\r\n          </td>\r\n        </ng-container>\r\n\r\n        <!-- Header della tabella -->\r\n        <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n\r\n        <!-- Righe della tabella -->\r\n        <tr mat-row *matRowDef=\"let row; columns: displayedColumns\"></tr>\r\n      </table>\r\n    </div>\r\n\r\n    <ng-template #no_answers>\r\n      <div class=\"mt-3 mb-2 text-center\">\r\n        <span> Non ci sono risposte </span>\r\n      </div>\r\n    </ng-template>\r\n    <!--#region TABLE -->\r\n  </mat-card-content>\r\n  <mat-card-footer>\r\n    <!-- <mat-progress-bar mode=\"indeterminate\"></mat-progress-bar> -->\r\n  </mat-card-footer>\r\n</mat-card>\r\n\r\n<!-- <div class=\"row eqp-dynamic-module-title list-form-record-header\">\r\n  <div class=\"col-md-6\">\r\n    <h4 *ngIf=\"showTitle\">\r\n      <b>Elenco {{ form.Name }}</b>\r\n    </h4>\r\n  </div>\r\n  <div class=\"col-md-6 text-right\" *ngIf=\"defaultListActions.add\">\r\n    <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n      (click)=\"onAddViewEditRecord.emit(null)\">\r\n      <mat-icon>add</mat-icon>\r\n      <span style=\"margin-left: 10px\">Aggiungi</span>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<eqp-table class=\"list-form-record-table\" #tableRecords *ngIf=\"loader && configurations.values\"\r\n  [data]=\"configurations.values\" [columns]=\"columns\"></eqp-table> -->\r\n","import { FieldTypeEnum, BaseField } from './baseField.model';\r\nimport { LogicOperatorBoolean, LogicOperatorListValue, LogicOperatorNumeric, LogicOperatorText, LogicOperatorDate, LogicOperatorImageSelector, LogicOperator } from \"./logicOperator.model\";\r\nimport { Record } from '../models/record.model';\r\nimport { Form } from \"./form.model\";\r\n\r\nexport class Trigger {\r\n    CID: string;\r\n    description: string;\r\n    execution: string;\r\n    conditions: Array<TriggerCondition>;\r\n    formulas: any = {};\r\n\r\n    constructor(){\r\n        this.CID = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n            var r = Math.random() * 16 | 0,\r\n              v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n            return v.toString(16);\r\n        });\r\n    }\r\n}\r\n\r\nexport class TriggerCondition {\r\n    CID: string;\r\n    Field: BaseField;\r\n    record: Record = new Record();\r\n    logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate | LogicOperatorImageSelector | LogicOperator\r\n    booleanlogicoperator: BooleanLogicOperatorType\r\n\r\n    constructor(){\r\n        this.CID = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n            var r = Math.random() * 16 | 0,\r\n              v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n            return v.toString(16);\r\n        });\r\n    }\r\n}\r\n\r\nexport class TriggerProperty {\r\n    type: TriggerPropertyTypeEnum;\r\n    value: string;\r\n    tooltip: string;\r\n    allowedValues?:KeyValue[]; // usato per controlli e gestione dei valori ammissibili da value\r\n    selectedAllowedValue?: KeyValue;\r\n\r\n    constructor(type){\r\n        this.type = type;\r\n    }\r\n}\r\n\r\nexport enum TriggerPropertyTypeEnum {\r\n    STRING = 1,\r\n    DMMODULE = 2,\r\n    DROPDOWN_LIST = 3 // selezione di un valore da una lista tramite select\r\n}\r\n\r\nexport class Condition{\r\n    fieldType:FieldTypeEnum;\r\n    key: string;\r\n    value: string;\r\n    logicoperator:LogicOperatorBoolean | LogicOperatorListValue | LogicOperatorNumeric | LogicOperatorText | LogicOperatorDate | LogicOperatorImageSelector\r\n    booleanlogicoperator: BooleanLogicOperatorType\r\n}\r\n\r\nexport enum BooleanLogicOperatorType {\r\n    \"AND\" = 1,\r\n    \"AND NOT\" = 2,\r\n    \"OR\" = 3,\r\n    \"OR NOT\" = 4\r\n}\r\n\r\nexport class FireTrigger {\r\n    form: Form;\r\n    trigger: Trigger;\r\n    record: Record;\r\n    formulas: any;\r\n    userPatient: string;\r\n    userMedicalExamination: number;\r\n}\r\n\r\nexport class ActionButton {\r\n    ButtonUniqueId: string;\r\n\tButtonCode: string;\r\n\tButtonLabel: string;\r\n    Icon: string;\r\n    execution: string;\r\n    OrdinalPosition: number;\r\n\tShowIn?: ActionFlagEnum;\r\n    formulas: any;\r\n    formulasTemp?: any;\r\n    userPatient: string;\r\n    userMedicalExamination: number;    \r\n}\r\n\r\nexport enum ActionFlagEnum {\r\n    //LIST = 1 << 1,\r\n    LISTVIEW = 1 << 2,\r\n    ADDRECORD = 1 << 3,\r\n    //VIEWRECORD = 1 << 4,\r\n    //STATISTIC = 1 << 5,\r\n    //GRAPHS = 1 << 6\r\n}\r\nexport class KeyValue{\r\n   key: string; \r\n   value: string;\r\n}","import { Injectable } from \"@angular/core\";\r\n\r\n\r\n@Injectable({\r\n    providedIn: \"root\",\r\n  })\r\nexport class dbDateService {\r\n\r\n    //#region datetime\r\n    /**\r\n     * Parse date to visualize as a string\r\n     */\r\n    parseDate(date: Date): string {\r\n        let newYear: number = date.getFullYear();\r\n        let newMonth: number = date.getMonth() + 1;\r\n        let newMonthString: string;\r\n        if (newMonth < 10) {\r\n            newMonthString = \"0\" + newMonth.toString();\r\n        } else {\r\n            newMonthString = newMonth.toString();\r\n        }\r\n        let newDay: number = date.getDate();\r\n        let newDayString: string;\r\n        if (newDay < 10) {\r\n            newDayString = \"0\" + newDay.toString();\r\n        } else {\r\n            newDayString = newDay.toString();\r\n        }\r\n        let newHour: number = date.getHours();\r\n        let newHourString: string;\r\n        if (newHour < 10) {\r\n            newHourString = \"0\" + newHour.toString();\r\n        } else {\r\n            newHourString = newHour.toString();\r\n        }\r\n        let newMinute: number = date.getMinutes();\r\n        let newMinuteString: string;\r\n        if (newMinute < 10) {\r\n            newMinuteString = \"0\" + newMinute.toString();\r\n        } else {\r\n            newMinuteString = newMinute.toString();\r\n        }\r\n        let dateString = newDayString + \"/\" + newMonthString + \"/\" + newYear.toString() + \" \" + newHourString + \":\" + newMinuteString;\r\n        return dateString\r\n    }\r\n\r\n    parseTime(date: Date): string { // parse date to get only the time\r\n        let newHour: number = date.getHours();\r\n        let newHourString: string;\r\n        if (newHour < 10) {\r\n            newHourString = \"0\" + newHour.toString();\r\n        } else {\r\n            newHourString = newHour.toString();\r\n        }\r\n        let newMinute: number = date.getMinutes();\r\n        let newMinuteString: string;\r\n        if (newMinute < 10) {\r\n            newMinuteString = \"0\" + newMinute.toString();\r\n        } else {\r\n            newMinuteString = newMinute.toString();\r\n        }\r\n        let timeString = newHourString + \":\" + newMinuteString;\r\n        return timeString\r\n    }\r\n\r\n    addZeroesOnData(numero: number): string {\r\n        let numerostring = \"\";\r\n        if (numero < 10) {\r\n            numerostring = \"0\" + numero.toString();\r\n        } else {\r\n            numerostring = numero.toString();\r\n        }\r\n        return numerostring;\r\n    }\r\n\r\n    parseDatefromDB(dirtyDateMeasurement): Date {\r\n        if (this.isDateFromServer(dirtyDateMeasurement)) {\r\n            let dirtyDate: string[] = dirtyDateMeasurement.toString().split(\"T\");\r\n            let dirtyHour: string[] = dirtyDate[1].split(\".\");\r\n            let yearMonthDay: string[] = dirtyDate[0].split(\"-\");\r\n            let hourMinuteSecond: string[] = dirtyHour[0].split(\":\");\r\n            let date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]), parseInt(hourMinuteSecond[1]));\r\n            let gmtString = date.toString().split(\" \")[5].split(\"T\")[1];\r\n            let hour: string = \"\";\r\n            let minute: string = \"\";\r\n            for (let j = 0; j < gmtString.length; j++) {\r\n                if (j == 0) {\r\n                    hour += gmtString[j];\r\n                    minute += gmtString[j];\r\n                }\r\n                if (j > 0 && j < 3) {\r\n                    hour += gmtString[j];\r\n                }\r\n                if (j > 2) {\r\n                    minute += gmtString[j];\r\n                }\r\n            }\r\n            let hourInt = parseInt(hour);\r\n            let minuteInt = parseInt(minute);\r\n            let newDate: Date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]) + hourInt, parseInt(hourMinuteSecond[1]) + minuteInt);\r\n            return newDate\r\n        }\r\n        else if (this.isDateInstance(dirtyDateMeasurement)) {\r\n            return dirtyDateMeasurement;\r\n        }\r\n        else {\r\n            throw new Error(\"Not Conversion Date in parseDatefromDB\")\r\n        }\r\n    }\r\n\r\n\r\n    isDateFromServer(date: any): boolean {\r\n        const isoDateFormat = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z)?$/;\r\n        return typeof date === 'string' && isoDateFormat.test(date);\r\n    }\r\n\r\n    isDateInstance(date: any): boolean {\r\n        return date instanceof Date;\r\n    }\r\n\r\n\r\n    parseDatefromDBMilliseconds(dirtyDateMeasurement): Date { //get a date GMT in angular format from DB (millisecond precision)\r\n        let dirtyDate: string[] = dirtyDateMeasurement.toString().split(\"T\");\r\n        let dirtyHour: string[] = dirtyDate[1].split(\".\");\r\n        let yearMonthDay: string[] = dirtyDate[0].split(\"-\");\r\n        let hourMinuteSecond: string[] = dirtyHour[0].split(\":\");\r\n        let date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]), parseInt(hourMinuteSecond[1]));\r\n        let gmtString = date.toString().split(\" \")[5].split(\"T\")[1];\r\n        let hour: string = \"\";\r\n        let minute: string = \"\";\r\n        for (let j = 0; j < gmtString.length; j++) {\r\n            if (j == 0) {\r\n                hour += gmtString[j];\r\n                minute += gmtString[j];\r\n            }\r\n            if (j > 0 && j < 3) {\r\n                hour += gmtString[j];\r\n            }\r\n            if (j > 2) {\r\n                minute += gmtString[j];\r\n            }\r\n        }\r\n        let hourInt = parseInt(hour);\r\n        let minuteInt = parseInt(minute);\r\n        let newDate: Date = new Date(parseInt(yearMonthDay[0]), parseInt(yearMonthDay[1]) - 1, parseInt(yearMonthDay[2]), parseInt(hourMinuteSecond[0]) + hourInt, parseInt(hourMinuteSecond[1]) + minuteInt, parseInt(hourMinuteSecond[2]), parseInt(dirtyHour[1]));\r\n\r\n        return newDate\r\n    }\r\n\r\n    prepareHourforDB(dirtyHour: Date): Date {\r\n        let hourMinutes = dirtyHour.toString().split(\":\")\r\n        let date = new Date();\r\n        date.setHours(parseInt(hourMinutes[0]))\r\n        date.setMinutes(parseInt(hourMinutes[1]))\r\n        date.setSeconds(0)\r\n        date.setMilliseconds(0)\r\n        return date\r\n    }\r\n\r\n    parseForHour(allMinutes: number): number {\r\n        let dirtyHours = allMinutes / 60;\r\n        let hours = Math.floor(dirtyHours);\r\n        let dirtyMinutes = dirtyHours - hours;\r\n        let minutes = this.roundDecimals(dirtyMinutes * 0.6, 2);\r\n        let finalHours = hours + minutes;\r\n        return finalHours\r\n    }\r\n    //#endregion datetime\r\n\r\n\r\n    /**\r\n     * Rounds a number to the our preferred number of decimal places.\r\n     * @param number the number we want to round\r\n     * @param decimals how many decimal places we want the rounded number to have\r\n     * @returns the rounded number\r\n     */\r\n    roundDecimals(number: number, decimals: number): number {\r\n        return Number(number.toFixed(decimals));\r\n    }\r\n}","export enum LogicOperatorNumeric {\r\n    \"\" = 0,\r\n    \"=\" = 1,\r\n    \"!=\" = 2,\r\n    \">\" = 5,\r\n    \">=\" = 6,\r\n    \"<\" = 7,\r\n    \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorDate {\r\n    \"\" = 0,\r\n    \"=\" = 1,\r\n    \"!=\" = 2,\r\n    \">\" = 5,\r\n    \">=\" = 6,\r\n    \"<\" = 7,\r\n    \"<=\" = 8,\r\n}\r\n\r\nexport enum LogicOperatorText {\r\n    \"\" = 0,\r\n    \"=\" = 1,\r\n    \"!=\" = 2,\r\n    \"LIKE\" = 3,\r\n    \"NOT LIKE\" = 4,\r\n}\r\n\r\nexport enum LogicOperatorBoolean {\r\n    \"\" = 0,\r\n    \"Si\" = 9,\r\n    \"No\" = 10\r\n}\r\n\r\nexport enum LogicOperatorListValue {\r\n    \"\" = 0,\r\n    \"CONTIENE ALMENO UNO\" = 11,\r\n    \"CONTIENE TUTTI\" = 12,\r\n}\r\n\r\nexport enum LogicOperatorImageSelector {\r\n    \"\" = 0,\r\n    \"=\" = 1,\r\n    \"!=\" = 2\r\n}\r\n\r\nexport enum LogicOperator {\r\n    \"\" = 0,\r\n    \"=\" = 1,\r\n    \"!=\" = 2,\r\n    \"LIKE\" = 3,\r\n    \"NOT LIKE\" = 4,    \r\n    \">\" = 5,\r\n    \">=\" = 6,\r\n    \"<\" = 7,\r\n    \"<=\" = 8,\r\n    \"Si\" = 9,\r\n    \"No\" = 10,\r\n    \"CONTIENE ALMENO UNO\" = 11,\r\n    \"CONTIENE TUTTI\" = 12,    \r\n}","import { Form } from '../models/form.model';\r\n\r\nconst SYSTEM_FONTS = new Set<string>([\r\n  // Generici CSS\r\n  'sans-serif', 'serif', 'monospace', 'cursive', 'fantasy', 'system-ui',\r\n  'inherit', 'initial', 'unset', 'revert',\r\n  // Famiglie sistema Windows / Mac / Linux\r\n  '-apple-system', 'blinkmacsystemfont', 'segoe ui', 'helvetica neue',\r\n  'helvetica', 'arial', 'verdana', 'tahoma', 'trebuchet ms', 'georgia',\r\n  'times new roman', 'times', 'courier new', 'courier', 'lucida console',\r\n  'lucida sans unicode', 'impact', 'comic sans ms', 'palatino linotype',\r\n  'book antiqua', 'palatino', 'garamond', 'bookman',\r\n]);\r\n\r\nconst FIELD_CSS_KEYS = [\r\n  'TextFieldStyleCSS', 'TextareaFieldStyleCSS', 'BooleanFieldStyleCSS',\r\n  'DateFieldStyleCSS', 'NumericFieldStyleCSS', 'AttachmentFieldStyleCSS',\r\n  'ImageFieldStyleCSS', 'ListValueFieldStyleCSS', 'ImageSelectorFieldStyleCSS',\r\n  'LabelFieldStyleCSS', 'ImageWithMarkersFieldStyleCSS', 'ActionButtonFieldStyleCSS',\r\n];\r\n\r\nfunction collectCssStrings(form: Form): string[] {\r\n  const result: string[] = [];\r\n  if (form.ThemeCSS) result.push(form.ThemeCSS);\r\n  if (form.TitleCSS) result.push(form.TitleCSS);\r\n  for (const field of form.Fields ?? []) {\r\n    const f = field as any;\r\n    if (f.FieldstyleCSS) result.push(f.FieldstyleCSS);\r\n    if (f.LabelstyleCSS) result.push(f.LabelstyleCSS);\r\n    for (const key of FIELD_CSS_KEYS) {\r\n      const cssObj = f[key];\r\n      if (cssObj && typeof cssObj === 'object') {\r\n        for (const val of Object.values(cssObj)) {\r\n          if (typeof val === 'string' && val) result.push(val);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return result;\r\n}\r\n\r\nfunction extractGoogleFontNames(cssStrings: string[]): string[] {\r\n  const found = new Set<string>();\r\n  for (const css of cssStrings) {\r\n    const regex = /font-family\\s*:\\s*([^;]+)/gi;\r\n    let match: RegExpExecArray | null;\r\n    while ((match = regex.exec(css)) !== null) {\r\n      for (const part of match[1].split(',')) {\r\n        const name = part.trim().replace(/^['\"]|['\"]$/g, '').trim();\r\n        if (name && !SYSTEM_FONTS.has(name.toLowerCase())) {\r\n          found.add(name);\r\n        }\r\n      }\r\n    }\r\n  }\r\n  return Array.from(found);\r\n}\r\n\r\n/**\r\n * Scansiona tutte le stringhe CSS del form (ThemeCSS, TitleCSS, FieldStyleCSS tipizzati)\r\n * ed inietta un <link> a Google Fonts per ogni font non-di-sistema trovato.\r\n * Idempotente: non aggiunge link già presenti nel DOM.\r\n */\r\nexport function injectGoogleFontsFromForm(form: Form | null | undefined): void {\r\n  if (!form || typeof document === 'undefined') return;\r\n  const fonts = extractGoogleFontNames(collectCssStrings(form));\r\n  for (const font of fonts) {\r\n    const id = `gfont-${font.replace(/\\s+/g, '-').toLowerCase()}`;\r\n    if (document.getElementById(id)) continue;\r\n    const link = document.createElement('link');\r\n    link.id = id;\r\n    link.rel = 'stylesheet';\r\n    link.href = `https://fonts.bunny.net/css2?family=${encodeURIComponent(font)}:ital,wght@0,400;0,700;1,400&display=swap`;\r\n    document.head.appendChild(link);\r\n  }\r\n}\r\n","import {\r\n    Directive,\r\n    ElementRef,\r\n    EventEmitter,\r\n    HostListener,\r\n    Input,\r\n    OnDestroy,\r\n    Output,\r\n  } from \"@angular/core\";\r\n  import { interval, Subscription } from \"rxjs\";\r\n  import { GlobalService } from \"../../services/global.service\";\r\n  \r\n  declare var webkitSpeechRecognition: any;\r\n  \r\n  /* ESEMPIO D'USO\r\n  \r\n    <textarea\r\n      [(ngModel)]=\"text\"\r\n    ></textarea>\r\n  \r\n    <mat-icon\r\n      *ngIf=\"true\" <!-- Senza NGIF non funziona -->\r\n      style=\"cursor: pointer; border-radius: 80px; padding: 5px;\"\r\n      [SpeechToText]\r\n      [(bindedText)]=\"text\"\r\n    >\r\n      keyboard_voice\r\n    </mat-icon>\r\n  \r\n  */\r\n  \r\n  @Directive({\r\n    selector: \"[SpeechToText]\",\r\n  })\r\n  export class SpeechToTextDirective implements OnDestroy{\r\n  \r\n    debug = false;\r\n  \r\n    @Input(\"bindedText\") bindedText: string = \"\";\r\n    @Output() bindedTextChange: EventEmitter<string> = new EventEmitter<string>();\r\n    beginSentence: string = \"\";\r\n    // bindedText = \"\";\r\n    private domElement: HTMLElement;\r\n  \r\n    pausedClass: string = \"keyboard_paused\";\r\n    speakingClass: string = \"keyboard_speaking\";\r\n  \r\n    recognition;\r\n    tempWords: any;\r\n    transcript_arr = [];\r\n    confidence_arr = [];\r\n  \r\n    // isStarted = false; //<< this Flag to check if the user stop the service\r\n    isStoppedSpeechRecog = false;\r\n    isStoppedAutomatically = true; //<< this Flag to check if the service stopped automaticically.\r\n  \r\n    timeInterval = interval(50);\r\n    subscription: Subscription;\r\n  \r\n    @HostListener(\"click\") SpeechToggle() {\r\n      this.SpeechToTextToggler();\r\n    }\r\n  \r\n    constructor(\r\n      private elementRef: ElementRef\r\n      ) {\r\n  \r\n      this.domElement = this.elementRef.nativeElement as HTMLElement;\r\n    \r\n      this.printDebug(window.navigator.userAgent);\r\n  \r\n      try {\r\n        // questa operazione fallisce se non c'è webkit\r\n        this.recognition = new webkitSpeechRecognition();\r\n  \r\n        this.printDebug(this.recognition);\r\n  \r\n        this.recognition.continuous = true;\r\n        this.recognition.interimResults = true;\r\n        this.recognition.lang = \"it-IT\";\r\n  \r\n        this.recognition.addEventListener(\"result\", (e: any) => {\r\n          const transcript = Array.from(e.results)\r\n            .map((result: any) => result[0])\r\n            .map((result) => result.transcript)\r\n            .join(\"\");\r\n  \r\n          this.printDebug(\"construcor transcript: \" + transcript);\r\n  \r\n  \r\n          this.transcript_arr.push(transcript);\r\n          this.tempWords = transcript;\r\n  \r\n          const confidence = Array.from(e.results)\r\n            .map((result: any) => result[0])\r\n            .map((result) => result.confidence)\r\n            .join(\"\");\r\n          this.confidence_arr.push(confidence);\r\n        });\r\n  \r\n        this.recognition.addEventListener(\"end\", (condition: any) => {\r\n          //this.wordConcat();\r\n          if (this.isStoppedAutomatically) {\r\n            this.recognition.stop();\r\n            this.recognition.start();\r\n            this.isStoppedAutomatically = true;\r\n          }\r\n        });\r\n      } catch (error) {\r\n  \r\n        this.printDebug(error);\r\n  \r\n        this.domElement.style.display = \"none\";\r\n      }\r\n  \r\n    }\r\n  \r\n    ngOnDestroy(): void {\r\n      this.printDebug(\"speech onDestroy\");\r\n      \r\n      if(this.recognition){\r\n        this.recognition.abort();\r\n      }\r\n    }\r\n  \r\n    SpeechToTextToggler() {\r\n      if (!GlobalService.isSpeechToTextStarted) {\r\n  \r\n        this.printDebug(\"start\");\r\n  \r\n        this.beginSentence = this.bindedText;\r\n        if (\r\n          this.bindedText == null ||\r\n          this.bindedText == undefined ||\r\n          this.bindedText == \"\"\r\n        ) {\r\n          this.beginSentence = \"\";\r\n          this.bindedText = \"\";\r\n        }\r\n        this.transcript_arr = [];\r\n        this.confidence_arr = [];\r\n  \r\n        let newtext = \"\";\r\n        this.start();\r\n        //this.isStillRecoginze = this.start() === true ? true : false;\r\n        this.subscription = this.timeInterval.subscribe((val) => {\r\n          if (this.bindedText == null || this.bindedText == undefined) {\r\n            this.bindedText =\r\n              this.beginSentence +\r\n              this.transcript_arr[this.transcript_arr.length - 1];\r\n            this.bindedTextChange.emit(this.bindedText);\r\n          } else {\r\n            newtext = this.transcript_arr[this.transcript_arr.length - 1];\r\n            if (newtext != undefined) {\r\n              this.bindedTextChange.emit(this.beginSentence + newtext);\r\n              this.transcript_arr[this.transcript_arr.length - 1];\r\n            } else {\r\n              this.bindedTextChange.emit(this.bindedText);\r\n            }\r\n          }\r\n        });\r\n      } else {\r\n        if(GlobalService.speechDirective === this){\r\n          this.printDebug(\"stop\");\r\n          this.printDebug(\"binded: \" + this.bindedText);\r\n    \r\n          this.transcript_arr = [];\r\n          this.stop();\r\n          this.subscription.unsubscribe();\r\n        } else {\r\n          this.printDebug(\"stop other\");\r\n          GlobalService.speechDirective.SpeechToTextToggler();\r\n          let interval = setInterval(() => {\r\n            if(GlobalService.speechDirective == null){\r\n              this.SpeechToTextToggler();\r\n              clearInterval(interval)\r\n            }\r\n          }, 100);\r\n        }\r\n      }\r\n    }\r\n  \r\n    private start() {\r\n      if (!GlobalService.isSpeechToTextStarted) {\r\n        this.elementRef.nativeElement.classList.remove(this.pausedClass);\r\n        this.elementRef.nativeElement.classList.add(this.speakingClass);\r\n        this.recognition.start();\r\n        GlobalService.isSpeechToTextStarted = true;\r\n        GlobalService.speechDirective = this;\r\n      }\r\n      return true;\r\n    }\r\n    private stop() {    \r\n      if (GlobalService.isSpeechToTextStarted) {\r\n        this.elementRef.nativeElement.classList.remove(this.speakingClass);\r\n        this.elementRef.nativeElement.classList.add(this.pausedClass);\r\n        this.isStoppedAutomatically = false;\r\n        this.wordConcat();\r\n        this.recognition.stop();\r\n        GlobalService.isSpeechToTextStarted = false;\r\n        GlobalService.speechDirective = null;\r\n        this.transcript_arr = [];\r\n      }\r\n      return false;\r\n    }\r\n  \r\n    private wordConcat() {\r\n      this.bindedText = this.bindedText + \". \";\r\n      // this.bindedText = this.bindedText + \" \" + this.tempWords + \".\";\r\n      // this.tempWords = \"\";\r\n    }\r\n  \r\n    private printDebug(message){\r\n      if(this.debug){\r\n        console.log(message);\r\n      }\r\n    }\r\n  }\r\n  ","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextFieldIconPositionEnum, TextFieldStyleCSS, TextMaskEnum, TextField } from '../../../../models/fields/textField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\nimport { Capacitor } from '@capacitor/core';\r\n\r\n// Selettori CSS MDC (Angular Material 15).\r\n// Container → .mat-mdc-text-field-wrapper: box visuale esterno del campo outlined\r\n//   (escluso .mat-mdc-form-field-subscript-wrapper). Gestisce sfondo, bordo, border-radius esterno.\r\n//   Le regole di Container vengono duplicate anche sui .mdc-notched-outline__* per permettere\r\n//   di sovrascrivere il bordo di focus/hover di Material con la proprietà border-color dell'utente.\r\n// Input → .mat-mdc-form-field-infix: area interna dove si digita il testo.\r\n//   Indipendente da Container: il suo background non copre il box esterno.\r\n// Icona → container prefix + suffix (align-self: stretch iniettato strutturalmente).\r\n// Microfono → stesso container suffix (viene dopo Icona nel loop, sovrascrive per il suffix).\r\nconst ELEMENT_SELECTORS: { [key: string]: string | string[] } = {\r\n  Container: ' .mat-mdc-text-field-wrapper',\r\n  Input: ' .mat-mdc-form-field-infix',\r\n  Descrizione: ' label.mat-mdc-floating-label',\r\n  Icona: [' .mat-mdc-form-field-icon-prefix', ' .mat-mdc-form-field-icon-suffix'],\r\n  Microfono: ' .mat-mdc-form-field-icon-suffix',\r\n  Errore: ' mat-error',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover', 'Focused', 'NotValid', 'Readonly'];\r\n\r\n// Stili di default per elemento+stato: emessi prima delle regole utente,\r\n// che le sovrascrivono per effetto del cascade CSS (stessa specificità #uid, posizione successiva).\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {\r\n  DescrizioneNormale: 'font-size: x-large;',\r\n  // Il wrapper outlined ha overflow:visible, quindi senza border-radius il background\r\n  // non rispetterebbe gli angoli arrotondati del notched-outline (4px default Angular Material).\r\n  ContainerNormale: 'border-radius: 4px;',\r\n  // Rientra il testo dalla sinistra dell'infix (padding-left rimosso dal wrapper con il fix icone).\r\n  InputNormale: 'padding-left: 5px;',\r\n};\r\n\r\n@Component({\r\n  selector: 'text-field-template',\r\n  templateUrl: './text-field-template.component.html',\r\n  styleUrls: ['./text-field-template.component.scss']\r\n})\r\nexport class TextFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n  isStillRecoginze = false;\r\n  source = interval(200);\r\n  newtext: string;\r\n  subscription: Subscription;\r\n\r\n  @Input() field: TextField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  /** Incrementa dall'esterno per forzare il ricalcolo degli stili CSS (es. dal configuratore) */\r\n  @Input() styleVersion: number = 0;\r\n  /** Forza visivamente uno stato specifico nell'anteprima del configuratore */\r\n  @Input() forceState: string | null = null;\r\n\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  InputMaskEnum = TextMaskEnum;\r\n  TextFieldIconPositionEnum = TextFieldIconPositionEnum;\r\n\r\n  platform: string = Capacitor.getPlatform();\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n  private statusSub: Subscription | null = null;\r\n\r\n  constructor(private renderer: Renderer2) {}\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'tf-' + Math.random().toString(36).slice(2, 10);\r\n    this.updateField();\r\n    this.initStyles();\r\n    this.injectTextFieldStyles();\r\n    this.subscribeToFormStatus();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectTextFieldStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false\r\n      && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n      this.updateStateClasses();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n    this.statusSub?.unsubscribe();\r\n  }\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if (this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)\r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n  }\r\n\r\n  /** Rigenera il tag <style> con defaults + regole utente, entrambi scoped per #uid */\r\n  injectTextFieldStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as TextField)?.TextFieldStyleCSS ?? ({} as TextFieldStyleCSS);\r\n    let rules = this.buildCssRules(this.fieldUid, css);\r\n    // In anteprima configuratore la spaziatura inferiore del subscript-wrapper è indesiderata:\r\n    // esiste per il layout del form vero ma nel pannello di configurazione comprime l'anteprima.\r\n    if (this.inConfig) {\r\n      rules += `\\n#${this.fieldUid} .mat-mdc-form-field-subscript-wrapper { display: none; }`;\r\n    }\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  /** Costruisce il selettore CSS per un dato elemento e stato */\r\n  private getSelector(uid: string, _el: string, state: string, s: string, _sub: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Focused':   return `#${uid}:focus-within${s}, #${uid}.eqp-state-focused${s}`;\r\n      case 'NotValid':  return `#${uid}.eqp-invalid${s}`;\r\n      case 'Readonly':  return `#${uid}.eqp-readonly${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  /** Propaga gli stili border di Container ai segmenti del bordo MDC (leading/notch/trailing)\r\n   *  con logica differenziata per evitare il doppio bordo:\r\n   *  - `border` shorthand o `border-width` → il bordo visivo è già sul wrapper → i segmenti\r\n   *    vengono soppressi con border-color:transparent.\r\n   *  - Solo `border-color` → applicato ai segmenti per sovrascrivere il ring blu/hover di\r\n   *    Material (specificità #uid > specificità di classe Material).\r\n   *  - `border-radius` e altre proprietà border-* non vengono propagate ai segmenti. */\r\n  private applyBorderToOutline(selector: string, css: string, lines: string[]): void {\r\n    if (!css?.trim()) return;\r\n    const decls = css.split(';').map(d => d.trim()).filter(d => /^border/i.test(d) && d.length > 0);\r\n    if (!decls.length) return;\r\n    if (decls.some(d => /^border(?!-(color|radius))/i.test(d))) {\r\n      lines.push(`${selector} { border-color: transparent; }`);\r\n    } else {\r\n      const colorDecls = decls.filter(d => /^border-color/i.test(d)).join('; ');\r\n      if (colorDecls.trim()) lines.push(`${selector} { ${colorDecls}; }`);\r\n    }\r\n  }\r\n\r\n  /** Selettore combinato per i tre segmenti del bordo MDC outlined (leading, notch, trailing).\r\n   *  Usato per duplicare il CSS di Container sul bordo visuale e permettere l'override del ring. */\r\n  private getOutlineSelector(uid: string, state: string): string | null {\r\n    const segs = (pref: string) => [\r\n      `#${uid}${pref} .mdc-notched-outline__leading`,\r\n      `#${uid}${pref} .mdc-notched-outline__notch`,\r\n      `#${uid}${pref} .mdc-notched-outline__trailing`,\r\n    ].join(', ');\r\n    switch (state) {\r\n      case 'Normale':   return segs('');\r\n      case 'Mouseover': return `${segs(':hover')}, ${segs('.eqp-state-hover')}`;\r\n      case 'Focused':   return `${segs(':focus-within')}, ${segs('.eqp-state-focused')}`;\r\n      case 'NotValid':  return segs('.eqp-invalid');\r\n      case 'Readonly':  return segs('.eqp-readonly');\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Emette i default prima, i valori utente dopo.\r\n   * Stessa specificità #uid → il valore utente vince per posizione nel cascade.\r\n   * Icona ha due selettori (prefix + suffix): la stessa regola viene emessa per entrambi.\r\n   */\r\n  private buildCssRules(uid: string, css: TextFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    // Fix strutturale icone — tutto scoped a #uid per non toccare altri componenti:\r\n    //\r\n    // 1. Material applica .mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper\r\n    //    { padding-right: 0 } ma lascia il padding-left intatto. Quel padding-left residuo\r\n    //    crea uno strip colorato a sinistra se Container ha un background. Lo azzeriamo.\r\n    //    (mat-mdc-form-field-has-icon-suffix è sempre presente perché il microfono è sempre\r\n    //    un matSuffix nel DOM, anche quando [hidden].)\r\n    lines.push(\r\n      `#${uid} mat-form-field.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper` +\r\n      ` { padding-left: 0; }`\r\n    );\r\n    lines.push(\r\n      `#${uid} mat-form-field.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper` +\r\n      ` { padding-right: 0; }`\r\n    );\r\n    //\r\n    // 2. Prefix: Material default è padding: 0 4px 0 0 — quel 4px crea lo strip a sinistra\r\n    //    anche senza icona. Lo azzeriamo sempre. Quando l'icona non c'è: display:none.\r\n    // 3. Suffix: quando non c'è né icona destra né microfono attivo: display:none (Material\r\n    //    lascia display:flex sul container anche quando il contenuto è [hidden]).\r\n    const tf = this.field as TextField;\r\n    const hasPrefix = !!(tf.IconName && tf.IconPosition !== TextFieldIconPositionEnum.Destra);\r\n    const hasSuffix = !!(tf.IconName && tf.IconPosition === TextFieldIconPositionEnum.Destra)\r\n                    || !!(tf.Microphone && this.platform === 'web');\r\n    lines.push(\r\n      `#${uid} .mat-mdc-form-field-icon-prefix { ${hasPrefix\r\n        ? 'align-self: stretch; display: flex; align-items: center; padding: 0;'\r\n        : 'display: none;'} }`\r\n    );\r\n    lines.push(\r\n      `#${uid} .mat-mdc-form-field-icon-suffix { ${hasSuffix\r\n        ? 'align-self: stretch; display: flex; align-items: center; padding: 0;'\r\n        : 'display: none;'} }`\r\n    );\r\n    // Il .mdc-notched-outline (parent dei tre segmenti di bordo MDC) non deve avere mai un\r\n    // bordo proprio: il bordo visivo del campo viene dai segmenti figli o dal wrapper Container.\r\n    lines.push(`#${uid} .mdc-notched-outline { border: 0; }`);\r\n    // Angular Material imposta color direttamente sull'input (specificità 0,3,0), che batte\r\n    // qualsiasi valore ereditato dal wrapper. Con color:inherit forziamo l'ereditarietà\r\n    // (specificità 1,1,1 > 0,3,0), così il color impostato su InputNormale si propaga al testo.\r\n    lines.push(`#${uid} input.mat-mdc-input-element { color: inherit; }`);\r\n\r\n    for (const el of ELEMENTS) {\r\n      const sEntry = ELEMENT_SELECTORS[el];\r\n      const selList = Array.isArray(sEntry) ? sEntry : [sEntry];\r\n\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n\r\n        for (const s of selList) {\r\n          const sub = s.trim();\r\n          const selector = this.getSelector(uid, el, state, s, sub);\r\n          if (!selector) continue;\r\n\r\n          if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n          if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n\r\n          // Per Container: propaga le proprietà border ai segmenti MDC (notched-outline__*).\r\n          // Se il CSS imposta uno spessore (border/border-width) → il bordo visivo è già sul\r\n          // wrapper, i segmenti vengono soppressi (border-color:transparent) per evitare il\r\n          // doppio bordo. Se imposta solo border-color → viene applicato ai segmenti per\r\n          // sovrascrivere il ring blu/hover di Material (specificità 1,2,0 > 0,2,0).\r\n          if (el === 'Container') {\r\n            const outlineSel = this.getOutlineSelector(uid, state);\r\n            if (outlineSel) {\r\n              this.applyBorderToOutline(outlineSel, defaultVal ?? '', lines);\r\n              this.applyBorderToOutline(outlineSel, userVal ?? '', lines);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  /** Aggiorna le classi di stato sul wrapper (eqp-invalid, eqp-readonly, eqp-state-*) */\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n\r\n    this.toggleClass(wrapper, 'eqp-state-hover',   this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-focused', this.forceState === 'Focused');\r\n\r\n    if (this.forceState === 'NotValid') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', true);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Readonly') {\r\n      this.toggleClass(wrapper, 'eqp-readonly', true);\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Normale' || this.forceState === 'Mouseover' || this.forceState === 'Focused') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n\r\n    const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');\r\n    this.toggleClass(wrapper, 'eqp-readonly', isReadonly);\r\n\r\n    const ctrl = this.field.FormFormGroup?.controls?.[this.field.Name];\r\n    if (ctrl?.touched) {\r\n      this.toggleClass(wrapper, 'eqp-invalid', this.field.FormFormGroup.invalid);\r\n    } else {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n    }\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  private subscribeToFormStatus(): void {\r\n    this.statusSub?.unsubscribe();\r\n    if (this.field?.FormFormGroup) {\r\n      this.statusSub = this.field.FormFormGroup.statusChanges.subscribe(() => this.updateStateClasses());\r\n    }\r\n  }\r\n\r\n  getInputType() {\r\n    switch (Number(this.field.TextMask)) {\r\n      case TextMaskEnum.Email:    return 'email';\r\n      case TextMaskEnum.Password: return 'password';\r\n      case TextMaskEnum.Telefono: return 'tel';\r\n      case TextMaskEnum.Url:      return 'url';\r\n      default:                    return 'text';\r\n    }\r\n  }\r\n\r\n  updateField() {\r\n    if (this.field.ReadonlyIf) {\r\n      this.field.Readonly = UtilityHelperService.EvaluateFieldFormula(this.field.ReadonlyIf, this.record, this.formulaObject);\r\n    }\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n      if (!this.field.InListView && !this.field.Maintain_Value) {\r\n        this.record[this.field.Name] = null;\r\n      }\r\n    }\r\n    if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n      this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n    }\r\n  }\r\n\r\n  onRecordValueChange() {\r\n    this.updateStateClasses();\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n    if (!this.field.VisibleIf) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n}\r\n","<div [id]=\"fieldUid\" class=\"eqp-tf-wrapper\">\r\n  <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n    <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n      {{ field.Description }}\r\n    </mat-label>\r\n    <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition != TextFieldIconPositionEnum.Destra\" matPrefix\r\n      [name]=\"field.IconName\">\r\n    </tmw-icon>\r\n    <input\r\n      [ngStyle]=\"FieldstyleObj\"\r\n      matInput\r\n      [type]=\"getInputType()\"\r\n      [formControlName]=\"field.Name\"\r\n      [readonly]=\"field.Readonly || (field.Formula != null && field.Formula != '')\"\r\n      [required]=\"field.Required\"\r\n      [(ngModel)]=\"record[field.Name]\"\r\n      (ngModelChange)=\"onRecordValueChange()\"\r\n    />\r\n    <mat-error\r\n      *ngIf=\"\r\n        !field.FormFormGroup.valid &&\r\n        field.FormFormGroup.controls[field.Name].touched &&\r\n        !field.Readonly\r\n      \"\r\n    >\r\n      Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n      {{ field.MaxLenght }}\r\n    </mat-error>\r\n    <tmw-icon class=\"mat-icon\"\r\n      *ngIf=\"field.IconName && field.IconPosition == TextFieldIconPositionEnum.Destra\"\r\n      matSuffix\r\n      [name]=\"field.IconName\">\r\n    </tmw-icon>\r\n    <tmw-icon class=\"mat-icon eqp-microfono\"\r\n      [hidden]=\"!field.Microphone || platform != 'web'\"\r\n      matSuffix\r\n      SpeechToText\r\n      [(bindedText)]=\"record[field.Name]\"\r\n      style=\"cursor: pointer\"\r\n      name=\"microphone\">\r\n    </tmw-icon>\r\n  </mat-form-field>\r\n</div>\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class BooleanFieldStyleCSS {\r\n    // Contenitore esterno del campo\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerFocused?: string;\r\n    ContainerReadonly?: string;\r\n    // Controllo di input (toggle / checkbox / radio button)\r\n    SceltaNormale?: string;\r\n    SceltaMouseover?: string;\r\n    SceltaFocused?: string;\r\n    SceltaReadonly?: string;\r\n    // Descrizione (label del controllo)\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    DescrizioneFocused?: string;\r\n    DescrizioneReadonly?: string;\r\n}\r\n\r\nexport class BooleanField extends BaseField {\r\n    /**Se true il boolean accetta anche il valore N/A (non assegnato) */\r\n    IsTristate: boolean;\r\n    PresetationType: BoolPresentantioEnum;\r\n    BooleanFieldStyleCSS?: BooleanFieldStyleCSS;\r\n}\r\n\r\nexport enum BoolPresentantioEnum {\r\n    \"Checkbox\" = 1,\r\n    \"Toggle\" = 2,\r\n    \"Radio button\" = 3,\r\n    // \"Stringa true o false\" = 3,\r\n    // \"Numerico 0 o 1\" = 4\r\n}","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { BooleanField, BooleanFieldStyleCSS, BoolPresentantioEnum } from '../../../../models/fields/booleanField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\nimport { Subscription } from 'rxjs';\r\n\r\n// Selettori CSS per BooleanField.\r\n//\r\n// Container → div wrapper esterno (#fieldUid stesso, selettore vuoto).\r\n//\r\n// Scelta → visual fill degli elementi di controllo, suddivisi per tipo:\r\n//   Toggle  : host mat-slide-toggle (per CSS custom properties come --mdc-switch-selected-track-color)\r\n//             + .mdc-switch__track e .mdc-switch__handle (per background-color diretto)\r\n//   Checkbox: host mat-checkbox + .mdc-checkbox__background (fill del riquadro)\r\n//   Radio   : host mat-radio-button + .mdc-radio__outer-circle (anello esterno)\r\n//   Per cambiare il COLORE del controllo usare background-color sui sub-elementi oppure\r\n//   CSS custom properties sul host: --mdc-switch-selected-track-color, --mdc-checkbox-selected-icon-color, ecc.\r\n//\r\n// Descrizione → il testo label del campo:\r\n//   Toggle/Checkbox: <label> figlio diretto del componente (senza classe fissa in AM15)\r\n//   Radio button   : <mat-label> separato prima del mat-radio-group\r\nconst ELEMENT_SELECTORS: { [key: string]: string | string[] } = {\r\n  Container:   '',\r\n  Scelta: [\r\n    ' mat-slide-toggle',\r\n    ' mat-slide-toggle .mdc-switch__track',\r\n    ' mat-slide-toggle .mdc-switch__handle',\r\n    ' mat-checkbox',\r\n    ' .mdc-checkbox__background',\r\n    ' mat-radio-button',\r\n    ' .mdc-radio__outer-circle',\r\n  ],\r\n  Descrizione: [\r\n    ' mat-slide-toggle label',\r\n    ' mat-checkbox label',\r\n    ' mat-label',\r\n  ],\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover', 'Focused', 'Readonly'];\r\n\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'boolean-field-template',\r\n  templateUrl: './boolean-field-template.component.html',\r\n  styleUrls: ['./boolean-field-template.component.scss']\r\n})\r\nexport class BooleanFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n\r\n  @Input() field: BooleanField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  /** Incrementa dall'esterno per forzare il ricalcolo degli stili CSS (es. dal configuratore) */\r\n  @Input() styleVersion: number = 0;\r\n  /** Forza visivamente uno stato specifico nell'anteprima del configuratore */\r\n  @Input() forceState: string | null = null;\r\n\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  BoolPresentantioEnum = BoolPresentantioEnum;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n  private statusSub: Subscription | null = null;\r\n\r\n  constructor(private renderer: Renderer2) {}\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.record[this.field.Name] == undefined || this.record[this.field.Name] == null) {\r\n      this.record[this.field.Name] = this.field.IsTristate ? null : false;\r\n    }\r\n\r\n    this.fieldUid = 'bf-' + Math.random().toString(36).slice(2, 10);\r\n    this.updateField();\r\n    this.initStyles();\r\n    this.injectBooleanFieldStyles();\r\n    this.subscribeToFormStatus();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectBooleanFieldStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false\r\n      && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n      this.updateStateClasses();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n    this.statusSub?.unsubscribe();\r\n  }\r\n\r\n  /** Rigenera il tag <style> con defaults + regole utente, entrambi scoped per #uid */\r\n  injectBooleanFieldStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as BooleanField)?.BooleanFieldStyleCSS ?? ({} as BooleanFieldStyleCSS);\r\n    let rules = this.buildCssRules(this.fieldUid, css);\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  /** Costruisce il selettore CSS per un dato elemento e stato */\r\n  private getSelector(uid: string, state: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Focused':   return `#${uid}:focus-within${s}, #${uid}.eqp-state-focused${s}`;\r\n      case 'Readonly':  return `#${uid}.eqp-readonly${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: BooleanFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    for (const el of ELEMENTS) {\r\n      const sEntry = ELEMENT_SELECTORS[el];\r\n      const selList = Array.isArray(sEntry) ? sEntry : [sEntry];\r\n\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n\r\n        for (const s of selList) {\r\n          const selector = this.getSelector(uid, state, s);\r\n          if (!selector) continue;\r\n\r\n          if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n          if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n        }\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  /** Aggiorna le classi di stato sul wrapper (eqp-readonly, eqp-state-*) */\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n\r\n    this.toggleClass(wrapper, 'eqp-state-hover',   this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-focused', this.forceState === 'Focused');\r\n\r\n    if (this.forceState === 'Readonly') {\r\n      this.toggleClass(wrapper, 'eqp-readonly', true);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Normale' || this.forceState === 'Mouseover' || this.forceState === 'Focused') {\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n\r\n    const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');\r\n    this.toggleClass(wrapper, 'eqp-readonly', isReadonly);\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  private subscribeToFormStatus(): void {\r\n    this.statusSub?.unsubscribe();\r\n    if (this.field?.FormFormGroup) {\r\n      this.statusSub = this.field.FormFormGroup.statusChanges.subscribe(() => this.updateStateClasses());\r\n    }\r\n  }\r\n\r\n  checkReadonly() {\r\n    if (this.field.ReadonlyIf) {\r\n      this.field.Readonly = UtilityHelperService.EvaluateFieldFormula(this.field.ReadonlyIf, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.Readonly) {\r\n      this.field.FormFormGroup.controls[this.field.Name].disable();\r\n    } else {\r\n      this.field.FormFormGroup.controls[this.field.Name].enable();\r\n    }\r\n  }\r\n\r\n  checkVisibility(defaultValue: any) {\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n      if (!this.field.InListView && !this.field.Maintain_Value) {\r\n        this.record[this.field.Name] = defaultValue;\r\n      }\r\n    }\r\n  }\r\n\r\n  updateField() {\r\n    this.checkReadonly();\r\n    this.checkVisibility(false);\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n      this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n    }\r\n  }\r\n\r\n  onRecordValueChange() {\r\n    this.updateStateClasses();\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n}\r\n","<div [formGroup]=\"field.FormFormGroup\" id=\"{{fieldUid}}\">\r\n\r\n    <!-- VISUALIZZAZIONE A TOGGLE -->\r\n    <mat-slide-toggle color=\"primary\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Toggle\"\r\n        [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n        [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n        {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n    </mat-slide-toggle>\r\n\r\n    <!-- VISUALIZZAZIONE A RADIOBUTTON -->\r\n    <mat-label [ngStyle]=\"LabelstyleObj\" class=\"mr-3\" *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\">\r\n        {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n    </mat-label>\r\n    <mat-radio-group *ngIf=\"field.PresetationType == BoolPresentantioEnum['Radio button']\"\r\n        [formControlName]=\"field.Name\" [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\"\r\n        [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n        <mat-radio-button class=\"mr-2\" [value]=\"true\" color=\"primary\"> Si </mat-radio-button>\r\n        <mat-radio-button class=\"mr-2 ps-2\" [value]=\"false\" color=\"primary\"> No </mat-radio-button>\r\n        <mat-radio-button class=\"mr-2 ps-2\" [value]=\"null\" color=\"primary\" *ngIf=\"field.IsTristate\"> ND\r\n        </mat-radio-button>\r\n    </mat-radio-group>\r\n\r\n    <!-- VISUALIZZAZIONE A CHECKBOX -->\r\n    <mat-checkbox class=\"mr-2\" *ngIf=\"field.PresetationType == BoolPresentantioEnum.Checkbox\"\r\n        [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [formControlName]=\"field.Name\"\r\n        [(ngModel)]=\"record[field.Name]\" (ngModelChange)=\"onRecordValueChange()\">\r\n        {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n    </mat-checkbox>\r\n\r\n    <!-- TODO: Visualizzazione \"Stringa true o false\" e \"Numerico 0 o 1\" ?? -->\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { DateField, DateFieldStyleCSS, DateTimeTypeEnum } from '../../../../models/fields/dateField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\nimport { ModeEnum, TimeTypeEnum } from \"tmw-picker\";\r\nimport { Subscription } from 'rxjs';\r\n\r\nconst ELEMENT_SELECTORS: { [key: string]: string } = {\r\n  Container:   ' mat-form-field.tmw-picker-main',\r\n  Descrizione: ' .tmw-picker-label',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover', 'Focused', 'NotValid', 'Readonly'];\r\n\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'date-field-template',\r\n  templateUrl: './date-field-template.component.html',\r\n  styleUrls: ['./date-field-template.component.scss']\r\n})\r\nexport class DateFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n\r\n  @Input() field: DateField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  modes = ModeEnum;\r\n  timeType = TimeTypeEnum;\r\n  mode: ModeEnum;\r\n\r\n  showSeconds: boolean = false;\r\n  outputFormat: string = null;\r\n\r\n  fieldUid: string;\r\n  hovering: boolean = false;\r\n  focused: boolean = false;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n  private statusSub: Subscription | null = null;\r\n\r\n  constructor(private renderer: Renderer2) { }\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'dt-' + Math.random().toString(36).slice(2, 10);\r\n    this.setTimeType();\r\n    this.setOutputFormat();\r\n    this.updateField();\r\n    this.injectDateFieldStyles();\r\n    this.subscribeToFormStatus();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.setTimeType();\r\n      this.setOutputFormat();\r\n      this.injectDateFieldStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n      this.updateStateClasses();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n    this.statusSub?.unsubscribe();\r\n  }\r\n\r\n  private injectDateFieldStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as DateField)?.DateFieldStyleCSS ?? ({} as DateFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, state: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Focused':   return `#${uid}:focus-within${s}, #${uid}.eqp-state-focused${s}`;\r\n      case 'NotValid':  return `#${uid}.eqp-invalid${s}`;\r\n      case 'Readonly':  return `#${uid}.eqp-readonly${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: DateFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    for (const el of ELEMENTS) {\r\n      const s = ELEMENT_SELECTORS[el];\r\n\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n\r\n        const selector = this.getSelector(uid, state, s);\r\n        if (!selector) continue;\r\n\r\n        if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n        if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n\r\n    this.toggleClass(wrapper, 'eqp-state-hover',   this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-focused',  this.forceState === 'Focused');\r\n\r\n    if (this.forceState === 'NotValid') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', true);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Readonly') {\r\n      this.toggleClass(wrapper, 'eqp-readonly', true);\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Normale' || this.forceState === 'Mouseover' || this.forceState === 'Focused') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n\r\n    const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');\r\n    this.toggleClass(wrapper, 'eqp-readonly', isReadonly);\r\n\r\n    const ctrl = this.field.FormFormGroup?.controls?.[this.field.Name];\r\n    if (ctrl?.touched) {\r\n      this.toggleClass(wrapper, 'eqp-invalid', this.field.FormFormGroup.invalid);\r\n    } else {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n    }\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  private subscribeToFormStatus(): void {\r\n    this.statusSub?.unsubscribe();\r\n    if (this.field?.FormFormGroup) {\r\n      this.statusSub = this.field.FormFormGroup.statusChanges.subscribe(() => this.updateStateClasses());\r\n    }\r\n  }\r\n\r\n  private get activeStyleSuffix(): string {\r\n    if (this.forceState) return this.forceState;\r\n    const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');\r\n    if (isReadonly) return 'Readonly';\r\n    const ctrl = this.field.FormFormGroup?.controls?.[this.field.Name];\r\n    if (ctrl?.touched && this.field.FormFormGroup?.invalid) return 'NotValid';\r\n    if (this.focused) return 'Focused';\r\n    if (this.hovering) return 'Mouseover';\r\n    return 'Normale';\r\n  }\r\n\r\n  getDateStyleByState(baseKey: string): string {\r\n    const css = (this.field as DateField)?.DateFieldStyleCSS;\r\n    if (!css) return '';\r\n    return (css as any)[baseKey + this.activeStyleSuffix] ?? '';\r\n  }\r\n\r\n  /**\r\n   * Metodo per aggiornare il valore del campo quando questo è rappresentato da una formula.\r\n   */\r\n  updateField() {\r\n    if (this.field.ReadonlyIf) {\r\n      this.field.Readonly = UtilityHelperService.EvaluateFieldFormula(this.field.ReadonlyIf, this.record, this.formulaObject);\r\n    }\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n      if(!this.field.InListView && !this.field.Maintain_Value){\r\n        this.record[this.field.Name]=null;\r\n      }\r\n    }\r\n    if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n      this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per emettere l'evento che il valore del record è cambiato.\r\n   */\r\n  onRecordValueChange(ev) {\r\n    this.field.FieldValue=ev;\r\n    this.field.FormFormGroup.get([this.field.Name]).setValue(ev);\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n\r\n  setOutputFormat(){\r\n\r\n    if (this.field.DateFormat != null){\r\n      this.outputFormat = this.field.DateFormat\r\n    } else {\r\n      if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo data']){\r\n        this.outputFormat = 'dd/MM/yyyy';\r\n      }\r\n      if (this.field.IsOnlyDate == DateTimeTypeEnum['Data e ora']){\r\n        this.outputFormat = 'dd/MM/yyyy HH:mm';\r\n      }\r\n      if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo orario']){\r\n        this.outputFormat = 'HH:mm';\r\n      }\r\n    }\r\n\r\n    if (this.outputFormat.indexOf(\"ss\") != -1){\r\n      this.showSeconds = true;\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n   * imposta la visualizzazione corretta del componente tmw-datetimepicker.\r\n   */\r\n  private setTimeType() {\r\n    switch (this.field.IsOnlyDate) {\r\n      case DateTimeTypeEnum[\"Solo data\"]:\r\n        this.mode = ModeEnum.DATEPICKER;\r\n        break;\r\n      case DateTimeTypeEnum[\"Solo orario\"]:\r\n        this.mode = ModeEnum.TIMEPICKER;\r\n        break;\r\n      case DateTimeTypeEnum[\"Data e ora\"]:\r\n        this.mode = ModeEnum.DATETIMEPICKER;\r\n        break;\r\n    }\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\"\r\n     (mouseenter)=\"hovering=true\" (mouseleave)=\"hovering=false\"\r\n     (focusin)=\"focused=true\"   (focusout)=\"focused=false\">\r\n    <tmw-datetimepicker\r\n        [placeholder]=\"field.Description\"\r\n        [label]=\"field.Description\"\r\n        [pickerMode]=\"mode\"\r\n        [minDate]=\"field.MinDate ? field.MinDate : null\"\r\n        [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n        [disabled]=\"field.Readonly\"\r\n        [(ngModel)]=\"record[field.Name]\"\r\n        (dateChange)=\"onRecordValueChange($event)\"\r\n        [outputFormat]=\"outputFormat\"\r\n        [showSeconds]=\"showSeconds\"\r\n        [containerStyle]=\"getDateStyleByState('ContenitoreInterno')\"\r\n        [inputStyle]=\"getDateStyleByState('CampoData')\"\r\n        [calendarButtonStyle]=\"getDateStyleByState('IconaCalendario')\"\r\n        [clockButtonStyle]=\"getDateStyleByState('IconaOrologio')\"\r\n        [closeButtonStyle]=\"getDateStyleByState('IconaCancellazione')\"\r\n        [tooltipStyle]=\"getDateStyleByState('Tooltip')\"\r\n        [iconsPosition]=\"field.IconsPosition || 'right'\"\r\n        [closeIconPosition]=\"field.CloseIconPosition || 'right'\"\r\n        [useTooltip]=\"field.UseTooltip || false\">\r\n    </tmw-datetimepicker>\r\n</div>\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class TextareaFieldStyleCSS {\r\n    // Contenitore (mat-form-field wrapper)\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerFocused?: string;\r\n    ContainerNotValid?: string;\r\n    ContainerReadonly?: string;\r\n    // Area di testo (textarea)\r\n    InputNormale?: string;\r\n    InputMouseover?: string;\r\n    InputFocused?: string;\r\n    InputNotValid?: string;\r\n    InputReadonly?: string;\r\n    // Descrizione (mat-label floating)\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    DescrizioneFocused?: string;\r\n    DescrizioneNotValid?: string;\r\n    DescrizioneReadonly?: string;\r\n    // Icona (prefix o suffix, indipendentemente dalla posizione)\r\n    IconaNormale?: string;\r\n    IconaMouseover?: string;\r\n    IconaFocused?: string;\r\n    IconaNotValid?: string;\r\n    IconaReadonly?: string;\r\n    // Microfono (speech-to-text icon)\r\n    MicrofonoNormale?: string;\r\n    MicrofonoMouseover?: string;\r\n    MicrofonoFocused?: string;\r\n    MicrofonoNotValid?: string;\r\n    MicrofonoReadonly?: string;\r\n    // Testo errore (mat-error)\r\n    ErroreNormale?: string;\r\n    ErroreMouseover?: string;\r\n    ErroreFocused?: string;\r\n    ErroreNotValid?: string;\r\n    ErroreReadonly?: string;\r\n}\r\n\r\nexport enum TextareaFieldIconPositionEnum {\r\n    'Sinistra' = 1,\r\n    'Destra'   = 2\r\n}\r\n\r\nexport class TextareaField extends BaseField {\r\n    /**Numero di righe in altezza con cui viene rappresentata la text area */\r\n    Rows: number;\r\n    MaxLenght: number;\r\n    MinLenght: number;\r\n    Microphone: boolean;\r\n    IconName?: string;\r\n    IconPosition?: TextareaFieldIconPositionEnum;\r\n    TextareaFieldStyleCSS?: TextareaFieldStyleCSS;\r\n}","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { TextareaField, TextareaFieldIconPositionEnum, TextareaFieldStyleCSS } from '../../../../models/fields/textareaField.model';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\nimport { Capacitor } from '@capacitor/core';\r\n\r\n// Selettori CSS MDC (Angular Material 15) — stesso schema di TextField.\r\n// TextareaField ha Microfono (sempre suffix) e supporta Icona prefix/suffix.\r\nconst ELEMENT_SELECTORS: { [key: string]: string | string[] } = {\r\n  Container: ' .mat-mdc-text-field-wrapper',\r\n  Input: ' .mat-mdc-form-field-infix',\r\n  Descrizione: ' label.mat-mdc-floating-label',\r\n  Icona: [' .mat-mdc-form-field-icon-prefix', ' .mat-mdc-form-field-icon-suffix'],\r\n  Microfono: ' .mat-mdc-form-field-icon-suffix',\r\n  Errore: ' mat-error',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover', 'Focused', 'NotValid', 'Readonly'];\r\n\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {\r\n  ContainerNormale: 'border-radius: 4px;',\r\n  InputNormale: 'padding-left: 5px;',\r\n};\r\n\r\n@Component({\r\n  selector: 'textarea-field-template',\r\n  templateUrl: './textarea-field-template.component.html',\r\n  styleUrls: ['./textarea-field-template.component.scss'],\r\n})\r\nexport class TextareaFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n  isStillRecoginze = false;\r\n  @Input() field: TextareaField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  /** Incrementa dall'esterno per forzare il ricalcolo degli stili CSS (es. dal configuratore) */\r\n  @Input() styleVersion: number = 0;\r\n  /** Forza visivamente uno stato specifico nell'anteprima del configuratore */\r\n  @Input() forceState: string | null = null;\r\n\r\n  source = interval(200);\r\n  newtext: string;\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  subscription: Subscription;\r\n\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  platform: string = Capacitor.getPlatform();\r\n  TextareaFieldIconPositionEnum = TextareaFieldIconPositionEnum;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n  private statusSub: Subscription | null = null;\r\n\r\n  constructor(private renderer: Renderer2) {}\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'ta-' + Math.random().toString(36).slice(2, 10);\r\n    this.updateField();\r\n    this.initStyles();\r\n    this.injectTextareaFieldStyles();\r\n    this.subscribeToFormStatus();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectTextareaFieldStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false\r\n      && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n      this.updateStateClasses();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n    this.statusSub?.unsubscribe();\r\n  }\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if (this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)\r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n  }\r\n\r\n  /** Rigenera il tag <style> con defaults + regole utente, entrambi scoped per #uid */\r\n  injectTextareaFieldStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as TextareaField)?.TextareaFieldStyleCSS ?? ({} as TextareaFieldStyleCSS);\r\n    let rules = this.buildCssRules(this.fieldUid, css);\r\n    if (this.inConfig) {\r\n      rules += `\\n#${this.fieldUid} .mat-mdc-form-field-subscript-wrapper { display: none; }`;\r\n    }\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, _el: string, state: string, s: string, _sub: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Focused':   return `#${uid}:focus-within${s}, #${uid}.eqp-state-focused${s}`;\r\n      case 'NotValid':  return `#${uid}.eqp-invalid${s}`;\r\n      case 'Readonly':  return `#${uid}.eqp-readonly${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private applyBorderToOutline(selector: string, css: string, lines: string[]): void {\r\n    if (!css?.trim()) return;\r\n    const decls = css.split(';').map(d => d.trim()).filter(d => /^border/i.test(d) && d.length > 0);\r\n    if (!decls.length) return;\r\n    if (decls.some(d => /^border(?!-(color|radius))/i.test(d))) {\r\n      lines.push(`${selector} { border-color: transparent; }`);\r\n    } else {\r\n      const colorDecls = decls.filter(d => /^border-color/i.test(d)).join('; ');\r\n      if (colorDecls.trim()) lines.push(`${selector} { ${colorDecls}; }`);\r\n    }\r\n  }\r\n\r\n  private getOutlineSelector(uid: string, state: string): string | null {\r\n    const segs = (pref: string) => [\r\n      `#${uid}${pref} .mdc-notched-outline__leading`,\r\n      `#${uid}${pref} .mdc-notched-outline__notch`,\r\n      `#${uid}${pref} .mdc-notched-outline__trailing`,\r\n    ].join(', ');\r\n    switch (state) {\r\n      case 'Normale':   return segs('');\r\n      case 'Mouseover': return `${segs(':hover')}, ${segs('.eqp-state-hover')}`;\r\n      case 'Focused':   return `${segs(':focus-within')}, ${segs('.eqp-state-focused')}`;\r\n      case 'NotValid':  return segs('.eqp-invalid');\r\n      case 'Readonly':  return segs('.eqp-readonly');\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: TextareaFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    const ta = this.field as TextareaField;\r\n    const hasPrefix = !!(ta.IconName && ta.IconPosition !== TextareaFieldIconPositionEnum.Destra);\r\n    const hasSuffix = !!(ta.IconName && ta.IconPosition === TextareaFieldIconPositionEnum.Destra)\r\n                    || !!(ta.Microphone && this.platform === 'web');\r\n\r\n    lines.push(\r\n      `#${uid} mat-form-field.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper` +\r\n      ` { padding-left: 0; }`\r\n    );\r\n    lines.push(\r\n      `#${uid} mat-form-field.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper` +\r\n      ` { padding-right: 0; }`\r\n    );\r\n    lines.push(\r\n      `#${uid} .mat-mdc-form-field-icon-prefix { ${hasPrefix\r\n        ? 'align-self: stretch; display: flex; align-items: center; padding: 0;'\r\n        : 'display: none;'} }`\r\n    );\r\n    lines.push(\r\n      `#${uid} .mat-mdc-form-field-icon-suffix { ${hasSuffix\r\n        ? 'align-self: stretch; display: flex; align-items: center; padding: 0;'\r\n        : 'display: none;'} }`\r\n    );\r\n    lines.push(`#${uid} .mdc-notched-outline { border: 0; }`);\r\n    lines.push(`#${uid} textarea.mat-mdc-input-element { color: inherit; }`);\r\n\r\n    for (const el of ELEMENTS) {\r\n      const sEntry = ELEMENT_SELECTORS[el];\r\n      const selList = Array.isArray(sEntry) ? sEntry : [sEntry];\r\n\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n\r\n        for (const s of selList) {\r\n          const sub = s.trim();\r\n          const selector = this.getSelector(uid, el, state, s, sub);\r\n          if (!selector) continue;\r\n\r\n          if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n          if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n\r\n          if (el === 'Container') {\r\n            const outlineSel = this.getOutlineSelector(uid, state);\r\n            if (outlineSel) {\r\n              this.applyBorderToOutline(outlineSel, defaultVal ?? '', lines);\r\n              this.applyBorderToOutline(outlineSel, userVal ?? '', lines);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n\r\n    this.toggleClass(wrapper, 'eqp-state-hover',   this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-focused', this.forceState === 'Focused');\r\n\r\n    if (this.forceState === 'NotValid') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', true);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Readonly') {\r\n      this.toggleClass(wrapper, 'eqp-readonly', true);\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Normale' || this.forceState === 'Mouseover' || this.forceState === 'Focused') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n\r\n    const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');\r\n    this.toggleClass(wrapper, 'eqp-readonly', isReadonly);\r\n\r\n    const ctrl = this.field.FormFormGroup?.controls?.[this.field.Name];\r\n    if (ctrl?.touched) {\r\n      this.toggleClass(wrapper, 'eqp-invalid', this.field.FormFormGroup.invalid);\r\n    } else {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n    }\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  private subscribeToFormStatus(): void {\r\n    this.statusSub?.unsubscribe();\r\n    if (this.field?.FormFormGroup) {\r\n      this.statusSub = this.field.FormFormGroup.statusChanges.subscribe(() => this.updateStateClasses());\r\n    }\r\n  }\r\n\r\n  updateField() {\r\n    if (this.field.ReadonlyIf) {\r\n      this.field.Readonly = UtilityHelperService.EvaluateFieldFormula(this.field.ReadonlyIf, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n      if (!this.field.InListView && !this.field.Maintain_Value) {\r\n        this.record[this.field.Name] = null;\r\n      }\r\n    }\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.record[this.field.Name] == null) {\r\n      this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n    }\r\n  }\r\n\r\n  onRecordValueChange() {\r\n    this.updateStateClasses();\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n}\r\n","<div [id]=\"fieldUid\">\r\n  <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n    <mat-label [ngStyle]=\"LabelstyleObj\">\r\n      {{ field.Description }}\r\n    </mat-label>\r\n    <tmw-icon class=\"mat-icon\" matPrefix\r\n      *ngIf=\"field.IconName && field.IconPosition !== TextareaFieldIconPositionEnum.Destra\"\r\n      [name]=\"field.IconName\">\r\n    </tmw-icon>\r\n    <textarea\r\n      class=\"pt-2 mt-2\"\r\n      [ngStyle]=\"FieldstyleObj\"\r\n      matInput\r\n      [placeholder]=\"field.Description\"\r\n      [rows]=\"field.Rows\"\r\n      [formControlName]=\"field.Name\"\r\n      [readonly]=\"field.Readonly\"\r\n      [required]=\"field.Required\"\r\n      [(ngModel)]=\"record[field.Name]\"\r\n      (ngModelChange)=\"onRecordValueChange()\"\r\n    ></textarea>\r\n    <mat-error\r\n      *ngIf=\"\r\n        !field.FormFormGroup.valid &&\r\n        field.FormFormGroup.controls[field.Name].touched &&\r\n        !field.Readonly\r\n      \"\r\n    >\r\n      Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n      {{ field.MaxLenght }}\r\n    </mat-error>\r\n    <tmw-icon class=\"mat-icon\" matSuffix\r\n      *ngIf=\"field.IconName && field.IconPosition === TextareaFieldIconPositionEnum.Destra\"\r\n      [name]=\"field.IconName\">\r\n    </tmw-icon>\r\n    <tmw-icon class=\"mat-icon\"\r\n      [hidden]=\"!field.Microphone || platform != 'web'\"\r\n      matSuffix\r\n      SpeechToText\r\n      [(bindedText)]=\"record[field.Name]\"\r\n      style=\"cursor: pointer\"\r\n      name=\"microphone\">\r\n    </tmw-icon>\r\n  </mat-form-field>\r\n</div>\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class NumericFieldStyleCSS {\r\n    // Contenitore (wrapper del mat-form-field)\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerFocused?: string;\r\n    ContainerNotValid?: string;\r\n    ContainerReadonly?: string;\r\n    // Casella numerica (input)\r\n    InputNormale?: string;\r\n    InputMouseover?: string;\r\n    InputFocused?: string;\r\n    InputNotValid?: string;\r\n    InputReadonly?: string;\r\n    // Descrizione (mat-label floating)\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    DescrizioneFocused?: string;\r\n    DescrizioneNotValid?: string;\r\n    DescrizioneReadonly?: string;\r\n    // Icona (prefix o suffix, indipendentemente dalla posizione)\r\n    IconaNormale?: string;\r\n    IconaMouseover?: string;\r\n    IconaFocused?: string;\r\n    IconaNotValid?: string;\r\n    IconaReadonly?: string;\r\n    // Testo errore (mat-error)\r\n    ErroreNormale?: string;\r\n    ErroreMouseover?: string;\r\n    ErroreFocused?: string;\r\n    ErroreNotValid?: string;\r\n    ErroreReadonly?: string;\r\n}\r\n\r\n/**Classe contiene la configurazione dei campi numerici */\r\nexport class NumericField extends BaseField {\r\n    IsInteger: boolean;\r\n    MinValue: number;\r\n    MaxValue: number;\r\n    DecimalSeparator: string;\r\n    DecimalPrecision: number;\r\n    ThousandsSeparator: string;\r\n    CurrencySymbol: string;\r\n    MeasureUnit: string;\r\n    IconName?: string;\r\n    IconPosition?: NumericFieldIconPositionEnum;\r\n    NumericFieldStyleCSS?: NumericFieldStyleCSS;\r\n}\r\n\r\nexport enum NumericFieldIconPositionEnum {\r\n    'Sinistra' = 1,\r\n    'Destra'   = 2\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { TmwNumericInputMode, TmwNumericOptions } from 'tmw-numeric';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { NumericField, NumericFieldIconPositionEnum, NumericFieldStyleCSS } from '../../../../models/fields/numericField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { Validators } from '@angular/forms';\r\nimport { GlobalService } from '../../../../services/global.service';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\nimport { Subscription } from 'rxjs';\r\n\r\n// Selettori CSS MDC (Angular Material 15) — stesso schema di TextField.\r\n// NumericField non ha il Microfono.\r\nconst ELEMENT_SELECTORS: { [key: string]: string | string[] } = {\r\n  Container: ' .mat-mdc-text-field-wrapper',\r\n  Input: ' .mat-mdc-form-field-infix',\r\n  Descrizione: ' label.mat-mdc-floating-label',\r\n  Icona: [' .mat-mdc-form-field-icon-prefix', ' .mat-mdc-form-field-icon-suffix'],\r\n  Errore: ' mat-error',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover', 'Focused', 'NotValid', 'Readonly'];\r\n\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {\r\n  ContainerNormale: 'border-radius: 4px;',\r\n  InputNormale: 'padding-left: 5px;',\r\n};\r\n\r\n@Component({\r\n  selector: 'numeric-field-template',\r\n  templateUrl: './numeric-field-template.component.html',\r\n  styleUrls: ['./numeric-field-template.component.scss']\r\n})\r\nexport class NumericFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n\r\n  @Input() field: NumericField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  /** Incrementa dall'esterno per forzare il ricalcolo degli stili CSS (es. dal configuratore) */\r\n  @Input() styleVersion: number = 0;\r\n  /** Forza visivamente uno stato specifico nell'anteprima del configuratore */\r\n  @Input() forceState: string | null = null;\r\n\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  validatorsArray: any[] = [];\r\n  eqpNumericOptions: Partial<TmwNumericOptions> = {};\r\n  NumericFieldIconPositionEnum = NumericFieldIconPositionEnum;\r\n\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  isDirty: boolean = false;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n  private statusSub: Subscription | null = null;\r\n\r\n  constructor(private renderer: Renderer2) {}\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'nf-' + Math.random().toString(36).slice(2, 10);\r\n    this.configureEqpNumericOptions();\r\n    this.configureControllers();\r\n    this.updateField();\r\n    this.initStyles();\r\n    this.injectNumericFieldStyles();\r\n    this.subscribeToFormStatus();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectNumericFieldStyles();\r\n      if (this.inConfig) {\r\n        this.subscribeToFormStatus();\r\n        this.configureControllers();\r\n      }\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false\r\n      && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n      this.updateStateClasses();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n    this.statusSub?.unsubscribe();\r\n  }\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if (this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)\r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n  }\r\n\r\n  /** Rigenera il tag <style> con defaults + regole utente, entrambi scoped per #uid */\r\n  injectNumericFieldStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as NumericField)?.NumericFieldStyleCSS ?? ({} as NumericFieldStyleCSS);\r\n    let rules = this.buildCssRules(this.fieldUid, css);\r\n    if (this.inConfig) {\r\n      rules += `\\n#${this.fieldUid} .mat-mdc-form-field-subscript-wrapper { display: none; }`;\r\n    }\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, _el: string, state: string, s: string, _sub: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Focused':   return `#${uid}:focus-within${s}, #${uid}.eqp-state-focused${s}`;\r\n      case 'NotValid':  return `#${uid}.eqp-invalid${s}`;\r\n      case 'Readonly':  return `#${uid}.eqp-readonly${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private applyBorderToOutline(selector: string, css: string, lines: string[]): void {\r\n    if (!css?.trim()) return;\r\n    const decls = css.split(';').map(d => d.trim()).filter(d => /^border/i.test(d) && d.length > 0);\r\n    if (!decls.length) return;\r\n    if (decls.some(d => /^border(?!-(color|radius))/i.test(d))) {\r\n      lines.push(`${selector} { border-color: transparent; }`);\r\n    } else {\r\n      const colorDecls = decls.filter(d => /^border-color/i.test(d)).join('; ');\r\n      if (colorDecls.trim()) lines.push(`${selector} { ${colorDecls}; }`);\r\n    }\r\n  }\r\n\r\n  private getOutlineSelector(uid: string, state: string): string | null {\r\n    const segs = (pref: string) => [\r\n      `#${uid}${pref} .mdc-notched-outline__leading`,\r\n      `#${uid}${pref} .mdc-notched-outline__notch`,\r\n      `#${uid}${pref} .mdc-notched-outline__trailing`,\r\n    ].join(', ');\r\n    switch (state) {\r\n      case 'Normale':   return segs('');\r\n      case 'Mouseover': return `${segs(':hover')}, ${segs('.eqp-state-hover')}`;\r\n      case 'Focused':   return `${segs(':focus-within')}, ${segs('.eqp-state-focused')}`;\r\n      case 'NotValid':  return segs('.eqp-invalid');\r\n      case 'Readonly':  return segs('.eqp-readonly');\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: NumericFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    const nf = this.field as NumericField;\r\n    const hasPrefix = !!(nf.IconName && nf.IconPosition !== NumericFieldIconPositionEnum.Destra);\r\n    const hasSuffix = !!(nf.IconName && nf.IconPosition === NumericFieldIconPositionEnum.Destra);\r\n\r\n    lines.push(\r\n      `#${uid} mat-form-field.mat-mdc-form-field-has-icon-suffix .mat-mdc-text-field-wrapper` +\r\n      ` { padding-left: 0; }`\r\n    );\r\n    lines.push(\r\n      `#${uid} mat-form-field.mat-mdc-form-field-has-icon-prefix .mat-mdc-text-field-wrapper` +\r\n      ` { padding-right: 0; }`\r\n    );\r\n    lines.push(\r\n      `#${uid} .mat-mdc-form-field-icon-prefix { ${hasPrefix\r\n        ? 'align-self: stretch; display: flex; align-items: center; padding: 0;'\r\n        : 'display: none;'} }`\r\n    );\r\n    lines.push(\r\n      `#${uid} .mat-mdc-form-field-icon-suffix { ${hasSuffix\r\n        ? 'align-self: stretch; display: flex; align-items: center; padding: 0;'\r\n        : 'display: none;'} }`\r\n    );\r\n    lines.push(`#${uid} .mdc-notched-outline { border: 0; }`);\r\n    lines.push(`#${uid} input.mat-mdc-input-element { color: inherit; }`);\r\n\r\n    for (const el of ELEMENTS) {\r\n      const sEntry = ELEMENT_SELECTORS[el];\r\n      const selList = Array.isArray(sEntry) ? sEntry : [sEntry];\r\n\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n\r\n        for (const s of selList) {\r\n          const sub = s.trim();\r\n          const selector = this.getSelector(uid, el, state, s, sub);\r\n          if (!selector) continue;\r\n\r\n          if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n          if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n\r\n          if (el === 'Container') {\r\n            const outlineSel = this.getOutlineSelector(uid, state);\r\n            if (outlineSel) {\r\n              this.applyBorderToOutline(outlineSel, defaultVal ?? '', lines);\r\n              this.applyBorderToOutline(outlineSel, userVal ?? '', lines);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n\r\n    this.toggleClass(wrapper, 'eqp-state-hover',   this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-focused', this.forceState === 'Focused');\r\n\r\n    if (this.forceState === 'NotValid') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', true);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Readonly') {\r\n      this.toggleClass(wrapper, 'eqp-readonly', true);\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Normale' || this.forceState === 'Mouseover' || this.forceState === 'Focused') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n\r\n    const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');\r\n    this.toggleClass(wrapper, 'eqp-readonly', isReadonly);\r\n\r\n    const ctrl = this.field.FormFormGroup?.controls?.[this.field.Name];\r\n    if (ctrl?.touched) {\r\n      this.toggleClass(wrapper, 'eqp-invalid', this.field.FormFormGroup.invalid);\r\n    } else {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n    }\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  private subscribeToFormStatus(): void {\r\n    this.statusSub?.unsubscribe();\r\n    if (this.field?.FormFormGroup) {\r\n      this.statusSub = this.field.FormFormGroup.statusChanges.subscribe(() => this.updateStateClasses());\r\n    }\r\n  }\r\n\r\n  updateField() {\r\n    if (this.field.ReadonlyIf) {\r\n      this.field.Readonly = UtilityHelperService.EvaluateFieldFormula(this.field.ReadonlyIf, this.record, this.formulaObject);\r\n    }\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n      if (!this.field.InListView && !this.field.Maintain_Value) {\r\n        this.record[this.field.Name] = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  onRecordValueChange() {\r\n    if (this.inConfig) {\r\n      this.configureControllers();\r\n      this.field.FormFormGroup.get(this.field.Name)?.markAsTouched({ onlySelf: true });\r\n    }\r\n    this.updateStateClasses();\r\n    if (!this.field.Formula) {\r\n      if (this.isDirty) {\r\n        this.isDirty = false;\r\n      }\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n\r\n  private configureEqpNumericOptions() {\r\n    // align/nullable/min/max: replicano i default globali del vecchio EqpNumericModule.forRoot(),\r\n    // che tmw-numeric non ha (nessun forRoot) — vanno impostati esplicitamente per non cambiare\r\n    // comportamento silenziosamente.\r\n    this.eqpNumericOptions.align = \"left\";\r\n    this.eqpNumericOptions.nullable = true;\r\n    this.eqpNumericOptions.min = null;\r\n    this.eqpNumericOptions.max = null;\r\n    this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \"  \" + this.field.MeasureUnit + \"  \" : \"\";\r\n    this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol + \" \" : \"\";\r\n    this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? TmwNumericInputMode.FINANCIAL : TmwNumericInputMode.NATURAL;\r\n    this.eqpNumericOptions.allowNegative = true;\r\n    if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n      this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n    else\r\n      this.eqpNumericOptions.decimal = \".\";\r\n    if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined && this.field.ThousandsSeparator.trim().length > 0)\r\n      this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n    if (this.field.IsInteger == false) {\r\n      if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n      else { this.eqpNumericOptions.precision = 2; }\r\n    } else {\r\n      this.eqpNumericOptions.precision = 0;\r\n    }\r\n  }\r\n\r\n  private configureControllers() {\r\n    this.validatorsArray = [];\r\n    if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n      this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n    if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n      this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n    const ctrl = this.field.FormFormGroup.get([this.field.Name]);\r\n    ctrl.setValidators(this.validatorsArray);\r\n    ctrl.updateValueAndValidity({ emitEvent: false });\r\n  }\r\n\r\n  setDirty() {\r\n    this.isDirty = true;\r\n  }\r\n}\r\n","<div [id]=\"fieldUid\" class=\"eqp-nf-wrapper\">\r\n  <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\"\r\n    [class.has-prefix-icon]=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\">\r\n    <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n    <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition != NumericFieldIconPositionEnum.Destra\" matPrefix\r\n      [name]=\"field.IconName\">\r\n    </tmw-icon>\r\n    <input [ngStyle]=\"FieldstyleObj\" matInput tmwNumericMask [formControlName]=\"field.Name\" [readonly]=\"field.Readonly\"\r\n        [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n        [step]=\"field.IsInteger ? 1 : null\" (blur)=\"onRecordValueChange()\" (ngModelChange)=\"onRecordValueChange()\" (keypress)=\"setDirty()\" />\r\n    <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched && !field.Readonly\">\r\n        Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n    </mat-error>\r\n    <tmw-icon class=\"mat-icon\" *ngIf=\"field.IconName && field.IconPosition == NumericFieldIconPositionEnum.Destra\" matSuffix\r\n      [name]=\"field.IconName\">\r\n    </tmw-icon>\r\n  </mat-form-field>\r\n</div>\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class ListValueFieldStyleCSS {\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerSelezionato?: string;\r\n    ContainerNotValid?: string;\r\n    ContainerReadonly?: string;\r\n    LabelNormale?: string;\r\n    LabelMouseover?: string;\r\n    LabelSelezionato?: string;\r\n    LabelNotValid?: string;\r\n    LabelReadonly?: string;\r\n    CasellaTriggerNormale?: string;\r\n    CasellaTriggerMouseover?: string;\r\n    CasellaTriggerSelezionato?: string;\r\n    CasellaTriggerNotValid?: string;\r\n    CasellaTriggerReadonly?: string;\r\n    OpzioneNormale?: string;\r\n    OpzioneMouseover?: string;\r\n    OpzioneSelezionato?: string;\r\n    OpzioneNotValid?: string;\r\n    OpzioneReadonly?: string;\r\n    SelezioneNormale?: string;\r\n    SelezioneMouseover?: string;\r\n    SelezioneSelezionato?: string;\r\n    SelezioneNotValid?: string;\r\n    SelezioneReadonly?: string;\r\n    BottoneNormale?: string;\r\n    BottoneMouseover?: string;\r\n    BottoneSelezionato?: string;\r\n    BottoneNotValid?: string;\r\n    BottoneReadonly?: string;\r\n    BottoneCancellaNormale?: string;\r\n    BottoneCancellaMouseover?: string;\r\n    BottoneCancellaSelezionato?: string;\r\n    BottoneCancellaNotValid?: string;\r\n    BottoneCancellaReadonly?: string;\r\n}\r\n\r\n/**Lista di valori */\r\nexport class ListValueField extends BaseField {\r\n    /**\r\n     * Lista di valori ordinata. La parte \"Value\", viene utilizzata in modi diversi a seconda del tipo di presentazione, e/o \r\n     * come valore relazionato nelle formule\r\n     */\r\n    ValuePairs: { [key: string]: any};\r\n\r\n    /**\r\n     * stringa da parsare chiave valore: chiave1 | valore 1; chiave2|valore 2\r\n    */\r\n    ValueString: string;\r\n\r\n    /**Se true è l'utente può scegliere più di un valore */\r\n    IsMultiChoiche: boolean;\r\n\r\n    /**Modalità di presentazione */\r\n    PresentationMode: ListPresentationEnum;\r\n\r\n    ListValueFieldStyleCSS?: ListValueFieldStyleCSS;\r\n}\r\n\r\nexport enum ListPresentationEnum {\r\n    \"Combo box\" = 1,\r\n    \"Radio button\" = 2,\r\n    \"Pulsante con testo\" = 3\r\n}","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListPresentationEnum, ListValueField, ListValueFieldStyleCSS } from '../../../../models/fields/listValueField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../..//services/global.service';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\nconst ELEMENT_SELECTORS_COMBO: { [key: string]: string } = {\r\n  Container:       ' eqp-select mat-form-field',\r\n  Label:           ' eqp-select .mdc-floating-label',\r\n  CasellaTrigger:  ' eqp-select .mat-mdc-form-field-infix',\r\n  BottoneCancella: ' eqp-select button[aria-label=\"Clear\"]',\r\n};\r\n\r\nconst ELEMENT_SELECTORS_RADIO: { [key: string]: string } = {\r\n  Container: ' .list-value-radio-container',\r\n  Label:     ' .list-value-label',\r\n  Opzione:   ' mat-radio-button',\r\n  Selezione: ' mat-radio-button .mdc-radio',\r\n};\r\n\r\nconst ELEMENT_SELECTORS_CHECKBOX: { [key: string]: string } = {\r\n  Label:   ' .list-value-label',\r\n  Opzione: ' mat-checkbox',\r\n};\r\n\r\nconst ELEMENT_SELECTORS_BUTTON: { [key: string]: string } = {\r\n  Label:   ' .list-value-label',\r\n  Bottone: ' button.data-button',\r\n};\r\n\r\nconst STATES = ['Normale', 'Mouseover', 'Selezionato', 'NotValid', 'Readonly'];\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n// Elementi il cui CSS iniettato richiede !important per vincere sulle regole di eqp-select.scss\r\nconst FORCE_IMPORTANT_ELEMENTS = new Set(['Label', 'BottoneCancella']);\r\n\r\n@Component({\r\n  selector: 'list-value-field-template',\r\n  templateUrl: './list-value-field-template.component.html',\r\n  styleUrls: ['./list-value-field-template.component.scss']\r\n})\r\nexport class ListValueFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n\r\n  @Input() field: ListValueField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  ListPresentationEnum = ListPresentationEnum;\r\n  arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n\r\n  constructor(private renderer: Renderer2) { }\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'lv-' + Math.random().toString(36).slice(2, 10);\r\n    this.injectStyles();\r\n\r\n    GlobalService.debugLog(\"combobox filed\", this.field);\r\n    const initialvalue = this.record[this.field.Label];\r\n    this.updateField();\r\n    this.resetArrayData();\r\n    if (this.field.IsMultiChoiche && !this.record[this.field.Name]) {\r\n      this.record[this.field.Name] = [];\r\n    }\r\n    this.setFormControlValue();\r\n    this.initStyles();\r\n    this.checkReadonly();\r\n\r\n    if (initialvalue != null) {\r\n      this.setSelectedItems(initialvalue);\r\n    } else {\r\n      this.setSelectedItems(null);\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectStyles();\r\n      if (this.field?.FormFormGroup?.controls?.[this.field.Name]) {\r\n        this.updateField();\r\n        this.reloadArrayData();\r\n      }\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n  }\r\n\r\n  // ─── CSS injection ───────────────────────────────────────────────────────────\r\n\r\n  private getElementSelectors(): { [key: string]: string } {\r\n    const mode = Number(this.field?.PresentationMode);\r\n    if (mode === ListPresentationEnum['Combo box']) return ELEMENT_SELECTORS_COMBO;\r\n    if (mode === ListPresentationEnum['Pulsante con testo']) return ELEMENT_SELECTORS_BUTTON;\r\n    return this.field?.IsMultiChoiche ? ELEMENT_SELECTORS_CHECKBOX : ELEMENT_SELECTORS_RADIO;\r\n  }\r\n\r\n  private injectStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as ListValueField)?.ListValueFieldStyleCSS ?? ({} as ListValueFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: ListValueFieldStyleCSS): string {\r\n    const selectors = this.getElementSelectors();\r\n    const lines: string[] = [];\r\n    for (const el of Object.keys(selectors)) {\r\n      const s = selectors[el];\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n        const selector = this.getSelector(uid, state, el, s);\r\n        if (!selector) continue;\r\n        if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n        if (userVal?.trim()) {\r\n          const needsImportant = FORCE_IMPORTANT_ELEMENTS.has(el) || (el === 'Bottone' && state === 'Selezionato');\r\n          const finalVal = needsImportant ? this.forceImportant(userVal) : userVal;\r\n          lines.push(`${selector} { ${finalVal} }`);\r\n          // CasellaTrigger: inietta anche sul testo selezionato per proprietà di testo (color, font-*)\r\n          if (el === 'CasellaTrigger') {\r\n            const textSel = this.getSelector(uid, state, el, ' eqp-select .mat-mdc-select-value');\r\n            if (textSel) lines.push(`${textSel} { ${finalVal} }`);\r\n          }\r\n          // BottoneCancella: inietta anche sull'icona interna per color/font (override di .mat-icon.mat-icon)\r\n          if (el === 'BottoneCancella') {\r\n            const iconSel = this.getSelector(uid, state, el, ' eqp-select button[aria-label=\"Clear\"] mat-icon');\r\n            if (iconSel) lines.push(`${iconSel} { ${finalVal} }`);\r\n          }\r\n          // Opzione (radio): il color va su mat-radio-button label per raggiungere il testo (Material sovrascrive il colore sul contenitore)\r\n          if (el === 'Opzione' && s === ' mat-radio-button') {\r\n            const colorVal = this.extractCssPropValue(finalVal, 'color');\r\n            if (colorVal) {\r\n              const labelSel = this.getSelector(uid, state, el, ' mat-radio-button label');\r\n              if (labelSel) lines.push(`${labelSel} { color: ${colorVal} !important; }`);\r\n            }\r\n          }\r\n          // Selezione: background-color va su .mdc-radio; color va su outer-circle/inner-circle E CSS variables MDC\r\n          if (el === 'Selezione') {\r\n            const colorVal = this.extractCssPropValue(finalVal, 'color');\r\n            if (colorVal) {\r\n              const outerSel    = this.getSelector(uid, state, el, ' mat-radio-button .mdc-radio__outer-circle');\r\n              const innerSel    = this.getSelector(uid, state, el, ' mat-radio-button .mdc-radio__inner-circle');\r\n              const radioBtnSel = this.getSelector(uid, state, el, ' mat-radio-button');\r\n              if (outerSel)    lines.push(`${outerSel} { border-color: ${colorVal} !important; }`);\r\n              if (innerSel)    lines.push(`${innerSel} { background-color: ${colorVal} !important; }`);\r\n              // CSS variables MDC per il dot di selezione (sovrascrivono il tema Material)\r\n              if (radioBtnSel) lines.push(`${radioBtnSel} { --mdc-radio-selected-icon-color: ${colorVal}; --mdc-radio-unselected-icon-color: ${colorVal}; --mdc-radio-selected-hover-icon-color: ${colorVal}; --mdc-radio-selected-focus-icon-color: ${colorVal}; --mdc-radio-selected-pressed-icon-color: ${colorVal}; }`);\r\n            }\r\n          }\r\n        }\r\n      }\r\n    }\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private forceImportant(css: string): string {\r\n    return css\r\n      .split(';')\r\n      .map(part => {\r\n        const trimmed = part.trim();\r\n        if (!trimmed) return part;\r\n        if (trimmed.toLowerCase().includes('!important')) return part;\r\n        return part.replace(/\\s+$/, '') + ' !important';\r\n      })\r\n      .join(';');\r\n  }\r\n\r\n  private extractCssPropValue(css: string, prop: string): string | null {\r\n    const re = new RegExp(`(?:^|;)\\\\s*${prop}\\\\s*:\\\\s*([^;!]+?)(?:\\\\s*!important)?\\\\s*(?:;|$)`, 'i');\r\n    const match = css.match(re);\r\n    return match ? match[1].trim() : null;\r\n  }\r\n\r\n  private getSelector(uid: string, state: string, el: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale': return `#${uid}${s}`;\r\n      case 'Mouseover':\r\n        // Opzione/Selezione/Bottone: :hover sul singolo elemento, non sul contenitore\r\n        if (el === 'Opzione' || el === 'Selezione' || el === 'Bottone')\r\n          return `${this.buildPerItemHoverSelector(uid, s)}, #${uid}.eqp-state-hover${s}`;\r\n        return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Selezionato':\r\n        if (el === 'Bottone')\r\n          return `#${uid} button.data-button.selected-button, #${uid}.eqp-state-selected${s}`;\r\n        // Radio Opzione/Selezione: aggiunge selettore runtime mat-mdc-radio-checked\r\n        if (el === 'Opzione' || el === 'Selezione') {\r\n          const trimmed = s.replace(/^\\s+/, '');\r\n          if (trimmed.startsWith('mat-radio-button')) {\r\n            const afterFirst = trimmed.substring('mat-radio-button'.length);\r\n            return `#${uid} mat-radio-button.mat-mdc-radio-checked${afterFirst}, #${uid}.eqp-state-selected${s}`;\r\n          }\r\n        }\r\n        return `#${uid}.eqp-state-selected${s}`;\r\n      case 'NotValid':  return `#${uid}.eqp-invalid${s}`;\r\n      case 'Readonly':  return `#${uid}.eqp-readonly${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildPerItemHoverSelector(uid: string, s: string): string {\r\n    const trimmed = s.replace(/^\\s+/, '');\r\n    const spaceIdx = trimmed.indexOf(' ');\r\n    if (spaceIdx === -1) return `#${uid} ${trimmed}:hover`;\r\n    return `#${uid} ${trimmed.substring(0, spaceIdx)}:hover${trimmed.substring(spaceIdx)}`;\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n    this.toggleClass(wrapper, 'eqp-state-hover',    this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-selected', this.forceState === 'Selezionato');\r\n    this.toggleClass(wrapper, 'eqp-invalid',         this.forceState === 'NotValid');\r\n    this.toggleClass(wrapper, 'eqp-readonly',        this.forceState === 'Readonly');\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  // ─── Logica campo ────────────────────────────────────────────────────────────\r\n\r\n  checkReadonly() {\r\n    if (this.field.Readonly) {\r\n      this.field.FormFormGroup.controls[this.field.Name].disable();\r\n    } else {\r\n      this.field.FormFormGroup.controls[this.field.Name].enable();\r\n    }\r\n  }\r\n\r\n  setSelectedItems(initialvalue) {\r\n    this.record[this.field.Label] = initialvalue;\r\n  }\r\n\r\n  updateField() {\r\n    if (this.field.ReadonlyIf) {\r\n      this.field.Readonly = UtilityHelperService.EvaluateFieldFormula(this.field.ReadonlyIf, this.record, this.formulaObject);\r\n      this.checkReadonly();\r\n    }\r\n    GlobalService.debugLog(\"list-value-field updateField\", this.field);\r\n    if (this.field.Formula) {\r\n      GlobalService.debugLog(\"list-value-field - updateField - Formula\", \"formula\");\r\n      if (this.field.DataGetter?.DataGetterType === DataGetterTypeEnum.Formula) {\r\n        // La formula calcola il VALORE SELEZIONATO (non le opzioni): comportamento analogo al campo numerico.\r\n        // Le opzioni vengono da ValueString/ValuePairs. Non si chiama resetArrayData() per evitare loop.\r\n        const newValue = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n        if (this.record[this.field.Name] !== newValue) {\r\n          this.record[this.field.Name] = newValue;\r\n          this.setFormControlValue();\r\n        }\r\n      } else {\r\n        // La formula calcola le OPZIONI (ValuePairs) — caso d'uso originale\r\n        const tempValuePairs = this.field.ValuePairs;\r\n        this.field.ValuePairs = {};\r\n        const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n        this.field.ValuePairs = GlobalService.stringToValuePairs(temp);\r\n        if (!(JSON.stringify(tempValuePairs) === JSON.stringify(this.field.ValuePairs))) {\r\n          this.resetArrayData();\r\n        }\r\n      }\r\n    } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n      GlobalService.debugLog(\"list-value-field - updateField - ValuePairs\");\r\n    } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n      GlobalService.debugLog(\"list-value-field - updateField - ValueString\");\r\n      this.field.ValuePairs = GlobalService.stringToValuePairs(this.field.ValueString);\r\n    }\r\n\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n      if (!this.field.InListView && !this.field.Maintain_Value) {\r\n        this.record[this.field.Name] = null;\r\n      }\r\n    }\r\n  }\r\n\r\n  buttonSelectClick(data: { Key: string, Value: string, Selected?: boolean, ImgUrl?: string }) {\r\n    data.Selected = !data.Selected;\r\n    if (this.field.IsMultiChoiche) {\r\n      this.updateSelected(false);\r\n    } else {\r\n      this.arrayData.filter(d => d.Key != data.Key && d.Value != data.Value).forEach(d => d.Selected = false);\r\n      if (UtilityHelperService.isNumeric(data.Value)) {\r\n        this.record[this.field.Name] = Number(data.Value);\r\n      } else {\r\n        this.record[this.field.Name] = data.Value;\r\n      }\r\n    }\r\n    this.onRecordValueChange();\r\n  }\r\n\r\n  updateSelected(emitChange: boolean = true) {\r\n    const selectedValues = this.arrayData.filter(data => data.Selected).map(data => data.Value);\r\n    // Single-choice: usa null (non []) quando nessun valore è selezionato.\r\n    // [] !== [] in JS (confronto per referenza): mat-select._assignValue vede sempre un \"cambio\"\r\n    // su ogni cycle di CD e scatena _onChange → ngModelChange → loop infinito.\r\n    this.record[this.field.Name] = this.field.IsMultiChoiche\r\n      ? selectedValues\r\n      : (selectedValues.length > 0 ? selectedValues[0] : null);\r\n    this.setFormControlValue();\r\n    if (emitChange) {\r\n      this.onRecordValueChange();\r\n    }\r\n  }\r\n\r\n  onRecordValueChange() {\r\n    this.recordChange.emit(this.record);\r\n  }\r\n\r\n  resetArrayData() {\r\n    this.arrayData = [];\r\n    this.updateSelected(false);\r\n    this.setArrayData();\r\n  }\r\n\r\n  private reloadArrayData(): void {\r\n    this.arrayData = [];\r\n    this.setArrayData();\r\n  }\r\n\r\n  private setArrayData() {\r\n    if (this.field.ValuePairs != null) {\r\n      if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n        Object.keys(this.field.ValuePairs).forEach(k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n      } else {\r\n        Object.keys(this.field.ValuePairs).forEach(k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n      }\r\n    }\r\n  }\r\n\r\n  private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n    let isOptionSelected: boolean;\r\n    if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n      isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n    } else {\r\n      isOptionSelected = this.record[this.field.Name] === value;\r\n    }\r\n    this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n  }\r\n\r\n  private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n    let isOptionSelected: boolean;\r\n    if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n      isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n    } else {\r\n      isOptionSelected = this.record[this.field.Name] === value;\r\n    }\r\n    this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n  }\r\n\r\n  private setFormControlValue() {\r\n    // emitModelToViewChange:false impedisce che FormControl.setValue() notifichi i callback\r\n    // _onChange registrati da NgModel (via [formControlName] sul mat-checkbox), evitando che\r\n    // NgModel emetta ngModelChange → updateSelected() → setFormControlValue() ricorsivamente.\r\n    this.field.FormFormGroup.controls[this.field.Name].setValue(\r\n      this.record[this.field.Name],\r\n      { emitEvent: false, emitModelToViewChange: false }\r\n    );\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\">\r\n\r\n    <tmw-select [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Combo box']\"\r\n        [arrayData]=\"arrayData\" [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"true\" [arrayValueProperty]=\"'Key'\"\r\n        [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n        [includeFullObject]=\"false\" [isRequired]=\"field.Required\" [isDisabled]=\"field.FormFormGroup.disabled\"\r\n        [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"field.IsMultiChoiche\"\r\n        (ngModelInputChange)=\"onRecordValueChange()\">\r\n    </tmw-select>\r\n\r\n    <div *ngIf=\"field.PresentationMode != ListPresentationEnum['Combo box']\" [formGroup]=\"field.FormFormGroup\">\r\n\r\n        <mat-label class=\"mr-3 list-value-label\" [ngStyle]=\"LabelstyleObj\"> {{field.Description + (field.Required ? \" *\"\r\n            : \"\")}} </mat-label>\r\n\r\n        <!-- VISUALIZZAZIONE A RADIO BUTTON (SENZA SELEZIONE MULTIPLA) -->\r\n        <div class=\"list-value-radio-container\"\r\n            *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && !field.IsMultiChoiche\">\r\n            <mat-radio-group [ngStyle]=\"FieldstyleObj\" [formControlName]=\"field.Name\"\r\n                [disabled]=\"field.FormFormGroup.disabled\" [required]=\"field.Required\" [(ngModel)]=\"record[field.Name]\"\r\n                (ngModelChange)=\"onRecordValueChange()\">\r\n                <mat-radio-button class=\"ms-3 d-block\" *ngFor=\"let data of arrayData\" [value]=\"data.Value\"\r\n                    color=\"primary\">\r\n                    {{data.Key}}\r\n                </mat-radio-button>\r\n            </mat-radio-group>\r\n        </div>\r\n\r\n        <!-- VISUALIZZAZIONE A CHECKBOX (SELEZIONE MULTIPLA) -->\r\n        <div class=\"d-inline-block\"\r\n            *ngIf=\"field.PresentationMode == ListPresentationEnum['Radio button'] && field.IsMultiChoiche\">\r\n            <mat-checkbox [ngStyle]=\"FieldstyleObj\" class=\"mr-2\" *ngFor=\"let data of arrayData\"\r\n                [disabled]=\"field.FormFormGroup.disabled || this.field.Readonly\" [formControlName]=\"field.Name\"\r\n                [(ngModel)]=\"data.Selected\" (ngModelChange)=\"updateSelected()\">\r\n                {{data.Key}}\r\n            </mat-checkbox>\r\n        </div>\r\n\r\n        <!-- VISUALIZZAZIONE A PULSANTI (CON TESTO O IMMAGINI) -->\r\n        <div class=\"d-inline-block\"\r\n            *ngIf=\"[ListPresentationEnum['Pulsante con testo']].includes(field.PresentationMode)\">\r\n            <button [ngStyle]=\"FieldstyleObj\" mat-raised-button color=\"primary\" class=\"btn btn-primary m-1 data-button\"\r\n                *ngFor=\"let data of arrayData\" [ngClass]=\"{'selected-button': data.Selected == true}\"\r\n                (click)=\"buttonSelectClick(data)\" [disabled]=\"field.FormFormGroup.disabled\">\r\n                <span> {{data.Key}}</span>\r\n            </button>\r\n        </div>\r\n\r\n    </div>\r\n\r\n</div>","import { BaseField } from \"../baseField.model\";\r\n\r\nexport class AttachmentFieldStyleCSS {\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerNotValid?: string;\r\n    ContainerReadonly?: string;\r\n    LabelNormale?: string;\r\n    LabelMouseover?: string;\r\n    LabelNotValid?: string;\r\n    LabelReadonly?: string;\r\n    BottoneAggiungiNormale?: string;\r\n    BottoneAggiungiMouseover?: string;\r\n    BottoneAggiungiNotValid?: string;\r\n    BottoneAggiungiReadonly?: string;\r\n    BottoneDownloadNormale?: string;\r\n    BottoneDownloadMouseover?: string;\r\n    BottoneDownloadNotValid?: string;\r\n    BottoneDownloadReadonly?: string;\r\n    BottoneEliminaNormale?: string;\r\n    BottoneEliminaMouseover?: string;\r\n    BottoneEliminaNotValid?: string;\r\n    BottoneEliminaReadonly?: string;\r\n    BottoneAnteprimaNormale?: string;\r\n    BottoneAnteprimaMouseover?: string;\r\n    BottoneAnteprimaNotValid?: string;\r\n    BottoneAnteprimaReadonly?: string;\r\n    CampoNomeFileNormale?: string;\r\n    CampoNomeFileMouseover?: string;\r\n    CampoNomeFileNotValid?: string;\r\n    CampoNomeFileReadonly?: string;\r\n}\r\n\r\nexport class AttachmentField extends BaseField {\r\n    AllowedMimeTypes: Array<string>;\r\n    isMultiAttach: boolean;\r\n    MetadataFields: Array<BaseField>;\r\n    AttachmentFieldStyleCSS?: AttachmentFieldStyleCSS;\r\n}\r\n\r\nexport const AvailableFileExtensions: Array<{ key: string, value: string }> = [\r\n    { value: '.pdf', key: 'application/pdf' },\r\n    { value: '.doc', key: 'application/msword' },\r\n    { value: '.xls', key: 'application/vnd.ms-excel' },\r\n    { value: '.ppt', key: 'application/vnd.ms-powerpoint' },\r\n    { value: '.docx', key: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' },\r\n    { value: '.xlsx', key: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' },\r\n    { value: '.pptx', key: 'application/vnd.openxmlformats-officedocument.presentationml.presentation' },\r\n    { value: '.csv', key: 'text/csv' },\r\n    { value: '.txt', key: 'text/plain' },\r\n];\r\n\r\nexport const AvailableImageExtensions: Array<{ key: string, value: string }> = [\r\n    { value: '.jpg/.jpeg', key: 'image/jpeg' },\r\n    { value: '.png', key: 'image/png' },\r\n    { value: '.bmp', key: 'image/bmp' },\r\n    { value: '.svg', key: 'image/svg+xml' },\r\n    { value: '.ico', key: 'image/x-icon' },\r\n];\r\n","import { AfterViewInit, ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges, ViewChild } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { AttachmentField, AttachmentFieldStyleCSS, AvailableFileExtensions, AvailableImageExtensions } from '../../../../models/fields/attachmentField.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { TmwAttachmentsComponent } from 'tmw-attachments';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\nimport { Subscription } from 'rxjs';\r\n\r\nconst ELEMENT_SELECTORS: { [key: string]: string | string[] } = {\r\n  Container:        '',\r\n  Label:            [' p.mb-2', ' .tmw-attachments-header-title'],\r\n  BottoneAggiungi:  ' .tmw-attachments-add-btn',\r\n  BottoneDownload:  ' .tmw-attachments-download-btn',\r\n  BottoneElimina:   ' .tmw-attachments-delete-btn',\r\n  BottoneAnteprima: ' .tmw-attachments-preview-btn',\r\n  CampoNomeFile:    ' tmw-attachments .tmw-attachments-filename-input',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover', 'NotValid', 'Readonly'];\r\n\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'attachment-field-template',\r\n  templateUrl: './attachment-field-template.component.html',\r\n  styleUrls: ['./attachment-field-template.component.scss']\r\n})\r\nexport class AttachmentFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent, AfterViewInit {\r\n\r\n  @Input() onlyImages: boolean = false;\r\n  @Input() field: AttachmentField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() onAttachmentsChange: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  @ViewChild(\"eqpAttachments\", { static: true }) eqpAttachments: TmwAttachmentsComponent;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n  private statusSub: Subscription | null = null;\r\n\r\n  constructor(\r\n    public utilityService: UtilityHelperService,\r\n    private cdr: ChangeDetectorRef,\r\n    private renderer: Renderer2\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.setFormControlValue();\r\n\r\n    if (!this.field.AllowedMimeTypes) {\r\n      this.field.AllowedMimeTypes = AvailableFileExtensions.concat(AvailableImageExtensions).map(ext => ext.key);\r\n    }\r\n    this.updateField();\r\n\r\n    this.fieldUid = 'af-' + Math.random().toString(36).slice(2, 10);\r\n    this.injectAttachmentFieldStyles();\r\n    this.subscribeToFormStatus();\r\n  }\r\n\r\n  ngAfterViewInit(): void {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectAttachmentFieldStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false\r\n      && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n      this.updateStateClasses();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n    this.statusSub?.unsubscribe();\r\n  }\r\n\r\n  injectAttachmentFieldStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as AttachmentField)?.AttachmentFieldStyleCSS ?? ({} as AttachmentFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, state: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'NotValid':  return `#${uid}.eqp-invalid${s}`;\r\n      case 'Readonly':  return `#${uid}.eqp-readonly${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: AttachmentFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    for (const el of ELEMENTS) {\r\n      const sEntry = ELEMENT_SELECTORS[el];\r\n      const selList = Array.isArray(sEntry) ? sEntry : [sEntry];\r\n\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n\r\n        for (const s of selList) {\r\n          const selector = this.getSelector(uid, state, s);\r\n          if (!selector) continue;\r\n\r\n          if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n          if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n        }\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n\r\n    this.toggleClass(wrapper, 'eqp-state-hover', this.forceState === 'Mouseover');\r\n\r\n    if (this.forceState === 'NotValid') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', true);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Readonly') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      this.toggleClass(wrapper, 'eqp-readonly', true);\r\n      return;\r\n    }\r\n    if (this.forceState === 'Normale' || this.forceState === 'Mouseover') {\r\n      this.toggleClass(wrapper, 'eqp-invalid', false);\r\n      this.toggleClass(wrapper, 'eqp-readonly', false);\r\n      return;\r\n    }\r\n\r\n    const ctrl = this.field?.FormFormGroup?.controls[this.field.Name];\r\n    const isInvalid = ctrl ? (ctrl.invalid && ctrl.touched) : false;\r\n    const isReadonly = this.field.Readonly || (this.field.Formula != null && this.field.Formula !== '');\r\n\r\n    this.toggleClass(wrapper, 'eqp-invalid', isInvalid);\r\n    this.toggleClass(wrapper, 'eqp-readonly', isReadonly);\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  private subscribeToFormStatus(): void {\r\n    this.statusSub?.unsubscribe();\r\n    if (this.field?.FormFormGroup) {\r\n      this.statusSub = this.field.FormFormGroup.statusChanges.subscribe(() => this.updateStateClasses());\r\n    }\r\n  }\r\n\r\n  updateField() {\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n    }\r\n  }\r\n\r\n  catchAttachmentList(event) {\r\n    this.record[this.field.Name] = event;\r\n    this.setFormControlValue();\r\n    this.onRecordValueChange();\r\n    this.onAttachmentsChange.emit();\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  private setFormControlValue() {\r\n    this.field.FormFormGroup.controls[this.field.Name].setValue(this.record[this.field.Name]);\r\n  }\r\n\r\n  private onRecordValueChange() {\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\">\r\n    <p *ngIf=\"!field.isMultiAttach\" class=\"mb-2\">\r\n        {{field.Description + (field.Required ? \" *\" : \"\")}}\r\n    </p>\r\n    <div class=\"row\" *ngIf=\"!field.isMultiAttach && record[field.Name] && record[field.Name][0]\">\r\n        <!-- <div class=\"mt-2\" *ngFor=\"let metadata of field.MetadataFields\"\r\n            [ngClass]=\"utilityService.getFieldSyleClass(metadata)\">\r\n            <dynamic-module-field-fix [field]=\"metadata\" [record]=\"record[field.Name][0]\"\r\n                (recordChange)=\"updateMetadataValidity()\">\r\n            </dynamic-module-field-fix>\r\n        </div> -->\r\n    </div>\r\n\r\n    <tmw-attachments [attachmentsList]=\"record[field.Name]\" [showMatCard]=\"true\" [allowOnlyImages]=\"onlyImages\"\r\n        [isDisabled]=\"field.FormFormGroup.disabled\" [showInlinePreview]=\"true\" [multipleAttachment]=\"field.isMultiAttach\"\r\n        [disableAction]=\"field.FormFormGroup.disabled\" [acceptedFileTypes]=\"field.AllowedMimeTypes\" [showHeader]=\"true\"\r\n        [headerTitle]=\"field.Description + (field.Required ? ' *' : '')\" (localEditedAttachments)=\"catchAttachmentList($event)\"\r\n        #eqpAttachments>\r\n    </tmw-attachments>\r\n</div>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<!-- <ng-template #metadataColumnTemplate let-row=\"row\" let-col=\"col\">\r\n    <dynamic-module-field-fix [field]=\"getFieldFromMetadata(col, row)\" [record]=\"row\"\r\n        (recordChange)=\"updateMetadataValidity()\">\r\n    </dynamic-module-field-fix>\r\n</ng-template> -->\r\n","export const I18nFr: I18nInterface = {\r\n    saveBtn: 'Enregistrer',\r\n    cancelBtn: 'Annuler',\r\n\r\n    loadImage: 'Charger une image depuis votre PC',\r\n    loadImageUrl: 'Charger une image depuis une URL',\r\n    loading: 'Chargement',\r\n    loadError: 'Erreur de chargement %@',\r\n    removeImage: 'Supprimer l\\'image',\r\n\r\n    sizes: {\r\n        small: 'Petit',\r\n        medium: 'Moyen',\r\n        large: 'Gros'\r\n    },\r\n\r\n    undo: 'Annuler',\r\n    redo: 'Répter',\r\n    clear: 'Effacer',\r\n\r\n    colors: {\r\n        black: 'Noir',\r\n        white: 'Blanc',\r\n        yellow: 'Jaune',\r\n        red: 'Rouge',\r\n        green: 'Vert',\r\n        blue: 'Blue',\r\n        purple: 'Violet'\r\n    },\r\n\r\n    tools: {\r\n        brush: 'Pinceau'\r\n    }\r\n};\r\n\r\nexport const I18nEn: I18nInterface = {\r\n    saveBtn: 'Save',\r\n    cancelBtn: 'Cancel',\r\n\r\n    loadImage: 'Load image',\r\n    loadImageUrl: 'Load image from URL',\r\n    loading: 'Loading',\r\n    loadError: 'Error loading %@',\r\n    removeImage: 'Remove image',\r\n\r\n    sizes: {\r\n        small: 'Small',\r\n        medium: 'Medium',\r\n        large: 'Large'\r\n    },\r\n\r\n    undo: 'Undo',\r\n    redo: 'Redo',\r\n    clear: 'Clear',\r\n\r\n    colors: {\r\n        black: 'Black',\r\n        white: 'White',\r\n        yellow: 'Yellow',\r\n        red: 'Red',\r\n        green: 'Green',\r\n        blue: 'Blue',\r\n        purple: 'Purple',\r\n    },\r\n\r\n    tools: {\r\n        brush: 'Brush'\r\n    }\r\n};\r\n\r\nexport const i18nLanguages: { [name: string]: I18nInterface } = {\r\n    fr: I18nFr,\r\n    en: I18nEn\r\n};\r\n\r\nexport interface I18nInterface {\r\n    saveBtn?: string;\r\n    cancelBtn?: string;\r\n    closeDialog?: string;\r\n\r\n    loadImage?: string;\r\n    loadImageUrl?: string;\r\n    loading?: string;\r\n    loadError?: string;\r\n    removeImage?: string;\r\n\r\n    sizes?: { [name: string]: string };\r\n\r\n    undo?: string;\r\n    redo?: string;\r\n    clear?: string;\r\n\r\n    colors?: { [name: string]: string };\r\n\r\n    tools?: { [name: string]: string };\r\n}\r\n","import { AfterViewInit, Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges, TemplateRef } from '@angular/core';\r\nimport { I18nEn, I18nInterface, i18nLanguages } from './i18n';\r\nimport { fabric } from 'fabric';\r\nimport { Observable, of } from 'rxjs';\r\nimport { switchMap } from 'rxjs/operators';\r\n\r\n@Component({\r\n  selector: 'tmw-image-drawer',\r\n  templateUrl: './tmw-image-drawer.component.html',\r\n  styleUrls: ['./tmw-image-drawer.component.scss']\r\n})\r\nexport class TmwImageDrawerComponent implements OnInit, AfterViewInit, OnChanges {\r\n\r\n  @Output() closeDialog: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  @Input() public src?: string;\r\n  @Input() public width?: number;\r\n  @Input() public height?: number;\r\n\r\n  @Input() public forceSizeCanvas = true;\r\n  @Input() public forceSizeExport = false;\r\n  @Input() public enableRemoveImage = false;\r\n  @Input() public enableLoadAnotherImage = false;\r\n  @Input() public enableTooltip = false;\r\n  @Input() public showCancelButton = true;\r\n\r\n  @Input() public inConfig?: boolean = false;\r\n\r\n  // @ts-ignore\r\n  @Input('i18n') public i18nUser: I18nInterface;\r\n  @Input() public locale: string = 'en';\r\n\r\n  @Input() public loadingTemplate?: TemplateRef<any>;\r\n  @Input() public errorTemplate?: TemplateRef<any>;\r\n\r\n  @Input() public outputMimeType = 'image/jpeg';\r\n  @Input() public outputQuality = 0.8;\r\n\r\n  @Input() public borderCss: string = 'none';\r\n\r\n  @Input() public drawingSizes: { [name: string]: number } = {\r\n    small: 5,\r\n    medium: 10,\r\n    large: 25,\r\n  };\r\n\r\n  @Input() public colors: { [name: string]: string } = {\r\n    black: '#000',\r\n    white: '#fff',\r\n    yellow: '#ffeb3b',\r\n    red: '#f44336',\r\n    blue: '#2196f3',\r\n    green: '#4caf50',\r\n    purple: '#7a08af',\r\n  };\r\n\r\n  @Output() public save: EventEmitter<Blob> = new EventEmitter<Blob>();\r\n  @Output() public loadOriginal: EventEmitter<void> = new EventEmitter<void>();\r\n\r\n  public currentTool = 'brush';\r\n  public currentSize = 'medium';\r\n  public currentColor = 'black';\r\n  public i18n: I18nInterface = I18nEn;\r\n\r\n  public canUndo = false;\r\n  public canRedo = false;\r\n\r\n  public isLoading = true;\r\n  public hasError = false;\r\n  public errorMessage = '';\r\n\r\n  private canvas: fabric.Canvas;\r\n  private stack: fabric.Object[] = [];\r\n\r\n  public colorsName: string[] = [];\r\n  public drawingSizesName: string[] = [];\r\n\r\n  private imageUsed?: fabric.Image;\r\n\r\n  componentGuid: string;\r\n\r\n  constructor() {\r\n  }\r\n\r\n  public ngOnInit(): void {\r\n    this.componentGuid = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n      var r = Math.random() * 16 | 0,\r\n        v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n      return v.toString(16);\r\n    });\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    this.isLoading = false\r\n    this.colorsName = Object.keys(this.colors);\r\n    this.drawingSizesName = Object.keys(this.drawingSizes);\r\n\r\n    const canvasScaledElement = document.getElementById(this.componentGuid) as HTMLCanvasElement;\r\n    this.canvas = new fabric.Canvas(canvasScaledElement, {\r\n      hoverCursor: 'pointer',\r\n      isDrawingMode: true,\r\n    });\r\n    this.canvas.backgroundColor = 'white';\r\n\r\n    if (this.src) {\r\n      this.importPhotoFromSrc(this.src);\r\n    } else {\r\n      if (!this.width || !this.height) {\r\n        throw new Error('No width or hight given !');\r\n      }\r\n\r\n      this.canvas.setWidth(this.width);\r\n      this.canvas.setHeight(this.height);\r\n    }\r\n\r\n    this.canvas.on('path:created', () => {\r\n      this.stack = [];\r\n      this.setUndoRedo();\r\n    });\r\n\r\n    this.selectTool(this.currentTool);\r\n    this.selectColor(this.currentColor);\r\n    this.selectDrawingSize(this.currentSize);\r\n\r\n    if (this.locale && i18nLanguages[this.locale.toLowerCase()]) {\r\n      this.i18n = i18nLanguages[this.locale.toLowerCase()];\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes.src && !changes.src.firstChange && changes.src.currentValue) {\r\n      if (typeof changes.src.currentValue === 'string') {\r\n        this.importPhotoFromSrc(changes.src.currentValue);\r\n      } else if (changes.src.currentValue instanceof Blob) {\r\n        this.importPhotoFromBlob(changes.src.currentValue);\r\n      }\r\n    }\r\n  }\r\n\r\n  // Tools\r\n  public selectTool(tool: string) {\r\n    this.currentTool = tool;\r\n  }\r\n\r\n  public selectDrawingSize(size: string) {\r\n    this.currentSize = size;\r\n    if (this.canvas) {\r\n      this.canvas.freeDrawingBrush.width = this.drawingSizes[size];\r\n    }\r\n  }\r\n\r\n  public selectColor(color: string) {\r\n    this.currentColor = color;\r\n    if (this.canvas) {\r\n      this.canvas.freeDrawingBrush.color = this.colors[color];\r\n    }\r\n  }\r\n\r\n  // Actions\r\n  public undo() {\r\n    if (this.canUndo) {\r\n      const lastId = this.canvas.getObjects().length - 1;\r\n      const lastObj = this.canvas.getObjects()[lastId];\r\n      this.stack.push(lastObj);\r\n      this.canvas.remove(lastObj);\r\n      this.setUndoRedo();\r\n    }\r\n  }\r\n\r\n  public redo() {\r\n    if (this.canRedo) {\r\n      const firstInStack = this.stack.splice(-1, 1)[0];\r\n      if (firstInStack) {\r\n        this.canvas.insertAt(firstInStack, this.canvas.getObjects().length - 1, false);\r\n      }\r\n      this.setUndoRedo();\r\n    }\r\n  }\r\n\r\n  public clearCanvas() {\r\n    if (this.canvas) {\r\n      this.canvas.remove(...this.canvas.getObjects());\r\n      this.setUndoRedo();\r\n    }\r\n  }\r\n\r\n  public saveImage() {\r\n    if (!this.forceSizeExport || (this.forceSizeExport && this.width && this.height)) {\r\n      const canvasScaledElement: HTMLCanvasElement = document.createElement('canvas');\r\n      const canvasScaled = new fabric.Canvas(canvasScaledElement);\r\n      canvasScaled.backgroundColor = 'white';\r\n\r\n      new Observable<fabric.Canvas>(observer => {\r\n        if (this.imageUsed) {\r\n          if (this.forceSizeExport) {\r\n            canvasScaled.setWidth(this.width);\r\n            canvasScaled.setHeight(this.height);\r\n\r\n            this.imageUsed.cloneAsImage(imageCloned => {\r\n              imageCloned.scaleToWidth(this.width, false);\r\n              imageCloned.scaleToHeight(this.height, false);\r\n\r\n              canvasScaled.setBackgroundImage(imageCloned, (img: HTMLImageElement) => {\r\n                if (!img) {\r\n                  observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n                }\r\n\r\n                observer.next(canvasScaled);\r\n                observer.complete();\r\n              }, {\r\n                crossOrigin: 'anonymous',\r\n                originX: 'left',\r\n                originY: 'top'\r\n              });\r\n            });\r\n          } else {\r\n            canvasScaled.setBackgroundImage(this.imageUsed, (img: HTMLImageElement) => {\r\n              if (!img) {\r\n                observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n              }\r\n\r\n              canvasScaled.setWidth(img.width);\r\n              canvasScaled.setHeight(img.height);\r\n\r\n              observer.next(canvasScaled);\r\n              observer.complete();\r\n            }, {\r\n              crossOrigin: 'anonymous',\r\n              originX: 'left',\r\n              originY: 'top'\r\n            });\r\n          }\r\n        } else {\r\n          canvasScaled.setWidth(this.width);\r\n          canvasScaled.setHeight(this.height);\r\n        }\r\n      }).pipe(\r\n        switchMap(() => {\r\n          let process = of(canvasScaled);\r\n\r\n          if (this.canvas.getObjects().length > 0) {\r\n            const ratioX = canvasScaled.getWidth() / this.canvas.getWidth();\r\n            const ratioY = canvasScaled.getHeight() / this.canvas.getHeight();\r\n\r\n            this.canvas.getObjects().forEach((originalObject: fabric.Object, i: number) => {\r\n              process = process.pipe(switchMap(() => {\r\n                return new Observable<fabric.Canvas>(observerObject => {\r\n                  originalObject.clone((clonedObject: fabric.Object) => {\r\n                    clonedObject.set('left', originalObject.left * ratioX);\r\n                    clonedObject.set('top', originalObject.top * ratioY);\r\n                    clonedObject.scaleToWidth(originalObject.width * ratioX);\r\n                    clonedObject.scaleToHeight(originalObject.height * ratioY);\r\n\r\n                    canvasScaled.insertAt(clonedObject, i, false);\r\n                    canvasScaled.renderAll();\r\n\r\n                    observerObject.next(canvasScaled);\r\n                    observerObject.complete();\r\n                  });\r\n                });\r\n              }));\r\n            });\r\n          }\r\n          return process;\r\n        }),\r\n      ).subscribe(() => {\r\n        canvasScaled.renderAll();\r\n        canvasScaled.getElement().toBlob(\r\n          (data: Blob) => {\r\n            this.save.emit(data);\r\n          },\r\n          this.outputMimeType,\r\n          this.outputQuality\r\n        );\r\n      });\r\n    } else {\r\n      this.canvas.getElement().toBlob(\r\n        (data: Blob) => {\r\n          this.save.emit(data);\r\n        },\r\n        this.outputMimeType,\r\n        this.outputQuality\r\n      );\r\n    }\r\n  }\r\n\r\n  public doLoadOriginal() {\r\n    this.loadOriginal.emit();\r\n  }\r\n\r\n  public getTextTranslated(name: string): string {\r\n    let strOk = name.split('.').reduce((o, i) => o[i], this.i18n as any);\r\n\r\n    if (this.i18nUser) {\r\n      try {\r\n        const str = name.split('.').reduce((o, i) => o[i], this.i18nUser as any);\r\n        if (str) {\r\n          strOk = str;\r\n        }\r\n      } catch (e) {\r\n        // if we pass here, ignored\r\n      }\r\n    }\r\n\r\n    if (!strOk) {\r\n      console.error(name + ' translation not found !');\r\n    }\r\n\r\n    return strOk;\r\n  }\r\n\r\n  public getTooltipTranslated(name: string): string {\r\n    if (this.enableTooltip) {\r\n      return this.getTextTranslated(name)\r\n    } else {\r\n      return '';\r\n    }\r\n  }\r\n\r\n  private setUndoRedo() {\r\n    this.canUndo = this.canvas.getObjects().length > 0;\r\n    this.canRedo = this.stack.length > 0;\r\n    // this.canvas.renderAll();\r\n  }\r\n\r\n  public importPhotoFromFile(event: Event | any) {\r\n    if (event.target.files && event.target.files.length > 0) {\r\n      const file = event.target.files[0];\r\n      if (file.type.match('image.*')) {\r\n        this.importPhotoFromBlob(file);\r\n      } else {\r\n        throw new Error('Not an image !');\r\n      }\r\n    }\r\n  }\r\n\r\n  public removeImage() {\r\n    if (this.imageUsed) {\r\n      this.imageUsed.dispose();\r\n      this.imageUsed = null;\r\n    }\r\n    this.canvas.backgroundImage = null;\r\n\r\n    if (this.width && this.height) {\r\n      this.canvas.setWidth(this.width);\r\n      this.canvas.setHeight(this.height);\r\n    }\r\n\r\n    this.canvas.renderAll();\r\n  }\r\n\r\n  public get hasImage(): boolean {\r\n    return !!this.canvas.backgroundImage;\r\n  }\r\n\r\n  private importPhotoFromSrc(src: string) {\r\n    this.isLoading = true;\r\n    let isFirstTry = true;\r\n    const imgEl = new Image();\r\n    imgEl.setAttribute('crossOrigin', 'anonymous');\r\n    imgEl.src = src;\r\n    imgEl.onerror = () => {\r\n      // Retry with cors proxy\r\n      if (isFirstTry) {\r\n        imgEl.src = 'https://cors-anywhere.herokuapp.com/' + this.src;\r\n        isFirstTry = false;\r\n      } else {\r\n        this.isLoading = false;\r\n        this.hasError = true;\r\n        this.errorMessage = this.getTextTranslated('loadError').replace('%@', this.src as string);\r\n      }\r\n    };\r\n    imgEl.onload = () => {\r\n      this.isLoading = false;\r\n      this.imageUsed = new fabric.Image(imgEl);\r\n\r\n      this.imageUsed.cloneAsImage(image => {\r\n        let width = imgEl.width;\r\n        let height = imgEl.height;\r\n\r\n        if (this.width) {\r\n          width = this.width;\r\n        }\r\n        if (this.height) {\r\n          height = this.height;\r\n        }\r\n\r\n        image.scaleToWidth(width, false);\r\n        image.scaleToHeight(height, false);\r\n\r\n        this.canvas.setBackgroundImage(image, ((img: HTMLImageElement) => {\r\n          if (img) {\r\n            if (this.forceSizeCanvas) {\r\n              this.canvas.setWidth(width);\r\n              this.canvas.setHeight(height);\r\n            } else {\r\n              this.canvas.setWidth(image.getScaledWidth());\r\n              this.canvas.setHeight(image.getScaledHeight());\r\n            }\r\n          }\r\n        }), {\r\n          crossOrigin: 'anonymous',\r\n          originX: 'left',\r\n          originY: 'top'\r\n        });\r\n      });\r\n    };\r\n  }\r\n\r\n  private importPhotoFromBlob(file: Blob | File) {\r\n    const reader = new FileReader();\r\n    reader.readAsDataURL(file);\r\n    reader.onload = (evtReader: any) => {\r\n      if (evtReader.target.readyState == FileReader.DONE) {\r\n        this.importPhotoFromSrc(evtReader.target.result);\r\n      }\r\n    };\r\n  }\r\n\r\n  public importPhotoFromUrl() {\r\n    const url = prompt(this.getTooltipTranslated('loadImageUrl'));\r\n    if (url) {\r\n      this.importPhotoFromSrc(url);\r\n    }\r\n  }\r\n\r\n  public close(){\r\n    this.closeDialog.emit();\r\n  }\r\n}\r\n","<div class=\"loading\" *ngIf=\"isLoading && loadingTemplate\">\r\n  <ng-container *ngTemplateOutlet=\"loadingTemplate\"></ng-container>\r\n</div>\r\n<div class=\"error\" *ngIf=\"hasError\">\r\n  <ng-container *ngTemplateOutlet=\"errorTemplate ? errorTemplate : defaultError\"></ng-container>\r\n</div>\r\n\r\n<!-- <ng-template #defaultLoading>\r\n    <p>{{ getTextTranslated('loading') }}</p>\r\n</ng-template> -->\r\n<ng-template #defaultError>\r\n  <p>{{ errorMessage }}</p>\r\n</ng-template>\r\n\r\n<div class=\"toolbar\" *ngIf=\"!isLoading\">\r\n  <div class=\"tools\">\r\n\r\n      <div class=\"brush\">\r\n          <i class=\"title\">tools</i>\r\n          <div class=\"internal\">\r\n            <i class=\"btn\" [class.selected]=\"currentTool == 'brush'\" (click)=\"selectTool('brush')\"\r\n              [title]=\"getTooltipTranslated('tools.brush')\"><tmw-icon class=\"mat-icon\" name=\"brush\"></tmw-icon></i>\r\n            <span *ngFor=\"let drawingSizeName of drawingSizesName\" class=\"size btn mr-1\"\r\n              [style.width.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n              [style.height.px]=\"drawingSizes[drawingSizeName] * 0.8 + 8\"\r\n              [style.borderRadius.px]=\"drawingSizes[drawingSizeName] * 0.4 + 4\"\r\n              [class.selected]=\"currentSize == drawingSizeName\" [title]=\"getTooltipTranslated('sizes.' + drawingSizeName)\"\r\n              (click)=\"selectDrawingSize(drawingSizeName)\">\r\n            </span>\r\n          </div>\r\n      </div>\r\n\r\n      <div class=\"commands\">\r\n        <i class=\"title\">options</i>\r\n        <div class=\"internal\">\r\n          <i class=\"btn\" [class.disabled]=\"!canUndo\" (click)=\"undo()\"\r\n          [title]=\"getTooltipTranslated('undo')\"><tmw-icon class=\"mat-icon\" name=\"arrow-back-up\"></tmw-icon></i>\r\n          <i class=\"btn\" [class.disabled]=\"!canRedo\" (click)=\"redo()\"\r\n            [title]=\"getTooltipTranslated('redo')\"><tmw-icon class=\"mat-icon\" name=\"arrow-forward-up\"></tmw-icon></i>\r\n          <i class=\"btn\" (click)=\"clearCanvas()\" [title]=\"getTooltipTranslated('clear')\"><tmw-icon class=\"mat-icon\" name=\"x\"></tmw-icon></i>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"colors\">\r\n        <i class=\"title\">colors</i>\r\n        <div class=\"internal\">\r\n          <div *ngFor=\"let colorName of colorsName\" [class.selected]=\"currentColor == colorName\" class=\"color\"\r\n          [ngClass]=\"colorName\" [style.background]=\"colors[colorName]\"\r\n          [title]=\"getTooltipTranslated('colors.' + colorName)\" (click)=\"selectColor(colorName)\">\r\n          </div>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"actions\">\r\n        <i class=\"title\">actions</i>\r\n        <div class=\"internal\">\r\n          <a href=\"#\" class=\"btn btn-success\" (click)=\"saveImage(); $event.preventDefault()\" *ngIf=\"!inConfig\">{{\r\n            getTextTranslated('saveBtn') }}</a>\r\n          <a href=\"#\" class=\"btn btn-warning\" *ngIf=\"showCancelButton && !inConfig\" (click)=\"doLoadOriginal(); $event.preventDefault()\">{{\r\n            getTextTranslated('cancelBtn') }}</a>\r\n          <a href=\"#\" class=\"btn btn-danger\" *ngIf=\"showCancelButton\" (click)=\"close(); $event.preventDefault()\">{{\r\n            getTextTranslated('closeDialog') }}</a>\r\n          </div>\r\n      </div>\r\n\r\n  </div>\r\n\r\n  <!-- Any additional toolbar buttons to be projected by the consuming app -->\r\n  <ng-content></ng-content>\r\n</div>\r\n\r\n<div [ngStyle]=\"{ border: borderCss }\">\r\n  <canvas [id]=\"componentGuid\"></canvas>\r\n</div>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ImageField, ImageFieldStyleCSS, ImageFolderEnum } from '../../../../models/fields/imageField.model';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { I18nInterface } from '../../tmw-image-drawer/i18n';\r\nimport { EndPointConfiguration, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { DynAttachment } from '../../../../models/dynAttachment';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\nconst toBase64 = file => new Promise<string>((resolve, reject) => {\r\n  const reader = new FileReader();\r\n  reader.readAsDataURL(file);\r\n  reader.onload = () => resolve(reader.result.toString());\r\n  reader.onerror = error => reject(error);\r\n});\r\n\r\nconst ELEMENT_SELECTORS: { [key: string]: string } = {\r\n  Container:      ' .imageContainer',\r\n  Descrizione:    ' .image-label',\r\n  BottoneDisegna: ' .drawButton button.btn',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover'];\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'image-field-template',\r\n  templateUrl: './image-field-template.component.html',\r\n  styleUrls: ['./image-field-template.component.scss']\r\n})\r\nexport class ImageFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() field: ImageField;\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() imageDraw: EventEmitter<DynAttachment> = new EventEmitter<DynAttachment>();\r\n\r\n  imageWidth: number = 0;\r\n  drawingLoaded: boolean = false;\r\n  FileBase64: string = \"\";\r\n  DrawFileBase64: string = \"\";\r\n  FileDataBase64: string = \"\";\r\n\r\n  AttachmentID: string | number;\r\n  imageDrawAttachment: DynAttachment;\r\n\r\n  public width = null;\r\n  public height = null;\r\n  public i18n: I18nInterface = {\r\n    saveBtn: 'Salva modifiche',\r\n    cancelBtn: 'Ricarica originale',\r\n    closeDialog: 'Annulla disegno',\r\n  };\r\n  dialogImageDrawingRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogImageDrawing\", { static: true }) dialogImageDrawing: TemplateRef<any>;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n\r\n  constructor(\r\n    private dialog: MatDialog,\r\n    private utilityHelperService: UtilityHelperService,\r\n    private renderer: Renderer2\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'img-' + Math.random().toString(36).slice(2, 10);\r\n    this.injectStyles();\r\n\r\n    // In anteprima configuratore senza un'immagine reale: non caricare DynAttachment\r\n    if (this.inConfig && !this.field.DynAttachment) {\r\n      this.imageWidth = 200;\r\n      this.updateField();\r\n      return;\r\n    }\r\n\r\n    if (this.record[this.field.Name] == null || this.record[this.field.Name] == 0){\r\n      this.FileDataBase64 = this.field.DynAttachment.FileDataBase64;\r\n      this.imageWidth =  (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n      this.record[this.field.Name] = this.field.DynAttachment;\r\n\r\n      this.imageDrawAttachment = JSON.parse(JSON.stringify(this.field.DynAttachment));\r\n      this.imageDrawAttachment.ID = 0;\r\n\r\n      this.AttachmentID = this.field.DynAttachment.ID;\r\n\r\n    } else {\r\n      if (typeof this.record[this.field.Name] === 'string'){\r\n        this.record[this.field.Name] = JSON.parse(this.record[this.field.Name]);\r\n      }\r\n      this.imageWidth =  (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n\r\n      if ((this.record[this.field.Name] as DynAttachment).FileBases64 != null){\r\n        this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileBases64[ImageFolderEnum.Regular];\r\n      } else {\r\n        this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileDataBase64;\r\n      }\r\n\r\n      (this.record[this.field.Name] as DynAttachment).FileDataBase64 = this.FileDataBase64;\r\n\r\n      this.imageDrawAttachment = this.record[this.field.Name];\r\n      this.imageDrawAttachment.FileDataBase64 = this.FileDataBase64;\r\n\r\n      this.AttachmentID = this.imageDrawAttachment.ID;\r\n    }\r\n\r\n    this.recordChange.emit(this.record);\r\n    this.imageDraw.emit(this.imageDrawAttachment);\r\n    this.updateField();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n  }\r\n\r\n  private injectStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as ImageField)?.ImageFieldStyleCSS ?? ({} as ImageFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, state: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: ImageFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n    for (const el of ELEMENTS) {\r\n      const s = ELEMENT_SELECTORS[el];\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n        const selector = this.getSelector(uid, state, s);\r\n        if (!selector) continue;\r\n        if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n        if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n      }\r\n    }\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n    this.toggleClass(wrapper, 'eqp-state-hover', this.forceState === 'Mouseover');\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  updateField() {\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n    }\r\n  }\r\n\r\n  resetPreLoadedImage() {\r\n    this.width = null;\r\n    this.height = null;\r\n    this.getImageDimensions();\r\n  }\r\n\r\n  onAttachmentsChange() {\r\n    /*\r\n    if (!this.field.AttachDefinition.IsMultiAttach && this.field.EnableDrawing && this.record[this.field.Name] && this.record[this.field.Name][0]) {\r\n      this.getImageDimensions();\r\n      this.dialogImageDrowingRef = this.dialog.open(this.dialogImageDrowing, { disableClose: true, hasBackdrop: true, width: '75%' });\r\n    }\r\n    */\r\n  }\r\n\r\n  async saveDraw(drawnPicture: Blob) {\r\n    let base64File = await toBase64(drawnPicture);\r\n    if (base64File) {\r\n      this.DrawFileBase64 = base64File.split(\",\")[1];\r\n      this.FileDataBase64 = this.DrawFileBase64;\r\n      this.imageDrawAttachment.FileDataBase64 = this.DrawFileBase64;\r\n      this.imageDraw.emit(this.imageDrawAttachment);\r\n    }\r\n    if (this.dialogImageDrawingRef) {\r\n      this.closeImageDrowingDialog();\r\n    }\r\n  }\r\n\r\n  closeImageDrowingDialog() {\r\n    this.dialogImageDrawingRef.close();\r\n    this.width = null;\r\n    this.height = null;\r\n  }\r\n\r\n  private getImageDimensions() {\r\n    var blob: Blob = this.getBlobFromBase64();\r\n    const reader = new FileReader();\r\n    reader.onload = (e: any) => {\r\n      const image = new Image();\r\n      image.src = e.target.result;\r\n      image.onload = rs => {\r\n        this.height = rs.currentTarget['height'];\r\n        this.width = rs.currentTarget['width'];\r\n      };\r\n    };\r\n    reader.readAsDataURL(blob);\r\n  }\r\n\r\n  private getBlobFromBase64() {\r\n    const byteCharacters = atob(this.record[this.field.Name][0].FileDataBase64);\r\n    const byteNumbers = new Array(byteCharacters.length);\r\n    for (let i = 0; i < byteCharacters.length; i++) {\r\n      byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n    }\r\n    const byteArray = new Uint8Array(byteNumbers);\r\n    return new Blob([byteArray], { type: this.record[this.field.Name][0].FileContentType });\r\n  }\r\n\r\n  private onRecordValueChange() {\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n\r\n  public openDraw(){\r\n    this.dialogImageDrawingRef = this.dialog.open(this.dialogImageDrawing, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      panelClass: 'image-modal',\r\n      width: '75%'\r\n    });\r\n\r\n    if (this.AttachmentID != null && Number(this.AttachmentID) > 0){\r\n      this.load(this.AttachmentID,[ImageFolderEnum.Regular]);\r\n    } else {\r\n      this.FileBase64 = this.FileDataBase64;\r\n      this.drawingLoaded = true;\r\n    }\r\n  }\r\n\r\n  load(ID,Types){\r\n    this.drawingLoaded = false;\r\n    var dynamicModuleParams = [\r\n      { ParamName: \"AttachmentID\", ParamValue: ID, ParamType: ParamTypeEnum[\"Query param\"] },\r\n      { ParamName: \"Types\",        ParamValue: Types, ParamType: ParamTypeEnum[\"Query param\"] },\r\n    ];\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetAttachmentWithBases64,\r\n      dynamicModuleParams,\r\n      (res: DynAttachment) => {\r\n        this.FileBase64 = res.FileBases64[ImageFolderEnum.Regular];\r\n        this.drawingLoaded = true;\r\n      },\r\n      (err) => {}\r\n    );\r\n  }\r\n\r\n  loadOriginal(){\r\n    this.load(this.field.DynAttachment.ID,[ImageFolderEnum.Regular]);\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\">\r\n     <div class=\"row imageContainer\">\r\n          <div class=\"row\">\r\n               <div class=\"col-12 image-label\">{{field.Description}}</div>\r\n               <div class=\"col-12\">\r\n                    <img *ngIf=\"field.DynAttachment\"\r\n                         src=\"data:{{field.DynAttachment.FileContentType}};base64,{{FileDataBase64}}\"\r\n                         [height]=\"field.DynAttachment.ResizedImageHeightPx != null ? field.DynAttachment.ResizedImageHeightPx : 128\"\r\n                         class=\"singleImage\">\r\n               </div>\r\n               <div *ngIf=\"field.EnableDrawing\" class=\"col-12 drawButton\">\r\n                    <button class=\"btn btn-primary btn-w100\" (click)=\"openDraw()\">Disegna</button>\r\n               </div>\r\n               <div *ngIf=\"field.DynAttachment?.ButtonKey != null && field.DynAttachment?.ButtonKey != ''\"\r\n                    class=\"col-12 flex justify-content-around buttonkey\">\r\n                    <div>Etichetta</div>\r\n                    <div>{{field.DynAttachment.ButtonKey}}</div>\r\n               </div>\r\n               <div *ngIf=\"field.DynAttachment?.ButtonValue != null && field.DynAttachment?.ButtonValue != ''\"\r\n                    class=\"col-12 flex justify-content-around buttonvalue\">\r\n                    <div>Valore</div>\r\n                    <div>{{field.DynAttachment.ButtonValue}}</div>\r\n               </div>\r\n          </div>\r\n     </div>\r\n</div>\r\n\r\n<!-- DIALOG PER DISEGNARE SUL NUOVO ALLEGATO CARICATO -->\r\n<ng-template #dialogImageDrawing>\r\n     <div class=\"padder\">\r\n          <div class=\"row\">\r\n               <div class=\"col-sm-12 col-md-12\">\r\n                    <tmw-image-drawer *ngIf=\"drawingLoaded\"\r\n                         [src]=\"'data:'+ field.DynAttachment.FileContentType + ';base64,'+ FileBase64\"\r\n                         [inConfig]=\"inConfig\" [showCancelButton]=\"false\" [enableLoadAnotherImage]=\"false\"\r\n                         [enableRemoveImage]=\"false\" [width]=\"field.DynAttachment.ImageWidthPx\"\r\n                         [height]=\"field.DynAttachment.ImageHeightPx\" [i18n]=\"i18n\" [showCancelButton]=\"true\"\r\n                         (save)=\"saveDraw($event)\" (loadOriginal)=\"loadOriginal()\"\r\n                         (closeDialog)=\"closeImageDrowingDialog()\">\r\n                    </tmw-image-drawer>\r\n               </div>\r\n          </div>\r\n     </div>\r\n</ng-template>","import { AttachmentType, TmwAttachmentDTO } from \"tmw-attachments\";\r\n\r\nexport class DynAttachment implements TmwAttachmentDTO {\r\n\r\n    ID: number | string;\r\n    FileName?: string;\r\n    FileContentType?: string;\r\n    FileExtension?: string;\r\n    FilePath?: string;\r\n    AttachmentType?: AttachmentType;\r\n    AttachmentFieldType: AttachmentFieldTypeEnum;\r\n    ExtraJSON: string;\r\n\r\n    FileDataBase64?: string;\r\n    IsImage?: boolean;\r\n    FileThumbnailBase64?: string;\r\n    TrustedUrl?: any;    \r\n\r\n    OrdinalPosition?: number;\r\n    \r\n    Path: string; \r\n    ThumbmailPath: string; \r\n    Title: string; \r\n    CreationDate: Date;\r\n\r\n    /// <summary>\r\n    /// Nome dell'applicazione che sdta inviando il fiel immagine da archiviare - viene utilizzato per coistruire una struytuura gerarchica per l'archiviazione dei files\r\n    /// Esempio Attachmants/TMED/2   dove 2 è l'D della struttura che sta inviando (OrgaID) - questa proprioetà noin viene salvata nel DB\r\n    /// </summary>\r\n    ProjectName: string; \r\n\r\n    OrgaID: string;\r\n    FormID: string;\r\n    FieldID: string;\r\n    AnswerID: string;\r\n   \r\n    ImageWidthPx: number;\r\n    ImageHeightPx: number;\r\n    ResizedImageHeightPx: number;\r\n\r\n    ButtonValue: string;\r\n    ButtonKey: string;\r\n    \r\n    objectToSelect?: DynAttachmentSelectObject = null;\r\n    originalIndex?: number;\r\n\r\n    FileBases64?: { [key: string]: string; } = {};\r\n\r\n}\r\n\r\nexport class DynAttachmentSelectObject {\r\n    ID: number | string;\r\n    ButtonValue: string;\r\n    ButtonKey: string;\r\n}\r\n\r\nexport class attachmentTypeEnum{\r\n    SINGLE=1\r\n    LIST=2\r\n}\r\n\r\nexport enum AttachmentFieldTypeEnum\r\n{\r\n    IMMAGINE = 7,\r\n    ELENCO_IMMAGINI = 11,\r\n    IMMAGINE_CON_MARKERS =13\r\n}","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ImageSelectorField, ImageSelectorFieldStyleCSS } from '../../../../models/fields/imageSelectorField.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynAttachment, DynAttachmentSelectObject } from '../../../../models/dynAttachment';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\n// Elementi scoped da #fieldUid (mat-form-field DOM interno al wrapper)\r\nconst ELEMENT_SELECTORS: { [key: string]: string } = {\r\n  Container:        ' mat-form-field',\r\n  CasellaSelezione: ' .mat-mdc-text-field-wrapper',\r\n  Descrizione:      ' .mdc-floating-label',\r\n};\r\n\r\nconst STATES = ['Normale', 'Mouseover', 'Selezionato', 'NotValid', 'Readonly'];\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'image-field-selector-template',\r\n  templateUrl: './image-field-selector-template.component.html',\r\n  styleUrls: ['./image-field-selector-template.component.scss']\r\n})\r\nexport class ImageFieldSelectorTemplateComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() field: ImageSelectorField;\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n  transformedRecord: any;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n\r\n  constructor(private renderer: Renderer2) { }\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'isf-' + Math.random().toString(36).slice(2, 10);\r\n    this.injectStyles();\r\n\r\n    GlobalService.debugLog('ImageFieldSelectorTemplateComponent ngOnInit - record', this.record[this.field.Name]);\r\n    GlobalService.debugLog('ImageFieldSelectorTemplateComponent ngOnInit - field', this.field);\r\n\r\n    this.initStyles();\r\n    this.initializeAttachments();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] && !changes['record'].firstChange &&\r\n        JSON.stringify(changes['record'].currentValue) !== JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n  }\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if (this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)\r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n  }\r\n\r\n  ToLowerCase(el: string) {\r\n    return el.toLowerCase();\r\n  }\r\n\r\n  updateField() { }\r\n\r\n  initializeAttachments() {\r\n    if (!this.field.AttachmentList || this.field.AttachmentList.length === 0) return;\r\n\r\n    this.field.AttachmentList.forEach((attachment) => {\r\n      attachment.objectToSelect = new DynAttachmentSelectObject();\r\n      attachment.objectToSelect.ID = attachment.ID;\r\n      attachment.objectToSelect.ButtonKey = attachment.ButtonKey;\r\n      attachment.objectToSelect.ButtonValue = attachment.ButtonValue;\r\n    });\r\n\r\n    if (this.record[this.field.Name] != null) {\r\n      if (!this.field.IsMultiChoiche) {\r\n        this.transformedRecord = this.record[this.field.Name].ID;\r\n      } else {\r\n        this.transformedRecord = [];\r\n        (this.record[this.field.Name] as Array<DynAttachment>).forEach((element) => {\r\n          this.transformedRecord.push(Number(element.ID));\r\n        });\r\n      }\r\n    }\r\n  }\r\n\r\n  onRecordValueChange(event: number) {\r\n    this.record[this.field.Name] = new Array<DynAttachment>();\r\n\r\n    if (!this.field.IsMultiChoiche) {\r\n      if (event) {\r\n        var dynAttachment: DynAttachment = JSON.parse(JSON.stringify(this.field.AttachmentList.find(x => x.ID == event)));\r\n        dynAttachment.FileDataBase64 = null;\r\n        this.record[this.field.Name] = dynAttachment;\r\n      }\r\n    } else {\r\n      this.transformedRecord?.forEach((element) => {\r\n        var dynAttachment: DynAttachment = JSON.parse(JSON.stringify(this.field.AttachmentList.find(x => x.ID == element)));\r\n        dynAttachment.FileDataBase64 = null;\r\n        this.record[this.field.Name].push(dynAttachment);\r\n      });\r\n    }\r\n\r\n    this.recordChange.emit(this.record);\r\n  }\r\n\r\n  // ─── CSS injection ───────────────────────────────────────────────────────────\r\n\r\n  private injectStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as ImageSelectorField)?.ImageSelectorFieldStyleCSS ?? ({} as ImageSelectorFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: ImageSelectorFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    // Elementi scoped da #uid (interni al mat-form-field)\r\n    for (const el of Object.keys(ELEMENT_SELECTORS)) {\r\n      const s = ELEMENT_SELECTORS[el];\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n        const selector = this.getSelector(uid, state, el, s);\r\n        if (!selector) continue;\r\n        if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n        if (userVal?.trim()) {\r\n          lines.push(`${selector} { ${userVal} }`);\r\n          // CasellaSelezione: inietta anche sul testo selezionato per color/font\r\n          if (el === 'CasellaSelezione') {\r\n            const textSel = this.getSelector(uid, state, el, ' .mat-mdc-select-value');\r\n            if (textSel) lines.push(`${textSel} { ${userVal} }`);\r\n          }\r\n        }\r\n      }\r\n    }\r\n\r\n    // Selezioni: scoped dal panelClass (overlay fuori da #uid)\r\n    // Normale/Mouseover/Selezionato: per-item (applicati sulla singola opzione)\r\n    // NotValid/Readonly: non applicabili all'overlay, ignorati\r\n    const selezioniOverlayStates = ['Normale', 'Mouseover', 'Selezionato'];\r\n    for (const state of selezioniOverlayStates) {\r\n      const key = 'Selezioni' + state;\r\n      const userVal: string | undefined = (css as any)[key];\r\n      if (!userVal?.trim()) continue;\r\n      const panelSel = this.getSelezioniSelector(uid, state);\r\n      if (!panelSel) continue;\r\n      const baseOptionSel = this.getSelezioniBaseSelector(uid, state);\r\n      const valWithImportant = this.forceImportant(userVal);\r\n      lines.push(`${panelSel} { ${valWithImportant} }`);\r\n      // color su Selezioni → cambia testo opzione E checkbox pseudo-checkbox\r\n      const colorVal = this.extractCssPropValue(userVal, 'color');\r\n      if (colorVal) {\r\n        lines.push(`${baseOptionSel} .mdc-list-item__primary-text { color: ${colorVal} !important; }`);\r\n        lines.push(`${baseOptionSel} .mat-pseudo-checkbox { border-color: ${colorVal} !important; }`);\r\n        lines.push(`${baseOptionSel} .mat-pseudo-checkbox-checked { background-color: ${colorVal} !important; }`);\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  // Selettore per elementi interni al mat-form-field (#uid scoping)\r\n  private getSelector(uid: string, state: string, el: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':    return `#${uid}${s}`;\r\n      case 'Mouseover':  return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Selezionato': return `#${uid}.eqp-state-selected${s}`;\r\n      case 'NotValid':   return `#${uid}.eqp-invalid${s}`;\r\n      case 'Readonly':   return `#${uid}.eqp-readonly${s}`;\r\n      default:           return null;\r\n    }\r\n  }\r\n\r\n  // Selettore per le opzioni nel panel overlay (scoped dal panelClass = uid)\r\n  // panelClass va su .mat-mdc-select-panel (via [ngClass]); mat-option sono figli diretti\r\n  private getSelezioniSelector(uid: string, state: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':     return `.${uid} mat-option, .${uid} .mat-mdc-option`;\r\n      case 'Mouseover':   return `.${uid} mat-option:hover, .${uid} .mat-mdc-option:hover`;\r\n      case 'Selezionato': return `.${uid} mat-option.mdc-list-item--selected, .${uid} .mat-mdc-option.mdc-list-item--selected`;\r\n      default:            return null;\r\n    }\r\n  }\r\n\r\n  // Selettore base singolo per i sub-element rules (es. .mdc-list-item__primary-text)\r\n  private getSelezioniBaseSelector(uid: string, state: string): string {\r\n    switch (state) {\r\n      case 'Mouseover':   return `.${uid} mat-option:hover`;\r\n      case 'Selezionato': return `.${uid} mat-option.mdc-list-item--selected`;\r\n      default:            return `.${uid} mat-option`;\r\n    }\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n    this.toggleClass(wrapper, 'eqp-state-hover',    this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-selected', this.forceState === 'Selezionato');\r\n    this.toggleClass(wrapper, 'eqp-invalid',         this.forceState === 'NotValid');\r\n    this.toggleClass(wrapper, 'eqp-readonly',        this.forceState === 'Readonly');\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  private forceImportant(css: string): string {\r\n    return css.split(';').map(part => {\r\n      const trimmed = part.trim();\r\n      if (!trimmed) return part;\r\n      if (trimmed.toLowerCase().includes('!important')) return part;\r\n      return part.replace(/\\s+$/, '') + ' !important';\r\n    }).join(';');\r\n  }\r\n\r\n  private extractCssPropValue(css: string, prop: string): string | null {\r\n    const re = new RegExp(`(?:^|;)\\\\s*${prop}\\\\s*:\\\\s*([^;!]+?)(?:\\\\s*!important)?\\\\s*(?:;|$)`, 'i');\r\n    const match = css.match(re);\r\n    return match ? match[1].trim() : null;\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\">\r\n\r\n  <mat-form-field [formGroup]=\"field.FormFormGroup\" appearance=\"outline\">\r\n    <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">{{field.Description}}</mat-label>\r\n\r\n    <!-- Mat-Select SINGOLA -->\r\n    <mat-select *ngIf=\"!field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n    [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\"\r\n    [panelClass]=\"fieldUid\">\r\n      <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n        <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n        <span>{{ attachment.ButtonKey }}</span>\r\n      </mat-option>\r\n    </mat-select>\r\n\r\n    <!-- Mat-Select MULTIPLA -->\r\n    <mat-select *ngIf=\"field.IsMultiChoiche\" class=\"imageFieldSelectorImages\" [formControlName]=\"field.Name\"\r\n    [required]=\"field.Required\" [(ngModel)]=\"transformedRecord\" (ngModelChange)=\"onRecordValueChange($event)\" multiple\r\n    [panelClass]=\"fieldUid\">\r\n      <mat-option *ngFor=\"let attachment of field.AttachmentList\" [value]=\"attachment.ID\">\r\n        <img src='data:image/{{ToLowerCase(attachment.FileExtension)}};base64,{{attachment.FileDataBase64}}' [height]=\"attachment.ResizedImageHeightPx != null ? attachment.ResizedImageHeightPx : 128\">\r\n        <span>{{ attachment.ButtonKey }}</span>\r\n      </mat-option>\r\n    </mat-select>\r\n\r\n  </mat-form-field>\r\n\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { IBaseFieldComponent } from '../../../../interfaces/iBaseFieldComponent.interface';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LabelField, LabelFieldStyleCSS } from '../../../../models/fields/labelField.model';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\nconst ELEMENT_SELECTORS: { [key: string]: string } = {\r\n  Container: '',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover'];\r\n\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'label-field-template',\r\n  templateUrl: './label-field-template.component.html',\r\n  styleUrls: ['./label-field-template.component.scss']\r\n})\r\nexport class LabelFieldTemplateComponent implements OnInit, OnChanges, OnDestroy, IBaseFieldComponent {\r\n  isStillRecoginze = false;\r\n  source = interval(200);\r\n  newtext: string;\r\n  subscription: Subscription;\r\n\r\n  @Input() field: LabelField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n\r\n  constructor(private renderer: Renderer2) {}\r\n\r\n  ngOnInit(): void {\r\n    this.updateField();\r\n    this.initStyles();\r\n    this.fieldUid = 'lf-' + Math.random().toString(36).slice(2, 10);\r\n    this.injectLabelFieldStyles();\r\n  }\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if (this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)\r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectLabelFieldStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false\r\n      && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n  }\r\n\r\n  injectLabelFieldStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as LabelField)?.LabelFieldStyleCSS ?? ({} as LabelFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, state: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: LabelFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n\r\n    for (const el of ELEMENTS) {\r\n      const s = ELEMENT_SELECTORS[el];\r\n\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n\r\n        const selector = this.getSelector(uid, state, s);\r\n        if (!selector) continue;\r\n\r\n        if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n        if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n      }\r\n    }\r\n\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n    this.toggleClass(wrapper, 'eqp-state-hover', this.forceState === 'Mouseover');\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  updateField() {\r\n    this.record[this.field.Name] = this.field.Etichetta;\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale && this.record[this.field.Name] == null) {\r\n      this.record[this.field.Name] = this.field.DataGetter.DataGetterValue;\r\n    }\r\n  }\r\n\r\n  onRecordValueChange() {\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n    if (!this.field.VisibleIf) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\" class=\"dm-etichetta\" [ngStyle]=\"LabelstyleObj\" [innerHTML]=\"record[field.Name]\"></div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { fabric } from 'fabric';\r\nimport { Observable, of, switchMap } from 'rxjs';\r\nimport { GlobalService } from '../../../services/global.service';\r\n\r\n@Component({\r\n  selector: 'tmw-image-marker',\r\n  templateUrl: './tmw-image-marker.component.html',\r\n  styleUrls: ['./tmw-image-marker.component.scss']\r\n})\r\nexport class TmwImageMarkerComponent {\r\n\r\n  @Input() src: string;\r\n  @Input() width: number;\r\n  @Input() height: number;\r\n  @Input() inConfig: boolean = false;\r\n  @Input() savedMarkers: string = null;\r\n\r\n  @Input() public outputMimeType = 'image/jpeg';\r\n  @Input() public outputQuality = 0.8;\r\n\r\n  @Input() public forceSizeCanvas = true;\r\n\r\n  @Output() closeDialog: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() save: EventEmitter<MarkedImage> = new EventEmitter<MarkedImage>();\r\n\r\n  componentGuid: string;\r\n  isLoading: boolean = true;\r\n  hasError: boolean = false;\r\n\r\n  private canvas: fabric.Canvas;\r\n  private stack: fabric.Object[] = [];\r\n\r\n  markers: Array<Marker> = new Array<Marker>();\r\n  outmarkers: Array<OutMarker> = new Array<OutMarker>();\r\n  markedImage: MarkedImage = new MarkedImage();\r\n\r\n  canUndo: boolean = false;\r\n  canRedo: boolean = false;\r\n\r\n  errorMessage: string = \"\";\r\n\r\n  private imageUsed?: fabric.Image;\r\n\r\n  constructor() {}\r\n\r\n  public ngOnInit(): void {\r\n\r\n    // Creazione di una GUID unica per il componente\r\n    this.componentGuid = 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n      var r = Math.random() * 16 | 0,\r\n        v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n      return v.toString(16);\r\n    });\r\n\r\n  }\r\n\r\n  public ngAfterViewInit(): void {\r\n    this.isLoading = false;\r\n\r\n    const canvasScaledElement = document.getElementById(this.componentGuid) as HTMLCanvasElement;\r\n    this.canvas = new fabric.Canvas(canvasScaledElement, {\r\n      hoverCursor: 'pointer',\r\n      isDrawingMode: false,\r\n    });\r\n    this.canvas.backgroundColor = 'white';\r\n\r\n    if (this.src) {\r\n      this.importPhotoFromSrc(this.src);\r\n    } else {\r\n      if (!this.width || !this.height) {\r\n        throw new Error('No width or hight given !');\r\n      }\r\n\r\n      this.canvas.setWidth(this.width);\r\n      this.canvas.setHeight(this.height);\r\n    }\r\n\r\n    this.canvas.on('path:created', () => {\r\n      this.stack = [];\r\n      this.setUndoRedo();\r\n    });\r\n\r\n  }  \r\n\r\n  newMarker(){\r\n    var startX = 40;\r\n    var startY = 40;\r\n\r\n    //var left = this.randomIntFromInterval(startX-100,startX+100);\r\n    //var top = this.randomIntFromInterval(startY-100,startY+100);\r\n    var left = startX;\r\n    var top = startY;\r\n    var description: '';\r\n    var caption = '0';\r\n\r\n    // Creazione della caption\r\n    for (var i = 1; i <= 100000; i++){\r\n      if (this.markers.find(x => x.caption == i.toString()) == null){\r\n        caption = i.toString();\r\n        break;\r\n      }\r\n    }\r\n    \r\n\r\n    this.createMarker(top,left,caption,description);\r\n  }\r\n\r\n  createMarker(top: number, left: number, caption: string, description: string){\r\n\r\n    /*\r\n    * Creo un nuovo Marker\r\n    */\r\n\r\n    // Creo il cerchio\r\n    var circle = new fabric.Circle({\r\n      radius: 30,\r\n      opacity: 0.7,\r\n      fill: 'darkblue',\r\n      stroke: 'white',\r\n      strokeWidth: 2,\r\n      originX: 'center', \r\n      originY: 'center' \r\n    });\r\n\r\n    // Creo il testo dentro al cerchio \r\n    var text = new fabric.Text(caption,\r\n    {  fontSize: 25, \r\n        originX: 'center', \r\n        originY: 'center',\r\n        fill : 'white' \r\n      });\r\n\r\n    // Creo il gruppo nel quale metto cerchio e testo in modo che si muovano insieme\r\n    var group = new fabric.Group([ circle, text ], {  left: left, top: top });    \r\n\r\n    // Creo un oggetto marker che contiene gli elementi atomici. Serve per le cancellazioni e il rollback/modifica degli elementi\r\n    var marker: Marker = new Marker();\r\n    marker.circle = circle;\r\n    marker.text = text;\r\n    marker.group = group;\r\n    marker.caption = caption;\r\n    marker.description = description;\r\n\r\n    // Aggiungo il gruppo nella lista dei gruppi\r\n    this.markers.push(marker);\r\n    this.markers.sort((a,b)=> { return Number(a.caption) - Number(b.caption) });\r\n\r\n    // Aggiungo il gruppo all'immagine a schermo\r\n    this.canvas.add(group);\r\n  }\r\n\r\n  deleteMarkerByIndex(index: number){\r\n    this.canvas.remove(this.markers[index].group);\r\n    this.markers.splice(index,1);\r\n  }\r\n\r\n  removeAllMarkers(){\r\n    this.markers.forEach((marker) => {\r\n      this.canvas.remove(marker.group);\r\n    });\r\n    this.markers = new Array<Marker>();\r\n  }\r\n\r\n  private setUndoRedo() {\r\n    this.canUndo = this.canvas.getObjects().length > 0;\r\n    this.canRedo = this.stack.length > 0;\r\n  }\r\n\r\n  /*\r\n\r\n    // Actions\r\n    public undo() {\r\n      if (this.canUndo) {\r\n        const lastId = this.canvas.getObjects().length - 1;\r\n        const lastObj = this.canvas.getObjects()[lastId];\r\n        this.stack.push(lastObj);\r\n        this.canvas.remove(lastObj);\r\n        this.setUndoRedo();\r\n      }\r\n    }\r\n  \r\n    public redo() {\r\n      if (this.canRedo) {\r\n        const firstInStack = this.stack.splice(-1, 1)[0];\r\n        if (firstInStack) {\r\n          this.canvas.insertAt(firstInStack, this.canvas.getObjects().length - 1, false);\r\n        }\r\n        this.setUndoRedo();\r\n      }\r\n    }\r\n  \r\n    public clearCanvas() {\r\n      if (this.canvas) {\r\n        this.canvas.remove(...this.canvas.getObjects());\r\n        this.setUndoRedo();\r\n      }\r\n    }\r\n\r\n*/\r\n\r\n  private importPhotoFromSrc(src: string) {\r\n    this.isLoading = true;\r\n    let isFirstTry = true;\r\n    const imgEl = new Image();\r\n    imgEl.setAttribute('crossOrigin', 'anonymous');\r\n    imgEl.src = src;\r\n    imgEl.onerror = () => {\r\n      // Retry with cors proxy\r\n      if (isFirstTry) {\r\n        imgEl.src = 'https://cors-anywhere.herokuapp.com/' + this.src;\r\n        isFirstTry = false;\r\n      } else {\r\n        this.isLoading = false;\r\n        this.hasError = true;\r\n        this.errorMessage = \"CORS Error\";\r\n      }\r\n    };\r\n    imgEl.onload = () => {\r\n      this.isLoading = false;\r\n      this.imageUsed = new fabric.Image(imgEl);\r\n\r\n      this.imageUsed.cloneAsImage(image => {\r\n        let width = imgEl.width;\r\n        let height = imgEl.height;\r\n\r\n        if (this.width) {\r\n          width = this.width;\r\n        }\r\n        if (this.height) {\r\n          height = this.height;\r\n        }\r\n\r\n        // ricalcolo le dimensioni dell'immagine per farla entrare nello schermo\r\n        // diminuisco di un 5% alla volta le dimensioni fino a rientrare nell'85% della grandezza della finestra\r\n        let windowWidth = window.innerWidth;\r\n        let windowHeight = window.innerHeight;\r\n        while(width > windowWidth * 0.85){\r\n          width = width * 0.95;\r\n          height = height * 0.95;\r\n        }\r\n        while(height > windowHeight * 0.85){\r\n          width = width * 0.95;\r\n          height = height * 0.95;\r\n        }\r\n\r\n\r\n        image.scaleToWidth(width, false);\r\n        image.scaleToHeight(height, false);\r\n\r\n        this.canvas.setBackgroundImage(image, ((img: HTMLImageElement) => {\r\n          if (img) {\r\n            if (this.forceSizeCanvas) {\r\n              this.canvas.setWidth(width);\r\n              this.canvas.setHeight(height);\r\n            } else {\r\n              this.canvas.setWidth(image.getScaledWidth());\r\n              this.canvas.setHeight(image.getScaledHeight());\r\n            }\r\n          }\r\n        }), {\r\n          crossOrigin: 'anonymous',\r\n          originX: 'left',\r\n          originY: 'top'\r\n        });\r\n      });\r\n\r\n      if (this.savedMarkers != null){ this.loadMarkers(); }\r\n    };\r\n  }\r\n\r\n  loadMarkers(){\r\n    var markersObj: Array<OutMarker> = JSON.parse(this.savedMarkers);\r\n    markersObj.forEach((marker) => {\r\n      this.createMarker(marker.top,marker.left,marker.caption,marker.description);\r\n    });\r\n  }\r\n\r\n  public saveImage(){\r\n\r\n    this.outmarkers = new Array<OutMarker>();\r\n\r\n    this.markers.forEach((marker) => {\r\n      var outmarker = new OutMarker();\r\n      outmarker.caption = marker.caption;\r\n      outmarker.description = marker.description;\r\n      outmarker.top = marker.group.top;\r\n      outmarker.left = marker.group.left;\r\n      this.outmarkers.push(outmarker);\r\n    })\r\n\r\n    if (this.width && this.height) {\r\n      const canvasScaledElement: HTMLCanvasElement = document.createElement('canvas');\r\n      const canvasScaled = new fabric.Canvas(canvasScaledElement);\r\n      canvasScaled.backgroundColor = 'white';\r\n\r\n      new Observable<fabric.Canvas>(observer => {\r\n        if (this.imageUsed) {\r\n\r\n            canvasScaled.setBackgroundImage(this.imageUsed, (img: HTMLImageElement) => {\r\n              if (!img) {\r\n                observer.error(new Error('Impossible to draw the image on the temporary canvas'));\r\n              }\r\n\r\n              canvasScaled.setWidth(img.width);\r\n              canvasScaled.setHeight(img.height);\r\n\r\n              observer.next(canvasScaled);\r\n              observer.complete();\r\n            }, {\r\n              crossOrigin: 'anonymous',\r\n              originX: 'left',\r\n              originY: 'top'\r\n            });\r\n          \r\n        } else {\r\n          canvasScaled.setWidth(this.width);\r\n          canvasScaled.setHeight(this.height);\r\n        }\r\n      }).pipe(\r\n        switchMap(() => {\r\n          let process = of(canvasScaled);\r\n\r\n          if (this.canvas.getObjects().length > 0) {\r\n            const ratioX = canvasScaled.getWidth() / this.canvas.getWidth();\r\n            const ratioY = canvasScaled.getHeight() / this.canvas.getHeight();\r\n\r\n            this.canvas.getObjects().forEach((originalObject: fabric.Object, i: number) => {\r\n              process = process.pipe(switchMap(() => {\r\n                return new Observable<fabric.Canvas>(observerObject => {\r\n                  originalObject.clone((clonedObject: fabric.Object) => {\r\n                    clonedObject.set('left', originalObject.left * ratioX);\r\n                    clonedObject.set('top', originalObject.top * ratioY);\r\n                    clonedObject.scaleToWidth(originalObject.width * ratioX);\r\n                    clonedObject.scaleToHeight(originalObject.height * ratioY);\r\n\r\n                    canvasScaled.insertAt(clonedObject, i, false);\r\n                    canvasScaled.renderAll();\r\n\r\n                    observerObject.next(canvasScaled);\r\n                    observerObject.complete();\r\n                  });\r\n                });\r\n              }));\r\n            });\r\n          }\r\n          return process;\r\n        }),\r\n      ).subscribe(() => {\r\n        canvasScaled.renderAll();\r\n        canvasScaled.getElement().toBlob(\r\n          (data: Blob) => {\r\n            this.markedImage.image = data;\r\n            this.markedImage.outmarkers = this.outmarkers;\r\n            this.save.emit(this.markedImage);\r\n          },\r\n          this.outputMimeType,\r\n          this.outputQuality\r\n        );\r\n      });\r\n    } else {\r\n      this.canvas.getElement().toBlob(\r\n        (data: Blob) => {\r\n          this.markedImage.image = data;\r\n          this.markedImage.outmarkers = this.outmarkers;\r\n          this.save.emit(this.markedImage);\r\n        },\r\n        this.outputMimeType,\r\n        this.outputQuality\r\n      );\r\n    }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  //this.save.emit();\r\n  }\r\n\r\n  public close(){\r\n    this.closeDialog.emit();\r\n  }\r\n\r\n  randomIntFromInterval(min, max) { // min and max included \r\n    return Math.floor(Math.random() * (max - min + 1) + min)\r\n  }\r\n\r\n  log(el){\r\n    GlobalService.debugLog(\"imageMarker element \",el);\r\n  }\r\n\r\n}\r\n\r\nexport class Marker {\r\n  circle: fabric.Circle;\r\n  text: fabric.Text;\r\n  group: fabric.Group;\r\n  top: number;\r\n  left: number;\r\n  caption: string;\r\n  description: string = \"\";\r\n}\r\n\r\nexport class OutMarker {\r\n  top: number;\r\n  left: number;\r\n  caption: string;\r\n  description: string = \"\";\r\n}\r\n\r\nexport class MarkedImage {\r\n  outmarkers: Array<OutMarker>;\r\n  image: Blob;\r\n}","<div class=\"canvas-container\">\r\n    <div class=\"canvas\">\r\n        <canvas [id]=\"componentGuid\"></canvas>\r\n    </div>\r\n    <div class=\"floating-toolbar\" cdkDrag cdkDragBoundary=\".canvas-container\">\r\n        <div class=\"drag-handle\" cdkDragHandle>\r\n            <span></span><span></span><span></span>\r\n        </div>\r\n        <button class=\"btn btn-primary markerButton\" (click)=\"newMarker()\">Crea nuovo marker</button>\r\n        <div class=\"legend_overflow_container mt-2\">\r\n            <div class=\"legend_container\" *ngFor=\"let marker of markers; index as i\">\r\n                <div class=\"caption\" [innerHTML]=\"marker.caption\"></div>\r\n                <div class=\"textarea\"><textarea [(ngModel)]=\"marker.description\" (click)=\"log(marker.description)\"></textarea></div>\r\n                <div class=\"delete\" (click)=\"deleteMarkerByIndex(i)\"><tmw-icon class=\"mat-icon\" name=\"trash\"></tmw-icon></div>\r\n            </div>\r\n        </div>\r\n        <button class=\"btn btn-success markerButton mt-2\" *ngIf=\"!inConfig\" (click)=\"saveImage()\">Salva Immagine</button>\r\n        <button class=\"btn btn-warning markerButton mt-2\" (click)=\"removeAllMarkers()\">Rimuovi tutti i markers</button>\r\n        <button class=\"btn btn-danger markerButton mt-2\" (click)=\"close()\">Annulla Disegno</button>\r\n    </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ImageFolderEnum } from '../../../../models/fields/imageField.model';\r\nimport { ImageWithMarkersField, ImageWithMarkersFieldStyleCSS } from '../../../../models/fields/imageWithMarkersField.model';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { EndPointConfiguration, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { DynAttachment } from '../../../../models/dynAttachment';\r\nimport { MarkedImage } from '../../tmw-image-marker/tmw-image-marker.component';\r\nimport { DataGetterTypeEnum } from '../../../../models/baseField.model';\r\n\r\nconst toBase64 = file => new Promise<string>((resolve, reject) => {\r\n  const reader = new FileReader();\r\n  reader.readAsDataURL(file);\r\n  reader.onload = () => resolve(reader.result.toString());\r\n  reader.onerror = error => reject(error);\r\n});\r\n\r\nconst ELEMENT_SELECTORS: { [key: string]: string } = {\r\n  Container:    ' .imageContainer',\r\n  Descrizione:  ' .image-label',\r\n  BottoneMarca: ' .markButton button.btn',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover'];\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'image-with-markers-field-template',\r\n  templateUrl: './image-with-markers-field-template.component.html',\r\n  styleUrls: ['./image-with-markers-field-template.component.scss']\r\n})\r\nexport class ImageWithMarkersFieldTemplateComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() field: ImageWithMarkersField;\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() imageMark: EventEmitter<DynAttachment> = new EventEmitter<DynAttachment>();\r\n\r\n  imageWidth: number = 0;\r\n  MarkingLoaded: boolean = false;\r\n  FileBase64: string = \"\";\r\n  MarkFileBase64: string = \"\";\r\n  FileDataBase64: string = \"\";\r\n\r\n  AttachmentID: string | number;\r\n  imageMarkAttachment: DynAttachment;\r\n  extraJSON: string = null;\r\n\r\n  public width = null;\r\n  public height = null;\r\n\r\n  dialogImageMarkingRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogImageMarking\", { static: true }) dialogImageMarking: TemplateRef<any>;\r\n\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n\r\n  constructor(\r\n    private dialog: MatDialog,\r\n    private utilityHelperService: UtilityHelperService,\r\n    private renderer: Renderer2\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'iwm-' + Math.random().toString(36).slice(2, 10);\r\n    this.injectStyles();\r\n\r\n    // In anteprima configuratore senza un'immagine reale: non caricare DynAttachment\r\n    if (this.inConfig && !this.field.DynAttachment) {\r\n      this.imageWidth = 200;\r\n      this.updateField();\r\n      return;\r\n    }\r\n\r\n    if (this.record[this.field.Name] == null || this.record[this.field.Name] == 0) {\r\n      this.FileDataBase64 = this.field.DynAttachment.FileDataBase64;\r\n      this.imageWidth = (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n      this.record[this.field.Name] = this.field.DynAttachment;\r\n\r\n      this.imageMarkAttachment = JSON.parse(JSON.stringify(this.field.DynAttachment));\r\n      this.imageMarkAttachment.ID = 0;\r\n\r\n      this.AttachmentID = this.field.DynAttachment.ID;\r\n\r\n    } else {\r\n      if (typeof this.record[this.field.Name] === 'string') {\r\n        this.record[this.field.Name] = JSON.parse(this.record[this.field.Name]);\r\n      }\r\n      this.imageWidth = (this.field.DynAttachment.ResizedImageHeightPx / this.field.DynAttachment.ImageHeightPx * this.field.DynAttachment.ImageWidthPx) + 50;\r\n\r\n      if ((this.record[this.field.Name] as DynAttachment).FileBases64 != null) {\r\n        this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileBases64[ImageFolderEnum.Regular];\r\n      } else {\r\n        this.FileDataBase64 = (this.record[this.field.Name] as DynAttachment).FileDataBase64;\r\n      }\r\n\r\n      (this.record[this.field.Name] as DynAttachment).FileDataBase64 = this.FileDataBase64;\r\n      this.extraJSON = (this.record[this.field.Name] as DynAttachment).ExtraJSON;\r\n\r\n      this.imageMarkAttachment = this.record[this.field.Name];\r\n      this.imageMarkAttachment.FileDataBase64 = this.FileDataBase64;\r\n\r\n      this.AttachmentID = this.field.DynAttachment.ID;\r\n    }\r\n\r\n    this.recordChange.emit(this.record);\r\n    this.imageMark.emit(this.imageMarkAttachment);\r\n    this.updateField();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['record'] != undefined && changes['record'].firstChange == false && JSON.stringify(changes['record'].currentValue) != JSON.stringify(changes['record'].previousValue)) {\r\n      this.record = changes['record'].currentValue;\r\n      this.updateField();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n  }\r\n\r\n  private injectStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as ImageWithMarkersField)?.ImageWithMarkersFieldStyleCSS ?? ({} as ImageWithMarkersFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, state: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':   return `#${uid}${s}`;\r\n      case 'Mouseover': return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      default:          return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: ImageWithMarkersFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n    for (const el of ELEMENTS) {\r\n      const s = ELEMENT_SELECTORS[el];\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n        const selector = this.getSelector(uid, state, s);\r\n        if (!selector) continue;\r\n        if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n        if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n      }\r\n    }\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n    this.toggleClass(wrapper, 'eqp-state-hover', this.forceState === 'Mouseover');\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  updateField() {\r\n    if ((this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Manuale || this.field.DataGetter.DataGetterType == DataGetterTypeEnum.Formula) && this.field.Formula) {\r\n      this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, this.formulaObject);\r\n    }\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n    }\r\n  }\r\n\r\n  resetPreLoadedImage() {\r\n    this.width = null;\r\n    this.height = null;\r\n    this.getImageDimensions();\r\n  }\r\n\r\n  onAttachmentsChange() { }\r\n\r\n  async saveMark(markedImage: MarkedImage) {\r\n    let base64File = await toBase64(markedImage.image);\r\n    if (base64File) {\r\n      this.MarkFileBase64 = base64File.split(\",\")[1];\r\n      this.FileDataBase64 = this.MarkFileBase64;\r\n      this.imageMarkAttachment.FileDataBase64 = this.MarkFileBase64;\r\n      this.imageMarkAttachment.ExtraJSON = JSON.stringify(markedImage.outmarkers);\r\n      this.extraJSON = this.imageMarkAttachment.ExtraJSON;\r\n      this.imageMark.emit(this.imageMarkAttachment);\r\n    }\r\n    if (this.dialogImageMarkingRef) {\r\n      this.closeDialog();\r\n    }\r\n  }\r\n\r\n  closeDialog() {\r\n    this.dialogImageMarkingRef.close();\r\n    this.width = null;\r\n    this.height = null;\r\n  }\r\n\r\n  private getImageDimensions() {\r\n    var blob: Blob = this.getBlobFromBase64();\r\n    const reader = new FileReader();\r\n    reader.onload = (e: any) => {\r\n      const image = new Image();\r\n      image.src = e.target.result;\r\n      image.onload = rs => {\r\n        this.height = rs.currentTarget['height'];\r\n        this.width = rs.currentTarget['width'];\r\n      };\r\n    };\r\n    reader.readAsDataURL(blob);\r\n  }\r\n\r\n  private getBlobFromBase64() {\r\n    const byteCharacters = atob(this.record[this.field.Name][0].FileDataBase64);\r\n    const byteNumbers = new Array(byteCharacters.length);\r\n    for (let i = 0; i < byteCharacters.length; i++) {\r\n      byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n    }\r\n    const byteArray = new Uint8Array(byteNumbers);\r\n    return new Blob([byteArray], { type: this.record[this.field.Name][0].FileContentType });\r\n  }\r\n\r\n  private onRecordValueChange() {\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n\r\n  public openMark() {\r\n    this.dialogImageMarkingRef = this.dialog.open(this.dialogImageMarking, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      panelClass: 'image-modal',\r\n      width: '90vw',\r\n      height: '90vh',\r\n      maxWidth: '100vw',\r\n    });\r\n\r\n    if (this.AttachmentID != null && Number(this.AttachmentID) > 0) {\r\n      this.load(this.AttachmentID, [ImageFolderEnum.Regular]);\r\n    } else {\r\n      this.FileBase64 = this.FileDataBase64;\r\n      this.MarkingLoaded = true;\r\n    }\r\n  }\r\n\r\n  load(ID, Types) {\r\n    this.MarkingLoaded = false;\r\n    var dynamicModuleParams = [\r\n      { ParamName: \"AttachmentID\", ParamValue: ID,    ParamType: ParamTypeEnum[\"Query param\"] },\r\n      { ParamName: \"Types\",        ParamValue: Types, ParamType: ParamTypeEnum[\"Query param\"] },\r\n    ];\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetAttachmentWithBases64,\r\n      dynamicModuleParams,\r\n      (res: DynAttachment) => {\r\n        this.FileBase64 = res.FileBases64[ImageFolderEnum.Regular];\r\n        this.MarkingLoaded = true;\r\n      },\r\n      (err) => {}\r\n    );\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\">\r\n  <div class=\"row imageContainer\">\r\n    <div class=\"row\">\r\n      <div class=\"col-12 image-label\">{{field.Description}}</div>\r\n      <div class=\"col-12\">\r\n        <img *ngIf=\"field.DynAttachment\"\r\n          src=\"data:{{field.DynAttachment.FileContentType}};base64,{{FileDataBase64}}\"\r\n          [height]=\"field.DynAttachment.ResizedImageHeightPx != null ? field.DynAttachment.ResizedImageHeightPx : 128\"\r\n          class=\"singleImage\"\r\n        >\r\n      </div>\r\n      <div class=\"col-12 markButton\">\r\n        <button class=\"btn btn-primary btn-w100\" (click)=\"openMark()\">Marca</button>\r\n      </div>\r\n      <div *ngIf=\"field.DynAttachment?.ButtonKey != null && field.DynAttachment?.ButtonKey != ''\" class=\"col-12 flex justify-content-around buttonkey\">\r\n        <div>Etichetta</div><div>{{field.DynAttachment.ButtonKey}}</div>\r\n      </div>\r\n      <div *ngIf=\"field.DynAttachment?.ButtonValue != null && field.DynAttachment?.ButtonValue != ''\" class=\"col-12 flex justify-content-around buttonvalue\">\r\n        <div>Valore</div>\r\n        <div>{{field.DynAttachment.ButtonValue}}</div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n\r\n<!-- DIALOG PER MARCATURA -->\r\n<ng-template #dialogImageMarking>\r\n  <tmw-image-marker *ngIf=\"MarkingLoaded\"\r\n    [src]=\"'data:'+ field.DynAttachment.FileContentType + ';base64,'+ FileBase64\"\r\n    [inConfig]=\"inConfig\"\r\n    [savedMarkers]=\"extraJSON\"\r\n    (save)=\"saveMark($event)\"\r\n    (closeDialog)=\"closeDialog()\"\r\n    [width]=\"field.DynAttachment.ImageWidthPx\"\r\n    [height]=\"field.DynAttachment.ImageHeightPx\"\r\n  >\r\n  </tmw-image-marker>\r\n</ng-template>\r\n","import { Directive, Input, ViewContainerRef, ComponentFactoryResolver, ComponentRef, EventEmitter, Output } from '@angular/core';\r\n\r\n@Directive({\r\n  selector: '[appDynamicLoader]'\r\n})\r\n\r\nexport class DynamicLoaderDirective {\r\n\r\n  // In input verrà passato il selettore del componente da ricreare\r\n  @Input() set data(data: DynamicLoaderDirectiveData) {\r\n    this.load(data.component, data.inputParams);\r\n  }\r\n\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n\r\n  constructor(private resolver: ComponentFactoryResolver, private viewContainerRef: ViewContainerRef) { }\r\n\r\n  load(component: any, inputParams: any = null): any {\r\n\r\n    if (!component) {\r\n      throw new Error('Failed to load dynamic component');\r\n    }\r\n\r\n   this.viewContainerRef.clear();\r\n   let componentInstance = component;\r\n   const componentFactory = this.resolver.resolveComponentFactory(componentInstance);\r\n   const componentRef = this.viewContainerRef.createComponent<any>(componentFactory);\r\n\r\n    //Se sono stati passati dei parameters di input allora li memorizza nel componente caricato dinamicamente.\r\n    //E' ovvio che il nome dei parameters di input passati al DynamicLoader deve coincidere con il nome del parametro di input passato al componente caricato dinamicamente\r\n    if (inputParams != null) {\r\n      let inputProperties = Object.keys(inputParams);\r\n      inputProperties.forEach(p => {\r\n        componentRef.instance[p] = inputParams[p];\r\n      });\r\n    }\r\n\r\n    componentRef.instance.out.subscribe(val => { this.out.emit(val); });\r\n\r\n  }\r\n\r\n  /**\r\n* Restrituisce un componente passandogli come parametro la chiave\r\n* @param key\r\n*/\r\n  getComponent(key: any) {\r\n    let component = key;\r\n    return component;\r\n  }\r\n}\r\n\r\nexport class DynamicLoaderDirectiveData {\r\n  component: any;\r\n  inputParams: any;\r\n}\r\n\r\nexport class eventOut {\r\n  EventName: string;\r\n  Behaviours: Array<string> = new Array<string>();\r\n  Params: any;\r\n}","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Form } from '@angular/forms';\r\nimport { DynamicLoaderDirectiveData, eventOut } from '../../../directives/dynamic-loader/dynamic-loader.directive';\r\nimport { BaseField, DataGetterTypeEnum, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { Record } from '../../../models/record.model';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { DynamicModuleCompileConfig } from '../../../models/dynamicModuleCompileConfig.model';\r\nimport { GlobalService } from '../../../services/global.service';\r\n\r\n@Component({\r\n  selector: 'dbgetter',\r\n  templateUrl: './dbgetter.component.html',\r\n  styleUrls: ['./dbgetter.component.scss']\r\n})\r\nexport class DbgetterComponent {\r\n\r\n  @Input() configurations: DynamicModuleCompileConfig = null;\r\n  @Input() form: Form;\r\n  @Input() field: any; // Sono costretto a mettere any per gestire i campi di tipo elenco generico che hanno una struttura un po' diversa, altrimenti dovrei fare un casino di cast e non ne vale la pena\r\n  @Input() record: Record;\r\n  @Input() inConfig: boolean = false;\r\n  @Input() DirectlyOpenTable: boolean = false;\r\n  @Input() QueryEditorComponent: DynamicLoaderDirectiveData = null; // L'intero componente query Editor\r\n  @Input() data: any = null; // Lo facciamo funzionare tipo EQP-TABLE\r\n\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n  @Output() selectedValue: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() doReload: EventEmitter<any> = new EventEmitter<any>();  \r\n\r\n  keys: Array<string> = null;\r\n  loaded: boolean = false;\r\n  value: any;\r\n\r\n  showTable: boolean = false;\r\n\r\n  haveQuestions: boolean = false;\r\n  haveRelations: boolean = false;\r\n  reload: boolean = true;\r\n  multipleValuesToChoose: boolean = false;\r\n\r\n  interval: any;\r\n\r\n  relations: Array<{field: string, loaded: boolean, actualvalue: any}> = new Array<{field: string, loaded: boolean, actualvalue: any}>();\r\n  relationsLoaded: boolean;\r\n  backupQuestionFields: Array<string> = null;\r\n\r\n  isMultiselect: boolean = false;\r\n  multiselectPhase: number = 1;\r\n  selectedColumn: string = \"\";\r\n  selectedElements: Array<ListValueElement> = new Array<ListValueElement>();\r\n\r\n  fieldTypeEnum = FieldTypeEnum;\r\n\r\n  constructor(private httpClient: HttpClient) {}\r\n\r\n  ngOnInit(): void {\r\n\r\n    GlobalService.debugLog(\"--- INSIDE DBGETTER ---\");\r\n    GlobalService.debugLog(null, this.form);\r\n    GlobalService.debugLog(null, this.record);\r\n    GlobalService.debugLog(null, this.field);\r\n    GlobalService.debugLog(null, this.QueryEditorComponent);\r\n    GlobalService.debugLog(\"--- INSIDE DBGETTER ---\");\r\n\r\n      // Inizio Retrocompatibilità\r\n\r\n      if (typeof this.field.DataGetter.DataGetterHasResetButton === \"undefined\"){\r\n        this.field.DataGetter.DataGetterHasResetButton = true;\r\n      }\r\n\r\n      // Fine Retrocompatibilità\r\n\r\n      // Inizio Normalizzazione V2 (Omnisearch AI — DataGetterCodeVersion=2)\r\n      // Il DataGetterValue V2 annida il query config in queryCommandDatabaseConfiguration.\r\n      // Per evitare di duplicare tutta la logica, unwrappiamo in-place al formato V1\r\n      // così il resto del codice rimane invariato.\r\n      const isV2 = this.field.DataGetter.DataGetterValue?.DataGetterCodeVersion === 2;\r\n      if (isV2) {\r\n        const v2wrapper = this.field.DataGetter.DataGetterValue;\r\n        this.field.DataGetter.DataGetterValue = v2wrapper.queryCommandDatabaseConfiguration;\r\n        // DataGetterColumnForce in V2 può stare nell'oggetto interno — propagalo se manca all'esterno\r\n        if (!this.field.DataGetter.DataGetterColumnForce && v2wrapper.DataGetterColumnForce) {\r\n          this.field.DataGetter.DataGetterColumnForce = v2wrapper.DataGetterColumnForce;\r\n        }\r\n      }\r\n      // Fine Normalizzazione V2\r\n\r\n      // Inizio: Tabella multiselect?\r\n\r\n      if (this.field.FieldType == FieldTypeEnum['Elenco generico']){\r\n        this.isMultiselect = true;\r\n\r\n        if (this.field.DataGetter.DataGetterColumnForce != null){\r\n          this.selectedColumn = this.field.DataGetter.DataGetterColumnForce.key;\r\n          this.multiselectPhase = 2;\r\n        }\r\n\r\n        this.selectedElements = this.record[this.field.Name];    \r\n        if (this.selectedElements == null){ this.selectedElements = new Array<ListValueElement>(); }\r\n      }\r\n\r\n      // Fine: Tabella multiselect?\r\n\r\n    if (this.QueryEditorComponent != null){\r\n      this.QueryEditorComponent.inputParams.config.mode = QueryEditorModeEnum.RESULT;\r\n      this.QueryEditorComponent.inputParams.config.field = this.field;\r\n      this.QueryEditorComponent.inputParams.config.record = this.record;\r\n      this.QueryEditorComponent.inputParams.config.inConfig = this.inConfig;\r\n\r\n      // V2: il QueryEditor in RESULT mode riceve il queryConfig e il version flag\r\n      if (isV2) {\r\n        this.QueryEditorComponent.inputParams.config.loadQueryStatuses = this.field.DataGetter.DataGetterValue;\r\n        this.QueryEditorComponent.inputParams.config.DataGetterCodeVersion = 2;\r\n      }\r\n\r\n      if (this.field.DataGetter.DataGetterValue.openedFields.find(x => typeof x.QueryPropertyValue !== \"object\" && x.QueryPropertyValue == '?') != null){\r\n        \r\n        // Il campo ha almeno un valore con \"?\"\r\n        this.haveQuestions = true;\r\n\r\n        GlobalService.debugLog(\"CHECKING BACKUPS OPENED FIELDS....\", this.backupQuestionFields);\r\n\r\n        if (this.backupQuestionFields == null){\r\n          this.backupQuestionFields = new Array<string>();\r\n          this.field.DataGetter.DataGetterValue.openedFields.forEach((rqf) => {\r\n            this.backupQuestionFields.push(rqf.PropertyName);\r\n          });\r\n        }\r\n\r\n\r\n      }\r\n\r\n      if (this.field.DataGetter.DataGetterValue.openedFields.find(x => typeof x.QueryPropertyValue !== \"object\" && x.QueryPropertyValue.indexOf('!') != -1) != null){\r\n\r\n        // Il campo ha almeno un valore con \"!nomerelazione\"\r\n        this.haveRelations = true;\r\n\r\n        this.field.DataGetter.DataGetterValue.openedFields.filter(x => x.QueryPropertyValue.indexOf('!') != -1).forEach((fieldWithRelation) => {\r\n\r\n          var fieldRelated = fieldWithRelation.QueryPropertyValue.replace(\"!\",\"\");\r\n\r\n          if (this.record[fieldRelated] == null){\r\n            //console.log(\"this.record[fieldRelated] E' NULL\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n            this.relations.push({field: fieldRelated, loaded: false, actualvalue: this.record[fieldRelated]});\r\n            this.checkRelations();\r\n            this.interval = setInterval(() => {\r\n              //console.log(\"this.record[fieldRelated] CHECK\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n                var currentRelation = this.relations.find(x => x.field == fieldRelated);\r\n                if (currentRelation != null){\r\n\r\n                  // Gestione dei cambi di valore dei campi relazionati\r\n                  // Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore in qualcosa che NON E' NULL\r\n                  if (currentRelation.actualvalue != null && this.record[fieldRelated] != null && this.record[fieldRelated] != currentRelation.actualvalue){\r\n                    //console.log(\"this.record[fieldRelated] HA CAMBIATO VALORE!!\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n                    currentRelation.actualvalue = this.record[fieldRelated];\r\n                    currentRelation.loaded = true;\r\n                    fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];\r\n                    this.record[this.field.Name] = null;\r\n                    this.reloadComponent();\r\n                  }\r\n\r\n                  // Il campo relazionato INIZIALMENTE NON E' NULL, e cambia valore IN NULL\r\n                  else if (currentRelation.actualvalue != null && this.record[fieldRelated] == null){\r\n                    //console.log(\"this.record[fieldRelated] E' TORNATO AD ESSERE NULL!! :(\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n                    currentRelation.actualvalue = this.record[fieldRelated];\r\n                    currentRelation.loaded = true;\r\n                    fieldWithRelation.QueryPropertyValue = \"!\"+fieldRelated;\r\n                    this.record[this.field.Name] = null;\r\n\r\n                    // Recupero Backup\r\n                    this.backupQuestionFields.forEach((bof) => {\r\n                      this.field.DataGetter.DataGetterValue.openedFields.find(x => x.PropertyName == bof).QueryPropertyValue = \"?\";\r\n                    });\r\n\r\n                    this.reloadComponent();\r\n                  }\r\n\r\n                  // Il campo relazionato INIZIALMENTE E' NULL, e cambia valore\r\n                  else if (currentRelation.actualvalue == null && this.record[fieldRelated] != null){\r\n                    //console.log(\"this.record[fieldRelated] NON E' PIU' NULL!! :)\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n                    currentRelation.actualvalue = this.record[fieldRelated];\r\n                    currentRelation.loaded = true;\r\n                    fieldWithRelation.QueryPropertyValue = this.record[fieldRelated];\r\n                    this.reloadComponent();\r\n                  }\r\n\r\n                  this.checkRelations();\r\n                  \r\n                }\r\n            },200);\r\n\r\n\r\n          } else {\r\n            //console.log(\"this.record[fieldRelated] NON E' NULL!! :)\", this.field.Name, fieldRelated, this.record[fieldRelated], this.record);\r\n            fieldWithRelation.QueryPropertyValue = this.record[fieldRelated] != null ? this.record[fieldRelated] : '';\r\n            this.relations.push({field: fieldRelated, loaded: true, actualvalue: this.record[fieldRelated]});\r\n            this.checkRelations();\r\n          }\r\n          \r\n        });        \r\n\r\n\r\n      }\r\n\r\n      if (!this.haveRelations){\r\n        this.relationsLoaded = true;\r\n      }     \r\n\r\n    } else {\r\n\r\n      if (this.data == null){\r\n\r\n      this.httpClient.get('./assets/mockups/mockedFromQueryEditor_RESULT_MANY_NUMERIC.txt', {responseType: 'text'})\r\n      .subscribe(mockedFromQueryEditor => {\r\n        this.data = JSON.parse(mockedFromQueryEditor);\r\n        this.data = JSON.parse(this.data.result);\r\n        this.processResult(this.data,[]);\r\n       });      \r\n\r\n      }\r\n\r\n    }\r\n\r\n  }\r\n\r\n  reloadComponent(){\r\n    //console.log(\"RELOAD COMPONENT CALLED\", this.record, this.QueryEditorComponent.inputParams.config.record);\r\n\r\n    this.reload = false;\r\n    this.QueryEditorComponent.inputParams.config.record = this.record;\r\n    this.QueryEditorComponent.inputParams.config.field = this.field;\r\n\r\n    setTimeout(() => { this.reload = true; \r\n                       //console.log(\"RELOADED QUERYEDITOR\"); \r\n                      }, 3000); \r\n  }\r\n\r\n  checkRelations(){\r\n    this.relationsLoaded = this.relations.find(x => x.loaded) != null;\r\n  }\r\n\r\n  onExternalSQLResultOut(ev: eventOut){\r\n\r\n    //console.log(\"Risultato dell'elaborazione del query editor: onExternalSQLResultOut\", ev);\r\n\r\n    if (ev.Behaviours.indexOf(\"send-out\") != -1){ this.out.emit(ev); }\r\n\r\n    this.data = JSON.parse(ev.Params.result);\r\n    this.processResult(this.data,ev.Behaviours);\r\n\r\n  }\r\n\r\n  processResult(data: any, behaviours: Array<string> = []){\r\n    \r\n    //data è l'array dei record tornati dal db\r\n\r\n    // se ho delle risposte\r\n    if (data.length > 0){\r\n\r\n      // controllo quanti attributi ha la risposta\r\n      this.keys = Object.keys(data[0]);\r\n\r\n      // se ho solamente l'ID e il campo scelto ed ho una sola risposta prendo il valore direttamente\r\n      if (this.keys.length == 2 && data.length == 1){\r\n        // Se ho un solo occhietto selezionato e la query restituisce un solo valore, lo butto fuori automaticamente\r\n        GlobalService.debugLog(\"nella risposta ho solamente l'ID e il campo scelto ed ho una sola risposta\");\r\n        this.showTable = false;\r\n\r\n        if (!this.isMultiselect){\r\n          GlobalService.debugLog(\"non multiselect\");\r\n          // Non è multiselect\r\n          this.record[this.field.Name] = data[0][this.keys[1]];\r\n\r\n          // Comunque sia ci portiamo dietro l'ID della selezione con un campo custom, può sempre servire\r\n          if(data[0].hasOwnProperty(\"ID\")){\r\n            if (this.configurations.additionalParams == null){ this.configurations.additionalParams = {}; }\r\n            this.configurations.additionalParams[this.field.Name+\"____ID\"] = data[0]['ID'];\r\n          }\r\n\r\n          this.selectedValue.emit([data[0][this.keys[1]],data[0]['ID']]);\r\n        } else {\r\n          GlobalService.debugLog(\"multiselect\");\r\n          // E' un elenco generico dbgetter multiselect\r\n          // devo fargli la sruttura del dato\r\n          this.selectedElements = new Array<ListValueElement>();\r\n          var selectedElement = new ListValueElement();\r\n          selectedElement.ID = data[0]['ID'];\r\n          selectedElement.Field = this.keys[1];\r\n          selectedElement.Key = data[0][this.keys[1]];\r\n          selectedElement.Value = data[0][this.keys[1]];\r\n\r\n          this.selectedElements.push(selectedElement);\r\n          this.selectedValue.emit([this.selectedElements]);\r\n        }\r\n\r\n      } else if (data.length == 1 && this.field.DataGetter.DataGetterColumnForce != null){\r\n        GlobalService.debugLog(\"ho una sola risposta ed ho una colonna da cui è forzato il recupero del valore\");\r\n\r\n        this.showTable = false;\r\n\r\n\r\n        if (!this.isMultiselect){\r\n          GlobalService.debugLog(\"non multiselect\");\r\n          // Non è multiselect\r\n          this.record[this.field.Name] = data[0][this.field.DataGetter.DataGetterColumnForce.key];\r\n          this.selectedValue.emit([data[0][this.keys[1],data[0]['ID']]]);\r\n        } else {\r\n          GlobalService.debugLog(\"multiselect\");\r\n          // E' un elenco generico dbgetter multiselect\r\n          this.selectedElements = new Array<ListValueElement>();\r\n          var selectedElement = new ListValueElement();\r\n          selectedElement.ID = data[0]['ID'];\r\n          selectedElement.Field = this.field.DataGetter.DataGetterColumnForce.key;\r\n\r\n          if (typeof data[0][this.field.DataGetter.DataGetterColumnForce.key] !== \"undefined\"){\r\n            selectedElement.Key = data[0][this.field.DataGetter.DataGetterColumnForce.key];\r\n            selectedElement.Value = data[0][this.field.DataGetter.DataGetterColumnForce.key];\r\n          } else {\r\n            // da \"Users_Name__Nome\" a \"Users_Name_Name__Nome\"\r\n            var part1 = this.field.DataGetter.DataGetterColumnForce.key.split(\"__\")[0].split(\"_\")[1]; // Name\r\n            var departed = this.field.DataGetter.DataGetterColumnForce.key.split(\"__\");\r\n            departed[0] = departed[0] + \"_\" + part1;\r\n            var reconstructedKey = departed.join(\"__\");\r\n            selectedElement.Key = data[0][reconstructedKey];\r\n            selectedElement.Value = data[0][reconstructedKey];            \r\n          }\r\n\r\n          this.selectedElements.push(selectedElement);\r\n          this.selectedValue.emit([this.selectedElements]);          \r\n        }\r\n\r\n\r\n        \r\n      } else {\r\n        GlobalService.debugLog(\"ho più di una risposta\");\r\n\r\n        this.multipleValuesToChoose = true;\r\n        if (behaviours.indexOf(\"manage-question-in-dbgetter\") != -1){\r\n          this.showTable = true;\r\n        } else {\r\n\r\n          if (!this.DirectlyOpenTable){\r\n            this.showTable = false;\r\n          } else {\r\n            this.showTable = true;          \r\n          }\r\n\r\n        }\r\n\r\n      }\r\n    } else {\r\n      \r\n    }\r\n    \r\n  }\r\n\r\n  selectValue(row, key){\r\n    var keyused;\r\n    var value = row[key];\r\n\r\n    var valueToBeSet = \"\";\r\n\r\n    if (!this.field.IsMultiChoiche){\r\n        if (this.selectedElements.length > 0){\r\n          document.querySelectorAll(\".table.table-multiselect-forced > tr\").forEach((row) => {\r\n            row.classList.remove(\"row-selected\");\r\n          });\r\n          this.selectedElements = new Array<ListValueElement>();\r\n        }\r\n    }\r\n\r\n\r\n    if(this.field.DataGetter.DataGetterColumnForce == null){\r\n      valueToBeSet = value;\r\n      keyused = key;\r\n    } else {\r\n      if (row.hasOwnProperty(this.field.DataGetter.DataGetterColumnForce.key)){\r\n        valueToBeSet = row[this.field.DataGetter.DataGetterColumnForce.key];\r\n        keyused = this.field.DataGetter.DataGetterColumnForce.key;\r\n      } else if (row.hasOwnProperty(key)) {\r\n        valueToBeSet = row[key];\r\n        keyused = key;        \r\n      }\r\n\r\n\r\n    }\r\n\r\n    if (valueToBeSet == null){ valueToBeSet = \"\"; }\r\n\r\n\r\n    // Comunque sia ci portiamo dietro l'ID della selezione con un campo custom, può sempre servire\r\n    if(row.hasOwnProperty(\"ID\")){\r\n      if (this.configurations.additionalParams == null){ this.configurations.additionalParams = {}; }\r\n      this.configurations.additionalParams[this.field.Name+\"____ID\"] = row['ID'];\r\n    }\r\n    \r\n\r\n    //EqpDynamicModuleDialogService.Success(\"Un solo risultato trovato, è stato inserito in automatico\");\r\n\r\n    if (!this.isMultiselect){\r\n      GlobalService.debugLog(\"non multiselect\");\r\n      // Non è multiselect\r\n      this.record[this.field.Name] = valueToBeSet;\r\n      this.selectedValue.emit([valueToBeSet,row['ID']]);    \r\n      this.showTable = false;\r\n    } else {\r\n      GlobalService.debugLog(\"ho multiselect\");\r\n\r\n      if (this.selectedElements != null && !Array.isArray(this.selectedElements)){ this.selectedElements = [this.selectedElements]; }\r\n      if (this.selectedElements == null){ this.selectedElements = new Array<ListValueElement>(); }\r\n      \r\n\r\n      if (this.selectedElements.find(x => x.ID == row['ID']) == null){\r\n        GlobalService.debugLog(\"ho più di una risposta\");\r\n\r\n        // E' un elenco generico dbgetter multiselect\r\n        var selectedElement = new ListValueElement();\r\n        selectedElement.ID = row['ID'];\r\n        selectedElement.Selected = true;\r\n        selectedElement.Field = keyused;\r\n        selectedElement.Key = valueToBeSet;\r\n        selectedElement.KeySV = key;\r\n        selectedElement.KeyUsedSV = keyused;\r\n        selectedElement.Value = valueToBeSet;\r\n\r\n        this.selectedElements.push(selectedElement);\r\n\r\n        var correspondingCol = document.getElementById(\"col-\"+keyused+\"-id-\"+row['ID']);\r\n        if (correspondingCol == null){ correspondingCol = document.getElementById(\"col-\"+key+\"-id-\"+row['ID']); }\r\n        \r\n        if (this.field.DataGetter.DataGetterColumnForce == null){\r\n           correspondingCol.classList.add(\"row-selected\");\r\n        } else {\r\n          correspondingCol.parentElement.classList.add(\"row-selected\");\r\n        }\r\n\r\n      } else {\r\n        var index = this.selectedElements.findIndex(x => x.ID == row['ID']);\r\n        this.selectedElements.splice(index,1);\r\n\r\n        var correspondingCol = document.getElementById(\"col-\"+keyused+\"-id-\"+row['ID']);\r\n        if (correspondingCol == null){ correspondingCol = document.getElementById(\"col-\"+key+\"-id-\"+row['ID']); }\r\n\r\n        if (this.field.DataGetter.DataGetterColumnForce == null){\r\n          correspondingCol.classList.remove(\"row-selected\");        \r\n        } else {\r\n          correspondingCol.parentElement.classList.remove(\"row-selected\");\r\n        }\r\n\r\n      }\r\n\r\n\r\n      //this.selectedValue.emit([this.selectedElements]);    \r\n            \r\n    }\r\n\r\n\r\n  }\r\n\r\n  renderSelected(){\r\n\r\n    this.selectedElements = this.record[this.field.Name];\r\n    if (this.selectedElements == null){ this.selectedElements = new Array<ListValueElement>(); }\r\n\r\n    GlobalService.debugLog(\"renderSelected\", this.selectedElements);\r\n\r\n    if (this.selectedElements.length > 0){\r\n      this.selectedElements.forEach((selectedElement) => {\r\n        var correspondingCol = document.getElementById(\"col-\"+selectedElement.Field+\"-id-\"+selectedElement.ID);\r\n        if (correspondingCol != null) {\r\n          if (this.field.DataGetter.DataGetterColumnForce == null){\r\n            correspondingCol.classList.add(\"row-selected\");\r\n          } else {\r\n            correspondingCol.parentElement.classList.add(\"row-selected\");\r\n          }\r\n        } else {\r\n          correspondingCol = document.getElementById(\"col-\"+selectedElement.KeySV+\"-id-\"+selectedElement.ID);\r\n          if (correspondingCol != null) {\r\n            if (this.field.DataGetter.DataGetterColumnForce == null){\r\n              correspondingCol.classList.add(\"row-selected\");\r\n            } else {\r\n              correspondingCol.parentElement.classList.add(\"row-selected\");\r\n            }\r\n          } else  {\r\n            correspondingCol = document.getElementById(\"col-\"+selectedElement.Key+\"-id-\"+selectedElement.ID);\r\n            if (correspondingCol != null) {\r\n              if (this.field.DataGetter.DataGetterColumnForce == null){\r\n                correspondingCol.classList.add(\"row-selected\");\r\n              } else {\r\n                correspondingCol.parentElement.classList.add(\"row-selected\");\r\n              }\r\n            }\r\n          }\r\n        }\r\n      });\r\n    }\r\n\r\n  }\r\n\r\n  close(){\r\n    this.selectedValue.emit([\"****CLOSE****\",0]);\r\n    this.showTable = false;\r\n  }\r\n  \r\n  delete(){\r\n    this.selectedValue.emit([null,0]);\r\n    this.showTable = false;\r\n  }  \r\n\r\n  activateTable(){\r\n    this.showTable = true;\r\n    setTimeout(() => {\r\n      this.renderSelected();\r\n    },200);\r\n  }\r\n\r\n  reloadData(){\r\n    this.doReload.emit(null);\r\n  }  \r\n\r\n  selectColumn(key){\r\n    if (this.field.DataGetter.DataGetterColumnForce == null){\r\n      this.selectedColumn = key;\r\n      this.multiselectPhase = 2;\r\n    }\r\n  }\r\n\r\n  confirmSelection(){\r\n    this.selectedValue.emit([this.selectedElements]); \r\n    this.showTable = false;\r\n  }\r\n}\r\n\r\nexport class ListValueElement {\r\n  ID: string | number;\r\n  Selected: boolean;\r\n  Field: string;\r\n  Key: string;\r\n  KeySV: string;\r\n  KeyUsedSV: string;\r\n  Value: string;\r\n\r\n}\r\n\r\n// O così o schiantato a mano\r\nexport enum QueryEditorModeEnum {\r\n  \"CONFIGURATOR\" = 1,\r\n  \"COMPOSER\" = 2,\r\n  \"RESULT\" = 3\r\n}","<div>\r\n    <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalSQLResultOut($event);\" *ngIf=\"QueryEditorComponent != null && relationsLoaded && reload\"></ng-template>\r\n</div>\r\n\r\n<div class=\"floatingtable draggable\" cdkDrag *ngIf=\"showTable\">\r\n    <div class=\"header\">\r\n        <div class=\"left\"><tmw-icon class=\"mat-icon\" (click)=\"close()\" name=\"x\"></tmw-icon></div>\r\n        <div class=\"left\"><tmw-icon class=\"mat-icon\" (click)=\"delete()\" name=\"trash\"></tmw-icon></div>\r\n        <div class=\"right\"><tmw-icon class=\"mat-icon\" name=\"grip-vertical\"></tmw-icon></div>\r\n    </div>\r\n\r\n    <div class=\"info\">\r\n        <span *ngIf=\"!isMultiselect\">Seleziona il valore da registrare.</span>\r\n        <span *ngIf=\"isMultiselect && multiselectPhase == 1\">Seleziona una colonna</span>\r\n        <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedColumn != null && field.DataGetter.DataGetterColumnForce == null\">Hai selezionato: <b>{{selectedColumn.split(\"__\")[1]}}</b>.</span>\r\n        <span *ngIf=\"isMultiselect && multiselectPhase == 2\">Seleziona almeno un elemento presente sotto alla colonna selezionata</span>        \r\n        <span *ngIf=\"isMultiselect && multiselectPhase == 2 && selectedElements.length > 0\">\r\n            <button class=\"btn btn-primary btn-confirm\" (click)=\"confirmSelection()\">\r\n                <tmw-icon class=\"mat-icon\" name=\"check\"></tmw-icon> Conferma selezione\r\n            </button>\r\n        </span>\r\n    </div>\r\n\r\n    \r\n    <table class=\"table\" [ngClass]=\"{'table-notforced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce == null, 'table-forced': field.FieldType != fieldTypeEnum['Elenco generico'] && field.DataGetter.DataGetterColumnForce != null, 'table-multiselect-notforced': field.FieldType == fieldTypeEnum['Elenco generico']  && field.DataGetter.DataGetterColumnForce == null, 'table-multiselect-forced': field.FieldType == fieldTypeEnum['Elenco generico']  && field.DataGetter.DataGetterColumnForce != null}\">\r\n        <tr><th *ngFor=\"let key of keys; let first = first\" (click)=\"selectColumn(key)\" id=\"headcol-{{key}}\">\r\n            <span *ngIf=\"first\">{{key}}</span>\r\n            <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n        </th></tr>\r\n        <tr *ngFor=\"let row of data\" class=\"rows\">\r\n            <td *ngFor=\"let key of keys\" (click)=\"selectValue(row, key)\" id=\"col-{{key}}-id-{{row['ID']}}\">\r\n                <!-- \r\n                <span *ngIf=\"row[key] != null && row[key].toString().length <= 100\" [innerHTML]=\"row[key]\">\r\n\r\n                </span> \r\n                <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n                    {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n                </span>\r\n                <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n                    ...\r\n                </span>\r\n                -->\r\n\r\n                <span [innerHTML]=\"row[key]\">\r\n\r\n                </span>\r\n            </td>\r\n        </tr>\r\n    </table>\r\n\r\n    <!-- \r\n    <table class=\"table table-notforced\" *ngIf=\"field.DataGetter.DataGetterColumnForce == null\">\r\n        <tr><th *ngFor=\"let key of keys; let first = first\">\r\n            <span *ngIf=\"first\">{{key}}</span>\r\n            <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n        </th></tr>\r\n        <tr *ngFor=\"let row of data\" class=\"rows\">\r\n            <td *ngFor=\"let key of keys\" (click)=\"selectValueNotForced(row[key])\">\r\n                {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n                <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n                    ...\r\n                </span>\r\n            </td>\r\n        </tr>\r\n    </table>\r\n\r\n    <table class=\"table table-forced\" *ngIf=\"field.DataGetter.DataGetterColumnForce != null\">\r\n        <tr><th *ngFor=\"let key of keys; let first = first\">\r\n            <span *ngIf=\"first\">{{key}}</span>\r\n            <span *ngIf=\"!first\">{{key.split(\"__\")[1]}}</span>\r\n        </th></tr>\r\n        <tr *ngFor=\"let row of data\" class=\"rows\" (click)=\"selectValueForced(row)\">\r\n            <td *ngFor=\"let key of keys\">\r\n                {{row[key] != null ? row[key].toString().substring(0,100) : ''}}\r\n                <span *ngIf=\"row[key] != null && row[key].toString().length > 100\">\r\n                    ...\r\n                </span>\r\n            </td>\r\n        </tr>\r\n    </table>\r\n    -->\r\n\r\n</div>\r\n\r\n<span *ngIf=\"value != null\">{{value}}</span>\r\n\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"activateTable()\" *ngIf=\"multipleValuesToChoose\">\r\n    <tmw-icon class=\"mat-icon\" name=\"chevron-down\"></tmw-icon>\r\n</button>\r\n<button class=\"btn btn-primary btn-arrow-down\" (click)=\"reloadData()\" *ngIf=\"field.DataGetter.DataGetterHasResetButton\">\r\n    <tmw-icon class=\"mat-icon\" name=\"loop\"></tmw-icon>\r\n</button>","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, Renderer2, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { FireTrigger, Trigger, TriggerPropertyTypeEnum } from '../../../../models/trigger.model';\r\nimport { ActionButtonField, ActionButtonFieldStyleCSS } from '../../../../models/fields/actionButton.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../../services/global.service';\r\n\r\nconst ELEMENT_SELECTORS: { [key: string]: string } = {\r\n  Container:   ' button.btn',\r\n  Icona:       ' button.btn mat-icon',\r\n  Descrizione: ' button.btn span.btn-label',\r\n};\r\nconst ELEMENTS = Object.keys(ELEMENT_SELECTORS);\r\nconst STATES = ['Normale', 'Mouseover', 'Selezionato'];\r\nconst DEFAULT_FIELD_STYLES: { [key: string]: string } = {};\r\n\r\n@Component({\r\n  selector: 'action-button-field-template',\r\n  templateUrl: './action-button-field-template.component.html',\r\n  styleUrls: ['./action-button-field-template.component.scss']\r\n})\r\nexport class ActionButtonFieldTemplateComponent implements OnInit, OnChanges, OnDestroy {\r\n\r\n  @Input() field: ActionButtonField;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  @Input() styleVersion: number = 0;\r\n  @Input() forceState: string | null = null;\r\n\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n\r\n  FieldstyleObj: any;\r\n  fieldUid: string;\r\n  private styleEl: HTMLStyleElement | null = null;\r\n\r\n  constructor(private renderer: Renderer2) { }\r\n\r\n  ngOnInit(): void {\r\n    this.fieldUid = 'ab-' + Math.random().toString(36).slice(2, 10);\r\n    this.updateField();\r\n    this.initStyles();\r\n    this.injectStyles();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['styleVersion'] && !changes['styleVersion'].firstChange) {\r\n      this.injectStyles();\r\n      this.updateStateClasses();\r\n    }\r\n    if (changes['forceState']) {\r\n      this.updateStateClasses();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    if (this.styleEl?.parentNode) {\r\n      this.styleEl.parentNode.removeChild(this.styleEl);\r\n    }\r\n  }\r\n\r\n  initStyles() {\r\n    if (this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)\r\n      this.FieldstyleObj = UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n  }\r\n\r\n  private injectStyles(): void {\r\n    if (!this.fieldUid) return;\r\n    const css = (this.field as ActionButtonField)?.ActionButtonFieldStyleCSS ?? ({} as ActionButtonFieldStyleCSS);\r\n    const rules = this.buildCssRules(this.fieldUid, css);\r\n\r\n    if (!this.styleEl) {\r\n      this.styleEl = this.renderer.createElement('style') as HTMLStyleElement;\r\n      this.styleEl.id = 'style-' + this.fieldUid;\r\n      this.renderer.appendChild(document.head, this.styleEl);\r\n    }\r\n    this.styleEl.textContent = rules;\r\n  }\r\n\r\n  private getSelector(uid: string, state: string, s: string): string | null {\r\n    switch (state) {\r\n      case 'Normale':     return `#${uid}${s}`;\r\n      case 'Mouseover':   return `#${uid}:hover${s}, #${uid}.eqp-state-hover${s}`;\r\n      case 'Selezionato': return `#${uid}:active${s}, #${uid}.eqp-state-selected${s}`;\r\n      default:            return null;\r\n    }\r\n  }\r\n\r\n  private buildCssRules(uid: string, css: ActionButtonFieldStyleCSS): string {\r\n    const lines: string[] = [];\r\n    for (const el of ELEMENTS) {\r\n      const s = ELEMENT_SELECTORS[el];\r\n      for (const state of STATES) {\r\n        const key = el + state;\r\n        const defaultVal: string | undefined = DEFAULT_FIELD_STYLES[key];\r\n        const userVal: string | undefined = (css as any)[key];\r\n        if (!defaultVal?.trim() && !userVal?.trim()) continue;\r\n        const selector = this.getSelector(uid, state, s);\r\n        if (!selector) continue;\r\n        if (defaultVal?.trim()) lines.push(`${selector} { ${defaultVal} }`);\r\n        if (userVal?.trim())    lines.push(`${selector} { ${userVal} }`);\r\n      }\r\n    }\r\n    return lines.join('\\n');\r\n  }\r\n\r\n  private updateStateClasses(): void {\r\n    if (!this.fieldUid) return;\r\n    const wrapper = document.getElementById(this.fieldUid);\r\n    if (!wrapper) return;\r\n    this.toggleClass(wrapper, 'eqp-state-hover',    this.forceState === 'Mouseover');\r\n    this.toggleClass(wrapper, 'eqp-state-selected', this.forceState === 'Selezionato');\r\n  }\r\n\r\n  private toggleClass(el: Element, cls: string, condition: boolean): void {\r\n    if (condition) this.renderer.addClass(el, cls);\r\n    else this.renderer.removeClass(el, cls);\r\n  }\r\n\r\n  updateField() {\r\n    if (this.field.VisibleIf) {\r\n      this.field.InListView = UtilityHelperService.EvaluateFieldFormula(this.field.VisibleIf, this.record, this.formulaObject);\r\n    }\r\n    this.field.InListView = this.field.InListView ? true : false;\r\n    GlobalService.debugLog(\"btn InListView - \" + this.field.InListView)\r\n  }\r\n\r\n  generateAction(actionButton: ActionButtonField) {\r\n    if (actionButton.execution == 'execute_formula') {\r\n      let res = UtilityHelperService.EvaluateFieldFormula(\r\n        actionButton.formulas[0].value,\r\n        this.record,\r\n        this.formulaObject\r\n      );\r\n      this.onRecordValueChange();\r\n    } else {\r\n      var fireTrigger: FireTrigger = new FireTrigger();\r\n\r\n      fireTrigger.trigger = new Trigger();\r\n      fireTrigger.trigger.CID = actionButton.ButtonCode;\r\n      fireTrigger.trigger.conditions = null;\r\n      fireTrigger.trigger.description = actionButton.Label;\r\n      fireTrigger.trigger.execution = actionButton.execution;\r\n      fireTrigger.trigger.formulas = actionButton.formulas;\r\n\r\n      fireTrigger.form = null;\r\n      fireTrigger.formulas = actionButton.formulas;\r\n      fireTrigger.record = this.record;\r\n      fireTrigger.userPatient = null;\r\n      fireTrigger.userMedicalExamination = null;\r\n\r\n      this.evaluateFormulasAndFireTrigger(fireTrigger);\r\n    }\r\n  }\r\n\r\n  evaluateFormulasAndFireTrigger(triggerToFire: FireTrigger) {\r\n\r\n    const formulas = JSON.parse(JSON.stringify(triggerToFire.formulas));\r\n    const evaluatedFormulas: { [key: string]: any } = {};\r\n\r\n    GlobalService.debugLog(\"checkTriggers - evaluate formulas \", formulas);\r\n    if (formulas && Object.keys(formulas).length > 0) {\r\n      Object.keys(formulas).forEach((key) => {\r\n        const formulaObj = formulas[key];\r\n        const formula = formulaObj.value;\r\n        let temp;\r\n\r\n        GlobalService.debugLog(\"checkTriggers - formulas[key] \", formulaObj);\r\n\r\n        if (formulaObj.type == TriggerPropertyTypeEnum.DMMODULE) {\r\n          temp = formula;\r\n          GlobalService.debugLog(\"checkTriggers - assigned DMMODULE - id/code \", formula);\r\n\r\n        } else if (formulaObj.type == TriggerPropertyTypeEnum.DROPDOWN_LIST) {\r\n          temp =\r\n            formulaObj?.selectedAllowedValue?.key ? formulaObj.selectedAllowedValue.key\r\n              : (\r\n                UtilityHelperService.EvaluateFieldFormula(\r\n                  formula,\r\n                  this.record,\r\n                  this.formulaObject\r\n                )\r\n              );\r\n\r\n          GlobalService.debugLog(\"checkTriggers - assigned DROPDOWN_LIST-  selectedAllowedValue \", formulaObj.selectedAllowedValue);\r\n\r\n        } else {\r\n          temp = UtilityHelperService.EvaluateFieldFormula(\r\n            formula,\r\n            this.record,\r\n            this.formulaObject\r\n          );\r\n          GlobalService.debugLog(\"checkTriggers - assigned - .value  formula \", formula);\r\n          GlobalService.debugLog(\"checkTriggers - assigned > value  formulaObj.type \", formulaObj);\r\n        }\r\n\r\n        evaluatedFormulas[formulaObj.key] = temp;\r\n      });\r\n    }\r\n\r\n    GlobalService.debugLog(\"checkTriggers - assigned-  evaluatedFormulas \", evaluatedFormulas);\r\n    triggerToFire.formulas = evaluatedFormulas;\r\n    this.fireTrigger.emit(triggerToFire);\r\n  }\r\n\r\n  onRecordValueChange() {\r\n    if (!this.field.Formula) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n    if (!this.field.VisibleIf) {\r\n      this.recordChange.emit(this.record);\r\n    }\r\n  }\r\n}\r\n","<div id=\"{{fieldUid}}\">\r\n    <button class=\"btn btn-primary\" (click)=\"generateAction(field)\">\r\n        <tmw-icon class=\"mat-icon\" *ngIf=\"field.Icon\" [name]=\"field.Icon\"></tmw-icon>\r\n        <span class=\"btn-label\">{{field.ButtonLabel}}</span>\r\n    </button>\r\n</div>\r\n","import { Component, Input } from '@angular/core';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListValueElement } from '../../dbgetter/dbgetter.component';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\n\r\n@Component({\r\n  selector: 'list-value-dbg-template',\r\n  templateUrl: './list-value-dbg-template.component.html',\r\n  styleUrls: ['./list-value-dbg-template.component.scss']\r\n})\r\nexport class ListValueDbgTemplateComponent {\r\n\r\n  @Input() field: ListValueField;\r\n  @Input() record: Record;\r\n\r\n  arrayData: Array<ListValueElement> = new Array<ListValueElement>();\r\n  loaded: boolean = false;\r\n\r\n  ngOnInit(){\r\n\r\n    if (this.record[this.field.Name] != null){\r\n      if (!Array.isArray(this.record[this.field.Name])){ this.record[this.field.Name] = [this.record[this.field.Name]]; }\r\n      this.record[this.field.Name].forEach(element => {\r\n        var pushElement = new ListValueElement();\r\n        pushElement.ID = element.ID;\r\n        pushElement.Field = element.Field;\r\n        pushElement.Key = element.Key;\r\n        pushElement.Selected = true;\r\n        pushElement.Value = element.Value;\r\n        this.arrayData.push(pushElement);\r\n      });\r\n    }\r\n\r\n    console.log(\"ListValueDbgTemplateComponent\", this.arrayData);\r\n\r\n    this.loaded = true;\r\n  }\r\n\r\n}\r\n","<tmw-select *ngIf=\"loaded\" [(ngModelInput)]=\"arrayData\" [arrayData]=\"arrayData\"\r\n    [arrayKeyProperty]=\"'Value'\" [arrayValueProperty]=\"'Key'\"\r\n    [isRequired]=\"field.Required\" [isDisabled]=\"true\" [showCancelButton]=\"false\"\r\n    [isMultiSelect]=\"true\">\r\n</tmw-select>","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { IBaseFieldComponent } from '../../../interfaces/iBaseFieldComponent.interface';\r\nimport { BaseField, FieldTypeEnum, DataGetterTypeEnum, AnswerStyle, DataGetterCardinalityEnum } from '../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../form-records/list-form-record/list-form-record.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../models/endPointConfiguration.model';\r\nimport { DynAttachment } from '../../../models/dynAttachment';\r\nimport { DynamicLoaderDirectiveData, eventOut } from '../../../directives/dynamic-loader/dynamic-loader.directive';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { DynamicModuleCompileConfig } from '../../../models/dynamicModuleCompileConfig.model';\r\nimport { GlobalService } from '../../../services/global.service';\r\nimport { FireTrigger } from '../../../models/trigger.model';\r\n\r\n@Component({\r\n  selector: 'dynamic-module-field-fix',\r\n  templateUrl: './dynamic-module-field.component.html',\r\n  styleUrls: ['./dynamic-module-field.component.scss']\r\n})\r\nexport class DynamicModuleFieldFixComponent implements OnInit, IBaseFieldComponent {\r\n\r\n  @Input() configurations: DynamicModuleCompileConfig = null;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() field: BaseField;\r\n  @Input() form: Form;\r\n  @Input() record: Record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() inConfig: boolean = false;\r\n  @Input() userID: number;\r\n  @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n  configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n  FieldTypeEnum = FieldTypeEnum;\r\n  DataGetterTypeEnum = DataGetterTypeEnum;\r\n  directlyOpenTable: boolean = false;\r\n  dmloaded: boolean = false;\r\n  loadedDBGetter: boolean = true;\r\n  DBGetterFieldsLoaded: boolean = true;\r\n\r\n  //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n  selectedInnerForm: Form;\r\n  selectedInnerFormRecord: Record;\r\n  indexInnerFormRecord: number;\r\n  onlyViewInnerFormRecord: boolean = false;\r\n  dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n  //#endregion\r\n\r\n  @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n  @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n  constructor(\r\n    private dialog: MatDialog,\r\n    private utilityHelperService: UtilityHelperService\r\n  ) { }\r\n\r\n\r\n  //#region updateField\r\n  updateField(): void {\r\n    if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n      this.fieldTemplate.forEach((f) => { if (f != null && typeof f.updateField === 'function') { f.updateField(); } });\r\n    }\r\n  }\r\n  //#endregion updateField\r\n\r\n  //#region ngOnInit\r\n  ngOnInit(): void {\r\n\r\n    GlobalService.debugLog(\"dynamic-module-field\", this.field);\r\n\r\n    this.configList.values = this.record[this.field.Name]\r\n    this.configList.showTitle = true;\r\n    this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n\r\n    if (this.field.DataGetterValueBase64String != null && this.field.DataGetterValueBase64String != \"\") {\r\n      this.field.DataGetter = JSON.parse(atob(this.field.DataGetterValueBase64String));\r\n    }\r\n\r\n    if(!this.record[this.field.Name]){\r\n      if (this.field.DataGetter != null && this.field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']) {\r\n        this.manageDMGetter();\r\n      }\r\n    } else {\r\n      this.dmloaded = true;\r\n    }\r\n  }\r\n  //#endregion ngOnInit\r\n\r\n  /**\r\n   * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n   * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n   */\r\n  onRecordChange() {\r\n    this.recordChange.emit(this.record);\r\n  }\r\n\r\n  /**\r\n   * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n   * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n   * @returns Restituisce un oggetto di tipo Form.\r\n   */\r\n  getInnerFormFromField(field: BaseField): Form {\r\n    if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n      return this.form.InnerForms.find(f => f.Name == field.Label);\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n  //#region onAddViewEditInnerFormRecord\r\n  /**\r\n * Metodo per aprire un dialog in cui aggiungere/modificare/visualizzare un record appartenente\r\n * a una form di dettaglio.\r\n * @param record Evento di output del componente list-form-record, contiene il record selezionato e un booleno che indica \r\n * se l'utente vuole modificare o visualizzare l'elemento selezionato.\r\n * @param innerForm Contiene la Form di dettaglio dalla quale è stato richiesto il record.\r\n */\r\n  onAddViewEditInnerFormRecord(record: { record: Record, onlyView: boolean }, field: BaseField) {\r\n    this.selectedInnerForm = this.getInnerFormFromField(field);\r\n    if (record == null) {\r\n      this.selectedInnerFormRecord = new Record();\r\n      this.indexInnerFormRecord = null;\r\n      this.onlyViewInnerFormRecord = false;\r\n    } else {\r\n      this.selectedInnerFormRecord = JSON.parse(JSON.stringify(record.record));\r\n      this.indexInnerFormRecord = this.record[field.Name].indexOf(record);\r\n      this.onlyViewInnerFormRecord = record.onlyView;\r\n    }\r\n\r\n    this.dialogInnerFormRecordRef = this.dialog.open(this.dialogInnerFormRecord, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: '75%'\r\n    });\r\n  }\r\n  //#endregion onAddViewEditInnerFormRecord\r\n\r\n  //#region onSaveInnerFormRecord\r\n  /**\r\n   * Metodo invocato al salvataggio o alla chiusura del dialog di aggiunta/modifica/visualizzazione\r\n   * di un record di una form di dettaglio.\r\n   * @param record Oggetto restituito dal componente add-form-field (questo qui) contenente il Record \r\n   * aggiornato dall'utente. Se null allora l'utente non ha modificato nulla e ha chiuso il dialog.\r\n   */\r\n  onSaveInnerFormRecord(record: Record) {\r\n    if (record != null) {\r\n      const arrayName: string = this.selectedInnerForm.Name.split(' ').join('_');\r\n      if (this.indexInnerFormRecord != null && this.indexInnerFormRecord >= 0) {\r\n        this.record[arrayName][this.indexInnerFormRecord] = record;\r\n      } else {\r\n        if (!this.record[arrayName]) {\r\n          this.record[arrayName] = [];\r\n        }\r\n        this.record[arrayName].push(record);\r\n      }\r\n    }\r\n    this.dialogInnerFormRecordRef.close();\r\n\r\n    // Ricarico la tabella dei record per visualizzare le modifiche fatte dall'utente.\r\n    if (this.listInnerFormRecords && this.listInnerFormRecords.length > 0) {\r\n      this.listInnerFormRecords.forEach(list => {\r\n        if (list && list.tableRecords) {\r\n          list.tableRecords.reloadDatatable();\r\n        }\r\n      });\r\n    }\r\n  }\r\n  //#endregion onSaveInnerFormRecord\r\n\r\n  // Passo l'immagine disegnata al livello superiore\r\n  onImageDraw(event: DynAttachment) {\r\n    this.record[this.field.Name] = event;\r\n    this.recordChange.emit(this.record);\r\n  }\r\n\r\n  // Passo l'immagine disegnata al livello superiore\r\n  onImageMark(event: DynAttachment) {\r\n    this.record[this.field.Name] = event;\r\n    this.recordChange.emit(this.record);\r\n  }\r\n  \r\n  onExternalComponentOut(ev: eventOut) {\r\n    this.out.emit(ev);\r\n  }\r\n\r\n  //#region onSelectedValue\r\n  onSelectedValue(value: any) {\r\n\r\n    GlobalService.debugLog(\"onSelectedValue FROM DBGETTER\", value);\r\n    console.log(\"onSelectedValue FROM DBGETTER\", value, this.field, this.field.FieldType == FieldTypeEnum['Elenco generico']);\r\n\r\n    if (value[0] == \"****CLOSE****\") { return; }\r\n\r\n    if (this.field.FieldType == FieldTypeEnum['Campo di testo']) {\r\n      var valueToPut = null;\r\n      if (value == null){ valueToPut = null; } else if (Array.isArray(value[0])) { valueToPut = value[0][0]; } else { valueToPut = value[0]; }\r\n      console.log(\"VALUETOPUT campoditesto\", value, valueToPut);\r\n      this.record[this.field.Name] = valueToPut;\r\n    }\r\n\r\n    if (this.field.FieldType == FieldTypeEnum['Elenco generico']) {\r\n      GlobalService.debugLog(\"onSelectedValue FROM DBGETTER ELENCO GENERICO\", value);\r\n\r\n      var valueToPut = null;\r\n      if (value == null){ valueToPut = []; } else if (Array.isArray(value[0])) { valueToPut = value[0][0]; } else { valueToPut = value[0]; }\r\n\r\n      console.log(\"VALUETOPUT elencogenerico\", value, valueToPut);\r\n      this.record[this.field.Name] = valueToPut;\r\n      this.DBGetterFieldsLoaded = false;\r\n      setTimeout(() => { this.DBGetterFieldsLoaded = true; }, 1000);\r\n    }\r\n\r\n  }\r\n  //#endregion onSelectedValue\r\n\r\n  //#region manageDMGetter\r\n  // ci entro se il campo ha la modalità di recupero dei dati \"da modulo dinamico\" \r\n  // chiedo al server i valori ed imposto this.record[this.field.Name]\r\n  /**\r\n   * Gestisce il recupero dei dati dinamici (Dynamic Module Getter) in base alla modalità.\r\n   */\r\n  manageDMGetter() {\r\n    if (this.field.DataGetter.DataGetterCardinality === DataGetterCardinalityEnum['CONTESTUALIZZATA ALLA RISPOSTA']) {\r\n      // Se la modalità è \"contestualizzata alla risposta\"\r\n      this.handleResponseContextualized();\r\n    } else {\r\n      // Altrimenti gestiamo le altre modalità\r\n      this.handleNonContextualized();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Esegue la chiamata se la modalità è \"contestualizzata alla risposta\",\r\n   * utilizzando l'ID della risposta originaria.\r\n   */\r\n  private handleResponseContextualized() {\r\n    if (this.configurations?.additionalParams?.[\"OriginAnswerID\"]) {\r\n      const params = [{\r\n        ParamName: \"id\",\r\n        ParamValue: this.configurations.additionalParams[\"OriginAnswerID\"],\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      }];\r\n  \r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Records.GetByIDEndPoint,\r\n        params,\r\n        (res: any) => {\r\n          // Parsing della risposta e aggiornamento del record\r\n          const answerObj = JSON.parse(res.SerializedValues);\r\n          this.setFieldValue(answerObj);\r\n        }\r\n      );\r\n    } else {\r\n      console.error(\"Contesto non trovato\");\r\n      this.dmloaded = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gestisce tutte le altre modalità, inclusa la contestualizzazione per ID esterno.\r\n   */\r\n  private handleNonContextualized() {\r\n    const contestualizationParam = this.field.DataGetter.DataGetterContestualization?.entityDMAdditionalParam || null;\r\n    const contestualizationId = this.configurations?.additionalParams?.[contestualizationParam] || null;\r\n    const params = this.buildBaseParams(contestualizationParam, contestualizationId);\r\n  \r\n    if (contestualizationId) {\r\n      // se ho contestualizzazione tramite parametri\r\n      this.fetchDataWithContextualization(params, contestualizationParam, contestualizationId);\r\n    } else {\r\n      this.fetchDataWithoutContextualization(params, contestualizationParam, contestualizationId);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Costruisce i parametri richiesti dalla chiamata API in base al contesto.\r\n   */\r\n  private buildBaseParams(param: string, id: any): Array<EndPointDataParams> {\r\n    const baseParams: Array<EndPointDataParams> = [\r\n      { ParamName: \"FormCode\", ParamValue: this.field.DataGetter.DataGetterValue, ParamType: ParamTypeEnum[\"Query param\"] },\r\n      { ParamName: \"UserID\", ParamValue: this.userID, ParamType: ParamTypeEnum[\"Query param\"] },\r\n      { ParamName: \"OrgaID\", ParamValue: this.form.OrgaID, ParamType: ParamTypeEnum[\"Query param\"] },\r\n      { ParamName: \"mode\", ParamValue: 2, ParamType: ParamTypeEnum[\"Query param\"] },\r\n    ];\r\n  \r\n    // Se disponibile, aggiunge parametri per la contestualizzazione\r\n    if (id) {\r\n      baseParams.push({ ParamName: \"ContestualizationParam\", ParamValue: param, ParamType: ParamTypeEnum[\"Query param\"] });\r\n      baseParams.push({ ParamName: \"ContestualizationId\", ParamValue: id, ParamType: ParamTypeEnum[\"Query param\"] });\r\n    }\r\n  \r\n    return baseParams;\r\n  }\r\n\r\n  /**\r\n   * Imposta il valore del campo nel record corrente, usando la colonna specificata.\r\n   */\r\n  private setFieldValue(answerObj: any) {\r\n    this.record[this.field.Name] = answerObj[this.field.DataGetter.DataGetterColumnForce] ;\r\n    this.dmloaded = true;\r\n  }\r\n\r\n  /**\r\n   * Esegue la chiamata API in modalità contestualizzata e assegna il risultato.\r\n   */\r\n  private fetchDataWithContextualization(params, paramName, paramId) {\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.GetWithContextualizationByFormCodeEndPoint,\r\n      params,\r\n      (res: any) => {\r\n        if (!res || res.length === 0) {\r\n          this.dmloaded = true;\r\n          return;\r\n        }\r\n  \r\n        const answer = this.pickAnswer(res);\r\n        if (!answer) return;\r\n  \r\n        const answerObj = JSON.parse(answer.SerializedValues);\r\n        this.setFieldValue(answerObj);\r\n      },\r\n      () => { }\r\n    );\r\n  }\r\n  \r\n  /**\r\n   * Esegue la chiamata API in modalità NON contestualizzata e assegna il risultato.\r\n   */\r\n  private fetchDataWithoutContextualization(params, paramName, paramId) {\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.GetByFormCodeEndPoint,\r\n      params,\r\n      (res: any) => {\r\n        if (!res || res.Answers.length === 0) {\r\n          this.dmloaded = true;\r\n          return;\r\n        }\r\n  \r\n        let answers = res.Answers;\r\n        if (paramId) {\r\n          answers = answers.filter((a, i) => {\r\n            const additionalParams = JSON.parse(res.AdditionalParams[i]);\r\n            return additionalParams[paramName] == paramId;\r\n          });\r\n        }\r\n  \r\n        const answerStr = this.pickAnswer(answers)?.Answer;\r\n        if (!answerStr) return;\r\n  \r\n        const answerObj = JSON.parse(answerStr);\r\n        this.setFieldValue(answerObj);\r\n      },\r\n      () => { }\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Seleziona la risposta corretta tra le disponibili, in base alla cardinalità.\r\n   */\r\n  private pickAnswer(answers: any[]): any {\r\n    if (answers.length === 1) return answers[0];\r\n\r\n    // Se è richiesta la risposta \"più recente\", prendiamo la prima (ordinamento già gestito a monte)\r\n    if (this.field.DataGetter.DataGetterCardinality == DataGetterCardinalityEnum['PIU RECENTE']) {\r\n      return answers[0];\r\n    }\r\n    \r\n    // Default: restituiamo la prima\r\n    return answers[0];\r\n  }\r\n  \r\n  //#endregion manageDMGetter\r\n\r\n  //#region onFireTrigger\r\n  onFireTrigger(ev: FireTrigger) {\r\n    ev.form = this.form;\r\n    ev.userPatient = this.userID.toString();\r\n    this.fireTrigger.emit(ev);\r\n  }\r\n  //#endregion onFireTrigger\r\n\r\n  //#region reloadDBGetter\r\n  reloadDBGetter() {\r\n    this.loadedDBGetter = false;\r\n    setTimeout(() => {\r\n      this.loadedDBGetter = true;\r\n    }, 1000);\r\n  }\r\n  //#endregion reloadDBGetter\r\n\r\n}\r\n","<ng-container\r\n    *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Manuale'] || field.DataGetter.DataGetterType == DataGetterTypeEnum['Formula']\">\r\n    <ng-container [ngTemplateOutlet]=\"fieldsTemplate\"\r\n        [ngTemplateOutletContext]=\"{ field: field, record: record, forcedValues: null }\"></ng-container>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da database']\">\r\n\r\n    <div class=\"row datagetter\">\r\n        <div class=\"col-12\">\r\n            <ng-container *ngIf=\"DBGetterFieldsLoaded\" [ngTemplateOutlet]=\"fieldsDBGTemplate\"\r\n                [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n            <dbgetter *ngIf=\"loadedDBGetter\" class=\"dbgetter\" [configurations]=\"configurations\"\r\n                [hidden]=\"!field.InListView\" [form]=\"form\" [(record)]=\"record\" [field]=\"field\"\r\n                [DirectlyOpenTable]=\"directlyOpenTable\" [QueryEditorComponent]=\"QueryEditorComponent\"\r\n                [inConfig]=\"inConfig\" (out)=\"onExternalComponentOut($event)\" (doReload)=\"reloadDBGetter()\"\r\n                (selectedValue)=\"onSelectedValue($event)\">\r\n            </dbgetter>\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<ng-container *ngIf=\"field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico']\">\r\n\r\n    <div class=\"row\" *ngIf=\"dmloaded\">\r\n        <div class=\"col-12\">\r\n            <ng-container [ngTemplateOutlet]=\"fieldsTemplate\"\r\n                [ngTemplateOutletContext]=\"{ field: field, record: record }\"></ng-container>\r\n        </div>\r\n    </div>\r\n</ng-container>\r\n\r\n<ng-template #fieldsTemplate>\r\n\r\n    <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </text-field-template>\r\n\r\n    <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </textarea-field-template>\r\n\r\n    <action-button-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Bottone']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n    </action-button-field-template>\r\n\r\n    <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </boolean-field-template>\r\n\r\n    <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </date-field-template>\r\n\r\n    <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </numeric-field-template>\r\n\r\n    <list-value-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </list-value-field-template>\r\n\r\n    <attachment-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n        [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </attachment-field-template>\r\n\r\n    <image-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n        [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\" [matTooltip]=\"field.Description\"\r\n        [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n        (imageDraw)=\"onImageDraw($event)\">\r\n    </image-field-template>\r\n\r\n    <image-with-markers-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine con markers']\"\r\n        [endPointConfiguration]=\"endPointConfiguration\" [inConfig]=\"inConfig\" [matTooltip]=\"field.Description\"\r\n        [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\" (recordChange)=\"onRecordChange()\"\r\n        (imageMark)=\"onImageMark($event)\">\r\n    </image-with-markers-field-template>\r\n\r\n    <image-field-selector-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n        [matTooltip]=\"field.Description\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </image-field-selector-template>\r\n\r\n    <label-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Etichetta']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </label-field-template>\r\n\r\n    <!-- FORM DI DETTAGLIO (LASCIARE IN FONDO) -->\r\n    <list-form-record #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\"\r\n        [form]=\"getInnerFormFromField(field)\" [configurations]=\"configList\"\r\n        (onAddViewEditRecord)=\"onAddViewEditInnerFormRecord($event, field)\">\r\n    </list-form-record>\r\n</ng-template>\r\n\r\n<ng-template #fieldsDBGTemplate>\r\n\r\n    <text-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </text-field-template>\r\n\r\n    <list-value-dbg-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (recordChange)=\"onRecordChange()\">\r\n    </list-value-dbg-template>\r\n\r\n\r\n    <!-- Non gestiti (funzionano a culo) -->\r\n\r\n    <date-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </date-field-template>\r\n\r\n    <textarea-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </textarea-field-template>\r\n\r\n    <boolean-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </boolean-field-template>\r\n\r\n    <numeric-field-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n        [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [formulaObject]=\"formulaObject\" [field]=\"field\"\r\n        (recordChange)=\"onRecordChange()\">\r\n    </numeric-field-template>\r\n\r\n\r\n\r\n</ng-template>","import { ChangeDetectorRef, Component, EventEmitter, Input, OnInit, Output, QueryList, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { AnswerStyle, BaseField, DataGetter, DataGetterTypeEnum, FieldInvisibilityEnum, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\nimport { NumericField } from '../../../../models/fields/numericField.model';\r\nimport { ImageSelectorField } from '../../../../models/fields/imageSelectorField.model';\r\nimport { DynAttachment } from '../../../../models/dynAttachment';\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { LogicOperator } from '../../../../models/logicOperator.model';\r\nimport { FireTrigger, Trigger, TriggerPropertyTypeEnum, ActionButton, ActionFlagEnum, BooleanLogicOperatorType } from '../../../../models/trigger.model';\r\nimport { DatePipe } from '@angular/common';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../models/fields/dateField.model';\r\nimport { injectGoogleFontsFromForm } from '../../../../utils/google-fonts-injector';\r\n\r\n\r\n@Component({\r\n  selector: \"add-form-record\",\r\n  templateUrl: \"./add-form-record.component.html\",\r\n  styleUrls: [\"./add-form-record.component.scss\"],\r\n})\r\nexport class AddFormRecordComponent implements OnInit {\r\n\r\n  @Input() configurations: DynamicModuleCompileConfig;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() userID: string;\r\n  @Input() orgaID: string = null; // preview\r\n\r\n  @Input() formID: string = null; // preview\r\n  @Input() form: Form = null; // preview config\r\n  @Input() record: Record | string = null; // edit\r\n  @Input() formulaObject: any = {};\r\n  @Input() onlyView: boolean = false;\r\n  @Input() isDuplicate: boolean = false;\r\n  @Input() inConfig: boolean = false;\r\n  @Input() showAllFields: boolean = false;\r\n  @Input() showTitle: boolean = true;\r\n\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n\r\n  @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n\r\n  @Input() visualEditorMode: boolean = false;\r\n  @Input() veSwapFieldCode: string | null = null;\r\n\r\n  @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n  @Output() veFieldClick = new EventEmitter<{ field: BaseField; event: MouseEvent }>();\r\n\r\n  onVeFieldClick(field: BaseField, event: MouseEvent): void {\r\n    event.stopPropagation();\r\n    this.veFieldClick.emit({ field, event });\r\n  }\r\n\r\n  showSaveButton = true;\r\n  showBackButton = true;\r\n  loader: boolean = false;\r\n  isSaving: boolean = false;\r\n  formloaded: boolean = false;\r\n  private _recordChanging = false;\r\n\r\n  formForm: UntypedFormGroup;\r\n  fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n  FormScalarTypeEnum = FormScalarTypeEnum;\r\n  FieldTypeEnum = FieldTypeEnum;\r\n\r\n  @ViewChildren(\"fieldTemplate\")\r\n  fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n  visibleActionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n\r\n  get titleCssStyle(): SafeStyle | null {\r\n    if (!this.form?.TitleCSS) return null;\r\n    return this.sanitizer.bypassSecurityTrustStyle(this.form.TitleCSS.trim().replace(/;$/, ''));\r\n  }\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    public utilityService: UtilityHelperService,\r\n    private datepipe: DatePipe,\r\n    private sanitizer: DomSanitizer\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    injectGoogleFontsFromForm(this.form);\r\n    if (this.form != null && this.orgaID != null) {\r\n      this.form.OrgaID = this.orgaID;\r\n    }\r\n\r\n    // add può funzionare anche come modifica e come preview\r\n    // in add abbiamo in input l'ID del Form\r\n    // in modifica abbiamo in input l'ID del Record\r\n    // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n    this.showTitle = this.configurations.showTitle;\r\n    this.showSaveButton = this.configurations.showSaveButton;\r\n    this.showBackButton = this.configurations.showBackButton;\r\n\r\n    if (this.actionButtons == null) { this.actionButtons = new Array<ActionButton>(); }\r\n    this.visibleActionButtons = this.actionButtons.filter(x => x.ShowIn == ActionFlagEnum.ADDRECORD);\r\n\r\n    GlobalService.debugLog(\"AddFormRecord\")\r\n\r\n    if (this.record == null) {\r\n      // this.showTitle = true;\r\n      GlobalService.debugLog(\"AddFormRecord - new\")\r\n      this.previewOrNewResponseRecord();\r\n    } else if (this.isDuplicate) {\r\n      // this.showTitle = false;\r\n      GlobalService.debugLog(\"AddFormRecord - duplicate\", this.record)\r\n      if (!(typeof this.record === \"string\")) {\r\n        this.record = (<Record>this.record).ID;\r\n      }\r\n      this.editResponseRecord();\r\n    } else {\r\n      // this.showTitle = false;\r\n      GlobalService.debugLog(\"AddFormRecord - edit\", this.record)\r\n      this.editResponseRecord();\r\n    }\r\n\r\n    // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n\r\n    this.cdr.detectChanges();\r\n    GlobalService.debugLog('oninit - DynaForm', this.form)\r\n  }\r\n\r\n  onStepChange(event: any): void {\r\n    if (GlobalService.isSpeechToTextStarted) {\r\n      GlobalService.speechDirective.SpeechToTextToggler();\r\n    }\r\n  }\r\n\r\n  //#region onRecordChange\r\n  /**\r\n   * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n   * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n   * Il guard _recordChanging previene la rientranza: i campi formula aggiornano\r\n   * record[name] e ciò riemette recordChange; senza guard si genera un loop infinito.\r\n   */\r\n  onRecordChange() {\r\n    if (this._recordChanging) return;\r\n    this._recordChanging = true;\r\n    try {\r\n      if (this.fieldTemplate && this.fieldTemplate.length > 0) {\r\n        this.fieldTemplate.forEach((f) => { if (f != null && typeof f.updateField === 'function') { f.updateField(); } });\r\n      }\r\n      // I validator required leggono da record[field.Name] (closure su record), quindi basta\r\n      // chiamare updateValueAndValidity per far rileggere il valore aggiornato dalla formula/ActionButton.\r\n      // Non si usa setValue per evitare che writeValue sui ControlValueAccessor scateni eventi → loop.\r\n      if (this.form?.Fields) {\r\n        this.form.Fields.forEach(field => {\r\n          field.FormFormGroup?.get(field.Name)?.updateValueAndValidity({ emitEvent: false });\r\n        });\r\n      }\r\n    } finally {\r\n      this._recordChanging = false;\r\n    }\r\n  }\r\n  //#endregion onRecordChange\r\n\r\n  //#region previewOrNewResponseRecord\r\n  previewOrNewResponseRecord() {\r\n    this.record = new Record();\r\n    // aggiugni nuovo\r\n    if (this.form != null) {\r\n      // preview per il configurator\r\n      this.fieldsConfig();\r\n    } else if (this.formID != null) {\r\n      // preview per admin\r\n      this.getFormByID(); // dentro chiama fieldsConfig\r\n    }\r\n  }\r\n  //#endregion previewOrNewResponseRecord\r\n\r\n  //#region editResponseRecord\r\n  editResponseRecord() {\r\n\r\n    // modiiltà modifica\r\n    if (typeof this.record === \"string\") {\r\n      // allora è un ID\r\n      this.getRecordByID();\r\n    } else {\r\n      // il record viene passato come tale\r\n      // (<Record>this.record).EntID = \"3\";\r\n      // (<Record>this.record).Version;\r\n      this.getFormByIDandVersion(true);\r\n    }\r\n  }\r\n  //#endregion editResponseRecord\r\n\r\n  //#region saveOrExitForm\r\n  /**\r\n   * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n   */\r\n  saveOrExitForm(exit: boolean) {\r\n    GlobalService.debugLog('add-form-record saveRecordEvent');\r\n    if (exit) {\r\n      // this.saveRecordEvent.emit(null);\r\n      this.onSaveRecord(null);\r\n    } else {\r\n      // this.saveRecordEvent.emit(this.record);\r\n      this.isSaving = true;\r\n      this.onSaveRecord((<Record>this.record));\r\n    }\r\n  }\r\n  //#endregion saveOrExitForm\r\n\r\n  //#region onSaveRecord\r\n  /**\r\n   * Metodo per salvare il record aggiunto o modificato.\r\n   * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n   * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n   * @param event Oggetto di tipo Record da salvare.\r\n   */\r\n  async onSaveRecord(event: Record) {\r\n    GlobalService.debugLog('onSaveRecord - event', event)\r\n    GlobalService.debugLog('onSaveRecord - form', this.form)\r\n    if (\r\n      event != null &&\r\n      this.endPointConfiguration != null &&\r\n      this.endPointConfiguration.Records.SaveEndPoint\r\n    ) {\r\n      var dynRec: DynRecord = new DynRecord();\r\n      dynRec.ID = event.ID ?? null;\r\n      dynRec.EntID = this.form.ID;\r\n      dynRec.Version = this.form.Version;\r\n      dynRec.userID = this.userID;\r\n      dynRec.Values = event ?? null;\r\n      dynRec.HTMLreadableValues = await this.createHTMLreadableValues(event);\r\n\r\n      if (event.FK_InsertUser == null) {\r\n        // Nuovo Record\r\n        dynRec.FK_InsertUser = this.userID;\r\n        dynRec.InsertDate = new Date();\r\n        dynRec.FK_UpdateUser = this.userID;\r\n        dynRec.UpdateDate = new Date();\r\n      } else {\r\n        // Modifica del Record\r\n        dynRec.FK_InsertUser = event.FK_InsertUser\r\n        dynRec.InsertDate = event.InsertDate;\r\n        dynRec.FK_UpdateUser = this.userID;\r\n        dynRec.UpdateDate = new Date();\r\n      }\r\n\r\n      var additionalParams = this.configurations.additionalParams == null ? event.AdditionalParams : this.configurations.additionalParams;\r\n      dynRec.AdditionalParams = JSON.stringify(additionalParams);\r\n\r\n      // var additionalInfo = this.additionalInfo == null ? event.AdditionalInfo : this.additionalInfo;\r\n      var additionalInfo = event.AdditionalInfo == null ? this.configurations.additionalInfo : event.AdditionalInfo;\r\n      dynRec.AdditionalInfo = JSON.stringify(additionalInfo);\r\n\r\n      var dynamicModuleParams = [\r\n        {\r\n          ParamName: \"Record\",\r\n          ParamValue: dynRec,\r\n          ParamType: ParamTypeEnum[\"In Body\"],\r\n        },\r\n      ];\r\n\r\n      GlobalService.debugLog('onSaveRecord - dynamicModuleParams', dynamicModuleParams)\r\n      this.utilityService.RunEndPointCall(\r\n        this.endPointConfiguration.Records.SaveEndPoint,\r\n        dynamicModuleParams,\r\n        (res) => {\r\n          dynRec.ID = res.toString();\r\n          event.ID = res.toString();\r\n          this.checkTriggers(event);\r\n          this.afterSaveRecordEvent.emit(dynRec);\r\n          this.isSaving = false;\r\n        }\r\n      );\r\n    } else {\r\n      this.saveRecordEvent.emit(dynRec);\r\n    }\r\n  }\r\n  //#endregion onSaveRecord\r\n\r\n  //#region getFormByID\r\n  getFormByID(id: string = this.formID) {\r\n    const dynamicModuleParams: Array<EndPointDataParams> =\r\n      new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"id\",\r\n      ParamValue: id,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Form) => {\r\n        this.form = res;\r\n        this.form.OrgaID = this.orgaID;\r\n\r\n        if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\") {\r\n          this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n        } else {\r\n          this.form.Triggers = new Array<Trigger>();\r\n        }\r\n\r\n        this.setDataGetter(this.form);\r\n        GlobalService.debugLog('getFormByID - DynaForm', this.form)\r\n        this.fieldsConfig();\r\n      },\r\n      (err) => { }\r\n    );\r\n  }\r\n  //#endregion getFormByID\r\n\r\n  //#region getRecordByID\r\n  // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n  getRecordByID() {\r\n\r\n    // preparo i dati del record\r\n    var dynamicRecordParams = [\r\n      {\r\n        ParamName: \"id\",\r\n        ParamValue: this.record,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.GetByIDEndPoint,\r\n      dynamicRecordParams,\r\n      (res: DynRecord) => {\r\n        this.record = new Record();\r\n        (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n        this.record.ID = res.ID;\r\n        this.record.EntID = res.EntID;\r\n        this.record.userID = res.userID;\r\n        this.record.Version = res.Version;\r\n        this.record.Values = JSON.parse(res.SerializedValues);\r\n        this.record.FK_InsertUser = res.FK_InsertUser;\r\n        this.record.FK_UpdateUser = res.FK_UpdateUser;\r\n        this.record.InsertDate = res.InsertDate;\r\n        this.record.UpdateDate = res.UpdateDate;\r\n\r\n        // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n        // this.loader = true;\r\n        this.getFormByIDandVersion();\r\n      }\r\n    );\r\n  }\r\n  //#endregion getRecordByID\r\n\r\n  //#region getFormByIDandVersion\r\n  getFormByIDandVersion(getAttachments: boolean = false) {\r\n    // preparo la versione corretta del form\r\n    var dynamicModuleParams = [\r\n      {\r\n        ParamName: \"EntID\",\r\n        ParamValue: (<Record>this.record).EntID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n      {\r\n        ParamName: \"Version\",\r\n        ParamValue: (<Record>this.record).Version,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n    GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Form) => {\r\n        GlobalService.debugLog(\"AFTER getFormByIDandVersion - this.form\", res)\r\n        this.form = res;\r\n        this.form.OrgaID = this.orgaID;\r\n\r\n        if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\") {\r\n          this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n        } else {\r\n          this.form.Triggers = new Array<Trigger>();\r\n        }\r\n\r\n        this.setDataGetter(this.form);\r\n\r\n        this.createRecordProperties();\r\n        this.reorderFormFields();\r\n        this.createFormGroup();\r\n        if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n          this.createFieldGroups();\r\n        }\r\n\r\n        if (!getAttachments && !this.isDuplicate) {\r\n          this.loader = true;\r\n          this.formloaded = true;\r\n        } else {\r\n          this.getAllRecordAttachments((<Record>this.record).ID);\r\n        }\r\n      }\r\n    );\r\n  }\r\n  //#endregion getFormByIDandVersion\r\n\r\n  //#region getAllRecordAttachments\r\n  getAllRecordAttachments(recordID: string) {\r\n\r\n    var dynamicModuleParams = [\r\n      {\r\n        ParamName: \"answerId\",\r\n        ParamValue: recordID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      }\r\n    ];\r\n\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.GetAllAttachmentsEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Array<DynAttachment>) => {\r\n        GlobalService.debugLog(\"GetAllAttachmentsEndPoint()\", res);\r\n\r\n        this.form.Fields.forEach((field) => {\r\n          if (field.FieldType == FieldTypeEnum.Immagine || field.FieldType == FieldTypeEnum['Immagine con markers']) {\r\n            var attachId = this.record[field.Name];\r\n            this.record[field.Name] = res.find(x => x.ID == attachId);\r\n            if (this.isDuplicate) {\r\n              this.record[field.Name].ID = 0;\r\n            }\r\n          }\r\n        });\r\n\r\n        if (this.isDuplicate) {\r\n          (<Record>this.record).ID = \"\";\r\n        }\r\n        this.loader = true;\r\n        this.formloaded = true;\r\n      }\r\n    );\r\n\r\n  }\r\n  //#endregion getAllRecordAttachments\r\n\r\n  //#region fieldsConfig\r\n  fieldsConfig() {\r\n    this.createRecordProperties();\r\n    this.reorderFormFields();\r\n    this.createFormGroup();\r\n    if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n      this.createFieldGroups();\r\n    }\r\n    GlobalService.debugLog(\"fieldsConfig - form\", this.form);\r\n    this.loader = true;\r\n    this.formloaded = true;\r\n  }\r\n  //#endregion fieldsConfig\r\n\r\n  //#region createRecordProperties\r\n  /**\r\n   * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n   */\r\n  private createRecordProperties() {\r\n    const recordProperties: Array<string> = Object.keys(this.record);\r\n    this.form.Fields.forEach((field) => {\r\n      if (!recordProperties.find((p) => p === field.Name)) {\r\n        this.record[field.Name] = null;\r\n      }\r\n    });\r\n    if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n      this.form.InnerForms.forEach((form) => {\r\n        const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n        if (!recordProperties.find((p) => p === arrayName)) {\r\n          this.record[arrayName] = [];\r\n        }\r\n      });\r\n    }\r\n    GlobalService.debugLog(\"createRecordProperties - form\", this.form);\r\n    GlobalService.debugLog(\"createRecordProperties - record\", this.record);\r\n  }\r\n  //#endregion createRecordProperties\r\n\r\n  /**\r\n   * Metodo per riordinare i campi che compongono la form.\r\n   */\r\n  private reorderFormFields() {\r\n    if (this.form.Fields && this.form.Fields.length > 0) {\r\n      this.form.Fields.sort((a, b) =>\r\n        a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0);\r\n    }\r\n    GlobalService.debugLog(\"reorderFormFields - form\", this.form);\r\n  }\r\n\r\n  /**\r\n   * Metodo per creare il FormGroup che rappresenta la form.\r\n   */\r\n  private createFormGroup() {\r\n    this.formForm = this.utilityService.CreateFormFormGroup(\r\n      this.form.Fields,\r\n      (<Record>this.record),\r\n      this.onlyView\r\n    );\r\n    GlobalService.debugLog(\"createFormGroup - form\", this.form);\r\n  }\r\n\r\n  /**\r\n   * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n   * a come è stata configurata dall'utente.\r\n   */\r\n  private createFieldGroups() {\r\n    this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0)\r\n      .map((g) => g.Name)\r\n      .forEach((groupName) => {\r\n        this.fieldGroups[groupName] = this.form.Fields.filter(\r\n          (f) => f.FieldGroup == groupName\r\n        );\r\n      });\r\n    GlobalService.debugLog(\"createFieldGroups - form\", this.form);\r\n  }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  //#region createHTMLreadableValues\r\n  /**\r\n   * Metodo per creare il FormGroup che rappresenta la form.\r\n   */\r\n  private async createHTMLreadableValues(record: Record) {\r\n\r\n    GlobalService.debugLog(\"createHTMLreadableValues - record\", record);\r\n    GlobalService.debugLog(\"createHTMLreadableValues - form\", this.form);\r\n\r\n    var formnames = new Array<string>();\r\n    this.form.Fields.forEach((field) => { formnames.push(field.Name); });\r\n    GlobalService.debugLog(\"createHTMLreadableValues - form fields names\", formnames);\r\n\r\n    // alert(\"continue for values?\")\r\n\r\n    let outputValuesArray = await this.getResponseValues(record, this.form);\r\n\r\n    GlobalService.debugLog(\"createHTMLreadableValues - outputValuesArray\", outputValuesArray);\r\n\r\n    // alert(\"continue for templates?\")\r\n    let template: string = this.getResponseTemplate(record, this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n\r\n    GlobalService.debugLog(\"createHTMLreadableValues - template\", template);\r\n    // alert(\"continue for output?\")\r\n    const regex = /##([\\w]+)##/g;\r\n    const output = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex)\r\n\r\n    GlobalService.debugLog(\"createHTMLreadableValues - output\", output);\r\n    // alert(\"continue for ending?\")\r\n    return output; // oggetto che conterrà l'output elaborato    \r\n\r\n  }\r\n  //#endregion createHTMLreadableValues\r\n\r\n  //#region getResponseValues\r\n  private async getResponseValues(record: Record, form: Form) {\r\n    let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n    //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n    // GlobalService.debugLog(\"(record).Values\", record);\r\n\r\n    form.Fields.forEach(\r\n      async (field) => {\r\n        try {\r\n          //GlobalService.debugLog(\"getResponseValues field\", field);\r\n          // let foundObject = record.find(\r\n          //   (obj) => obj === field.Name\r\n          // );\r\n          let foundObject = record[field.Name];\r\n\r\n          // fare un eval per popolare i valuePairs se è presente una formula\r\n          // prendere la label corretta\r\n          ////////////////////////////////////////////////////////////////////////////////\r\n          // PREPARO IL VALUEPAIRS\r\n          switch (field.FieldType) {\r\n            case FieldTypeEnum[\"Elenco generico\"]: {\r\n              if (field.Formula != null && field.Formula) {\r\n                // aggiungo a valuepairs i valori calcolati\r\n                // (<ListValueField>foundObject).ValuePairs = (<ListValueField>foundObject).ValuePairs ? (<ListValueField>foundObject).ValuePairs : {};\r\n                var temp = UtilityHelperService.EvaluateFieldFormula(\r\n                  field.Formula,\r\n                  record,\r\n                  this.formulaObject\r\n                );\r\n                for (let key2 in temp) {\r\n                  if (UtilityHelperService.isNumeric(temp[key2])) {\r\n                    (<ListValueField>field).ValuePairs[Number(key2)] = temp[key2];\r\n                  } else {\r\n                    (<ListValueField>field).ValuePairs[key2] = temp[key2];\r\n                  }\r\n                }\r\n                outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n              } else if ((<ListValueField>field).ValuePairs != null && (<ListValueField>field).ValuePairs.length > 0) {\r\n                // va bene così\r\n              } else if ((<ListValueField>field).ValueString != null && (<ListValueField>field).ValueString != \"\") {\r\n                // va presa la strigna e rimappata nel diario\r\n                (<ListValueField>field).ValuePairs = GlobalService.stringToValuePairs((<ListValueField>field).ValueString);\r\n              }\r\n\r\n              let inverted = {};\r\n              //GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>field).ValuePairs);\r\n              // ValuePairs: {Si: 'Si', No: 'No'}\r\n              for (let key in (<ListValueField>field).ValuePairs) {\r\n                inverted[(<ListValueField>field).ValuePairs[key]] = key;\r\n              }\r\n              (<ListValueField>field).ValuePairs = inverted;\r\n              if (record[field.Name] != null && (<ListValueField>field).IsMultiChoiche) {\r\n\r\n                let value = \"\";\r\n                // se DataGetter nullo (retrocompatibilità(?)) oppure NON Da database\r\n                if (!(<ListValueField>field)?.DataGetter || (\r\n                  (<ListValueField>field).DataGetter.DataGetterType != DataGetterTypeEnum['Da database'])) {\r\n                  // prima:  if ((<ListValueField>field).DataGetter == null){\r\n\r\n                  // caso MULTISCELTA NORMALE\r\n                  record[field.Name].forEach((element, i) => {\r\n                    value += (<ListValueField>field).ValuePairs[element];\r\n                    value += i == record[field.Name].length - 1 ? \"\" : \", \"\r\n                  });\r\n                } else {\r\n                  // caso MULTISCELTA DATAGETTER: DataGetterTypeEnum['Da database']\r\n                  var values: Array<string> = new Array<string>();\r\n                  if (record[field.Name] != null && record[field.Name].length > 0) {\r\n                    record[field.Name].forEach((element) => {\r\n                      values.push(element.Value);\r\n                    });\r\n                    value = values.join(\", \");\r\n                  }\r\n                }\r\n\r\n                outputValuesArray[field.Name] = value;\r\n\r\n              } else {\r\n                outputValuesArray[field.Name] = (<ListValueField>field).ValuePairs[record[field.Name]];\r\n              }\r\n              //GlobalService.debugLog(\"outputValuesArray\", outputValuesArray)\r\n\r\n              break;\r\n            };\r\n            case FieldTypeEnum[\"Campo numerico\"]: {\r\n              if ((<NumericField>field).IsInteger) {\r\n                if ((<NumericField>field).DecimalSeparator == null) {\r\n                  outputValuesArray[field.Name] = record[field.Name];\r\n                } else {\r\n                  outputValuesArray[field.Name] = record[field.Name];\r\n                }\r\n              } else {\r\n                outputValuesArray[field.Name] = record[field.Name];\r\n              }\r\n              break;\r\n            };\r\n\r\n            case FieldTypeEnum['Immagine']: {\r\n              GlobalService.debugLog(\"immagine \" + field.Name + \" : \" + record[field.Name])\r\n              // Recupero il BASE64 dell'immagine Resized via promise client\r\n              var resizedBase64 = await this.resizeBase64Image(\"data:image/\" + record[field.Name].FileExtension + \";base64,\" + record[field.Name].FileDataBase64);\r\n\r\n              // Aggiungo l'HTML con il nuovo BASE64\r\n              outputValuesArray[field.Name] = \"<img src='\" + resizedBase64 + \"' style='height: \" + record[field.Name].ResizedImageHeightPx + \"px'>\";\r\n\r\n              break;\r\n            };\r\n\r\n\r\n            case FieldTypeEnum['Allegato']: {\r\n              GlobalService.debugLog(\"Allegato \" + field.Name + \" : \" + record[field.Name], record)\r\n\r\n              if (record[field.Name] != null) {\r\n                let resizedBase64;\r\n                if (record[field.Name][0].IsImage) {\r\n                  // Recupero il BASE64 dell'immagine Resized via promise client\r\n                  resizedBase64 = await this.resizeBase64Image(\"data:image/\" + record[field.Name][0].FileExtension + \";base64,\" + record[field.Name][0].FileDataBase64);\r\n                  GlobalService.debugLog(\"Allegato resizedBase64\", resizedBase64)\r\n                  // Aggiungo l'HTML con il nuovo BASE64\r\n                  outputValuesArray[field.Name] = '<img class=\"image-preview\" src=\"' + resizedBase64 + '\" style=\"height: ' + record[field.Name][0].ResizedImageHeightPx + 'px\">';\r\n                } else if (record[field.Name][0].FileContentType == \"application/pdf\") {\r\n                  outputValuesArray[field.Name] = '<iframe src=\"data:application/pdf;base64,' + record[field.Name][0].FileDataBase64 + '\"style=\"min-height: 300px; height: 100%;\"></iframe>';\r\n                } else {\r\n                  outputValuesArray[field.Name] = '<iframe src=\"data:\"' + record[field.Name][0].FileExtension + '\";base64,' + record[field.Name][0].FileDataBase64 + '\"style=\"min-height: 300px; height: 100%;\"></iframe>';\r\n                }\r\n\r\n                // Aggiungo l'HTML con il nuovo BASE64\r\n                // outputValuesArray[field.Name] = \"<img src='\" + resizedBase64 + \"' style='height: \" + record[field.Name][0].ResizedImageHeightPx + \"px'>\";\r\n                GlobalService.debugLog(\"Allegato outputValuesArray\", outputValuesArray[field.Name])\r\n              }\r\n\r\n              break;\r\n            };\r\n\r\n            case FieldTypeEnum['Immagine con markers']: {\r\n\r\n              // Recupero il BASE64 dell'immagine Resized via promise client\r\n              var resizedBase64 = await this.resizeBase64Image(\"data:image/\" + record[field.Name].FileExtension + \";base64,\" + record[field.Name].FileDataBase64);\r\n\r\n              // Aggiungo l'HTML con il nuovo BASE64\r\n              outputValuesArray[field.Name] = \"<img src='\" + resizedBase64 + \"' style='height: \" + record[field.Name].ResizedImageHeightPx + \"px'>\";\r\n\r\n              break;\r\n            };\r\n\r\n            case FieldTypeEnum['Elenco immagini']: {\r\n              outputValuesArray[field.Name] = \"\";\r\n              if (record[field.Name] != null && (<ImageSelectorField>field).IsMultiChoiche) {\r\n                record[field.Name].forEach((imageobj: number) => {\r\n                  var attachmentInForm: DynAttachment = (<ImageSelectorField>field).AttachmentList.find(x => x.ID == imageobj);\r\n                  if (attachmentInForm != null) {\r\n                    outputValuesArray[field.Name] += attachmentInForm.ButtonKey + \", \";\r\n                  }\r\n                });\r\n                var parts = outputValuesArray[field.Name].split(\", \");\r\n                outputValuesArray[field.Name] = parts.slice(0, parts.length - 1).join(\", \");\r\n              }\r\n              else {\r\n                var attachmentInForm: DynAttachment = (<ImageSelectorField>field).AttachmentList.find(x => x.ID == record[field.Name]);\r\n                if (attachmentInForm != null) {\r\n                  outputValuesArray[field.Name] = attachmentInForm.ButtonKey;\r\n                }\r\n              }\r\n\r\n              break;\r\n            };\r\n            case FieldTypeEnum['Data e/o ora']: {\r\n              GlobalService.debugLog(\"Data e/o ora\", field);\r\n              if ((<DateField>field).DateFormat != null) {\r\n                let fixDateFormat = (<DateField>field).DateFormat.replace(\"DD\", \"dd\");\r\n                outputValuesArray[field.Name] = this.datepipe.transform(record[field.Name], fixDateFormat);\r\n              }\r\n              else {\r\n                if ((<DateField>field).IsOnlyDate == DateTimeTypeEnum['Solo data']) {\r\n                  outputValuesArray[field.Name] = this.datepipe.transform(record[field.Name], \"dd/MM/yyyy\");\r\n                } else if ((<DateField>field).IsOnlyDate == DateTimeTypeEnum['Data e ora']) {\r\n                  outputValuesArray[field.Name] = this.datepipe.transform(record[field.Name], \"dd/MM/yyyy HH:mm\");\r\n                } else if ((<DateField>field).IsOnlyDate == DateTimeTypeEnum['Solo orario']) {\r\n                  outputValuesArray[field.Name] = this.datepipe.transform(record[field.Name], \"HH:mm\");\r\n                }\r\n              }\r\n              break;\r\n            }\r\n\r\n            default: {\r\n              outputValuesArray[field.Name] = record[field.Name];\r\n            }\r\n          }\r\n        }\r\n        catch (e) {\r\n          console.error(e);\r\n        }\r\n      }\r\n    )\r\n\r\n    // Funziona, ma non è affidabile al 100%\r\n    await this.delay(3000);\r\n\r\n    GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n    // cancello i valori indefiniti o nulli\r\n    for (const chiave in outputValuesArray) {\r\n      if (outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n        outputValuesArray[chiave] = ''\r\n    }\r\n    return outputValuesArray;\r\n  }\r\n  //#endregion getResponseValues\r\n\r\n  //#region getResponseTemplate\r\n  private getResponseTemplate(record: Record, form: Form): string {\r\n    let template: string = '<div class=\"row\">';\r\n    // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n    form.Fields.forEach((baseField: BaseField) => {\r\n      GlobalService.debugLog('getResposneTemplate - pre - field', baseField)\r\n      if (baseField.AnswerStyle == null || baseField.AnswerStyle == undefined) {\r\n        baseField.AnswerStyle = new AnswerStyle();\r\n        baseField.AnswerStyle.ColSpanSizes = baseField.ColSpanSizes;\r\n        baseField.AnswerStyle.FieldstyleCSS = baseField.FieldstyleCSS;\r\n        baseField.AnswerStyle.LabelstyleCSS = baseField.LabelstyleCSS;\r\n        if (baseField.VisibleIf) {\r\n          baseField.AnswerStyle.InListView = UtilityHelperService.EvaluateFieldFormula(baseField.VisibleIf, record, this.formulaObject);\r\n        } else {\r\n          baseField.AnswerStyle.InListView = baseField.InListView;\r\n          baseField.AnswerStyle.VisibleIf = baseField.VisibleIf;\r\n        }\r\n      }\r\n      if (baseField.AnswerStyle.VisibleIf) {\r\n        const visibility = UtilityHelperService.EvaluateFieldFormula(baseField.AnswerStyle.VisibleIf, record, this.formulaObject)\r\n        GlobalService.debugLog(\"EvaluateFieldFormula - visibility\", visibility);\r\n        baseField.AnswerStyle.InListView = (visibility == true) ? true : false;\r\n      }\r\n      if (baseField.AnswerStyle.InListView) {\r\n        template += '<div class=\"' + this.utilityService.getFieldAnswerStyleClass(baseField) + ' d-flex flex-row dynaform-answer-field\"> ' +\r\n          ' <span class=\"dynaform-question\" style=\"' + baseField.AnswerStyle.LabelstyleCSS + '\">' + baseField.Description + ':</span>' +\r\n          ' <span class=\"dynaform-response\" style=\"' + baseField.AnswerStyle.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span>' +\r\n          '</div> \\n ';\r\n      } else if (!baseField.AnswerStyle.InListView && baseField.AnswerStyle.Invisibility == FieldInvisibilityEnum['NASCOSTO CON AREA VISIBILE']) {\r\n        template += '<div class=\"' + this.utilityService.getFieldAnswerStyleClass(baseField) + ' d-flex flex-row dynaform-answer-field\"> ' +\r\n          '</div> \\n ';\r\n      }\r\n\r\n      // Lo vuole uno sotto l'altro sennò \"E' storto!\", quindi va così\r\n      template = template.replace(/-11 /g, \"-12 \").replace(/-10 /g, \"-12 \").replace(/-9 /g, \"-12 \").replace(/-8 /g, \"-12 \").replace(/-7 /g, \"-12 \").replace(/-6 /g, \"-12 \").replace(/-5 /g, \"-12 \").replace(/-4 /g, \"-12 \").replace(/-3 /g, \"-12 \").replace(/-2 /g, \"-12 \").replace(/-1 /g, \"-12 \");\r\n\r\n      GlobalService.debugLog('getResposneTemplate - post - field', baseField)\r\n    });\r\n    // (attualmente non esiste il concetto di tempate di output)\r\n    template += '</div>';\r\n    return template;\r\n  }\r\n  //#endregion getResponseTemplate\r\n\r\n  private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n    return template.replace(regex, (match, group) => {\r\n      return <string>outputValuesArray[group];\r\n    });\r\n  }\r\n\r\n  delay(ms: number) {\r\n    return new Promise(resolve => setTimeout(resolve, ms));\r\n  }\r\n\r\n  private async resizeBase64Image(base64Image: string) {\r\n    return new Promise((resolve, reject) => {\r\n      const imagetype = /data:image\\/([\\w]+);/;\r\n      const match = base64Image.match(imagetype);\r\n      const img = new Image();\r\n      img.src = base64Image;\r\n      img.onload = function () {\r\n        const canvas = document.createElement(\"canvas\");\r\n        const ctx = canvas.getContext('2d');\r\n        const width = img.width;\r\n        const height = img.height;\r\n        const aspectRatio = width / height;\r\n\r\n        const newHeight = 128;\r\n        const newWidth = newHeight * aspectRatio;\r\n\r\n        canvas.width = newWidth;\r\n        canvas.height = newHeight;\r\n        ctx.drawImage(img, 0, 0, newWidth, newHeight);\r\n        let quality = 0.8;\r\n        let dataURL = canvas.toDataURL('image/' + match[1], quality);\r\n        resolve(dataURL);\r\n      };\r\n    });\r\n  }\r\n\r\n  setDataGetter(form) {\r\n    form.Fields.forEach((field) => {\r\n\r\n      // Trasformo il Base64String del Datagetter nel Datagetter vero e proprio\r\n      if (field.DataGetterValueBase64String != null) {\r\n        field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));\r\n        field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType;\r\n      } else {\r\n        field.DataGetter = new DataGetter();\r\n      }\r\n\r\n      field.DataGetterValueBase64String = null;\r\n\r\n    });\r\n  }\r\n\r\n  //#region checkTriggers\r\n  // Controlla e spara il trigger se necessario\r\n  checkTriggers(record: Record) {\r\n    var fireTrigger = true;\r\n\r\n    GlobalService.debugLog(\"checkTriggers - inside checkTriggers()\", this.form.Triggers);\r\n\r\n    if (this.form.Triggers != null) {\r\n      GlobalService.debugLog(\"checkTriggers - have triggers in form\");\r\n      this.form.Triggers.forEach((trigger) => {\r\n        fireTrigger = true;\r\n        trigger.conditions.forEach((condition, index) => {\r\n          var logicOperator: LogicOperator = condition.logicoperator as LogicOperator;\r\n          var conditionKey = Object.keys(condition.record)[0];\r\n          var conditionValue = condition.record[conditionKey];\r\n          var recordValue = record[conditionKey];\r\n\r\n          var conditionResult = this.evaluateTriggerCondition(logicOperator, conditionValue, recordValue);\r\n\r\n          if (!conditionResult) {\r\n            this.logTrigger(trigger, condition, record);\r\n          }\r\n\r\n          if (index === 0) {\r\n            // La prima condizione non ha una precedente con cui combinarsi: definisce il punto di partenza.\r\n            fireTrigger = conditionResult;\r\n            return;\r\n          }\r\n\r\n          switch (condition.booleanlogicoperator) {\r\n            case BooleanLogicOperatorType.OR:\r\n              fireTrigger = fireTrigger || conditionResult;\r\n              break;\r\n            case BooleanLogicOperatorType['OR NOT']:\r\n              fireTrigger = fireTrigger || !conditionResult;\r\n              break;\r\n            case BooleanLogicOperatorType['AND NOT']:\r\n              fireTrigger = fireTrigger && !conditionResult;\r\n              break;\r\n            case BooleanLogicOperatorType.AND:\r\n            default:\r\n              fireTrigger = fireTrigger && conditionResult;\r\n              break;\r\n          }\r\n        });\r\n\r\n        GlobalService.debugLog(\"checkTriggers - fireTrigger? \", fireTrigger);\r\n\r\n        if (fireTrigger) {\r\n\r\n          // Il trigger va sparato. Valuto le funzioni interne\r\n          var formulas = JSON.parse(JSON.stringify(trigger.formulas));\r\n          GlobalService.debugLog(\"checkTriggers - evaluate formulas \", formulas);\r\n\r\n          if (formulas != null && Object.keys(formulas).length > 0) {\r\n            Object.keys(formulas).forEach((key) => {\r\n              var formula = formulas[key].value;\r\n              GlobalService.debugLog(\"checkTriggers - formulas[key] \", formulas[key]);\r\n              var temp;\r\n\r\n              if (formulas[key].type == TriggerPropertyTypeEnum.DMMODULE) { // assegno id/code del modulo selezionato\r\n                temp = formula\r\n              }\r\n              else if (formulas[key].type == TriggerPropertyTypeEnum.DROPDOWN_LIST) {\r\n                // se la proprietà non esiste è assegnato value - modifica di una configurazione dichiarata in precedenza come string\r\n                //temp = formulas[key].selectedAllowedValue.key // nel caso di dropdown gli assegno solo la chiave\r\n                GlobalService.debugLog(\"checkTriggers - assigned DROPDOWN_LIST-  selectedAllowedValue \", temp);\r\n\r\n                temp =\r\n                  formulas[key]?.selectedAllowedValue?.key ? formulas[key].selectedAllowedValue.key\r\n                    : (\r\n                      UtilityHelperService.EvaluateFieldFormula(\r\n                        formula,\r\n                        record,\r\n                        this.formulaObject\r\n                      )\r\n                    );\r\n              }\r\n              else { // passo all'eval quando è stringa e assegno i lvalore calcolato\r\n                temp = UtilityHelperService.EvaluateFieldFormula(\r\n                  formula,\r\n                  record,\r\n                  this.formulaObject\r\n                );\r\n              }\r\n\r\n              formulas[key] = temp;\r\n\r\n            });\r\n          }\r\n\r\n          // Sparo il trigger all'esterno\r\n          var triggerToFire: FireTrigger = new FireTrigger();\r\n          triggerToFire.form = this.form; // Il form che ha provocato il trigger\r\n          triggerToFire.record = record; // Il record che ha provocato il trigger\r\n          triggerToFire.trigger = trigger; // Il trigger\r\n          triggerToFire.formulas = formulas; // Le formule inviate in input al modulo dinamico, valutate nel contesto del trigger e del record\r\n          triggerToFire.userPatient = this.userID; // UserID\r\n\r\n          GlobalService.debugLog(\"checkTriggers - Trigger Fired \" + triggerToFire.trigger.description, triggerToFire);\r\n          this.fireTrigger.emit(triggerToFire);\r\n        }\r\n\r\n      });\r\n    }\r\n  }\r\n\r\n  private evaluateTriggerCondition(logicOperator: LogicOperator, conditionValue: any, recordValue: any): boolean {\r\n    switch (logicOperator) {\r\n      case LogicOperator['=']: return conditionValue == recordValue;\r\n      case LogicOperator['!=']: return conditionValue != recordValue;\r\n      case LogicOperator['<']: return conditionValue > recordValue;\r\n      case LogicOperator['<=']: return conditionValue >= recordValue;\r\n      case LogicOperator['>']: return conditionValue < recordValue;\r\n      case LogicOperator['>=']: return conditionValue <= recordValue;\r\n      case LogicOperator['LIKE']: return recordValue.indexOf(conditionValue) != -1;\r\n      case LogicOperator['NOT LIKE']: return recordValue.indexOf(conditionValue) == -1;\r\n      case LogicOperator.Si: return !!recordValue;\r\n      case LogicOperator.No: return !recordValue;\r\n      case LogicOperator['CONTIENE ALMENO UNO']: return conditionValue.some(c => recordValue.includes(c));\r\n      case LogicOperator['CONTIENE TUTTI']: return conditionValue.every(c => recordValue.includes(c));\r\n      default: return true;\r\n    }\r\n  }\r\n\r\n  logTrigger(trigger, condition, record) {\r\n    GlobalService.debugLog(\"checkTriggers - Condition that invalidated the trigger TRIGGER\", trigger);\r\n    GlobalService.debugLog(\"checkTriggers - Condition that invalidated the trigger CONDITION\", condition);\r\n    GlobalService.debugLog(\"checkTriggers - Condition that invalidated the trigger RECORD\", record);\r\n  }\r\n\r\n  onFireTrigger(ev: FireTrigger) {\r\n    this.fireTrigger.emit(ev);\r\n  }\r\n\r\n  generateAction(actionButton: ActionButton) {\r\n    var fireTrigger: FireTrigger = new FireTrigger();\r\n\r\n    fireTrigger.trigger = new Trigger();\r\n    fireTrigger.trigger.CID = actionButton.ButtonCode;\r\n    fireTrigger.trigger.conditions = null;\r\n    fireTrigger.trigger.description = actionButton.ButtonLabel;\r\n    fireTrigger.trigger.execution = actionButton.execution;\r\n    fireTrigger.trigger.formulas = actionButton.formulas;\r\n\r\n    fireTrigger.form = this.form;\r\n    fireTrigger.formulas = actionButton.formulas;\r\n    fireTrigger.record = <Record>this.record;\r\n    fireTrigger.userPatient = this.userID;\r\n    fireTrigger.userMedicalExamination = null;\r\n\r\n    this.onFireTrigger(fireTrigger);\r\n  }\r\n\r\n  //#endregion checkTriggers\r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n    <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle || visibleActionButtons.length > 0\">\r\n        <div *ngIf=\"showTitle\">\r\n            <div [style]=\"titleCssStyle\">\r\n                <span>{{form.Name}}</span>\r\n            </div>\r\n        </div>\r\n        <div *ngIf=\"visibleActionButtons.length > 0\">\r\n            <button class=\"btn btn-primary mr-2\" *ngFor=\"let actionButton of visibleActionButtons\" (click)=\"generateAction(actionButton)\">\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"actionButton.Icon\" [name]=\"actionButton.Icon\"></tmw-icon> {{actionButton.ButtonLabel}}\r\n            </button>\r\n        </div> \r\n    </div>\r\n\r\n    <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n        <!-- VISUALIZZAZIONE SEMPLICE -->\r\n        <ng-container *ngIf=\"form.FormScalarType == FormScalarTypeEnum.Semplice\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n            [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n        </ng-container>\r\n\r\n        <!-- VISUALIZZAZIONE A STEPPER -->\r\n        <mat-horizontal-stepper linear *ngIf=\"form.FormScalarType == FormScalarTypeEnum['A step']\"\r\n            class=\"add-form-record-stepper\" (selectionChange)=\"onStepChange($event)\">\r\n            <mat-step *ngFor=\"let group of form.FormFieldsGroups; let i = index; let first = first; let last = last\">\r\n              \r\n                <ng-template matStepLabel>\r\n                    {{group.Name}}\r\n                </ng-template>\r\n\r\n                <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n                    [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n                </ng-container>\r\n\r\n                <div class=\"mt-2 d-flex justify-content-end add-form-record-buttons\">\r\n                    <button *ngIf=\"!first\" class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n                        Precedente\r\n                    </button>\r\n                    <button *ngIf=\"!last\" class=\"button-next\" color=\"primary\" mat-raised-button matStepperNext>\r\n                        Successivo\r\n                    </button>\r\n                    <button *ngIf=\"last && showSaveButton\" (click)=\"saveOrExitForm(false)\" class=\"button-next\" [disabled]=\"formForm.invalid || formForm.disabled\"\r\n                        color=\"primary\" mat-raised-button>\r\n                        Salva\r\n                    </button>\r\n                </div>\r\n\r\n            </mat-step>\r\n        </mat-horizontal-stepper>\r\n\r\n        <!-- VISUALIZZAZIONE A TAB -->\r\n        <mat-tab-group *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In tab']\" class=\"add-form-record-tab\">\r\n            <mat-tab *ngFor=\"let group of form.FormFieldsGroups\" [label]=\"group.Name\">                \r\n                <div class=\"mt-3\">                    \r\n                    <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n                        [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n                    </ng-container>\r\n                </div>\r\n            </mat-tab>\r\n        </mat-tab-group>\r\n\r\n        <!-- VISUALIZZAZIONE AD ACCORDION -->\r\n        <mat-accordion multi *ngIf=\"form.FormScalarType == FormScalarTypeEnum['In accordion']\"\r\n            class=\"add-form-record-accordion\">\r\n            <mat-expansion-panel *ngFor=\"let group of form.FormFieldsGroups\">\r\n                <mat-expansion-panel-header>\r\n                    <mat-panel-title>\r\n                        {{group.Name}}\r\n                    </mat-panel-title>\r\n                </mat-expansion-panel-header>\r\n\r\n                <ng-container [ngTemplateOutlet]=\"fieldTemplates\"\r\n                    [ngTemplateOutletContext]=\"{ fields: fieldGroups[group.Name] }\">\r\n                </ng-container>\r\n            </mat-expansion-panel>\r\n        </mat-accordion>\r\n    </form>\r\n\r\n    <div class=\"row mt-2 add-form-record-buttons\"\r\n        *ngIf=\"(showBackButton || showSaveButton) && form.FormScalarType != FormScalarTypeEnum['A step']\">\r\n        <div class=\"col-sm-12 text-right\">\r\n            <button class=\"mr-2\" mat-raised-button type=\"button\" *ngIf=\"showBackButton\" (click)=\"saveOrExitForm(true)\">\r\n                Annulla\r\n            </button>\r\n            <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showSaveButton\"\r\n                (click)=\"saveOrExitForm(false)\" [disabled]=\"formForm.invalid || formForm.disabled || isSaving\">\r\n                <span *ngIf=\"!isSaving\">Salva</span>\r\n                <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n            </button>\r\n        </div>\r\n    </div>\r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields'>\r\n    <div class=\"row\" [class.ve-active]=\"visualEditorMode\" *ngIf=\"formloaded\">\r\n        <div class=\"mt-2\" *ngFor=\"let field of fields\"\r\n            [ngClass]=\"utilityService.getFieldSyleClass(field, showAllFields)\"\r\n            [class.ve-cell]=\"visualEditorMode\"\r\n            [class.ve-swap-selected]=\"visualEditorMode && veSwapFieldCode && field.Label === veSwapFieldCode\"\r\n            (click)=\"visualEditorMode ? onVeFieldClick(field, $event) : null\">\r\n            <div *ngIf=\"visualEditorMode\" class=\"ve-cell-overlay\"\r\n              [class.ve-cell-overlay--swap]=\"veSwapFieldCode && field.Label === veSwapFieldCode\"></div>\r\n            <dynamic-module-field-fix #fieldTemplate [field]=\"field\" [QueryEditorComponent]=\"QueryEditorComponent\" [form]=\"form\" [record]=\"record\" [formulaObject]=\"formulaObject\" [configurations]=\"configurations\" [endPointConfiguration]=\"endPointConfiguration\" [userID]=\"userID\" [inConfig]=\"inConfig\"\r\n                (recordChange)=\"onRecordChange()\" (fireTrigger)=\"onFireTrigger($event)\">\r\n            </dynamic-module-field-fix>\r\n        </div>\r\n    </div>\r\n</ng-template>","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  QueryList,\r\n  ViewChildren,\r\n} from \"@angular/core\";\r\nimport { FieldTypeEnum } from \"../../../../models/baseField.model\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleFieldFixComponent } from \"../../dynamic-module-field-fix/dynamic-module-field.component\";\r\nimport {\r\n  EndPointConfiguration,\r\n  ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { DomSanitizer, SafeHtml } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\nimport { ActionButton } from '../../../../models/trigger.model';\r\n\r\n@Component({\r\n  selector: \"view-form-record\",\r\n  templateUrl: \"./view-form-record.component.html\",\r\n  styleUrls: [\"./view-form-record.component.scss\"],\r\n})\r\nexport class ViewFormRecordComponent implements OnInit {\r\n\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() record: string | DynRecord;\r\n  @Input() showBackButton = true;\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n\r\n  outputString: SafeHtml  = \"\";\r\n  form: Form;\r\n  loader: boolean = false;\r\n  // per controllare che il campo non sia una scelta multipla\r\n  FieldTypeEnum = FieldTypeEnum;\r\n\r\n  @Output() goBackEvent: EventEmitter<null> = new EventEmitter<null>();\r\n\r\n  @ViewChildren(\"fieldTemplate\")\r\n  fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n\r\n  constructor(\r\n    public utilityService: UtilityHelperService,\r\n    public domSanitizer: DomSanitizer) {}\r\n\r\n  ngOnInit(): void {\r\n    GlobalService.debugLog('this.record', this.record)\r\n    if (typeof this.record === \"string\") {\r\n      // allora è un ID\r\n      this.getRecordByID();\r\n    } else {\r\n      // il record viene passato come tale\r\n      // (<Record>this.record).EntID = \"3\";\r\n      // (<Record>this.record).Version;\r\n      // this.getFormByIDandVersion();\r\n      this.createOutput()\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n   */\r\n  goBack() {\r\n    this.goBackEvent.emit();\r\n  }\r\n\r\n  // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n  getRecordByID() {\r\n    // preparo i dati del record\r\n    var dynamicRecordParams = [\r\n      {\r\n        ParamName: \"id\",\r\n        ParamValue: this.record,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.GetByIDEndPoint,\r\n      dynamicRecordParams,\r\n      (res: DynRecord) => {\r\n        this.record = new DynRecord();\r\n\r\n        (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n        this.record.ID = res.ID;\r\n        this.record.EntID = res.EntID;\r\n        this.record.userID = res.userID;\r\n        this.record.Version = res.Version;\r\n        this.record.Values = JSON.parse(res.SerializedValues);\r\n        this.record.HTMLreadableValues = res.HTMLreadableValues;\r\n        // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n        // this.loader = true;\r\n        GlobalService.debugLog(\"record\", this.record);\r\n        this.createOutput()\r\n        // this.getFormByIDandVersion();\r\n      }\r\n    );\r\n  }\r\n  getFormByIDandVersion() {\r\n    // preparo la versione corretta del form\r\n    var dynamicModuleParams = [\r\n      {\r\n        ParamName: \"EntID\",\r\n        ParamValue: (<DynRecord>this.record).EntID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n      {\r\n        ParamName: \"Version\",\r\n        ParamValue: (<DynRecord>this.record).Version,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Form) => {\r\n        this.form = res;\r\n        GlobalService.debugLog(\"form\", this.form);\r\n        this.createOutput();\r\n      }\r\n    );\r\n  } \r\n\r\n  /**\r\n   * Metodo per creare il FormGroup che rappresenta la form.\r\n   */\r\n  private createOutput() {\r\n    this.outputString = this.domSanitizer.bypassSecurityTrustHtml((<DynRecord>this.record).HTMLreadableValues);\r\n    this.loader = true;\r\n    return\r\n    // let outputValuesArray: Array<any> = this.getResponseValues(<DynRecord>this.record, this.form);\r\n    // GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n    \r\n    // let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n    // GlobalService.debugLog(\"template\", template);\r\n\r\n    // const regex = /##([\\w]+)##/g;\r\n    // const outputString = this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato    \r\n    // this.outputString = this.domSanitizer.bypassSecurityTrustHtml(outputString);\r\n    // GlobalService.debugLog(\"outputString\", this.outputString);\r\n\r\n    // STAMPO A SCHERMO\r\n    // this.loader = true;\r\n  }\r\n\r\n  // private getResponseValues(record: Record, form: Form ): Array<any> {\r\n  //   let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n  //   //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n  //   for (let fieldName in (record).Values) {\r\n  //     try {\r\n  //       // fieldName è il nome del campo\r\n  //       // PREPARO VARIABILI VALORI CORRETTI\r\n  //       let foundObject = form.Fields.find(\r\n  //         (obj) => obj.Name === fieldName\r\n  //       );\r\n  //       GlobalService.debugLog(\"fieldName\", fieldName);\r\n  //       GlobalService.debugLog(\"foundObject\", foundObject);\r\n  //       // gestire caso fieldtype 8 [elenco generico]\r\n  //       // fare un eval per popolare i valuePairs se è presente una formula\r\n  //       // prendere la label corretta\r\n  //       ////////////////////////////////////////////////////////////////////////////////\r\n  //       if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n  //       {\r\n  //         if (foundObject.Formula) \r\n  //         {\r\n  //           // aggiungo a valuepairs i valori calcolati\r\n  //           // (<ListValueField>foundObject).ValuePairs = {};\r\n  //           var temp = UtilityHelperService.EvaluateFieldFormula(\r\n  //             foundObject.Formula,\r\n  //             record,\r\n  //             null\r\n  //           );\r\n  //           for (let key2 in temp) {\r\n  //             if (UtilityHelperService.isNumeric(temp[key2])) \r\n  //             {\r\n  //               (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n  //             } else \r\n  //             {\r\n  //               (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n  //             }\r\n  //           }\r\n  //           GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n  //           GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]\", (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]]);\r\n  //           outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n  //         }\r\n  //         let inverted = {};\r\n  //         for (let key in (<ListValueField>foundObject).ValuePairs) \r\n  //         { \r\n  //           inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n  //         }\r\n  //         (<ListValueField>foundObject).ValuePairs = inverted;\r\n  //         outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[(record).Values[fieldName]];\r\n  //       } else \r\n  //       {\r\n  //         GlobalService.debugLog(\"(record).Values[fieldName]\", (record).Values[fieldName]);\r\n  //         outputValuesArray[fieldName] = (record).Values[fieldName];\r\n  //       }\r\n  //       ////////////////////////////////////////////////////////////////////////////////\r\n  //     } catch (e) {\r\n  //       console.error(e);\r\n  //     }\r\n  //   }\r\n  //   // cancello i valori indefiniti o nulli\r\n  //   for(const chiave in outputValuesArray){\r\n  //     if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n  //     outputValuesArray[chiave] = ''\r\n  //   }\r\n  //   return outputValuesArray;\r\n  // }\r\n\r\n  // private getResponseTemplate(form: Form): string {\r\n  //   let template: string = \"\";\r\n  //   // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n  //   form.Fields.forEach((baseField: BaseField) => {\r\n  //     template += '<span style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n  //   });\r\n  //   // (attualmente non esiste il concetto di tempate di output)\r\n  //   return template;\r\n  // }\r\n\r\n  // private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n  //   return template.replace(regex, (match, group) => {\r\n  //     return <string>outputValuesArray[group];\r\n  //   });\r\n  // }\r\n\r\n}\r\n","<div *ngIf=\"loader\">\r\n  <div id=\"output-string\" [innerHTML]=\"outputString\"></div>\r\n  <div class=\"row mt-2\" *ngIf=\"showBackButton\">\r\n    <div class=\"col-sm-12 text-right\">\r\n      <button\r\n        class=\"mr-2\"\r\n        mat-raised-button\r\n        color=\"primary\"\r\n        type=\"button\"\r\n        (click)=\"goBack()\"\r\n      >\r\n        Indietro\r\n      </button>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { DynamicModuleCompileConfig } from '../../../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration } from '../../../../../models/endPointConfiguration.model';\r\nimport { Form } from '../../../../../models/form.model';\r\nimport { Record } from \"../../../../../models/record.model\";\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\nimport { DynamicLoaderDirectiveData, eventOut } from '../../../../../directives/dynamic-loader/dynamic-loader.directive';\r\nimport { FireTrigger, ActionButton } from '../../../../../models/trigger.model';\r\n\r\ntype PageState = null | 'visualizzaContenuto' | 'modificaContenuto'\r\n\r\n@Component({\r\n  selector: 'lib-single-record',\r\n  templateUrl: './single-record.component.html',\r\n  styleUrls: ['./single-record.component.scss']\r\n})\r\nexport class SingleRecordComponent implements OnInit {\r\n  \r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() record;\r\n  @Input() formulaObject: any = {};\r\n  @Input() pageState: PageState = 'visualizzaContenuto';\r\n  @Input() userID: string;\r\n  @Input() form: Form;\r\n  @Input() showBackButton = true;\r\n  @Input() outCompileConfigurations: DynamicModuleCompileConfig;\r\n  @Input() onlyView: boolean = true;\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n  @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n\r\n  @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() afterSaveRecordEvent: EventEmitter<Record> =\r\n    new EventEmitter<Record>();\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n  loaded = false;\r\n\r\n  constructor(\r\n    private utilityHelperService: UtilityHelperService\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.outCompileConfigurations.showBackButton = false;\r\n    \r\n    GlobalService.debugLog(\"single-record - outCompileConfigurations\", this.outCompileConfigurations)\r\n    this.loaded = true;    \r\n  }\r\n\r\n  /**\r\n   * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n   */\r\n  saveOrExitForm(record: Record) {\r\n    GlobalService.debugLog('single-record saveRecordEvent', record)\r\n    this.saveRecordEvent.emit(record);\r\n  }\r\n  onAfterSaveRecord(event) {\r\n    GlobalService.debugLog('single-record afterSaveRecordEvent', event)\r\n    this.afterSaveRecordEvent.emit(event);\r\n  }\r\n  \r\n  onExternalComponentOut(ev: eventOut){\r\n    this.out.emit(ev);\r\n  }\r\n\r\n  onFireTrigger(ev: FireTrigger){\r\n    this.fireTrigger.emit(ev);\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n   * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n   * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n   * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n   * @param event Oggetto con due proprietà:\r\n   * \"record\" = oggetto da modificare/visualizzare,\r\n   * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n   */\r\n  // onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n  //   this.loaded = false;\r\n  //   this.record = null;\r\n\r\n  //   this.onlyView = event.onlyView;\r\n\r\n  //   this.outCompileConfigurations.showBackButton = false;\r\n  //   this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n  //   this.outCompileConfigurations.showTitle = false;\r\n\r\n  //   if (event != null) {\r\n  //     if (\r\n  //       this.endPointConfiguration &&\r\n  //       this.endPointConfiguration.Records &&\r\n  //       this.endPointConfiguration.Records.GetByIDEndPoint\r\n  //     ) {\r\n  //       // preparo la versione corretta del form\r\n  //       var dynamicModuleParams = [\r\n  //         {\r\n  //           ParamName: \"EntID\",\r\n  //           ParamValue: event.record.EntID,\r\n  //           ParamType: ParamTypeEnum[\"Query param\"],\r\n  //         },\r\n  //         {\r\n  //           ParamName: \"Version\",\r\n  //           ParamValue: event.record.Version,\r\n  //           ParamType: ParamTypeEnum[\"Query param\"],\r\n  //         },\r\n  //       ];\r\n  //       this.utilityHelperService.RunEndPointCall(\r\n  //         this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n  //         dynamicModuleParams,\r\n  //         (res: Form) => {\r\n  //           this.form = res;\r\n\r\n  //           // preparo i dati del record\r\n  //           var dynamicRecordParams = [\r\n  //             {\r\n  //               ParamName: \"id\",\r\n  //               ParamValue: event.record.ID,\r\n  //               ParamType: ParamTypeEnum[\"Query param\"],\r\n  //             },\r\n  //           ];\r\n  //           this.utilityHelperService.RunEndPointCall(\r\n  //             this.endPointConfiguration.Records.GetByIDEndPoint,\r\n  //             dynamicRecordParams,\r\n  //             (res: DynRecord) => {\r\n  //               this.record = JSON.parse(res.SerializedValues);\r\n  //               this.record.ID = res.ID;\r\n  //               this.record.EntID = res.EntID;\r\n  //               this.record.userID = res.userID;\r\n  //               this.record.Version = res.Version;\r\n  //               this.record.HTMLreadableValues = res.HTMLreadableValues\r\n\r\n  //               this.loaded = true;\r\n  //             }\r\n  //           );\r\n  //         }\r\n  //       );\r\n  //     } else {\r\n  //       this.record = JSON.parse(JSON.stringify(event.record));\r\n  //       this.loaded = true;\r\n  //     }\r\n  //   } else {\r\n  //     const dynamicModuleParams: Array<EndPointDataParams> =\r\n  //       new Array<EndPointDataParams>();\r\n  //     dynamicModuleParams.push({\r\n  //       ParamName: \"id\",\r\n  //       ParamValue: this.form.ID,\r\n  //       ParamType: ParamTypeEnum[\"Query param\"],\r\n  //     });\r\n  //     this.utilityHelperService.RunEndPointCall(\r\n  //       this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n  //       dynamicModuleParams,\r\n  //       (res: Form) => {\r\n  //         this.form = res;\r\n  //         this.record = null;\r\n  //         this.onlyView = false;\r\n  //         this.loaded = true;\r\n  //       },\r\n  //       (err) => {}\r\n  //     );\r\n\r\n  //     // this.record = null;\r\n  //     // this.onlyView = false;\r\n  //     // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n  //   }\r\n  // }\r\n  \r\n}\r\n","<ng-container *ngIf=\"loaded && record && pageState\">\r\n\r\n    <!--#region VISUALIZZA CONTENUTO -->\r\n    <ng-container *ngIf=\"pageState == 'visualizzaContenuto'\">\r\n        <view-form-record \r\n            [endPointConfiguration]=\"endPointConfiguration\"\r\n            [record]=\"record\" \r\n            [actionButtons]=\"actionButtons\"\r\n            [showBackButton]=\"false\"\r\n            >\r\n        </view-form-record>\r\n    </ng-container>\r\n    <!--#endregion VISUALIZZA CONTENUTO -->\r\n\r\n    <!--#region MODIFICA RISPOSTA -->\r\n    <ng-container *ngIf=\"pageState == 'modificaContenuto'\">\r\n        <add-form-record\r\n            [onlyView]=\"onlyView\"\r\n            [form]=\"form\"\r\n            [userID]=\"userID\"\r\n            [record]=\"record\"\r\n            [formulaObject]=\"formulaObject\"\r\n            [actionButtons]=\"actionButtons\"\r\n\r\n            [QueryEditorComponent]=\"QueryEditorComponent\"\r\n            [configurations]=\"outCompileConfigurations\"\r\n            [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n            (out)=\"onExternalComponentOut($event)\"\r\n            (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n            (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n            (fireTrigger)=\"onFireTrigger($event)\"\r\n            >\r\n        </add-form-record>\r\n    </ng-container>\r\n    <!--#endregion MODIFICA RISPOSTA -->\r\n\r\n</ng-container>","/**\r\n * Classe base che implementa la valorizzazione dell'ID (se null) con una nuova GUID \r\n * in creazione dell'oggetto.\r\n * Per scelta architetturale, visto che non possiamo assumere la persistenza su DB relazionale o su NOSQL, ogni\r\n * oggetto della configurazione viene persistito, e gestito con ID di tipo stringa creato da una GUID.\r\n */\r\nexport class GraphField {\r\n    Name: string;\r\n    Description: string;\r\n    Coords: Array<Coords> = new Array<Coords>();\r\n    Visible: boolean = true;\r\n}\r\n\r\nexport class Coords {\r\n    x: Date;\r\n    y: number;\r\n    label: string;\r\n    name: string;\r\n}\r\n\r\nexport class TabellarField {\r\n    Description: string;\r\n    TextDescription: string;\r\n}","import { Component, HostListener, Input, OnInit } from '@angular/core';\r\nimport { Coords } from '../../../../models/graph.model';\r\nimport { DatePipe } from '@angular/common';\r\nimport * as ss from 'simple-statistics';\r\n\r\n\r\n@Component({\r\n  selector: 'graph',\r\n  templateUrl: './graph.component.html',\r\n  styleUrls: ['./graph.component.scss']\r\n})\r\n\r\nexport class GraphComponent implements OnInit {\r\n\r\n  @HostListener('window:resize', ['$event'])\r\n  onResize() {\r\n    this.loaded = false;\r\n    this.loadGraph(Math.floor(window.innerWidth/2));\r\n  }\r\n\r\n  @Input(\"data\") data: Array<Coords> = new Array<Coords>();\r\n  @Input(\"title\") title: string = \"\";\r\n\r\n  trendColor: string = '#EB0102';\r\n  mainColor: string = '#006cad';\r\n\r\n  m: number; // m of the linear regression\r\n  q: number; // q of the linear regression\r\n  trend: string; // trend string\r\n  linearRegression: Array<Coords>; // variable used to store the linear regression points to plot\r\n\r\n\r\n\r\n  stockChartOptions: any;\r\n\r\n  loaded: boolean = false;\r\n  counter: number = 0;\r\n\r\n  constructor(\r\n    private datePipe: DatePipe\r\n    ) {}  \r\n\r\n  ngOnInit() {\r\n\r\n    var self = this;\r\n\r\n    // Aggiustamento e scrittura dati\r\n    if (this.data.length > 0){\r\n      this.loadGraph(Math.floor(window.innerWidth/2));\r\n    }\r\n  }\r\n\r\n  loadGraph(width: number){\r\n\r\n    var lastvalue = this.data[0];\r\n    var firstvalue = this.data[this.data.length-1];\r\n\r\n    var stockChartMinimum = new Date(firstvalue.x);\r\n    var stockChartMaximum = new Date(lastvalue.x);\r\n    var stockChartTitleText = this.title;\r\n    var stockChartdataPoints = this.data;\r\n\r\n    this.linearRegression = new Array<Coords>();\r\n    this.trend = \"\";\r\n\r\n    stockChartdataPoints.reverse();\r\n    if (stockChartdataPoints.length > 2) {\r\n      let x = [];\r\n      for (let i = 0; i<stockChartdataPoints.length; i ++) {\r\n        x.push([i, stockChartdataPoints[i].y]);\r\n      }\r\n      let parameters = ss.linearRegression(x);\r\n      this.m = parameters.m;\r\n      this.q = parameters.b;\r\n      if (this.m > 0) {\r\n          this.trend += \" ↗\";\r\n        } else if (this.m < 0) {\r\n          this.trend += \" ↘\";\r\n      }\r\n      // console.log(x);\r\n      // console.log(stockChartdataPoints);\r\n      \r\n      for (let i = 0; i<stockChartdataPoints.length; i ++) {\r\n        if (i == 0 || i == stockChartdataPoints.length - 1) {\r\n          this.linearRegression.push({x: stockChartdataPoints[i].x,\r\n            y: this.m*i + this.q,\r\n            label: stockChartdataPoints[i].label,\r\n            name: stockChartdataPoints[i].name\r\n          })\r\n        }\r\n      }\r\n      //this.linearRegression.reverse();\r\n      // console.log(this.linearRegression);\r\n      // console.log(this.m);\r\n      // console.log(this.q);\r\n    }\r\n\r\n    this.stockChartOptions = {\r\n      theme: 'light2',\r\n      animationEnabled: true,\r\n      width: width,\r\n      height: 500,\r\n      creditText: \"\",\r\n      creditHref: \"\",\r\n      title: {\r\n        text: stockChartTitleText\r\n      },\r\n      charts: [{\r\n        axisX: {\r\n          labelFormatter: this.labelFormatterFunction,\r\n        },\r\n        data: [\r\n          {\r\n            toolTipContent: null,\r\n            type: 'line',\r\n            color: this.trendColor,\r\n            showInLegend: true,\r\n            legendMarkerType: \"none\",\r\n            markerType: \"none\",\r\n            legendText: \"Trend\" + this.trend,\r\n            dataPoints: this.linearRegression\r\n          },\r\n          {\r\n            type: \"spline\",\r\n            dataPoints: stockChartdataPoints,\r\n            color: this.mainColor,\r\n          }\r\n        ],\r\n        culture: \"it\"\r\n      }],\r\n      rangeSelector: {\r\n        enabled: false\r\n      },\r\n      navigator: {\r\n        slider: {\r\n          minimum: stockChartMinimum,\r\n          maximum: stockChartMaximum\r\n        }\r\n      },\r\n      options: {\r\n        responsive: true,\r\n        maintainAspectRatio: false\r\n      }\r\n    };\r\n\r\n    this.loaded = true;\r\n  }\r\n\r\n  labelFormatterFunction(e) {\r\n    let label = \"\";\r\n    let dirtyLabel;\r\n    let date = e.value;\r\n\r\n      let newYear: number = date.getFullYear();\r\n      let newMonth: number = date.getMonth() + 1;\r\n      let newMonthString: string;\r\n      if (newMonth < 10) {\r\n      newMonthString = \"0\" + newMonth.toString();\r\n      } else {\r\n      newMonthString = newMonth.toString();\r\n      }\r\n      let newDay: number = date.getDate();\r\n      let newDayString: string;\r\n      if (newDay < 10) {\r\n      newDayString = \"0\" + newDay.toString();\r\n      } else {\r\n      newDayString = newDay.toString();\r\n      }\r\n      let newHour: number = date.getHours();\r\n      let newHourString: string;\r\n      if (newHour < 10) {\r\n      newHourString = \"0\" + newHour.toString();\r\n      } else {\r\n      newHourString = newHour.toString();\r\n      }\r\n      let newMinute: number = date.getMinutes();\r\n      let newMinuteString: string;\r\n      if (newMinute < 10) {\r\n      newMinuteString = \"0\" + newMinute.toString();\r\n      } else {\r\n      newMinuteString = newMinute.toString();\r\n      }\r\n\r\n      dirtyLabel = newDayString + \"/\" + newMonthString + \"/\" + newYear.toString() + \" \" + newHourString  + \":\" + newMinuteString;\r\n\r\n      for (let i = 0; i < 5; i++) {\r\n        label += dirtyLabel[i];\r\n      }\r\n      label += \" \";\r\n      for (let i = 11; i < 16; i++) {\r\n        label += dirtyLabel[i];\r\n      }\r\n\r\n      //label = label.replace(\"00:00\",\"\");\r\n    \r\n    return label;\r\n  }  \r\n  \r\n\r\n}\r\n","<canvasjs-stockchart *ngIf=\"loaded\" [options]=\"stockChartOptions\"></canvasjs-stockchart>\n<div class=\"error\" *ngIf=\"!loaded\"><b>{{title}}:</b> Nessun dato trovato nell'intervallo specificato!</div>","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Form } from \"../../../models/form.model\";\r\nimport { DynamicModuleCompileConfig } from '../../../models/dynamicModuleCompileConfig.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../models/endPointConfiguration.model';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { Coords, GraphField } from '../../../models/graph.model';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { DynRecord } from '../../../models/record.model';\r\nimport { FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { DatePipe } from '@angular/common';\r\nimport { ModeEnum, TimeTypeEnum } from 'tmw-picker';\r\nimport { ActionButton, FireTrigger } from '../../../models/trigger.model';\r\n\r\n@Component({\r\n  selector: 'graphs',\r\n  templateUrl: './graphs.component.html',\r\n  styleUrls: ['./graphs.component.scss']\r\n})\r\nexport class GraphsComponent implements OnInit {\r\n\r\n  @Input() configurations: DynamicModuleCompileConfig;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() userID: string;\r\n  @Input() formID: string = null; // preview\r\n  @Input() form: Form = null; // preview config\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n  fieldFormGroup: UntypedFormGroup;\r\n\r\n  loaded: boolean = false;\r\n  generated: boolean = false;\r\n\r\n  minperiod: Date = new Date();\r\n  maxperiod: Date = new Date();\r\n  minperiodS: string;\r\n  maxperiodS: string;\r\n\r\n  fields: Array<GraphField> = new Array<GraphField>();\r\n  selectedFields: Array<GraphField>;\r\n  selectedGeneratedFields: Array<GraphField>;\r\n\r\n  answers: Array<DynRecord> = null;\r\n  eligibleAnswers: Array<DynRecord> = null;\r\n\r\n  // TMW-PICKER\r\n  modes = ModeEnum\r\n  timeType = TimeTypeEnum\r\n  mode: ModeEnum;\r\n\r\n  constructor(\r\n    private utilityHelperService: UtilityHelperService,\r\n    private datePipe: DatePipe\r\n    ) {}\r\n\r\n  ngOnInit() {\r\n    if (this.formID != null){\r\n      this.getFormByID();\r\n    } else {\r\n      this.loaded = true;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n   * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n   */\r\n  getFormByID() {\r\n    if (\r\n      this.formID &&\r\n      this.endPointConfiguration &&\r\n      this.endPointConfiguration.Forms &&\r\n      this.endPointConfiguration.Forms.GetByIDEndPoint\r\n    ) {\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: this.formID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n\r\n          this.form = res;\r\n\r\n          this.form.Fields.filter(x => x.FieldType == FieldTypeEnum['Campo numerico']).forEach((field) => {\r\n            var graphField: GraphField = new GraphField();\r\n            graphField.Name = field.Label;\r\n            graphField.Description = field.Description;\r\n            this.fields.push(graphField);\r\n          });\r\n\r\n          this.getRecordsByFormID();\r\n\r\n        },\r\n        (err) => {\r\n        }\r\n      );\r\n    }\r\n  }\r\n\r\n  async getRecordsByFormID() {\r\n    var dynamicModuleParams = [\r\n      {\r\n        ParamName: \"EntID\",\r\n        ParamValue: this.form.ID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n\r\n    if (\r\n      this.configurations.userID == null &&\r\n      this.endPointConfiguration &&\r\n      this.endPointConfiguration.Records &&\r\n      this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n    ) {\r\n      // se non conosco l'utente\r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Array<DynRecord>) => {\r\n          this.answers = res;\r\n        }\r\n      );\r\n    } else if (\r\n      this.configurations.userID != null &&\r\n      this.endPointConfiguration &&\r\n      this.endPointConfiguration.Records &&\r\n      this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n    ) {\r\n    // se conosco l'utente\r\n      let dynamicModuleParams = [\r\n        {\r\n          ParamName: \"EntID\",\r\n          ParamValue: this.form.ID,\r\n          ParamType: ParamTypeEnum[\"Query param\"],\r\n        },\r\n        {\r\n          ParamName: \"UserID\",\r\n          ParamValue: this.configurations.userID,\r\n          ParamType: ParamTypeEnum[\"Query param\"],\r\n        },\r\n      ];\r\n\r\n      await this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Array<DynRecord>) => {\r\n          this.answers = res;\r\n          this.loaded = true;\r\n        }\r\n      );\r\n    } else {\r\n      console.error(\"controllare le configurazioni dell'endpoint\");\r\n    }\r\n  }  \r\n\r\n  generateGraph(){\r\n    this.generated = false;\r\n    this.selectedGeneratedFields = JSON.parse(JSON.stringify(this.selectedFields));\r\n    this.getEligibleAnswers();\r\n  }\r\n\r\n  getEligibleAnswers(){\r\n    // Azzero le coordinate\r\n    this.selectedGeneratedFields.forEach((field) => { field.Coords = new Array<Coords>(); });\r\n    this.eligibleAnswers = JSON.parse(JSON.stringify(this.answers));\r\n\r\n    this.minperiodS = this.datePipe.transform(this.minperiod,\"yyyy-MM-dd\");\r\n    this.maxperiodS = this.datePipe.transform(this.maxperiod,\"yyyy-MM-dd\");\r\n\r\n    // Filtro minimo periodo\r\n    if (this.minperiod != null){\r\n      this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] >= this.minperiodS);\r\n    }\r\n\r\n    // Filtro massimo periodo\r\n    if (this.maxperiod != null){\r\n      this.eligibleAnswers = this.eligibleAnswers.filter(x => x.AnswerDate.split(\"T\")[0] <= this.maxperiodS);\r\n    }\r\n\r\n    // Inserisco i dati trovati\r\n    this.eligibleAnswers.forEach((answer) => {\r\n      var answervalues = JSON.parse(answer.SerializedValues);\r\n      this.selectedGeneratedFields.forEach((field) => {\r\n        if (answervalues[field.Name] != null){\r\n          var coords: Coords = new Coords();\r\n          coords.x = new Date(answer.AnswerDate);\r\n          coords.y = parseFloat(answervalues[field.Name]);\r\n          coords.label = this.datePipe.transform(coords.x,\"dd/MM HH:mm\");\r\n          coords.name = coords.label;\r\n          field.Coords.push(coords);\r\n        }\r\n      });\r\n    });\r\n\r\n    setTimeout(() => { this.generated = true; }, 1000);\r\n\r\n  }   \r\n\r\n}\r\n","<mat-card class=\"list-view-form-record\" *ngIf=\"loaded\">\r\n    <mat-card-content>\r\n      \r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-sm-12 col-md-3  align-content-end\">\r\n                <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n                    [(ngModel)]=\"minperiod\"\r\n                    [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'dd/MM/yyyy'\" [showSeconds]=\"false\">\r\n                </tmw-datetimepicker>\r\n            </div>\r\n            <div class=\"col-sm-12 col-md-3  align-content-end\">\r\n                <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n                    [(ngModel)]=\"maxperiod\"\r\n                    [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'dd/MM/yyyy'\" [showSeconds]=\"false\">\r\n                </tmw-datetimepicker>\r\n            </div>       \r\n            <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                <tmw-select [arrayData]=\"fields\" [(ngModelInput)]=\"selectedFields\" [placeholder]=\"'Selezione dei campi'\"\r\n                [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'Description'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n                </tmw-select>\r\n            </div>       \r\n            <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                <button\r\n                [disabled]=\"selectedFields == null || selectedFields.length == 0\"\r\n                class=\"btn btn-graph-generate button-next me-2\"\r\n                mat-raised-button\r\n                color=\"primary\"\r\n                (click)=\"generateGraph()\"\r\n                >\r\n                Genera\r\n              </button>\r\n            </div>                   \r\n        </div>\r\n        <div class=\"generation_box\" *ngIf=\"generated\">\r\n            <div class=\"row\">\r\n                <div class=\"col-3\">\r\n                    <div class=\"generation_options\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n                        <mat-checkbox class=\"mr-2\" [(ngModel)]=\"selectedField.Visible\">\r\n                        {{selectedField.Description}}\r\n                        </mat-checkbox>\r\n                    </div>\r\n                </div>\r\n                <div class=\"col-9\">\r\n                        <div class=\"generation_graph\" *ngFor=\"let selectedField of selectedGeneratedFields\">\r\n                            <div class=\"generation_divider\" [hidden]=\"!selectedField.Visible\">\r\n                                <graph [data]=\"selectedField.Coords\" [title]=\"selectedField.Description\"></graph>\r\n                            </div>\r\n                        </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n  \r\n  \r\n    </mat-card-content>\r\n    <mat-card-footer>\r\n    </mat-card-footer>\r\n  </mat-card>","import {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  ViewChild,\r\n  Output,\r\n  EventEmitter,\r\n  OnChanges,\r\n  SimpleChanges,\r\n  ChangeDetectorRef,\r\n  TemplateRef,\r\n} from \"@angular/core\";\r\nimport {\r\n  CellAlignmentEnum,\r\n  ConfigColumn,\r\n  TmwTableComponent,\r\n  NumberColumnPipe,\r\n  TypeColumn\r\n} from \"tmw-table\";\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../../models/record.model\";\r\nimport { UtilityHelperService } from \"../../../../services/utilityHelper.services\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynamicModuleListConfig } from \"../../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleCompileConfig } from \"./../../../..//models/dynamicModuleCompileConfig.model\";\r\nimport {\r\n  EndPointConfiguration,\r\n  EndPointDataParams,\r\n  ParamTypeEnum,\r\n} from \"./../../../../models/endPointConfiguration.model\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Router } from \"@angular/router\";\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { FireTrigger, Trigger, ActionButton, ActionFlagEnum } from '../../../../models/trigger.model';\r\nimport { dbDateService } from \"../../../../services/db-date.service\";\r\nimport { DatePipe } from \"@angular/common\";\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { NumericField } from '../../../../models/fields/numericField.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../models/fields/dateField.model';\r\nimport { LabelField } from \"../../../../models/fields/labelField.model\";\r\nimport { ModeEnum, TimeTypeEnum } from 'tmw-picker';\r\nimport { TabellarField } from '../../../../models/graph.model';\r\nimport { __values } from \"tslib\";\r\nimport { GlobalService } from \"../../../../services/global.service\";\r\n\r\ntype Panel = {\r\n  record: Record,\r\n  isOpen: boolean,\r\n  pageState: string,\r\n  highlighted: boolean\r\n}\r\n\r\n@Component({\r\n  selector: \"list-view-form-record\",\r\n  templateUrl: \"list-view-form-record.component.html\",\r\n  styleUrls: [\"./list-view-form-record.component.scss\"],\r\n})\r\nexport class ListViewFormRecordComponent implements OnInit, OnChanges {\r\n  \r\n  @Input() configurations: DynamicModuleListConfig;\r\n  @Input() compileConfigurations: DynamicModuleCompileConfig;\r\n  outCompileConfigurations: DynamicModuleCompileConfig;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() userID: string;\r\n  @Input() formID: string;\r\n  @Input() orgaID: string;\r\n  @Input() form: Form = null;\r\n  @Input() defaultListViewFunction: Function = null;\r\n  @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n  @Input() onlyView: boolean = true;\r\n  @Input() records: Array<DynRecord> = null;\r\n  @Input() highlightFilter: any = null;\r\n  @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n  @Input() formulaObject: any = {};\r\n  @Input() contestualizationParams: any = null;\r\n\r\n  defaultListActions: DynamicModuleListFormRecordActionsDefault =\r\n    new DynamicModuleListFormRecordActionsDefault();\r\n\r\n  // values: Array<Record>;\r\n  test = false;\r\n  isDuplicating: boolean = false;\r\n  selectedRecord: any; // Record | string;\r\n  loader: boolean;\r\n  loadedform: boolean = false;\r\n  panelOpenState: boolean[] = new Array<boolean>();\r\n  public selectedIndex: number | null = null;\r\n  visualizzaContenuto = false;\r\n  modificaContenuto = false;\r\n\r\n\r\n  @ViewChild(\"tableRecords\", { static: true }) tableRecords: TmwTableComponent;\r\n\r\n  columns = new Array<ConfigColumn>();\r\n  tabellarColumns = new Array<ConfigColumn>();\r\n  panels: Array<Panel>\r\n  buttons: Array<RecordButton> = new Array<RecordButton>();\r\n  popupLoader: boolean = false;\r\n\r\n  @ViewChild(\"openAddDialog\", { static: false }) openAddDialog: TemplateRef<any>;\r\n  openAddDialogRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n  @ViewChild(\"openGraphDialog\", { static: false }) openGraphDialog: TemplateRef<any>;\r\n  openGraphDialogRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n  todoList: any;\r\n  isFullOpened: boolean = false;\r\n\r\n  isTabellar: boolean = false;\r\n  isListView: boolean = true;\r\n  tabellarConditionLoaded: boolean = false;\r\n\r\n  minperiod: Date;\r\n  maxperiod: Date;\r\n\r\n  tabellarFields: Array<TabellarField> = new Array<TabellarField>();\r\n  selectedTabellarFields: Array<TabellarField>;\r\n  tabellarValues: Array<any> = new Array<any>();\r\n\r\n  // TMW-PICKER\r\n  modes = ModeEnum\r\n  timeType = TimeTypeEnum\r\n  mode: ModeEnum;\r\n\r\n  libSingleLoaded: boolean = true;\r\n  visibleActionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n\r\n  // add new\r\n  @Output() onAddViewEditRecord: EventEmitter<{\r\n    record: Record;\r\n    onlyView: boolean;\r\n  }> = new EventEmitter<{ record: Record; onlyView: boolean }>();\r\n\r\n  @Output() onDeleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() dragStarted: EventEmitter<any> = new EventEmitter<any>();\r\n  @Output() dragReleased: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n  @Output() clickDragIndicator: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  //#region constructor\r\n  constructor(\r\n    private utilityHelperService: UtilityHelperService,\r\n    private changeDetector: ChangeDetectorRef,\r\n    private dialog: MatDialog,\r\n    private router: Router,\r\n    private dbDateService: dbDateService,\r\n    private datePipe: DatePipe\r\n  ) { }\r\n  //#endregion constructor\r\n\r\n  //#region ngOnInit\r\n  ngOnInit(): void {\r\n    // this.panelOpenState = [\r\n    //   ...Array(this.configurations.values.length + 1),\r\n    // ].map(() => false);\r\n\r\n    this.defaultListActions = this.configurations.defaultListActions;\r\n    this.visibleActionButtons = this.actionButtons.filter(x => x.ShowIn == ActionFlagEnum.LISTVIEW);\r\n\r\n    // this.showTitle = this.configurations.showTitle;\r\n\r\n    this.outCompileConfigurations = new DynamicModuleCompileConfig(\r\n      false,\r\n      this.compileConfigurations.showSaveButton,\r\n      this.compileConfigurations.showBackButton,\r\n      this.compileConfigurations.userID,\r\n      this.compileConfigurations.additionalParams,\r\n      this.compileConfigurations.additionalInfo,\r\n      this.compileConfigurations.prefilterParams,\r\n    );\r\n    //GlobalService.debugLog(\"list-view - outcompileConfigurations \", this.outCompileConfigurations);\r\n    this.getFormByID();\r\n    this.configureListviewButtons();\r\n  }\r\n  //#endregion ngOnInit\r\n\r\n  //#region ngOnChanges\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    //GlobalService.debugLog('ngOnChanges', changes);\r\n\r\n    // Se viene modificato il valore di \"ngModelInput\" allora aggiorna l'input\r\n    if (\r\n      changes[\"configurations\"] != undefined &&\r\n      changes[\"configurations\"].firstChange == false\r\n    ) {\r\n      this.configurations.values = changes[\"configurations\"].currentValue;\r\n      this.reloadTables();\r\n    }\r\n  }\r\n  //#endregion ngOnChanges\r\n\r\n  //#region onOpening\r\n  /**\r\n   * funzione di apertura dell'accordion\r\n   * @param indice \r\n   */\r\n  onOpening(indice: number) {\r\n    this.selectedIndex = indice;\r\n  }\r\n  //#endregion onOpening\r\n\r\n  configureListviewButtons() {\r\n    this.buttons = [\r\n\r\n      {\r\n        \"icon\": \"eye\",\r\n        \"text\": \"Visualizza\",\r\n        \"visible\": this.defaultListActions.view && (this.defaultListActions.edit || this.defaultListActions.duplicate || this.defaultListActions.delete),\r\n        \"extraClass\": \"view-button-icon\",\r\n        \"fn\": (panel, i, event) => {\r\n          this.viewRecord(panel, true, i, event);\r\n        }\r\n      },\r\n      {\r\n        \"icon\": \"edit\",\r\n        \"text\": \"Modifica\",\r\n        \"visible\": this.defaultListActions.edit,\r\n        \"extraClass\": \"edit-button-icon\",\r\n        \"fn\": (panel, i, event) => {\r\n          this.EditRecord(panel, false, i, event);\r\n        }\r\n      },\r\n      {\r\n        \"icon\": \"copy\",\r\n        \"text\": \"Duplica\",\r\n        \"visible\": this.defaultListActions.duplicate,\r\n        \"extraClass\": \"duplicate-button-icon\",\r\n        \"fn\": (panel, i, event) => {\r\n          this.duplicateRecord(panel, false, i, event);\r\n        }\r\n      },\r\n      {\r\n        \"icon\": \"trash\",\r\n        \"text\": \"Cancella\",\r\n        \"visible\": this.defaultListActions.delete,\r\n        \"extraClass\": \"delete-button-icon\",\r\n        \"fn\": (panel, i, event) => {\r\n          this.deleteRecord(panel, event);\r\n        }\r\n      }\r\n\r\n    ]\r\n    this.buttons = this.buttons.concat(this.externalButtons).filter(x => x.visible);\r\n  }\r\n\r\n  //#region openTabellar\r\n  openTabellar(){\r\n    this.isListView = false;\r\n    this.isTabellar = true;\r\n  }\r\n  //#endregion openTabellar\r\n\r\n  //#region openListView\r\n  openListView(){\r\n    this.isTabellar = false;\r\n    this.isListView = true;\r\n  }  \r\n  //#endregion openListView\r\n\r\n  //#region getFormByID\r\n  getFormByID(id: string = this.formID) {\r\n    if (this.form == null) {\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: id,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n          GlobalService.debugLog(\"ListViewFormRecordComponent - get FORM\", res)\r\n          this.form = res;\r\n          this.form.OrgaID = this.orgaID;\r\n\r\n          if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n            this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n          } else {\r\n            this.form.Triggers = new Array<Trigger>();\r\n          }\r\n\r\n          if (this.form.ObjectActionButtons != null && this.form.ObjectActionButtons != \"\"){\r\n            this.form.ActionButtons = JSON.parse(this.form.ObjectActionButtons);\r\n          } else {\r\n            this.form.ActionButtons = new Array<ActionButton>();\r\n          }          \r\n\r\n          this.actionButtons = this.form.ActionButtons;\r\n          this.loadedform = true;\r\n          this.configureColumns();\r\n        },\r\n        (err) => { }\r\n      );\r\n    } else {\r\n      this.configureColumns();\r\n    }\r\n  }\r\n  //#endregion getFormByID\r\n\r\n  //#region configureColumns\r\n  /**\r\n   * Metodo per configurare le colonne della eqp-table.\r\n   */\r\n  private configureColumns() {\r\n\r\n    // this.configureTabellarColumns();\r\n\r\n    // this.createAdditionalActions();\r\n    // this.createColumnsFromFormFields();\r\n    if (this.records == null) {\r\n      this.getRecordsByFormID();\r\n    } else {\r\n      //GlobalService.debugLog('Records Exists', this.records);\r\n      this.generateAnswersArray(this.records);\r\n    }\r\n  }\r\n  //#endregion configureColumns\r\n\r\n  //#region configureTabellarColumns\r\n  // private configureTabellarColumns(){\r\n\r\n  //     /**\r\n  //      * Metodo per creare la configurazione delle colonne per la eqp-table.\r\n  //      * Individua i BaseField da mostrare e li usa per creare le ConfigColumn.\r\n  //      * Le colonne vengono create per i BaseField con il flag InListView a TRUE\r\n  //      * oppure, nel caso non siano stati specificati i campi da visualizzare,\r\n  //      * seleziona i primi 6.\r\n  //      */\r\n\r\n  //       GlobalService.debugLog('list-form-record - createColumnsFromFormFields', this.form);\r\n    \r\n  //       var fieldsForColumns: Array<BaseField>;\r\n  //       if (this.form.Fields.find((f) => f.InListView)) {\r\n  //         fieldsForColumns = this.form.Fields.filter((f) => f.InListView);\r\n  //       } else {\r\n  //         fieldsForColumns = this.form.Fields.filter((f) => f.OrdinalPosition < 6);\r\n  //       }\r\n  //       fieldsForColumns\r\n  //         .sort((a, b) =>\r\n  //           a.OrdinalPosition > b.OrdinalPosition\r\n  //             ? 1\r\n  //             : b.OrdinalPosition > a.OrdinalPosition\r\n  //             ? -1\r\n  //             : 0\r\n  //         )\r\n  //         .forEach((field) => {\r\n  //           this.columns.push(this.createFieldColumn(field));\r\n  //         });\r\n\r\n  //         console.log(\"FINAL COLUMSN\", this.columns);\r\n\r\n  // }\r\n  //#endregion configureTabellarColumns\r\n\r\n  //#region createFieldColumn\r\n  /**\r\n   * Metodo per creare l'oggetto ConfigureColumn che rappresenta il BaseField passato in input.\r\n   * @param field BaseField per cui creare la colonna nella eqp-table\r\n   * @returns Restituisce una ConfigColumn per la eqp-table\r\n   */\r\n  private createFieldColumn(field: BaseField): ConfigColumn {\r\n    var column: ConfigColumn = { key: field.Name, display: field.Label };\r\n    switch (field.FieldType) {\r\n      case FieldTypeEnum[\"Booleano\"]:\r\n        column.type = TypeColumn.Boolean;\r\n        column.booleanValues = {\r\n          false: '<i class=\"fa fa-times error-color\"></i>',\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n        };\r\n        column.styles = {\r\n          flex: \"0 0 7%\",\r\n          cellAlignment: CellAlignmentEnum.CENTER,\r\n        };\r\n        break;\r\n      case FieldTypeEnum[\"Data e/o ora\"]:\r\n        if (\r\n          (field as DateField).IsOnlyDate != DateTimeTypeEnum[\"Solo orario\"]\r\n        ) {\r\n          column.type = TypeColumn.Date;\r\n          if (\r\n            (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Data e ora\"]\r\n          ) {\r\n            column.format = \"dd/MM/yyyy HH:mm\";\r\n          } else if (\r\n            (field as DateField).IsOnlyDate == DateTimeTypeEnum[\"Solo data\"]\r\n          ) {\r\n            column.format = (field as DateField).DateFormat\r\n              ? (field as DateField).DateFormat.replace(\"DD\", \"dd\")\r\n              : \"dd/MM/yyyy\";\r\n          }\r\n        }\r\n        break;\r\n      case FieldTypeEnum[\"Campo numerico\"]:\r\n        if ((field as NumericField).CurrencySymbol) {\r\n          column.numberPipe = NumberColumnPipe.CURRENCY;\r\n          column.currencyPipeCode = (field as NumericField).CurrencySymbol;\r\n        } else if (!(field as NumericField).IsInteger) {\r\n          column.numberPipe = NumberColumnPipe.DECIMAL;\r\n        }\r\n        break;\r\n      case FieldTypeEnum[\"Allegato\"]:\r\n        break;\r\n      case FieldTypeEnum[\"Immagine\"]:\r\n     \r\n      break;\r\n\r\n      case FieldTypeEnum[\"Etichetta\"]:\r\n        column.value = (element: Record) => { return (field as LabelField).Etichetta; };\r\n      break;        \r\n      case FieldTypeEnum[\"Elenco generico\"]:\r\n\r\n        column.value = (element: Record) => {\r\n          if ((field as ListValueField).IsMultiChoiche) {\r\n            if (!element[field.Name] || element[field.Name].length == 0) {\r\n              return null;\r\n            } else {\r\n              return Object.keys((field as ListValueField).ValuePairs)\r\n                .filter((k) =>\r\n                  element[field.Name].includes(\r\n                    (field as ListValueField).ValuePairs[k]\r\n                  )\r\n                )\r\n                .join(\", \");\r\n            }\r\n          } else {\r\n\r\n            if ((field as ListValueField).ValuePairs == null){ \r\n\r\n              var vs = (field as ListValueField).ValueString;\r\n              if (vs != null){\r\n                var options = vs.split(\";\");\r\n                var foundvalue = \"\";\r\n                options.forEach((op) => {\r\n                  var values = op.split(\"|\");\r\n                  if (values[1] == element[field.Name]){\r\n                    foundvalue = values[0];\r\n                  }\r\n                });\r\n                return foundvalue;\r\n              } else {\r\n                return \"\";\r\n              }\r\n            \r\n            }\r\n            return Object.keys((field as ListValueField).ValuePairs).find(\r\n              (k) =>\r\n                (field as ListValueField).ValuePairs[k] == element[field.Name]\r\n            );\r\n          }\r\n        };\r\n        column.isSortable = false;\r\n        column.isSearchable = false;\r\n\r\n        break;\r\n      case FieldTypeEnum[\"Lookup\"]:\r\n        // TODO\r\n        break;\r\n    }\r\n    return column;\r\n  }  \r\n  //#endregion createFieldColumn\r\n\r\n  //#region getRecordsByFormID\r\n  /**\r\n   * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n   * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n   * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n   * a partire dai quali vengono ricreati i Record usati nel client.\r\n   */\r\n  async getRecordsByFormID() {\r\n    var dynamicModuleParams = [\r\n      {\r\n        ParamName: \"EntID\",\r\n        ParamValue: this.form.ID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n\r\n    if (\r\n      this.configurations.userID == null &&\r\n      this.endPointConfiguration &&\r\n      this.endPointConfiguration.Records &&\r\n      this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n    ) {\r\n      // se non conosco l'utente\r\n      await this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Array<DynRecord>) => {\r\n          //GlobalService.debugLog('GetByFormIDEndPoint', res)\r\n          this.generateAnswersArray(res);\r\n        }\r\n      );\r\n    } else if (\r\n      this.configurations.userID != null &&\r\n      this.endPointConfiguration &&\r\n      this.endPointConfiguration.Records &&\r\n      this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint\r\n    ) {\r\n      // se conosco l'utente\r\n      let dynamicModuleParams = [\r\n        {\r\n          ParamName: \"EntID\",\r\n          ParamValue: this.form.ID,\r\n          ParamType: ParamTypeEnum[\"Query param\"],\r\n        },\r\n        {\r\n          ParamName: \"UserID\",\r\n          ParamValue: this.configurations.userID,\r\n          ParamType: ParamTypeEnum[\"Query param\"],\r\n        },\r\n      ];\r\n\r\n      await this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Records.GetAllByEntAndUserIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Array<DynRecord>) => {\r\n          //GlobalService.debugLog('GetAllByEntAndUserIDEndPoint', res)\r\n          this.generateAnswersArray(res);\r\n        }\r\n      );\r\n    } else {\r\n      console.error(\"controllare le configurazioni dell'endpoint\");\r\n    }\r\n  }\r\n  //#endregion getRecordsByFormID\r\n\r\n  //#region generateAnswersArray\r\n  private generateAnswersArray(res: Array<DynRecord>) {\r\n    this.configurations.values = new Array<Record>();\r\n    this.panels = new Array<Panel>();\r\n    res.forEach((r) => {\r\n      //GlobalService.debugLog(\"generateAnswersArray\", r)\r\n      var tmpRec: Record = new Record();\r\n      //GlobalService.debugLog(\"SerializedValues\", r.SerializedValues)\r\n      tmpRec = JSON.parse(r.SerializedValues);\r\n      tmpRec.ID = r.ID;\r\n      tmpRec.EntID = r.EntID;\r\n      tmpRec.Version = r.Version;\r\n      tmpRec.userID = r.userID;\r\n      tmpRec.AnswerDate = this.dbDateService.parseDatefromDB(r.AnswerDate).toString();\r\n\r\n      tmpRec.HTMLreadableValues = r.HTMLreadableValues;\r\n      //GlobalService.debugLog(\"AdditionalParams\", r.AdditionalParams)\r\n      tmpRec.AdditionalParams = r.AdditionalParams != \"\" && r.AdditionalParams != null ? JSON.parse(r.AdditionalParams) : \"\";\r\n      tmpRec.AdditionalInfo = r.AdditionalInfo != \"\" && r.AdditionalInfo != null ? JSON.parse(r.AdditionalInfo) : \"\";\r\n\r\n      var foundkey = true;\r\n      if (this.contestualizationParams != null){\r\n        if (tmpRec.AdditionalParams != null){\r\n          Object.keys(this.contestualizationParams).forEach((key) => {\r\n            if (!tmpRec.AdditionalParams.hasOwnProperty(key) || this.contestualizationParams[key].indexOf(tmpRec.AdditionalParams[key]) == -1){\r\n              foundkey = false;\r\n            }\r\n          });\r\n        }\r\n      }\r\n\r\n      if (foundkey){\r\n        this.configurations.values.push(tmpRec);\r\n\r\n        var isHighlighted = false;\r\n        if (this.highlightFilter != null) {\r\n          isHighlighted = true;\r\n          Object.keys(this.highlightFilter).forEach((filter) => {\r\n            if (!tmpRec.AdditionalParams[filter] || tmpRec.AdditionalParams[filter] != this.highlightFilter[filter]) {\r\n              isHighlighted = false;\r\n            }\r\n          });\r\n        }\r\n\r\n        this.panels.push({ record: tmpRec, isOpen: false, pageState: null, highlighted: isHighlighted });\r\n\r\n      }\r\n\r\n\r\n    });\r\n\r\n    this.loader = true;\r\n    setTimeout((_) => {\r\n      this.changeDetector.detectChanges();\r\n    }, 0); // refresh ui\r\n  }\r\n  //#endregion generateAnswersArray\r\n\r\n  //#region togglePanel\r\n  togglePanel(panel: any, record: Record) {\r\n    //GlobalService.debugLog('togglePanel')\r\n    if (this.defaultListViewFunction != null) {\r\n      //GlobalService.debugLog('defaultListViewFunction', record)\r\n      this.defaultListViewFunction(record);\r\n      return;\r\n    }\r\n    if (!panel.isOpen) {\r\n      panel.isOpen = true;\r\n      panel.pageState = 'visualizzaContenuto';\r\n      // Simula un calcolo asincrono\r\n      // setTimeout(() => {\r\n      // }, 1000);\r\n    } else {\r\n      panel.isOpen = false;\r\n      panel.pageState = null;\r\n    }\r\n  }\r\n  //#endregion togglePanel\r\n\r\n  //#region viewOrEditRecord\r\n  /**\r\n   * Metodo che scatena l'evento di Output per mostrare o modificare il record\r\n   * selezionato sulla eqp-table.\r\n   * @param record Record da visualizzare o modificare selezionato sulla eqp-table.\r\n   * @param onlyView Se TRUE viene mostrato il componente add-form-record in sola lettura.\r\n   */\r\n  viewOrEditRecord(record: Record, onlyView: boolean, i) {\r\n    //GlobalService.debugLog('viewOrEditRecord')\r\n    this.loader = false;\r\n    this.onAddViewEditRecord2({ record, onlyView });\r\n    this.panelOpenState.map(() => false);\r\n    this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n    // this.onAddViewEditRecord.emit({ record, onlyView });\r\n  }\r\n  //#endregion viewOrEditRecord\r\n\r\n  //#region viewRecord\r\n  viewRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n    //GlobalService.debugLog('viewRecord')\r\n    let record = panel.record\r\n    this.visualizzaContenuto = true;\r\n    this.modificaContenuto = false;\r\n    this.loader = false;\r\n    // this.onAddViewEditRecord2({ record, onlyView });\r\n    if (panel.pageState == 'visualizzaContenuto') {\r\n      panel.isOpen = false;\r\n      panel.pageState = null;\r\n    } else {\r\n      panel.isOpen = true;\r\n      panel.pageState = 'visualizzaContenuto';\r\n    }\r\n    this.panelOpenState.map(() => false);\r\n    this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n    // this.onAddViewEditRecord.emit({ record, onlyView });\r\n  }\r\n  //#endregion viewRecord\r\n\r\n  //#region EditRecord\r\n  EditRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n    //GlobalService.debugLog('EditRecord')\r\n\r\n    let record = panel.record\r\n    panel.record.AdditionalInfo = Object.assign({}, record.AdditionalInfo, this.configurations.updateInfo);\r\n    this.visualizzaContenuto = false;\r\n    this.modificaContenuto = true;\r\n    this.loader = false;\r\n    // this.onAddViewEditRecord2({ record, onlyView });\r\n    if (panel.pageState == 'modificaContenuto') {\r\n      panel.isOpen = false;\r\n      panel.pageState = null;\r\n    } else {\r\n      panel.isOpen = true;\r\n      panel.pageState = 'modificaContenuto';\r\n    }\r\n    this.panelOpenState.map(() => false);\r\n    this.panelOpenState[i] = this.panelOpenState[i] == true ? false : true;\r\n    // this.onAddViewEditRecord.emit({ record, onlyView });\r\n  }\r\n  //#endregion EditRecord\r\n\r\n  //#region externalCallback\r\n  externalCallback(ev: Event, callback: Function, record: any) {\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n    callback(record);\r\n  }\r\n  //#endregion externalCallback\r\n\r\n  //#region duplicateRecord\r\n  /**\r\n   * Metodo per duplicare un record della form.\r\n   * @param record Record da duplicare.\r\n   */\r\n  duplicateRecord(panel: Panel, onlyView: boolean, i, ev: Event) {\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n\r\n    //GlobalService.debugLog('duplicateRecord');\r\n\r\n    this.selectedRecord = panel.record.ID;\r\n    this.isDuplicating = true;\r\n\r\n    this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"80vw\",\r\n      minHeight: \"100px\",\r\n    });\r\n\r\n  }\r\n  //#endregion duplicateRecord\r\n\r\n  //#region deleteRecord\r\n  /**\r\n   * Metodo per eliminare un record dalla lista.\r\n   * @param record Record da eliminare selezionato sulla eqp-table.\r\n   */\r\n  deleteRecord(record: Record, ev: Event) {\r\n    ev.preventDefault();\r\n    ev.stopPropagation();\r\n    this.onDeleteRecord.emit(record);\r\n  }\r\n  //#endregion deleteRecord\r\n\r\n  //#region reloadTables\r\n  /**\r\n   * Metodo per ricaricare i dati della eqp-table.\r\n   */\r\n  private reloadTables() {\r\n    if (this.tableRecords) {\r\n      this.tableRecords.reloadDatatable();\r\n    }\r\n  }\r\n  //#endregion reloadTables\r\n\r\n  //#region saveOrExitForm\r\n  /**\r\n   * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n   */\r\n  saveOrExitForm(record: Record) {\r\n    //GlobalService.debugLog('list-view-form-record save', record)\r\n    this.saveRecordEvent.emit(record);\r\n  }\r\n  //#endregion saveOrExitForm\r\n\r\n  //#region onAfterSaveRecord\r\n  onAfterSaveRecord(event) {\r\n    //GlobalService.debugLog('list-view-form-record aftersave', event)\r\n    this.saveRecordEvent.emit(event);\r\n  }\r\n  //#endregion onAfterSaveRecord\r\n\r\n  //#region onAddViewEditRecord2\r\n  /**\r\n   * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n   * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n   * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n   * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n   * @param event Oggetto con due proprietà:\r\n   * \"record\" = oggetto da modificare/visualizzare,\r\n   * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n   */\r\n  onAddViewEditRecord2(event: { record: Record; onlyView: boolean }) {\r\n\r\n    this.loader = false;\r\n    this.selectedRecord = null;\r\n\r\n    this.onlyView = event.onlyView;\r\n\r\n    this.outCompileConfigurations.showBackButton = false;\r\n    this.outCompileConfigurations.showSaveButton = !event.onlyView;\r\n    this.outCompileConfigurations.showTitle = false;\r\n\r\n    if (event != null) {\r\n      if (\r\n        this.endPointConfiguration &&\r\n        this.endPointConfiguration.Records &&\r\n        this.endPointConfiguration.Records.GetByIDEndPoint\r\n      ) {\r\n        // preparo la versione corretta del form\r\n        var dynamicModuleParams = [\r\n          {\r\n            ParamName: \"EntID\",\r\n            ParamValue: event.record.EntID,\r\n            ParamType: ParamTypeEnum[\"Query param\"],\r\n          },\r\n          {\r\n            ParamName: \"Version\",\r\n            ParamValue: event.record.Version,\r\n            ParamType: ParamTypeEnum[\"Query param\"],\r\n          },\r\n        ];\r\n        this.utilityHelperService.RunEndPointCall(\r\n          this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n          dynamicModuleParams,\r\n          (res: Form) => {\r\n            this.form = res;\r\n            this.form.OrgaID = this.orgaID;\r\n\r\n            if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n              this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n            } else {\r\n              this.form.Triggers = new Array<Trigger>();\r\n            }            \r\n\r\n            if (this.form.ObjectActionButtons != null && this.form.ObjectActionButtons != \"\"){\r\n              this.form.ActionButtons = JSON.parse(this.form.ObjectActionButtons);\r\n            } else {\r\n              this.form.ActionButtons = new Array<ActionButton>();\r\n            }              \r\n\r\n            this.actionButtons = this.form.ActionButtons;\r\n\r\n            // preparo i dati del record\r\n            var dynamicRecordParams = [\r\n              {\r\n                ParamName: \"id\",\r\n                ParamValue: event.record.ID,\r\n                ParamType: ParamTypeEnum[\"Query param\"],\r\n              },\r\n            ];\r\n            this.utilityHelperService.RunEndPointCall(\r\n              this.endPointConfiguration.Records.GetByIDEndPoint,\r\n              dynamicRecordParams,\r\n              (res: DynRecord) => {\r\n                this.selectedRecord = JSON.parse(res.SerializedValues);\r\n                this.selectedRecord.ID = res.ID;\r\n                this.selectedRecord.EntID = res.EntID;\r\n                this.selectedRecord.userID = res.userID;\r\n                this.selectedRecord.Version = res.Version;\r\n\r\n                this.loader = true;\r\n              }\r\n            );\r\n          }\r\n        );\r\n      } else {\r\n        this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n        this.loader = true;\r\n      }\r\n    } else {\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: this.formID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n          this.form = res;\r\n          this.form.OrgaID = this.orgaID;\r\n\r\n          if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n            this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n          } else {\r\n            this.form.Triggers = new Array<Trigger>();\r\n          }       \r\n          \r\n          if (this.form.ObjectActionButtons != null && this.form.ObjectActionButtons != \"\"){\r\n            this.form.ActionButtons = JSON.parse(this.form.ObjectActionButtons);\r\n          } else {\r\n            this.form.ActionButtons = new Array<ActionButton>();\r\n          }  \r\n\r\n          this.actionButtons = this.form.ActionButtons;\r\n\r\n          this.selectedRecord = null;\r\n          this.onlyView = false;\r\n          this.loader = true;\r\n        },\r\n        (err) => { }\r\n      );\r\n\r\n      // this.selectedRecord = null;\r\n      // this.onlyView = false;\r\n      // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n    }\r\n  }\r\n  //#endregion onAddViewEditRecord2\r\n\r\n  //#region openAll\r\n  openAll(){\r\n    this.isFullOpened = !this.isFullOpened;\r\n    this.panels.forEach((panel) => {\r\n      if (panel.isOpen != this.isFullOpened){\r\n        document.getElementById(\"p-\"+panel.record.ID+\"-visibility\").click();\r\n      }\r\n    })\r\n  }\r\n  //#endregion openAll\r\n\r\n  //#region openAddPopup\r\n  openAddPopup() {\r\n    // mi ssicuro che non ci siano pannelli in modifica perchè altrimenti va in conflitto l'update con l'add\r\n    this.panels.forEach((panel) => {\r\n      if(panel.pageState = 'modificaContenuto'){\r\n        panel.pageState = 'visualizzaContenuto';\r\n      }\r\n    });\r\n\r\n    const dynamicModuleParams: Array<EndPointDataParams> = new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"id\",\r\n      ParamValue: this.formID,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Form) => {\r\n        this.form = res;\r\n        this.form.OrgaID = this.orgaID;\r\n\r\n        if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n          this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n        } else {\r\n          this.form.Triggers = new Array<Trigger>();\r\n        }\r\n\r\n        if (this.form.ObjectActionButtons != null && this.form.ObjectActionButtons != \"\"){\r\n          this.form.ActionButtons = JSON.parse(this.form.ObjectActionButtons);\r\n        } else {\r\n          this.form.ActionButtons = new Array<ActionButton>();\r\n        } \r\n        \r\n        this.actionButtons = this.form.ActionButtons;\r\n\r\n        this.selectedRecord = null;\r\n        this.popupLoader = true;\r\n        this.isDuplicating = false;\r\n\r\n        this.openAddDialogRef = this.dialog.open(this.openAddDialog, {\r\n          disableClose: true,\r\n          hasBackdrop: true,\r\n          width: \"80vw\",\r\n          minHeight: \"100px\",\r\n        });\r\n\r\n      },\r\n      (err) => {\r\n        console.error(\"error RunEndPointCall\", err);\r\n      }\r\n    );\r\n  }\r\n  //#endregion openAddPopup\r\n\r\n  //#region openGraphs\r\n  openGraphs() {\r\n    \r\n    this.openGraphDialogRef = this.dialog.open(this.openGraphDialog, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      minWidth: \"80vw\",\r\n      minHeight: \"70vh\",\r\n      maxHeight: \"100vh\"\r\n    });\r\n    // this.router.navigate(['dynamic-module-graphs/' + this.formID + '/' + this.userID]);\r\n  }\r\n  //#endregion openGraphs\r\n\r\n  //#region closeGraphs\r\n  closeGraphs() {\r\n    this.openGraphDialogRef.close()\r\n  }\r\n  //#endregion closeGraphs\r\n    \r\n  //#region onAddSaveRecord\r\n  onAddSaveRecord(record: Record) {\r\n    if (this.openAddDialogRef != null) { this.openAddDialogRef.close(); } \r\n    if (record == null) {this.saveRecordEvent.emit(null); return}\r\n    this.getRecordsByFormID();\r\n    this.saveRecordEvent.emit(record);\r\n  }\r\n  //#endregion onAddSaveRecord\r\n\r\n  //#region onAddAfterSaveRecord\r\n  onAddAfterSaveRecord(record: Record) {\r\n    if (this.openAddDialogRef != null) { this.openAddDialogRef.close(); } \r\n    if (record == null) {this.saveRecordEvent.emit(null); return}\r\n    this.getRecordsByFormID();\r\n    this.saveRecordEvent.emit(record);\r\n  }\r\n  //#endregion onAddAfterSaveRecord\r\n\r\n  //#region printAdditionalInfo\r\n  printAdditionalInfo(record: Record) {\r\n    let out = \"\";\r\n    if(this.configurations.listViewRecordTitle != null && this.configurations.listViewRecordTitle.length > 0){\r\n\r\n    this.configurations.listViewRecordTitle.forEach((item) => {\r\n      if (record.AdditionalInfo != null){\r\n\r\n        const regex = /\\((.+)\\)/g;; // pattern per uno o più numeri\r\n        \r\n        // (dateformat=EEEE, d MMMM y, H:mm:ss)\r\n        const match = regex.exec(item);\r\n        if (match) {\r\n          let mymatch = match[1];\r\n          if(mymatch.includes(\"dateformat\")){\r\n            let format = mymatch.split(\"=\")[1];\r\n            let token = item.split(\"(\")[0];\r\n            out += record.AdditionalInfo != null && record.AdditionalInfo[token] != null ? \" \" + this.datePipe.transform(record.AdditionalInfo[token], format) : record[token] ? \" \" + this.datePipe.transform(record[token], format) :  \" \" + token;\r\n          }\r\n        } else {\r\n          out += record.AdditionalInfo != null && record.AdditionalInfo[item] != null ? \" \" + record.AdditionalInfo[item] : record[item] ? \" \" + record[item] :  \" \" + item;\r\n        }\r\n\r\n      }\r\n\r\n    });\r\n\r\n    }\r\n\r\n    // throw new Error('Method not implemented.');\r\n    return out;\r\n  }\r\n  //#endregion printAdditionalInfo\r\n\r\n  onClickDragIndicator(el: any){\r\n    this.clickDragIndicator.emit(el);\r\n  }\r\n\r\n  onDragStarted(el: any){\r\n      this.dragStarted.emit(el);\r\n  }\r\n\r\n  onDragReleased(){\r\n      this.dragReleased.emit();\r\n  }\r\n\r\n  onExternalComponentOut(ev: eventOut){\r\n    this.out.emit(ev);\r\n  }\r\n\r\n  onFireTrigger(ev: FireTrigger){\r\n    this.fireTrigger.emit(ev);\r\n  } \r\n\r\n  reloadHTMLReadableValues(answerId: string){\r\n\r\n    // preparo i dati del record\r\n    var dynamicRecordParams = [\r\n      {\r\n        ParamName: \"id\",\r\n        ParamValue: answerId,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.GetByIDEndPoint,\r\n      dynamicRecordParams,\r\n      (res: DynRecord) => {\r\n        this.panels.find(x => x.record.ID == answerId).record.HTMLreadableValues = res.HTMLreadableValues;    \r\n      }\r\n    );\r\n    \r\n    this.libSingleLoaded = false;\r\n    setTimeout(() => {\r\n      this.libSingleLoaded = true;\r\n    }, 1000);\r\n  }\r\n\r\n  generateAction(actionButton: ActionButton){\r\n    var fireTrigger: FireTrigger = new FireTrigger();\r\n\r\n    fireTrigger.trigger = new Trigger();\r\n    fireTrigger.trigger.CID = actionButton.ButtonCode;\r\n    fireTrigger.trigger.conditions = null;\r\n    fireTrigger.trigger.description = actionButton.ButtonLabel;\r\n    fireTrigger.trigger.execution = actionButton.execution;\r\n    fireTrigger.trigger.formulas = actionButton.formulas;\r\n\r\n    fireTrigger.form = this.form;\r\n    fireTrigger.formulas = actionButton.formulas;\r\n    fireTrigger.record = null;\r\n    fireTrigger.userPatient = this.userID;\r\n    fireTrigger.userMedicalExamination = null;\r\n    \r\n    this.onFireTrigger(fireTrigger);\r\n  }  \r\n\r\n}\r\n\r\n","<mat-card class=\"list-view-form-record\">\r\n  <mat-card-header *ngIf=\"this.configurations.showTitle || defaultListActions.add\" class=\"align-items-center justify-content-between\">\r\n    <mat-card-title *ngIf=\"this.configurations.showTitle && loadedform\">Modulo {{ form.Name }} </mat-card-title>\r\n    <mat-card-actions *ngIf=\"defaultListActions.add || defaultListActions.graphs\">\r\n\r\n      <span *ngIf=\"visibleActionButtons.length > 0\">\r\n        <button \r\n          *ngFor=\"let actionButton in visibleActionButtons\" (click)=\"generateAction(actionButton)\"\r\n          class=\"btn btn-primary mr-2\" \r\n          mat-raised-button \r\n          color=\"primary\" \r\n          type=\"button\">\r\n          <tmw-icon class=\"mat-icon\" *ngIf=\"actionButton.Icon\" [name]=\"actionButton.Icon\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">{{actionButton.label}}</span>\r\n        </button>\r\n      </span>    \r\n\r\n      <button \r\n        *ngIf=\"isListView\"\r\n        class=\"btn btn-primary mr-2\" \r\n        mat-raised-button \r\n        color=\"primary\" \r\n        type=\"button\"\r\n        (click)=\"openTabellar()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"table\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\">Tabellare</span>\r\n      </button>\r\n\r\n      <button \r\n        *ngIf=\"isTabellar\"\r\n        class=\"btn btn-primary mr-2\" \r\n        mat-raised-button \r\n        color=\"primary\" \r\n        type=\"button\"\r\n        (click)=\"openListView()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"list\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\">Lista</span>\r\n      </button>      \r\n\r\n      <button \r\n        class=\"btn btn-primary mr-2\" \r\n        mat-raised-button \r\n        color=\"primary\" \r\n        type=\"button\"\r\n        (click)=\"openAll()\"\r\n        *ngIf=\"isListView\">\r\n        <tmw-icon class=\"mat-icon\" *ngIf=\"!isFullOpened\" name=\"chevron-down\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\" *ngIf=\"!isFullOpened\">Apri tutto</span>\r\n\r\n        <tmw-icon class=\"mat-icon\" *ngIf=\"isFullOpened && isListView\" name=\"chevron-up\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\" *ngIf=\"isFullOpened\">Chiudi tutto</span>\r\n      </button>      \r\n      <button \r\n        *ngIf=\"defaultListActions.graphs\"\r\n        class=\"btn btn-primary mr-2\" \r\n        mat-raised-button \r\n        color=\"primary\" \r\n        type=\"button\"\r\n        (click)=\"openGraphs()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"chart-pie\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\">Grafici</span>\r\n      </button>\r\n      <button \r\n        *ngIf=\"defaultListActions.add\"\r\n        class=\"btn btn-primary\" \r\n        mat-raised-button \r\n        color=\"primary\" \r\n        type=\"button\"\r\n        (click)=\"openAddPopup()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\">Aggiungi</span>\r\n      </button>      \r\n    </mat-card-actions>\r\n  </mat-card-header>\r\n\r\n  \r\n  <mat-card-content>\r\n\r\n    <div *ngIf=\"isTabellar\">\r\n      \r\n      <hlist-form-record\r\n        class=\"dynamic-module-hlist\"\r\n        [formID]=\"formID\"\r\n        [formulaObject]=\"formulaObject\"\r\n\r\n        [endPointConfiguration]=\"endPointConfiguration\"\r\n        [actionButtons]=\"actionButtons\"\r\n\r\n        [configurations]=\"configurations\"\r\n        [externalButtons]=\"externalButtons\"\r\n\r\n        >\r\n      </hlist-form-record>\r\n\r\n      <!-- <div class=\"row\">\r\n        <div class=\"col-sm-12 col-md-3\">\r\n            <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo inizio'\" [label]=\"'Periodo inizio'\"\r\n                [(ngModelInput)]=\"minperiod\"\r\n                [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n            </tmw-datetimepicker>\r\n        </div>\r\n        <div class=\"col-sm-12 col-md-3\">\r\n            <tmw-datetimepicker class=\"date\" [placeholder]=\"'Periodo fine'\" [label]=\"'Periodo fine'\"\r\n                [(ngModelInput)]=\"maxperiod\"\r\n                [pickerMode]=\"modes.DATEPICKER\" [outputFormat]=\"'DD/MM/YYYY'\" [showSeconds]=\"false\">\r\n            </tmw-datetimepicker>\r\n        </div>       \r\n        <div class=\"col-sm-12 col-md-3 mt-2\">\r\n            <tmw-select [arrayData]=\"tabellarFields\" [(ngModelInput)]=\"selectedTabellarFields\" [placeholder]=\"'Selezione dei campi'\"\r\n            [arrayKeyProperty]=\"'Description'\" [arrayValueProperty]=\"'TextDescription'\" [isMultiSelect]=\"true\" class=\"eqp-form-field\">\r\n            </tmw-select>\r\n        </div>       \r\n        <div class=\"col-sm-12 col-md-3 mt-2\">\r\n            <button\r\n            [disabled]=\"selectedTabellarFields == null || selectedTabellarFields.length == 0\"\r\n            class=\"btn btn-graph-generate button-next me-2\"\r\n            mat-raised-button\r\n            color=\"primary\"\r\n            (click)=\"generateTabellar()\"\r\n            >\r\n            Genera\r\n          </button>\r\n        </div>                   \r\n      </div> -->\r\n\r\n      <tmw-table id=\"tabellar\" class=\"list-form-record-table\" #tableRecords *ngIf=\"tabellarConditionLoaded\" [highlightColor]=\"'transparent'\"\r\n      [data]=\"tabellarValues\" [columns]=\"tabellarColumns\" [matPaginatorSize]=\"1000\" [matPaginatorLength]=\"[1000]\"></tmw-table>\r\n    </div>\r\n\r\n\r\n\r\n    <mat-accordion  #doneList=\"cdkDropList\" cdkDropList [cdkDropListConnectedTo]=\"[todoList]\" [hideToggle]=\"test\" [multi]=\"true\" class=\"df-list-view-accordion\" *ngIf=\"isListView\">\r\n      <mat-expansion-panel *ngFor=\"let panel of panels; index as i\" \r\n        [expanded]=\"panel.isOpen\"\r\n        [disabled]=\"1\" \r\n        [class]=\"panel.highlighted ? 'dm_panel_highlighted' : '0'\"\r\n      >\r\n        <mat-expansion-panel-header \r\n        (click)=\"togglePanel(panel, panel.record)\">\r\n          <mat-panel-title *ngIf=\"configurations.isDraggableListView\">\r\n            <!-- <mat-icon (click)=\"onClickDragIndicator([panel.record,form])\" class=\"click-icon\" *ngIf=\"configurations.isDraggableListView\">drag_indicator</mat-icon> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }} -->\r\n            <i class=\"drag-icon fa-solid fa-file-export\" (click)=\"onClickDragIndicator([panel.record,form])\" *ngIf=\"configurations.isDraggableListView\"></i> {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n          </mat-panel-title>\r\n          <mat-panel-title *ngIf=\"!configurations.isDraggableListView\">\r\n            {{ !this.configurations.showTitle ? form.Name : \"\" }} v.{{ panel.record.Version }} - {{ printAdditionalInfo(panel.record) }}\r\n          </mat-panel-title>          \r\n          <!--#region BOTTONI PER LE AZIONI -->\r\n          <mat-panel-description>\r\n            <button *ngFor=\"let button of buttons\" \r\n              mat-icon-button \r\n              id=\"p-{{panel.record.ID}}-{{button.icon}}\"\r\n              class=\"record-icon {{button.extraClass}}\" \r\n              [matTooltip]=\"button.text\"\r\n              [hidden]=\"button.icon == 'copy' && (panels.length == 0 || panel.record.Version != panels[0].record.Version)\"\r\n              (click)=\"button.fn(panel,i,$event)\">\r\n              <tmw-icon class=\"mat-icon\" [name]=\"button.icon\"></tmw-icon>\r\n            </button>\r\n            <button *ngFor=\"let button of externalButtons\"\r\n              mat-icon-button\r\n              class=\"record-icon {{button.extraClass}}\"\r\n              [matTooltip]=\"button.text\"\r\n              (click)=\"externalCallback($event,button.fn,panel.record)\">\r\n              <tmw-icon class=\"mat-icon\" [name]=\"button.icon\"></tmw-icon>\r\n            </button>\r\n            <span class=\"example-spacer\"></span>\r\n            \r\n          </mat-panel-description>\r\n          <!--#endregion BOTTONI PER LE AZIONI -->\r\n        </mat-expansion-panel-header>\r\n\r\n        <!-- #region CONTENUTO -->\r\n        <ng-container *ngIf=\"panel.pageState != null\">\r\n\r\n          <lib-single-record\r\n            *ngIf=\"libSingleLoaded\"\r\n            [onlyView]=\"onlyView\"\r\n            [record] = \"panel.record\" \r\n            [formulaObject]=\"formulaObject\"\r\n            [endPointConfiguration] = \"endPointConfiguration\"\r\n            [form]=\"form\"\r\n            [userID]=\"userID\"\r\n            [QueryEditorComponent]=\"QueryEditorComponent\"\r\n            [outCompileConfigurations]=\"outCompileConfigurations\"\r\n            [pageState]=\"panel.pageState\"\r\n            [actionButtons]=\"actionButtons\"\r\n            (out)=\"onExternalComponentOut($event)\"\r\n            (saveRecordEvent)=\"saveOrExitForm($event)\"\r\n            (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n            (fireTrigger)=\"onFireTrigger($event)\"\r\n          >\r\n\r\n          </lib-single-record>\r\n        </ng-container>\r\n        <!--#endregion CONTENUTO -->\r\n      </mat-expansion-panel>\r\n    </mat-accordion>\r\n\r\n\r\n  </mat-card-content>\r\n  <mat-card-footer>\r\n  </mat-card-footer>\r\n</mat-card>\r\n\r\n<!--#region DIALOG AGGIUNTA RISPOSTA -->\r\n<ng-template #openAddDialog>\r\n  <mat-card class=\"card-default overlay-card card-inmodal-true\">\r\n    <mat-card-content>\r\n\r\n      <add-form-record\r\n        class=\"dynamic-module-compile\"\r\n        [formID]=\"formID\"\r\n        [orgaID]=\"orgaID\"\r\n        [onlyView]=\"false\"\r\n        [record]=\"selectedRecord\"\r\n        [formulaObject]=\"formulaObject\"\r\n        [isDuplicate]=\"isDuplicating\"\r\n        [showTitle]=\"this.configurations.showTitle\"\r\n        \r\n        [QueryEditorComponent]=\"QueryEditorComponent\"\r\n        [endPointConfiguration]=\"endPointConfiguration\"\r\n        [userID]=\"userID\"\r\n\r\n        [configurations]=\"compileConfigurations\"\r\n        [actionButtons]=\"actionButtons\"\r\n\r\n        (out)=\"onExternalComponentOut($event)\"\r\n        (saveRecordEvent)=\"onAddSaveRecord($event)\"\r\n        (afterSaveRecordEvent)=\"onAddAfterSaveRecord($event)\"\r\n        (fireTrigger)=\"onFireTrigger($event)\"\r\n      >\r\n      </add-form-record>\r\n\r\n    </mat-card-content>\r\n  </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG AGGIUNTA RISPOSTA -->\r\n\r\n<!--#region DIALOG VISUALIZZAZIONE GRAFICI -->\r\n<ng-template #openGraphDialog>\r\n  <mat-card class=\"card-default overlay-card card-inmodal-true graphCard\">\r\n    \r\n  <mat-card-header class=\"align-items-center justify-content-between\">\r\n    <mat-card-title>\r\n      <div class=\"row eqp-dynamic-module-title graph-header\">\r\n        <div class=\"col-md-12\">\r\n            <span>Grafico {{ form.Name }} </span>\r\n        </div>\r\n      </div>\r\n    </mat-card-title>\r\n    <mat-card-actions>\r\n      <button \r\n        class=\"btn btn-primary mr-2\" \r\n        mat-raised-button \r\n        color=\"primary\" \r\n        type=\"button\"\r\n        (click)=\"closeGraphs()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"arrow-left\"></tmw-icon>\r\n        <span style=\"margin-left: 10px\">Indietro</span>\r\n      </button>\r\n    </mat-card-actions>\r\n  </mat-card-header>\r\n    <mat-card-content>\r\n\r\n      <graphs\r\n        [formID]=\"formID\"\r\n        [userID]=\"userID\"\r\n        [actionButtons]=\"actionButtons\"\r\n        [configurations] = \"outCompileConfigurations\"\r\n        [endPointConfiguration] = \"endPointConfiguration\"\r\n      >\r\n      </graphs>\r\n\r\n    </mat-card-content>\r\n  </mat-card>\r\n</ng-template>\r\n<!--#endregion DIALOG VISUALIZZAZIONE GRAFICI -->\r\n","import { Component, OnInit } from '@angular/core';\r\nimport { Subject } from 'rxjs';\r\nimport { SpinnerService } from '../../../services/spinner.service';\r\n\r\n@Component({\r\n  selector: 'eqp-dynamic-module-spinner',\r\n  templateUrl: './spinner.component.html',\r\n  styleUrls: ['./spinner.component.scss']\r\n})\r\nexport class SpinnerComponent implements OnInit {\r\n\r\n  isLoading: Subject<boolean>;\r\n\r\n  constructor(public spinnerService: SpinnerService) {  // <-- Make it public\r\n    this.isLoading = this.spinnerService.isLoading;\r\n  }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n}\r\n","<!-- <div class=\"eqp-splash-screen\" *ngIf=\"isLoading | async\">\r\n  <div id=\"loader\"></div>\r\n</div> -->\r\n<div class=\"eqp-splash-screen\" *ngIf=\"spinnerService.isLoading | async\">\r\n  <div id=\"loader\"></div>\r\n</div>\r\n","import { Component, OnInit, Input, Output, EventEmitter, ViewChild, ElementRef } from '@angular/core';\r\nimport { DynamicModuleRepairConfig } from '../../../../models/dynamicModuleRepairConfig.model';\r\nimport { Form } from \"../../../../models/form.model\";\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../../models/endPointConfiguration.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\n\r\n@Component({\r\n  selector: 'repair-form-fields',\r\n  templateUrl: 'repair-form-fields.component.html',\r\n  styleUrls: ['./repair-form-fields.component.scss']\r\n})\r\nexport class RepairFormFieldsComponent implements OnInit {\r\n\r\n  @Input() configurations: DynamicModuleRepairConfig\r\n  @Input(\"formID\") formID: string;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n  // @Input() FormJSON: string;\r\n  @Output() onSaveJson: EventEmitter<string> = new EventEmitter<string>();\r\n  @ViewChild('formJson', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n  constructor(private utilityHelperService: UtilityHelperService) { }\r\n\r\n  ngOnInit(): void {\r\n    this.getFormByID();\r\n  }\r\n  printTheJSONInPrettyFormat() {\r\n    var badJSON = this.configurations.FormJSON;\r\n    var parseJSON = JSON.parse(badJSON);\r\n    this.configurations.FormJSON = JSON.stringify(parseJSON, undefined, 4);\r\n }\r\n\r\n getFormByID(id: string = this.formID) {\r\n\r\n    const dynamicModuleParams: Array<EndPointDataParams> =\r\n      new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"id\",\r\n      ParamValue: id,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Form) => {\r\n        this.configurations.FormJSON = JSON.stringify(res.Fields);\r\n      },\r\n      (err) => {}\r\n    );\r\n}\r\n\r\n saveJson(){\r\n  this.onSaveJson.emit(this.configurations.FormJSON);\r\n }\r\n}\r\n","<div class=\"container\">\r\n    <div class=\"row\">\r\n        <div class=\"col-12 pt-2\">\r\n            <div class=\"p-1\">\r\n                <textarea name=\"formJson\" #formJson type=\"textarea\" id=\"formJson\" rows=\"50\" style=\"width: 100%\"\r\n                [(ngModel)]=\"configurations.FormJSON\"></textarea>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <button (click)=\"printTheJSONInPrettyFormat()\">Formatta Json</button>\r\n    <button class=\"mr-2 save \" mat-raised-button color=\"primary\" (click)=\"saveJson()\" type=\"button\">\r\n    Salva\r\n</button>\r\n</div>\r\n\r\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { Capacitor } from '@capacitor/core';\r\n\r\n@Component({\r\n  selector: 'text-filter-template',\r\n  templateUrl: './text-filter-template.component.html',\r\n  styleUrls: ['./text-filter-template.component.scss']\r\n})\r\nexport class TextFilterTemplateComponent {\r\n\r\n  //Variabili per l'input vocale\r\n  isStillRecoginze = false;\r\n  source = interval(200);\r\n  newtext: string;\r\n  subscription: Subscription;\r\n  //variabili esterne per l'input dei campi\r\n  @Input() field: TextField;\r\n  @Input() record: Record;\r\n  @Input() Statistic: Statistic = null;\r\n  STT:boolean =true;\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n  visible: boolean = false;\r\n  currentStatistic: Statistic = null;\r\n\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  InputMaskEnum = TextMaskEnum;\r\n\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText = LogicOperatorText[''];\r\n  activeCondition: boolean = false;\r\n\r\n  platform: string = Capacitor.getPlatform();\r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;\r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n  operatorsGroupByEnum = NumberAggregationFunctionEnum;\r\n\r\n  constructor() {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    if (this.Statistic != null){\r\n      this.selectedLogicOperator = (this.Statistic.logicoperator as LogicOperatorText);\r\n      this.record[this.field.Name] = this.Statistic.value;\r\n      this.visible = this.Statistic.visible;\r\n      this.aggregations = this.Statistic.aggregations;\r\n      this.operatorsGroupBy = this.Statistic.operatorsGroupBy;\r\n    }\r\n\r\n    this.initStyles();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n      if (changes.hasOwnProperty('Statistic') && !changes['Statistic'].firstChange){\r\n        this.aggregations = changes['Statistic'].currentValue.hasOwnProperty('aggregations') ? changes['Statistic'].currentValue.aggregations : null;\r\n        this.operatorsGroupBy = changes['Statistic'].currentValue.hasOwnProperty('operatorsGroupBy') ? changes['Statistic'].currentValue.operatorsGroupBy : null;\r\n      }\r\n  }   \r\n\r\n  initStyles() {\r\n      //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n      this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)   \r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n  getInputType() {\r\n    switch (Number(this.field.TextMask)) {\r\n      case TextMaskEnum.Email:\r\n        return 'email';\r\n      case TextMaskEnum.Password:\r\n        return 'password';\r\n      case TextMaskEnum.Telefono:\r\n        return 'tel';\r\n      case TextMaskEnum.Url:\r\n        return 'url';\r\n      default:\r\n        return 'text';\r\n    }\r\n  }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n    if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n\r\n    var statistic: Statistic = {\r\n      key: this.field.Name,\r\n      value: this.record[this.field.Name],\r\n      logicoperator: this.selectedLogicOperator,\r\n      fieldtype: this.field.FieldType,\r\n      visible: this.visible,\r\n      aggregations: this.aggregations,\r\n      operatorsGroupBy: this.operatorsGroupBy\r\n    }    \r\n\r\n    this.filterChange.emit(statistic);\r\n}\r\n\r\n/**\r\n * Gestione visibilità\r\n */\r\n\r\n  public changeVisibility(){\r\n    this.visible = !this.visible;\r\n    if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n    this.onFilterChange();\r\n  }\r\n\r\n\r\n}\r\n","<div class=\"row\">\r\n  <div class=\"col-12 rowCol\">\r\n    <div class=\"visibleCol\">\r\n        <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n            <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n            <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n        </button>\r\n    </div>     \r\n    <div class=\"groupByCol\">\r\n        <tmw-select\r\n            [placeholder]=\"'Operatori di confronto'\"\r\n            [isMultiSelect]=\"true\"\r\n            [enumData]=\"operatorsGroupByEnum\"\r\n            [(ngModelInput)]=\"operatorsGroupBy\"\r\n            (ngModelInputChange)=\"onFilterChange()\"\r\n        ></tmw-select>\r\n    </div>          \r\n    <div class=\"valueCol\">\r\n      <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n        <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n          {{ field.Description }}\r\n        </mat-label>\r\n        <input\r\n          [ngStyle]=\"FieldstyleObj\"\r\n          matInput\r\n          [type]=\"getInputType()\"\r\n          [formControlName]=\"field.Name\"\r\n          [readonly]=\"false\"\r\n          [required]=\"false\"\r\n          [(ngModel)]=\"record[field.Name]\"\r\n          (ngModelChange)=\"onFilterChange()\"\r\n        />\r\n        <mat-error\r\n          *ngIf=\"\r\n            !field.FormFormGroup.valid &&\r\n            field.FormFormGroup.controls[field.Name].touched\r\n          \"\r\n        >\r\n          Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n          {{ field.MaxLenght }}\r\n        </mat-error>\r\n        <tmw-icon class=\"mat-icon\"\r\n          [hidden]=\"!field.Microphone || platform != 'web'\"\r\n          matSuffix\r\n          SpeechToText\r\n          [(bindedText)]=\"record[field.Name]\"\r\n          style=\"cursor: pointer\"\r\n          name=\"microphone\"></tmw-icon>\r\n\r\n      </mat-form-field>\r\n    </div>\r\n    <div class=\"operatorCol\">\r\n      <tmw-select\r\n        [enumData]=\"logicOperatorText\"\r\n        [(ngModelInput)]=\"selectedLogicOperator\"\r\n        [showCancelButton]=\"false\"\r\n        (ngModelInputChange)=\"onFilterChange()\"\r\n      ></tmw-select>\r\n    </div>       \r\n    <div class=\"aggregatorCol\">\r\n      <tmw-select\r\n        [placeholder]=\"'Aggregazioni'\"\r\n        [isMultiSelect]=\"true\"\r\n        [enumData]=\"aggregationFunctionEnum\"\r\n        [(ngModelInput)]=\"aggregations\"\r\n        (ngModelInputChange)=\"onFilterChange()\"\r\n      ></tmw-select>\r\n    </div>  \r\n     \r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { TmwNumericInputMode, TmwNumericOptions } from 'tmw-numeric';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NumericField } from '../../../../../models/fields/numericField.model';\r\nimport { LogicOperatorNumeric } from '../../../../../models/logicOperator.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { DynamicModuleFilterResultViewModeEnum } from '../../../../../models/dynamicModuleFilterResultViewModeEnum.model';\r\n\r\n@Component({\r\n  selector: 'numeric-filter-template',\r\n  templateUrl: './numeric-filter-template.component.html',\r\n  styleUrls: ['./numeric-filter-template.component.scss']\r\n})\r\nexport class NumericFilterTemplateComponent implements OnInit {\r\n\r\n  @Input() field: NumericField;\r\n  @Input() record: Record;\r\n  @Input() Statistic: Statistic = null;\r\n  @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum;\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  validatorsArray: any[] = [];\r\n  eqpNumericOptions: Partial<TmwNumericOptions> = {};\r\n  logicOperatorNumeric = LogicOperatorNumeric;\r\n  selectedLogicOperator: LogicOperatorNumeric = LogicOperatorNumeric[''];\r\n  activeCondition: boolean = false;\r\n  visible: boolean = false;\r\n  currentStatistic: Statistic = null;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\naggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\naggregationFunctionEnum = NumberAggregationFunctionEnum;\r\n\r\noperatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\noperatorsGroupByEnum = NumberAggregationFunctionEnum;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n\r\n  if (this.Statistic != null){\r\n    this.selectedLogicOperator = (this.Statistic.logicoperator as LogicOperatorNumeric);\r\n    this.record[this.field.Name] = this.Statistic.value;\r\n    this.visible = this.Statistic.visible;\r\n    this.aggregations = this.Statistic.aggregations;\r\n    this.operatorsGroupBy = this.Statistic.operatorsGroupBy; \r\n  }  \r\n  \r\n  this.configureEqpNumericOptions();\r\n  this.configureControllers();\r\n  this.initStyles();\r\n\r\n}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n      if (changes.hasOwnProperty('Statistic') && !changes['Statistic'].firstChange){\r\n        this.aggregations = changes['Statistic'].currentValue.hasOwnProperty('aggregations') ? changes['Statistic'].currentValue.aggregations : null;\r\n        this.operatorsGroupBy = changes['Statistic'].currentValue.hasOwnProperty('operatorsGroupBy') ? changes['Statistic'].currentValue.operatorsGroupBy : null;\r\n      }   \r\n  }  \r\n\r\n  //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n  initStyles() {\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n    this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)   \r\n    this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {   \r\n    var statistic = this.createStatistic();\r\n    this.filterChange.emit(statistic);\r\n}\r\n\r\ncreateStatistic(){\r\n  if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n\r\n  var statistic: Statistic = {\r\n    key: this.field.Name,\r\n    value: this.record[this.field.Name],\r\n    logicoperator: this.selectedLogicOperator,\r\n    fieldtype: this.field.FieldType,\r\n    visible: this.visible,\r\n    aggregations: this.aggregations,\r\n    operatorsGroupBy: this.operatorsGroupBy\r\n  }\r\n\r\n  return statistic;\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\nprivate configureEqpNumericOptions() {\r\n\r\n  // align/nullable/min/max: replicano i default globali del vecchio EqpNumericModule.forRoot(),\r\n  // che tmw-numeric non ha (nessun forRoot) — vanno impostati esplicitamente per non cambiare\r\n  // comportamento silenziosamente.\r\n  this.eqpNumericOptions.align = \"left\";\r\n  this.eqpNumericOptions.nullable = true;\r\n  this.eqpNumericOptions.min = null;\r\n  this.eqpNumericOptions.max = null;\r\n  this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \"  \"+this.field.MeasureUnit+\"  \" : \"\";\r\n  this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n  this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? TmwNumericInputMode.FINANCIAL : TmwNumericInputMode.NATURAL;\r\n  this.eqpNumericOptions.allowNegative=true;\r\n  if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n  this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n  else\r\n  this.eqpNumericOptions.decimal=\".\";\r\n  if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n  this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n  if(this.field.IsInteger== false){\r\n    if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n    else { this.eqpNumericOptions.precision = 2; }\r\n  }else{\r\n    this.eqpNumericOptions.precision = 0;\r\n  }\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n  this.validatorsArray = [];\r\n  if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n  this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n  if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n  this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n}\r\n\r\n/**\r\n * Gestione visibilità\r\n */\r\n\r\n  public changeVisibility(){\r\n    this.visible = !this.visible;\r\n    if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n    this.onFilterChange();\r\n  }\r\n  \r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-12 rowCol\">\r\n        <div class=\"visibleCol\">\r\n            <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n            </button>\r\n        </div>                   \r\n        <div class=\"groupByCol\">\r\n            <tmw-select\r\n                [placeholder]=\"'Operatori di confronto'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"operatorsGroupByEnum\"\r\n                [(ngModelInput)]=\"operatorsGroupBy\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>        \r\n        <div class=\"valueCol\">\r\n            <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n                <mat-label  class=\"pt-1\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n                        <input [ngStyle]=\"FieldstyleObj\" matInput tmwNumericMask [formControlName]=\"field.Name\" [readonly]=\"false\"\r\n                        [required]=\"false\" [(ngModel)]=\"record[field.Name]\" [options]=\"eqpNumericOptions\"\r\n                        [step]=\"field.IsInteger ? 1 : null\" (ngModelChange)=\"onFilterChange()\" />\r\n                        <mat-error *ngIf=\"!field.FormFormGroup.valid && field.FormFormGroup.controls[field.Name].touched\">\r\n                            Min: {{field.MinValue}} - Max: {{field.MaxValue}}\r\n                        </mat-error>\r\n            </mat-form-field>\r\n        </div>\r\n        <div class=\"operatorCol\">\r\n            <tmw-select [enumData]=\"logicOperatorNumeric\" [(ngModelInput)]=\"selectedLogicOperator\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onFilterChange()\"></tmw-select>\r\n        </div>      \r\n        <div class=\"aggregatorCol\">\r\n            <tmw-select\r\n                [placeholder]=\"'Aggregazioni'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"aggregationFunctionEnum\"\r\n                [(ngModelInput)]=\"aggregations\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>                            \r\n    </div>\r\n</div>","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorBoolean } from '../../../../../models/logicOperator.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { BooleanField } from '../../../../../models/fields/booleanField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\n@Component({\r\n  selector: 'boolean-filter-template',\r\n  templateUrl: './boolean-filter-template.component.html',\r\n  styleUrls: ['./boolean-filter-template.component.scss']\r\n})\r\nexport class BooleanFilterTemplateComponent {\r\n  @Input() field: BooleanField;\r\n  @Input() record: Record;\r\n  @Input() Statistic: Statistic = null;\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  validatorsArray: any[] = [];\r\n  logicOperatorBoolean = LogicOperatorBoolean;\r\n  selectedLogicOperator: LogicOperatorBoolean = LogicOperatorBoolean[''];\r\n  activeCondition: boolean = false;\r\n\r\n  visible: boolean = false;\r\n  currentStatistic: Statistic = null;  \r\n\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;\r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n  operatorsGroupByEnum = NumberAggregationFunctionEnum;\r\n\r\n  constructor() {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n\r\n    if (this.Statistic != null){\r\n      this.selectedLogicOperator = (this.Statistic.logicoperator as LogicOperatorBoolean);\r\n      this.record[this.field.Name] = this.Statistic.value;\r\n      this.visible = this.Statistic.visible;\r\n      this.aggregations = this.Statistic.aggregations;\r\n      this.operatorsGroupBy = this.Statistic.operatorsGroupBy;\r\n    } \r\n\r\n    this.configureControllers();\r\n    this.initStyles();\r\n  }\r\n\r\n    //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n    initStyles() {\r\n      if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n      this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n      if (changes.hasOwnProperty('Statistic') && !changes['Statistic'].firstChange){\r\n        this.aggregations = changes['Statistic'].currentValue.hasOwnProperty('aggregations') ? changes['Statistic'].currentValue.aggregations : null;\r\n        this.operatorsGroupBy = changes['Statistic'].currentValue.hasOwnProperty('operatorsGroupBy') ? changes['Statistic'].currentValue.operatorsGroupBy : null;\r\n      }\r\n  }   \r\n\r\n  /**\r\n  * Metodo per emettere l'evento che il valore del record è cambiato.\r\n  */\r\n  onFilterChange() {\r\n  if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n\r\n      var statistic: Statistic = {\r\n        key: this.field.Name,\r\n        value: this.record[this.field.Name],\r\n        logicoperator: this.selectedLogicOperator,\r\n        fieldtype: this.field.FieldType,\r\n        visible: this.visible,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      }    \r\n\r\n      this.filterChange.emit(statistic);\r\n  }\r\n\r\n  /**\r\n   * Gestione visibilità\r\n   */\r\n\r\n    public changeVisibility(){\r\n      this.visible = !this.visible;\r\n      if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n      this.onFilterChange();\r\n    }\r\n\r\n  /**\r\n  * Metodo di aggiunta dei validator dell'input\r\n  */\r\n  private configureControllers() {\r\n    this.validatorsArray = [];\r\n    this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n  }\r\n  \r\n\r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-12 rowCol\">\r\n        <div class=\"visibleCol\">\r\n            <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n            </button>\r\n        </div>                \r\n        <div class=\"groupByCol\">\r\n            <tmw-select\r\n                [placeholder]=\"'Operatori di confronto'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"operatorsGroupByEnum\"\r\n                [(ngModelInput)]=\"operatorsGroupBy\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>        \r\n        <div class=\"valueCol\">\r\n            <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n                <mat-label  class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n                        <input [ngStyle]=\"FieldstyleObj\" matInput [formControlName]=\"field.Name\" [disabled] [readonly]=\"true\"\r\n                                [required]=\"false\" [(ngModel)]=\"record[field.Name]\"  \r\n                        />\r\n            </mat-form-field>\r\n        </div>\r\n        <div class=\"operatorCol\">\r\n            <tmw-select [enumData]=\"logicOperatorBoolean\" [(ngModelInput)]=\"selectedLogicOperator\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onFilterChange()\"></tmw-select>\r\n        </div>      \r\n        <div class=\"aggregatorCol\">\r\n            <tmw-select\r\n                [placeholder]=\"'Aggregazioni'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"aggregationFunctionEnum\"\r\n                [(ngModelInput)]=\"aggregations\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>                   \r\n    </div>    \r\n</div>\r\n","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../../models/fields/dateField.model';\r\nimport { LogicOperatorDate } from '../../../../../models/logicOperator.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { ModeEnum, TimeTypeEnum } from 'tmw-picker';\r\nimport { DynamicModuleFilterResultViewModeEnum } from '../../../../../models/dynamicModuleFilterResultViewModeEnum.model';\r\n\r\n@Component({\r\n  selector: 'date-filter-template',\r\n  templateUrl: './date-filter-template.component.html',\r\n  styleUrls: ['./date-filter-template.component.scss']\r\n})\r\nexport class DateFilterTemplateComponent {\r\n\r\n  @Input() field: DateField;\r\n  @Input() record: Record;\r\n  @Input() Statistic: Statistic = null;\r\n  @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum;\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  logicOperatorNumeric = LogicOperatorDate;\r\n  selectedLogicOperator: LogicOperatorDate = LogicOperatorDate[''];\r\n  activeCondition: boolean = false;  \r\n\r\n  modes = ModeEnum;\r\n  timeType = TimeTypeEnum;\r\n  mode: ModeEnum;\r\n\r\n  outputFormat: string = null;\r\n\r\n  visible: boolean = false;\r\n  currentStatistic: Statistic = null;  \r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;\r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n  operatorsGroupByEnum = NumberAggregationFunctionEnum;\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    if (this.Statistic != null){\r\n      this.selectedLogicOperator = (this.Statistic.logicoperator as LogicOperatorDate);\r\n      this.record[this.field.Name] = this.Statistic.value;\r\n      this.visible = this.Statistic.visible;\r\n      this.aggregations = this.Statistic.aggregations;\r\n      this.operatorsGroupBy = this.Statistic.operatorsGroupBy;    \r\n    } \r\n\r\n    this.setTimeType();\r\n    this.setOutputFormat();\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n      if (changes.hasOwnProperty('Statistic') && !changes['Statistic'].firstChange){\r\n        this.aggregations = changes['Statistic'].currentValue.hasOwnProperty('aggregations') ? changes['Statistic'].currentValue.aggregations : null;\r\n        this.operatorsGroupBy = changes['Statistic'].currentValue.hasOwnProperty('operatorsGroupBy') ? changes['Statistic'].currentValue.operatorsGroupBy : null;\r\n      }\r\n  }   \r\n\r\n  /**\r\n   * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n   * imposta la visualizzazione corretta del componente tmw-datetimepicker.\r\n   */\r\n  private setTimeType() {\r\n    switch (this.field.IsOnlyDate) {\r\n      case DateTimeTypeEnum[\"Solo data\"]:\r\n        this.mode = ModeEnum.DATEPICKER;\r\n        break;\r\n      case DateTimeTypeEnum[\"Solo orario\"]:\r\n        this.mode = ModeEnum.TIMEPICKER;\r\n        break;\r\n      case DateTimeTypeEnum[\"Data e ora\"]:\r\n        this.mode = ModeEnum.DATETIMEPICKER;\r\n        break;\r\n    }\r\n  }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {   \r\n    var statistic = this.createStatistic();\r\n    this.filterChange.emit(statistic);\r\n}\r\n\r\ncreateStatistic(){\r\n  if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n\r\n  var statistic: Statistic = {\r\n    key: this.field.Name,\r\n    value: this.record[this.field.Name],\r\n    logicoperator: this.selectedLogicOperator,\r\n    fieldtype: this.field.FieldType,\r\n    visible: this.visible,\r\n    aggregations: this.aggregations,\r\n    operatorsGroupBy: this.operatorsGroupBy\r\n  }\r\n\r\n  return statistic;\r\n}\r\n\r\nsetOutputFormat(){\r\n  if (this.outputFormat != null){\r\n    this.outputFormat = this.field.DateFormat;  \r\n  } else {\r\n    if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo data']){\r\n      this.outputFormat = 'dd/MM/yyyy';\r\n    }\r\n    if (this.field.IsOnlyDate == DateTimeTypeEnum['Data e ora']){\r\n      this.outputFormat = 'dd/MM/yyyy HH:mm';\r\n    }      \r\n    if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo orario']){\r\n      this.outputFormat = 'HH:mm';\r\n    }          \r\n  }\r\n  \r\n}\r\n\r\n/**\r\n * Gestione visibilità\r\n */\r\n\r\n  public changeVisibility(){\r\n    this.visible = !this.visible;\r\n    if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n    this.onFilterChange();\r\n  }\r\n\r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-12 rowCol\">\r\n        <div class=\"visibleCol\">\r\n            <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n            </button>\r\n        </div>               \r\n        <div class=\"groupByCol\">\r\n            <tmw-select\r\n                [placeholder]=\"'Operatori di confronto'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"operatorsGroupByEnum\"\r\n                [(ngModelInput)]=\"operatorsGroupBy\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>                    \r\n        <div class=\"valueCol\">\r\n            <tmw-datetimepicker  [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n            [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n            [disabled]=\"field.FormFormGroup.disabled\" [(ngModel)]=\"record[field.Name]\"\r\n            (dateChange)=\"onFilterChange()\" [outputFormat]=\"outputFormat\" >\r\n            </tmw-datetimepicker>\r\n        </div>\r\n        <div class=\"operatorCol\">\r\n            <tmw-select [enumData]=\"logicOperatorNumeric\" [(ngModelInput)]=\"selectedLogicOperator\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onFilterChange()\"></tmw-select>\r\n        </div>        \r\n        <div class=\"aggregatorCol\">\r\n            <tmw-select\r\n                [placeholder]=\"'Aggregazioni'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"aggregationFunctionEnum\"\r\n                [(ngModelInput)]=\"aggregations\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>                              \r\n    </div>\r\n</div>","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { LogicOperatorListValue } from '../../../../../models/logicOperator.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { ListValueField } from '../../../../../models/fields/listValueField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n@Component({\r\n  selector: 'list-value-filter-template',\r\n  templateUrl: './list-value-filter-template.component.html',\r\n  styleUrls: ['./list-value-filter-template.component.scss']\r\n})\r\nexport class ListValueFilterTemplateComponent {\r\n\r\n  @Input() field: ListValueField;\r\n  @Input() record: Record;\r\n  @Input() Statistic: Statistic = null;\r\n  @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n  validatorsArray: any[] = [];\r\n  logicOperatorListValue = LogicOperatorListValue;\r\n  selectedLogicOperator: LogicOperatorListValue = LogicOperatorListValue[''];\r\n  activeCondition: boolean = false;\r\n\r\n  visible: boolean = false;\r\n  currentStatistic: Statistic = null;\r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;\r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n  operatorsGroupByEnum = NumberAggregationFunctionEnum;\r\n\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n\r\n  if (this.Statistic != null){\r\n    this.selectedLogicOperator = (this.Statistic.logicoperator as LogicOperatorListValue);\r\n    this.record[this.field.Name] = this.Statistic.value;\r\n    this.visible = this.Statistic.visible;\r\n    this.aggregations = this.Statistic.aggregations;\r\n    this.operatorsGroupBy = this.Statistic.operatorsGroupBy;\r\n  } \r\n\r\n  this.configureControllers();\r\n  this.initStyles();\r\n  this.setArrayData();\r\n}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n      if (changes.hasOwnProperty('Statistic') && !changes['Statistic'].firstChange){\r\n        this.aggregations = changes['Statistic'].currentValue.hasOwnProperty('aggregations') ? changes['Statistic'].currentValue.aggregations : null;\r\n        this.operatorsGroupBy = changes['Statistic'].currentValue.hasOwnProperty('operatorsGroupBy') ? changes['Statistic'].currentValue.operatorsGroupBy : null;\r\n      }\r\n  } \r\n\r\n  //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n  initStyles() {\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n    this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n    if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n\r\n    var statistic: Statistic = {\r\n      key: this.field.Name,\r\n      value: this.record[this.field.Name],\r\n      logicoperator: this.selectedLogicOperator,\r\n      fieldtype: this.field.FieldType,\r\n      visible: this.visible,\r\n      aggregations: this.aggregations,\r\n      operatorsGroupBy: this.operatorsGroupBy\r\n    }    \r\n\r\n    this.filterChange.emit(statistic);\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\n  private configureControllers() {\r\n    this.validatorsArray = [];\r\n    this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n  }\r\n\r\n   /**\r\n   * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n   */\r\n   private setArrayData() {\r\n    this.prepareValuePairs();\r\n    if (this.field.ValuePairs != null){\r\n      if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n        Object.keys(this.field.ValuePairs).forEach\r\n          (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n      } else {\r\n        Object.keys(this.field.ValuePairs).forEach\r\n          (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n      }\r\n    }\r\n  }\r\n\r\n  prepareValuePairs() {\r\n    if (this.field.Formula) {\r\n      this.field.ValuePairs = {};\r\n      const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n      // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n      // dobbiamo ottenere un dizionario di quei valori\r\n      this.field.ValuePairs = GlobalService.stringToValuePairs(temp);\r\n\r\n      //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n    } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n      // va bene così\r\n\r\n    } else if (this.field.ValueString != null && this.field.ValueString != \"\") {\r\n      // va presa la strigna e rimappata nel diario\r\n      this.field.ValuePairs = GlobalService.stringToValuePairs(this.field.ValueString);\r\n\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Gestione visibilità\r\n   */\r\n\r\n    public changeVisibility(){\r\n      this.visible = !this.visible;\r\n      if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n      this.onFilterChange();\r\n    }\r\n\r\n  \r\n  private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n    let isOptionSelected: boolean;\r\n    if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n      isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n    } else {\r\n      isOptionSelected = this.record[this.field.Name] === value;\r\n    }\r\n    this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n  }\r\n\r\n  private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n    let isOptionSelected: boolean;\r\n    if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n      isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n    } else {\r\n      isOptionSelected = this.record[this.field.Name] === value;\r\n    }\r\n    this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n  }\r\n\r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-12 rowCol\">\r\n        <div class=\"visibleCol\">\r\n            <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n                <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n            </button>\r\n        </div>          \r\n        <div class=\"groupByCol\">\r\n            <!-- Come faccio a fare il groupBy di una lista? -->\r\n            <tmw-select\r\n                [isDisabled]=\"true\"\r\n                [placeholder]=\"'Operatori di confronto'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"operatorsGroupByEnum\"\r\n                [(ngModelInput)]=\"operatorsGroupBy\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>                   \r\n        <div class=\"valueCol\">\r\n            <tmw-select [ngStyle]=\"FieldstyleObj\" [arrayData]=\"arrayData\"\r\n                [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"true\" [arrayValueProperty]=\"'Key'\"\r\n                [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n                [includeFullObject]=\"false\" [isRequired]=\"false\" [isDisabled]=\"false\"\r\n                [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"true\"\r\n                (ngModelInputChange)=\"onFilterChange()\">\r\n            </tmw-select>\r\n        </div>\r\n        <div class=\"operatorCol\">\r\n            <tmw-select [enumData]=\"logicOperatorListValue\" [(ngModelInput)]=\"selectedLogicOperator\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onFilterChange()\"></tmw-select>\r\n        </div>      \r\n        <div class=\"aggregatorCol\">\r\n            <tmw-select\r\n                [placeholder]=\"'Aggregazioni'\"\r\n                [isMultiSelect]=\"true\"\r\n                [enumData]=\"aggregationFunctionEnum\"\r\n                [(ngModelInput)]=\"aggregations\"\r\n                (ngModelInputChange)=\"onFilterChange()\"\r\n            ></tmw-select>\r\n        </div>                           \r\n    </div>\r\n</div>","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { Capacitor } from '@capacitor/core';\r\n\r\n@Component({\r\n  selector: 'textarea-filter-template',\r\n  templateUrl: './textarea-filter-template.component.html',\r\n  styleUrls: ['./textarea-filter-template.component.scss']\r\n})\r\nexport class TextareaFilterTemplateComponent {\r\n\r\n  //Variabili per l'input vocale\r\n  isStillRecoginze = false;\r\n  source = interval(200);\r\n  newtext: string;\r\n  subscription: Subscription;\r\n  //variabili esterne per l'input dei campi\r\n  @Input() field: TextField;\r\n  @Input() record: Record;\r\n  @Input() Statistic: Statistic = null;\r\n  STT:boolean =true;\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n  InputMaskEnum = TextMaskEnum;\r\n\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText = LogicOperatorText[''];\r\n  activeCondition: boolean = false;\r\n\r\n  platform: string = Capacitor.getPlatform();\r\n\r\n  visible: boolean = false;\r\n  currentStatistic: Statistic = null;\r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;\r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n  operatorsGroupByEnum = NumberAggregationFunctionEnum;\r\n\r\n  constructor() {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n\r\n    if (this.Statistic != null){\r\n      this.selectedLogicOperator = (this.Statistic.logicoperator as LogicOperatorText);\r\n      this.record[this.field.Name] = this.Statistic.value;\r\n      this.visible = this.Statistic.visible;\r\n      this.aggregations = this.Statistic.aggregations;\r\n      this.operatorsGroupBy = this.Statistic.operatorsGroupBy;\r\n    }\r\n\r\n    this.initStyles();\r\n  }\r\n  initStyles() {\r\n      //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n      this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)   \r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n  getInputType() {\r\n    switch (this.field.TextMask) {\r\n      case TextMaskEnum.Email:\r\n        return 'email';\r\n      case TextMaskEnum.Password:\r\n        return 'password';\r\n      case TextMaskEnum.Telefono:\r\n        return 'tel';\r\n      case TextMaskEnum.Url:\r\n        return 'url'\r\n      default:\r\n        return 'text';\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n      if (changes.hasOwnProperty('Statistic') && !changes['Statistic'].firstChange){\r\n        this.aggregations = changes['Statistic'].currentValue.hasOwnProperty('aggregations') ? changes['Statistic'].currentValue.aggregations : null;\r\n        this.operatorsGroupBy = changes['Statistic'].currentValue.hasOwnProperty('operatorsGroupBy') ? changes['Statistic'].currentValue.operatorsGroupBy : null;\r\n      }\r\n  }   \r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n  if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n    this.activeCondition = true;\r\n    this.filterChange.emit(this.generateCondition(\"active\"));\r\n  }\r\n  if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n    this.activeCondition = false;\r\n    this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n  }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n  if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n\r\n  let output:Statistic = new Statistic();\r\n  if (mode == \"active\"){\r\n    output = {\r\n      key: this.field.Name,\r\n      value: this.record[this.field.Name],\r\n      logicoperator: this.selectedLogicOperator,\r\n      fieldtype: this.field.FieldType,\r\n      visible: this.visible,\r\n      aggregations: this.aggregations,\r\n      operatorsGroupBy: this.operatorsGroupBy\r\n    };\r\n  } else {\r\n    output = {\r\n      key: this.field.Name,\r\n      value: null,\r\n      logicoperator: null,\r\n      fieldtype: null,\r\n      visible: this.visible,\r\n      aggregations: this.aggregations,\r\n      operatorsGroupBy: this.operatorsGroupBy\r\n    };\r\n  }\r\n\r\n  return output;\r\n}\r\n\r\n/**\r\n * Gestione visibilità\r\n */\r\n\r\n  public changeVisibility(){\r\n    this.visible = !this.visible;\r\n    if ((this.aggregations != null && this.aggregations.length > 0) || (this.operatorsGroupBy != null && this.operatorsGroupBy.length > 0)){ this.visible = true; }\r\n    this.onFilterChange();\r\n  }\r\n\r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-12 textareaFilterTemplate rowCol\">\r\n      <div class=\"visibleCol\">\r\n          <button class=\"btn\" [ngClass]=\"{'btn-success': visible , 'btn-danger': !visible }\" (click)=\"changeVisibility()\">\r\n              <tmw-icon class=\"mat-icon\" *ngIf=\"visible\" name=\"eye\"></tmw-icon>\r\n              <tmw-icon class=\"mat-icon\" *ngIf=\"!visible\" name=\"eye-off\"></tmw-icon>\r\n          </button>\r\n      </div>              \r\n      <div class=\"groupByCol\">\r\n          <tmw-select\r\n              [placeholder]=\"'Operatori di confronto'\"\r\n              [isMultiSelect]=\"true\"\r\n              [enumData]=\"operatorsGroupByEnum\"\r\n              [(ngModelInput)]=\"operatorsGroupBy\"\r\n              (ngModelInputChange)=\"onFilterChange()\"\r\n          ></tmw-select>\r\n      </div>        \r\n      <div class=\"valueCol\">\r\n        <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n          <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n            {{ field.Description }}\r\n          </mat-label>\r\n          <textarea\r\n            [ngStyle]=\"FieldstyleObj\"\r\n            matInput\r\n            [type]=\"getInputType()\"\r\n            [formControlName]=\"field.Name\"\r\n            [readonly]=\"false\"\r\n            [required]=\"false\"\r\n            [(ngModel)]=\"record[field.Name]\"\r\n            (ngModelChange)=\"onFilterChange()\"\r\n          ></textarea>\r\n          <mat-error\r\n            *ngIf=\"\r\n              !field.FormFormGroup.valid &&\r\n              field.FormFormGroup.controls[field.Name].touched\r\n            \"\r\n          >\r\n            Min. Caratteri: {{ field.MinLenght }} - Max. Caratteri:\r\n            {{ field.MaxLenght }}\r\n          </mat-error>\r\n          <tmw-icon class=\"mat-icon\"\r\n            [hidden]=\"!field.Microphone || platform != 'web'\"\r\n            matSuffix\r\n            SpeechToText\r\n            [(bindedText)]=\"record[field.Name]\"\r\n            style=\"cursor: pointer\"\r\n            name=\"microphone\"></tmw-icon>\r\n        </mat-form-field>\r\n      </div>\r\n      <div class=\"operatorCol\">\r\n        <tmw-select\r\n          [enumData]=\"logicOperatorText\"\r\n          [(ngModel)]=\"selectedLogicOperator\"\r\n          [showCancelButton]=\"false\"\r\n          (ngModelChange)=\"onFilterChange()\"\r\n        ></tmw-select>\r\n      </div>     \r\n      <div class=\"aggregatorCol\">\r\n        <tmw-select\r\n          [placeholder]=\"'Aggregazioni'\"\r\n          [isMultiSelect]=\"true\"\r\n          [enumData]=\"aggregationFunctionEnum\"\r\n          [(ngModelInput)]=\"aggregations\"\r\n          (ngModelInputChange)=\"onFilterChange()\"\r\n        ></tmw-select>\r\n      </div>                  \r\n    </div>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n  selector: 'attachment-filter-template',\r\n  templateUrl: './attachment-filter-template.component.html',\r\n  styleUrls: ['./attachment-filter-template.component.scss']\r\n})\r\nexport class AttachmentFilterTemplateComponent {\r\n\r\n  @Input() field: TextField;\r\n  @Input() record: Record;\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText;\r\n  activeCondition: boolean = false;   \r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;\r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n\r\n  onFilterChange() {\r\n    if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n      this.activeCondition = true;\r\n      this.filterChange.emit(this.generateCondition(\"active\"));\r\n    }\r\n    if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n      this.activeCondition = false;\r\n      this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n    }\r\n  }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n  generateCondition(mode){\r\n    let output:Statistic = new Statistic();\r\n    if (mode == \"active\"){\r\n      output = {\r\n        key: this.field.Name,\r\n        value: this.record[this.field.Name],\r\n        logicoperator: this.selectedLogicOperator,\r\n        fieldtype: this.field.FieldType,\r\n        visible: false,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      };\r\n    } else {\r\n      output = {\r\n        key: this.field.Name,\r\n        value: null,\r\n        logicoperator: null,\r\n        fieldtype: null,\r\n        visible: false,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      };\r\n    }\r\n\r\n    return output;\r\n  }  \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n  selector: 'image-filter-template',\r\n  templateUrl: './image-filter-template.component.html',\r\n  styleUrls: ['./image-filter-template.component.scss']\r\n})\r\nexport class ImageFilterTemplateComponent {\r\n\r\n  @Input() field: TextField;\r\n  @Input() record: Record;\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText;\r\n  activeCondition: boolean = false; \r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;  \r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n\r\n  onFilterChange() {\r\n    if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n      this.activeCondition = true;\r\n      this.filterChange.emit(this.generateCondition(\"active\"));\r\n    }\r\n    if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n      this.activeCondition = false;\r\n      this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n    }\r\n  }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n  generateCondition(mode){\r\n    let output:Statistic = new Statistic();\r\n    if (mode == \"active\"){\r\n      output = {\r\n        key: this.field.Name,\r\n        value: this.record[this.field.Name],\r\n        logicoperator: this.selectedLogicOperator,\r\n        fieldtype: this.field.FieldType,\r\n        visible: false,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      };\r\n    } else {\r\n      output = {\r\n        key: this.field.Name,\r\n        value: null,\r\n        logicoperator: null,\r\n        fieldtype: null,\r\n        visible: false,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      };\r\n    }\r\n\r\n    return output;\r\n  }  \r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output, SimpleChanges } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\n\r\n@Component({\r\n  selector: 'list-form-record-filter-template',\r\n  templateUrl: './list-form-record-filter-template.component.html',\r\n  styleUrls: ['./list-form-record-filter-template.component.scss']\r\n})\r\nexport class ListFormRecordFilterTemplateComponent {\r\n\r\n  @Input() field: TextField;\r\n  @Input() record: Record;\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText;\r\n  activeCondition: boolean = false;  \r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n      if (changes.hasOwnProperty('Statistic') && !changes['Statistic'].firstChange){\r\n        this.aggregations = changes['Statistic'].currentValue.hasOwnProperty('aggregations') ? changes['Statistic'].currentValue.aggregations : null;\r\n        this.operatorsGroupBy = changes['Statistic'].currentValue.hasOwnProperty('operatorsGroupBy') ? changes['Statistic'].currentValue.operatorsGroupBy : null;\r\n      }\r\n  }\r\n\r\n  /**\r\n  * Metodo per emettere l'evento che il valore del record è cambiato.\r\n  */\r\n  onFilterChange() {\r\n      var statistic: Statistic = {\r\n        key: this.field.Name,\r\n        value: this.record[this.field.Name],\r\n        logicoperator: this.selectedLogicOperator,\r\n        fieldtype: this.field.FieldType,\r\n        visible: false,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      }    \r\n\r\n      this.filterChange.emit(statistic);\r\n  }\r\n\r\n}\r\n","","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { ImageSelectorField } from '../../../../../models/fields/imageSelectorField.model';\r\nimport { LogicOperatorImageSelector } from '../../../../../models/logicOperator.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n\r\n@Component({\r\n  selector: 'image-selector-filter-template',\r\n  templateUrl: './image-selector-filter-template.component.html',\r\n  styleUrls: ['./image-selector-filter-template.component.scss']\r\n})\r\nexport class ImageSelectorFilterTemplateComponent {\r\n  //variabili esterne per l'input dei campi\r\n  @Input() field: ImageSelectorField;\r\n  @Input() record: Record;\r\n  @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n  validatorsArray: any[] = [];\r\n  logicOperatorImageSelectorValue = LogicOperatorImageSelector;\r\n  selectedLogicOperator: LogicOperatorImageSelector;\r\n  activeCondition: boolean = false;\r\n\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;  \r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n  this.configureControllers();\r\n  this.initStyles();\r\n  this.setArrayData();\r\n}\r\n\r\n  //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n  initStyles() {\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n    this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonFilterChange() {\r\n  if (this.selectedLogicOperator != null){\r\n    this.activeCondition = true;\r\n    this.filterChange.emit(this.generateCondition(\"active\"));\r\n  }\r\n  if (this.activeCondition &&  this.selectedLogicOperator == null){\r\n    this.activeCondition = false;\r\n    this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n  }\r\n}\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\ngenerateCondition(mode){\r\n  let output:Statistic = new Statistic();\r\n  if (mode == \"active\"){\r\n    output = {\r\n      key: this.field.Name,\r\n      value: this.record[this.field.Name],\r\n      logicoperator: this.selectedLogicOperator,\r\n      fieldtype: this.field.FieldType,\r\n      visible: false,\r\n      aggregations: this.aggregations,\r\n      operatorsGroupBy: this.operatorsGroupBy\r\n    };\r\n  } else {\r\n    output = {\r\n      key: this.field.Name,\r\n      value: null,\r\n      logicoperator: null,\r\n      fieldtype: null,\r\n      visible: false,\r\n      aggregations: this.aggregations,\r\n      operatorsGroupBy: this.operatorsGroupBy\r\n    };\r\n  }\r\n\r\n  return output;\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\n  private configureControllers() {\r\n    this.validatorsArray = [];\r\n    this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n  }\r\n\r\n   /**\r\n   * Metodo per creare un array di oggetti del tipo { Key: string, Value: any } da usare come sorgente dati per la eqp-select.\r\n   */\r\n   private setArrayData() {\r\n    this.prepareValuePairs();\r\n    if (this.field.ValuePairs != null){\r\n      if (UtilityHelperService.isNumeric(this.field.ValuePairs[Object.keys(this.field.ValuePairs)[0]])) {\r\n        Object.keys(this.field.ValuePairs).forEach\r\n          (k => this.createNumberArrayDataElement(k, Number(this.field.ValuePairs[k])));\r\n      } else {\r\n        Object.keys(this.field.ValuePairs).forEach\r\n          (k => this.createArrayDataElement(k, this.field.ValuePairs[k]));\r\n      }\r\n    }\r\n  }\r\n\r\n  prepareValuePairs() {\r\n    if (this.field.Formula) {\r\n      this.field.ValuePairs = {};\r\n      const temp: string = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n      // temp dovrebbe essere una stringa del tipo \"chiave1! valore 1 ; chiave2 | valore 2 \"\r\n      // dobbiamo ottenere un dizionario di quei valori\r\n      this.field.ValuePairs = GlobalService.stringToValuePairs(temp);\r\n\r\n      //this.record[this.field.Name] = UtilityHelperService.EvaluateFieldFormula(this.field.Formula, this.record, null);\r\n    } else if (this.field.ValuePairs != null && this.field.ValuePairs.lenght > 0) {\r\n      // va bene così\r\n\r\n    }\r\n  }\r\n  \r\n  private createArrayDataElement(key: string, value: string, imgUrl: string = null) {\r\n    let isOptionSelected: boolean;\r\n    if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n      isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n    } else {\r\n      isOptionSelected = this.record[this.field.Name] === value;\r\n    }\r\n    this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n  }\r\n\r\n  private createNumberArrayDataElement(key: string, value: number, imgUrl: string = null) {\r\n    let isOptionSelected: boolean;\r\n    if (this.field.IsMultiChoiche && this.record[this.field.Name] && this.record[this.field.Name].length > 0) {\r\n      isOptionSelected = !!this.record[this.field.Name].find(v => v == value);\r\n    } else {\r\n      isOptionSelected = this.record[this.field.Name] === value;\r\n    }\r\n    this.arrayData.push({ Key: key, Value: value, Selected: isOptionSelected, ImgUrl: imgUrl });\r\n  }\r\n\r\n}\r\n","<!--<div class=\"row\">\r\n    <div class=\"col-md-9 valueCol\">\r\n        <tmw-select class=\"image-selector\" [ngStyle]=\"FieldstyleObj\" [arrayData]=\"arrayData\"\r\n            [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"true\" [arrayValueProperty]=\"'Key'\"\r\n            [formGroupInput]=\"field.FormFormGroup\" [formControlNameInput]=\"field.Name\" [placeholder]=\"field.Description\"\r\n            [includeFullObject]=\"false\" [isRequired]=\"false\" [isDisabled]=\"false\"\r\n            [(ngModelInput)]=\"record[field.Name]\" [isMultiSelect]=\"false\"\r\n            (ngModelInputChange)=\"onFilterChange()\">\r\n        </tmw-select>\r\n    </div>\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"logicOperatorImageSelectorValue\" [(ngModel)]=\"selectedLogicOperator\" (ngModelChange)=\"onFilterChange()\"></tmw-select>\r\n    </div>\r\n</div>-->","import { Component, EventEmitter, Input, OnInit, Output, QueryList, SimpleChanges, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../../form-records/list-form-record/list-form-record.component';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { Statistic } from '../../../../models/statistic.model';\r\nimport { DynamicModuleFilterResultViewModeEnum } from '../../../../models/dynamicModuleFilterResultViewModeEnum.model';\r\n\r\n@Component({\r\n  selector: 'dynamic-module-filter-fix',\r\n  templateUrl: './dynamic-module-filter-fix.component.html',\r\n  styleUrls: ['./dynamic-module-filter-fix.component.scss']\r\n})\r\nexport class DynamicModuleFilterFixComponent {\r\n\r\n  @Input() field: BaseField;\r\n  @Input() form: Form;\r\n  @Input() record: Record;\r\n  @Input() Statistic: Statistic;\r\n  @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum;\r\n  @Output() filterChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n\r\n  configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n  FieldTypeEnum = FieldTypeEnum;\r\n\r\n  //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n  selectedInnerForm: Form;\r\n  selectedInnerFormRecord: Record;\r\n  indexInnerFormRecord: number;\r\n  onlyViewInnerFormRecord: boolean = false;\r\n  dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n  //#endregion\r\n\r\n  @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n  @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n  constructor(\r\n    private dialog: MatDialog\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n    this.configList.values = this.record[this.field.Name]\r\n    this.configList.showTitle = true;\r\n    this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n   * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n   */\r\n  onFilterChange(ev) {\r\n    this.filterChange.emit(ev);\r\n  }\r\n\r\n  /**\r\n   * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n   * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n   * @returns Restituisce un oggetto di tipo Form.\r\n   */\r\n  getInnerFormFromField(field: BaseField): Form {\r\n    if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n      return this.form.InnerForms.find(f => f.Name == field.Label);\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n}\r\n","<text-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n    [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" [Statistic]=\"Statistic\" (filterChange)=\"onFilterChange($event)\">\r\n</text-filter-template>\r\n\r\n<textarea-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Area di testo']\"\r\n    [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" [Statistic]=\"Statistic\" (filterChange)=\"onFilterChange($event)\">\r\n</textarea-filter-template>\r\n\r\n<boolean-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Booleano']\"\r\n    [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" [Statistic]=\"Statistic\" (filterChange)=\"onFilterChange($event)\">\r\n</boolean-filter-template>\r\n\r\n<date-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n    [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" [filterResultViewMode]=\"filterResultViewMode\" [Statistic]=\"Statistic\" (filterChange)=\"onFilterChange($event)\">\r\n</date-filter-template>\r\n\r\n<numeric-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n    [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" [filterResultViewMode]=\"filterResultViewMode\" [Statistic]=\"Statistic\" (filterChange)=\"onFilterChange($event)\">\r\n</numeric-filter-template>\r\n\r\n<list-value-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n    [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" [Statistic]=\"Statistic\" (filterChange)=\"onFilterChange($event)\">\r\n</list-value-filter-template>\r\n\r\n <attachment-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Allegato']\"\r\n    [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</attachment-filter-template>\r\n\r\n<image-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Immagine']\"\r\n    [matTooltip]=\"field.Description\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</image-filter-template>\r\n\r\n\r\n<image-selector-filter-template #fieldTemplate *ngIf=\"field.FieldType == FieldTypeEnum['Elenco immagini']\"\r\n    [matTooltip]=\"field.Tooltip\" [(record)]=\"record\" [field]=\"field\" (filterChange)=\"onFilterChange($event)\">\r\n</image-selector-filter-template>\r\n\r\n<list-form-record-filter-template #listInnerFormRecords *ngIf=\"field.FieldType == FieldTypeEnum['Form di dettaglio']\">\r\n</list-form-record-filter-template>","import { ChangeDetectorRef, Component, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren } from '@angular/core';\r\nimport { UntypedFormGroup } from '@angular/forms';\r\nimport { DatePipe } from '@angular/common';\r\nimport * as XLSX from 'xlsx';\r\nimport { DynamicModuleCompileConfig } from '../../../../models/dynamicModuleCompileConfig.model';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { Form, FormScalarTypeEnum } from '../../../../models/form.model';\r\nimport { DynRecord, Record, RecordButton } from '../../../../models/record.model';\r\nimport { UtilityHelperService } from '../../../../services/utilityHelper.services';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from './../../../../models/endPointConfiguration.model';\r\nimport { ListValueField } from '../../../../models/fields/listValueField.model';\r\nimport { FilterStatistic, Statistic } from '../../../../models/statistic.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { ConfigColumn, TmwTableComponent, TmwTableExportConfig, TypeColumn } from 'tmw-table';\r\nimport { DynamicModuleFilterResultViewModeEnum } from '../../../../models/dynamicModuleFilterResultViewModeEnum.model';\r\nimport { GlobalService } from '../../../../services/global.service';\r\nimport { ActionButton, FireTrigger} from '../../../../models/trigger.model';\r\nimport { LogicOperator } from '../../../../models/logicOperator.model';\r\n\r\n@Component({\r\n  selector: 'filter-form-statistic',\r\n  templateUrl: './filter-form-statistic.component.html',\r\n  styleUrls: ['./filter-form-statistic.component.scss']\r\n})\r\nexport class FilterFormStatisticComponent {\r\n  \r\n  @Input() configurations: DynamicModuleCompileConfig;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() userID: string;\r\n  @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n\r\n  @Input() formID: string = null; // preview\r\n  @Input() form: Form = null; // preview config\r\n  @Input() record: Record | string = null; // edit\r\n  @Input() onlyView: boolean = false;\r\n  @Input() showHiddenFields: boolean = true;  \r\n  @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault(false,true,false,false,false);\r\n  @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n  @Input() Statistic: FilterStatistic = null;\r\n  @Input() numberOfColumns: number = 3;\r\n\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n  @ViewChild(\"tableOutdated\", { static: false }) tableOutdated: TmwTableComponent;\r\n\r\n  //Pagination\r\n  pageSize: number = 100;\r\n  pageIndex: number = 0;\r\n  pageLength: Array<number> = [5,10,25,100]\r\n\r\n  exportEqpTable: TmwTableExportConfig = {};\r\n  filterResultViewModes = DynamicModuleFilterResultViewModeEnum;\r\n\r\n  showTitle = true;\r\n  showSaveButton = true;\r\n  showBackButton = true;\r\n  showNewSearchButton = true;\r\n  loader: boolean = false;\r\n  showListView: boolean = false;\r\n  filterResults: Array<DynRecord> = null;\r\n  filterEqpTableResults: Array<any> = new Array<any>();\r\n  listViewConfigurations: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n  columns: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n  columnsOutdated: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n  outdatedFields: Array<Statistic> = new Array<Statistic>();\r\n  outdatedTableLoaded: boolean = false;\r\n\r\n  formForm: UntypedFormGroup;\r\n  fieldGroups: { [key: string]: Array<BaseField> } = {};\r\n  FormScalarTypeEnum = FormScalarTypeEnum;\r\n  FieldTypeEnum = FieldTypeEnum;\r\n\r\n  @Output() saveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() afterSaveRecordEvent: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n  @Output() afterOutputExternalFilters: EventEmitter<FilterStatistic> = new EventEmitter<FilterStatistic>();\r\n\r\n  @ViewChildren(\"fieldTemplate\")\r\n  fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n  filters: FilterStatistic = new FilterStatistic();\r\n\r\n  constructor(\r\n    private cdr: ChangeDetectorRef,\r\n    public utilityService: UtilityHelperService,\r\n  ) {}\r\n\r\n  ngOnInit(): void {\r\n\r\n    if (this.form != null && typeof this.form.ID === 'undefined'){ this.form = null; }\r\n    if (this.form == null && this.formID != null){\r\n\r\n\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: this.formID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      this.utilityService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n          this.form = res;\r\n          this.afterLoad();\r\n        },\r\n        (err) => {\r\n          console.error(\"error RunEndPointCall\",err);\r\n        }\r\n      );\r\n\r\n\r\n    } else {\r\n        this.afterLoad();\r\n    }\r\n\r\n    \r\n  }\r\n\r\n  afterLoad(){\r\n    // add può funzionare anche come modifica e come preview\r\n    // in add abbiamo in input l'ID del Form\r\n    // in modifica abbiamo in input l'ID del Record\r\n    // in preview abbiamo in input il Form(caso configurator) o l'ID del modulo on onlyView impostato a true\r\n    this.endPointConfiguration.Records.ApplyFilter.Url = this.endPointConfiguration.Records.ApplyFilter.Url + \"/\" + this.formID;\r\n    this.showTitle = this.configurations.showTitle;\r\n    this.showSaveButton = this.configurations.showSaveButton;\r\n    this.showBackButton = this.configurations.showBackButton;\r\n    this.showNewSearchButton = this.configurations.showNewSearchButton;\r\n\r\n    this.listViewConfigurations.showTitle = this.configurations.showTitle;\r\n    this.listViewConfigurations.userID = this.configurations.userID;\r\n    this.listViewConfigurations.externalButtons = null;\r\n    this.listViewConfigurations.values = null;\r\n    this.listViewConfigurations.defaultListActions = this.defaultListActions;\r\n\r\n    if(this.record == null){\r\n      this.previewOrNewResponseRecord();\r\n    } else {\r\n      this.editResponseRecord();\r\n    }\r\n\r\n    if (this.Statistic != null && this.Statistic.Statistics != null && this.Statistic.Statistics.length > 0){\r\n      // Il filtro viene caricato dall'esterno e potrebbero esserci dei campi non più attuali e quindi vanno separati\r\n      this.filters = this.Statistic;\r\n      this.Statistic.Statistics.forEach((statisticField: Statistic) => {\r\n        if (statisticField.fieldtype == null){ return; }\r\n        var foundFieldIndex = this.form.Fields.find(x => x.Name == statisticField.key);\r\n        if (foundFieldIndex == null){\r\n          // Il campo è presente nei filtri ma non nella definizione del form attuale. Il filtro è quindi outdated;\r\n          this.outdatedFields.push(statisticField); \r\n        }\r\n      })\r\n      \r\n      this.configureColumns();\r\n      this.outdatedTableLoaded = true;\r\n\r\n    }\r\n\r\n    // l'inizializzazione termina con il recupero del record o con l'inizializzazione del form vuoto\r\n    \r\n    this.cdr.detectChanges();    \r\n  }\r\n  \r\n  configureColumns(){\r\n\r\n    this.columns = [];\r\n    \r\n    // segno anche l'ID dell'utente che risponde\r\n    this.columns.push(\r\n      {\r\n        key: \"userID\",\r\n        display: \"Utente\",\r\n        styles: { flex: \"0 0 6%\" },\r\n      }\r\n    );\r\n    this.filterEqpTableResults = new Array<any>();\r\n    \r\n    if (this.filterResults != null && this.filterResults.length > 0){\r\n      \r\n      // Crea campi e contenuti tabella\r\n      this.filterResults.forEach((result,index) => {\r\n        var object = JSON.parse(result.SerializedValues);\r\n        if (index == 0){\r\n          Object.keys(object).forEach((element,index2) => {\r\n              this.columns.push({ key: element, display: element, styles: { flex: \"0 0 10%\" }},);\r\n          });\r\n          this.columns.push({ key: \"AnswerDate\", display: \"AnswerDate\", type: TypeColumn.Date, format: \"dd/MM/yyyy HH:mm:ss\", value: () => { return result.AnswerDate; }, styles: { flex: \"0 0 10%\" }},);\r\n          this.columns.push({ key: \"Version\", display: \"Version\", value: () => { return result.Version; }, styles: { flex: \"0 0 10%\" }},);\r\n          \r\n        }\r\n        this.filterEqpTableResults.push(object);\r\n      });\r\n    }\r\n\r\n    this.columnsOutdated = [];\r\n    this.columnsOutdated.push({\r\n        key: 'action', display: '',\r\n        type: TypeColumn.MenuAction, buttonMenuIcon: 'settings',\r\n        styles: { flex: '0 0 10%' },\r\n        actions: [\r\n          { name: \"Rimuovi\", icon: 'trash', fn: (element, col, elementIndex) => this.deleteOutdatedDMFilter(element) }\r\n        ]\r\n      });\r\n\r\n    this.columnsOutdated.push({ key: \"key\", display: \"Nome campo\", styles: { flex: \"0 0 30%\" }},);\r\n\r\n    this.columnsOutdated.push({\r\n      key: \"logicoperator\",\r\n      display: \"Operatore\",\r\n      type: TypeColumn.Enum,\r\n      enumModel: LogicOperator,\r\n      styles: { flex: \"0 0 30%\" }\r\n    });\r\n\r\n    this.columnsOutdated.push({ key: \"value\", display: \"Valore\", styles: { flex: \"0 0 30%\" }},);\r\n\r\n    console.log(\"columnsOutdated eseguito\");\r\n  }\r\n\r\n  configureExport(){\r\n    this.exportEqpTable.buttonText = \"Scarica\"\r\n    this.exportEqpTable.exportFileType = \"xlsx\";\r\n    this.exportEqpTable.exportFileName = \"DynamicModule_\"+this.form.Code;\r\n    this.exportEqpTable.buttonIcon = \"cloud-download\";\r\n    // tmw-table non ha un formato XLSX nativo (v. AI_BUILD_PLAN.md di tmw-table, decisione\r\n    // \"zero I/O\") - a differenza di eqp-table (che delegava a mat-table-exporter) va fornito un\r\n    // customExportHandlers che genera l'XLSX con la libreria xlsx (SheetJS), già presente come\r\n    // dipendenza pinnata nell'override di package.json.\r\n    this.exportEqpTable.customExportHandlers = { xlsx: (rows, columns) => this.exportRowsAsXlsx(rows, columns) };\r\n  }\r\n\r\n  private exportRowsAsXlsx(rows: any[], columns: ConfigColumn[]): void {\r\n    const exportable = columns.filter(col => col.type !== TypeColumn.MenuAction && col.type !== TypeColumn.SimpleAction);\r\n    const datePipe = new DatePipe('it-IT');\r\n    const header = exportable.map(col => col.display);\r\n    const body = rows.map(row => exportable.map(col => {\r\n      let value = typeof col.value === 'function' ? col.value(row) : (col.key ? row[col.key] : undefined);\r\n      if (col.type === TypeColumn.Date && value != null) {\r\n        value = datePipe.transform(value, col.format ?? 'shortDate');\r\n      }\r\n      return value ?? '';\r\n    }));\r\n    const worksheet = XLSX.utils.aoa_to_sheet([header, ...body]);\r\n    const workbook = XLSX.utils.book_new();\r\n    XLSX.utils.book_append_sheet(workbook, worksheet, 'Export');\r\n    XLSX.writeFile(workbook, (this.exportEqpTable.exportFileName || 'export') + '.xlsx');\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n   * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n   */\r\n  onFilterChange(ev:Statistic) {\r\n    var statistics = JSON.parse(JSON.stringify(this.filters.Statistics.filter(x => x.key != ev.key)));\r\n\r\n    if (statistics.length > 0){\r\n      this.filters.Statistics = statistics;\r\n    } else {\r\n      this.filters.Statistics = new Array<Statistic>();\r\n    }\r\n\r\n    if ((ev.logicoperator != null && ev.value != null) || ev.visible){\r\n     this.filters.Statistics.push(ev); \r\n    }\r\n\r\n  }\r\n\r\n  ApplyFilter(){\r\n    this.filters.AdditionalParams = this.configurations.additionalParams;\r\n    this.filters.PrefilterParams = this.configurations.prefilterParams;\r\n\r\n    var filterParams = [\r\n      {\r\n        ParamName: \"filter\",\r\n        ParamValue: this.filters,\r\n        ParamType: ParamTypeEnum[\"In Body\"],\r\n      }\r\n    ];\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.ApplyFilter,\r\n      filterParams,\r\n      (res: Array<DynRecord>) => {\r\n        \r\n        this.filterResults = res;\r\n        this.configureExport();\r\n        this.configureColumns();\r\n        this.showListView = true;\r\n        this.afterFilter.emit(res);\r\n      }\r\n    );\r\n  }\r\n\r\n  outputExternalFilters(){\r\n    this.afterOutputExternalFilters.emit(this.filters);\r\n  }\r\n\r\n  deleteOutdatedDMFilter(el: Statistic){\r\n    var indexToDelete = this.filters.Statistics.findIndex(x => x.key == el.key);\r\n    this.filters.Statistics.splice(indexToDelete,1);\r\n    var outdatedIndexToDelete = this.outdatedFields.findIndex(x => x.key == el.key);\r\n    this.outdatedFields.splice(outdatedIndexToDelete,1);\r\n    this.tableOutdated.reloadDatatable();\r\n  }\r\n\r\n  reset(){\r\n\r\n    // Resetto i campi del record\r\n    Object.keys(this.record).forEach(key => {\r\n      this.record[key] = null;\r\n    });\r\n\r\n    this.filterResults = null;\r\n    this.filters.Statistics = [];\r\n    this.showListView = false;\r\n  }\r\n\r\n  previewOrNewResponseRecord(){    \r\n    this.record = new Record();\r\n    if(this.onlyView == true){\r\n      // modalità preview\r\n      if(this.form != null){\r\n        // preview per il configurator\r\n        this.fieldsConfig();\r\n      } else if(this.formID != null){\r\n        // preview per admin\r\n        this.getFormByID() // dentro chiama fieldsConfig\r\n      }\r\n    } else {\r\n      // aggiugni nuovo\r\n      this.fieldsConfig();\r\n    }\r\n  }\r\n  editResponseRecord(){\r\n      // modiiltà modifica\r\n      if (typeof this.record === \"string\") {\r\n        // allora è un ID\r\n        this.getRecordByID();\r\n      } else {\r\n        // il record viene passato come tale\r\n        // (<Record>this.record).EntID = \"3\";\r\n        // (<Record>this.record).Version;\r\n        this.getFormByIDandVersion();\r\n      }\r\n  }\r\n\r\n  /**\r\n   * Metodo per salvare i dati inseriti dall'utente una volta conclusa la compilazione della form.\r\n   */\r\n  saveOrExitForm(exit: boolean) {\r\n    if (exit) {\r\n      // this.saveRecordEvent.emit(null);\r\n      this.onSaveRecord(null);\r\n    } else {\r\n      // this.saveRecordEvent.emit(this.record);\r\n      this.onSaveRecord((<Record>this.record));\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per salvare il record aggiunto o modificato.\r\n   * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n   * nel body della chiamata, altrimenti scatena l'evento \"saveRecord\".\r\n   * @param event Oggetto di tipo Record da salvare.\r\n   */\r\n  onSaveRecord(event: Record) {\r\n    if (\r\n      event != null &&\r\n      this.endPointConfiguration != null &&\r\n      this.endPointConfiguration.Records.SaveEndPoint\r\n    ) {\r\n      var dynRec: DynRecord = new DynRecord();\r\n      dynRec.ID = event.ID ?? null;\r\n      dynRec.EntID = this.form.ID;\r\n      dynRec.Version = this.form.Version;\r\n      dynRec.userID = this.userID;\r\n      dynRec.Values = event ?? null;\r\n      dynRec.HTMLreadableValues = this.createHTMLreadableValues(event);\r\n      var dynamicModuleParams = [\r\n        {\r\n          ParamName: \"Record\",\r\n          ParamValue: dynRec,\r\n          ParamType: ParamTypeEnum[\"In Body\"],\r\n        },\r\n      ];\r\n      this.utilityService.RunEndPointCall(\r\n        this.endPointConfiguration.Records.SaveEndPoint,\r\n        dynamicModuleParams,\r\n        (res) => {\r\n          this.afterSaveRecordEvent.emit(event);\r\n        }\r\n      );\r\n    } else {\r\n      this.saveRecordEvent.emit(event);\r\n    }\r\n  }\r\n\r\n  getFormByID(id: string = this.formID) {\r\n    const dynamicModuleParams: Array<EndPointDataParams> =\r\n      new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"id\",\r\n      ParamValue: id,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Form) => {\r\n        this.form = res;\r\n        this.fieldsConfig();\r\n      },\r\n      (err) => {}\r\n    );\r\n  }\r\n\r\n  // ci entro solo se è stato passato il parametro \"record\" come stringa\r\n  getRecordByID() {\r\n    // preparo i dati del record\r\n    var dynamicRecordParams = [\r\n      {\r\n        ParamName: \"id\",\r\n        ParamValue: this.record,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Records.GetByIDEndPoint,\r\n      dynamicRecordParams,\r\n      (res: DynRecord) => {\r\n        this.record = new Record();\r\n\r\n        (<Record>this.record) = JSON.parse(res.SerializedValues);\r\n        this.record.ID = res.ID;\r\n        this.record.EntID = res.EntID;\r\n        this.record.userID = res.userID;\r\n        this.record.Version = res.Version;\r\n        this.record.Values = JSON.parse(res.SerializedValues);\r\n        // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n        // this.loader = true;\r\n        this.getFormByIDandVersion();\r\n      }\r\n    );\r\n  }\r\n  getFormByIDandVersion() {\r\n    // preparo la versione corretta del form\r\n    var dynamicModuleParams = [\r\n      {\r\n        ParamName: \"EntID\",\r\n        ParamValue: (<Record>this.record).EntID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n      {\r\n        ParamName: \"Version\",\r\n        ParamValue: (<Record>this.record).Version,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      },\r\n    ];\r\n    GlobalService.debugLog(\"getFormByIDandVersion - this record\", <Record>this.record)\r\n    this.utilityService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Form) => {\r\n        this.form = res;\r\n\r\n        this.createRecordProperties();\r\n        this.reorderFormFields();\r\n        this.createFormGroup();\r\n        if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n          this.createFieldGroups();\r\n        }\r\n        this.loader = true;\r\n      }\r\n    );\r\n  }\r\n  \r\n  fieldsConfig(){      \r\n    this.createRecordProperties();\r\n    this.reorderFormFields();\r\n    this.createFormGroup();\r\n    if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n      this.createFieldGroups();\r\n    }\r\n    this.loader = true;\r\n  }\r\n\r\n  getStatisticFromFieldName(Statistics: Array<Statistic> = null, fieldName: string): Statistic {\r\n    return Statistics == null || Statistics.length == 0 ? null : Statistics.find(x => x.key == fieldName);\r\n  }  \r\n\r\n  /**\r\n   * Metodo per creare nell'oggetto Record le proprietà mancanti rispetto ai campi che compongono la form.\r\n   */\r\n  private createRecordProperties() {\r\n    const recordProperties: Array<string> = Object.keys(this.record);\r\n    this.form.Fields.forEach((field) => {\r\n      if (!recordProperties.find((p) => p === field.Name)) {\r\n        this.record[field.Name] = null;\r\n      }\r\n    });\r\n    if (this.form.InnerForms && this.form.InnerForms.length > 0) {\r\n      this.form.InnerForms.forEach((form) => {\r\n        const arrayName: string = form.Name.split(\" \").join(\"_\");\r\n        if (!recordProperties.find((p) => p === arrayName)) {\r\n          this.record[arrayName] = [];\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per riordinare i campi che compongono la form.\r\n   */\r\n  private reorderFormFields() {\r\n    if (this.form.Fields && this.form.Fields.length > 0) {\r\n      this.form.Fields.sort((a, b) =>\r\n        a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per creare il FormGroup che rappresenta la form.\r\n   */\r\n  private createFormGroup() {\r\n    this.formForm = this.utilityService.CreateFormFormGroup(\r\n      this.form.Fields,\r\n      (<Record>this.record),\r\n      this.onlyView\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Metodo per creare i gruppi in cui raggruppare i campi della form in base\r\n   * a come è stata configurata dall'utente.\r\n   */\r\n  private createFieldGroups() {\r\n    this.form.FormFieldsGroups.sort((a, b) => a.OrdinalPosition > b.OrdinalPosition ? 1 : b.OrdinalPosition > a.OrdinalPosition ? -1 : 0 )\r\n      .map((g) => g.Name)\r\n      .forEach((groupName) => {\r\n        this.fieldGroups[groupName] = this.form.Fields.filter(\r\n          (f) => f.FieldGroup == groupName\r\n        );\r\n      });\r\n    }\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n  /**\r\n   * Metodo per creare il FormGroup che rappresenta la form.\r\n   */\r\n  private createHTMLreadableValues(record:Record) {\r\n    GlobalService.debugLog(\"record\", record);\r\n    GlobalService.debugLog(\"form\", this.form);\r\n    let outputValuesArray: Array<any> = this.getResponseValues(record, this.form);\r\n    GlobalService.debugLog(\"outputValuesArray\", outputValuesArray);\r\n    \r\n    let template: string = this.getResponseTemplate(this.form); // oggetto nel quale viene costruito il template o che prende il valore da un template esterno\r\n    GlobalService.debugLog(\"template\", template);\r\n\r\n    const regex = /##([\\w]+)##/g;\r\n    return this.replaceTemplatePlaceholdersWithValues(template, outputValuesArray, regex); // oggetto che conterrà l'output elaborato    \r\n\r\n  }\r\n\r\n  private getResponseValues(record: Record, form: Form ): Array<any> {\r\n    let outputValuesArray: Array<any> = []; // array con i valori delle risposte\r\n    //(<DynRecord>this.record).Values è la lista di oggetti {fieldName: valore}\r\n    GlobalService.debugLog(\"(record).Values\", record);\r\n    for (let fieldName in record) {\r\n      try {\r\n        // fieldName è il nome del campo\r\n        // PREPARO VARIABILI VALORI CORRETTI\r\n        let foundObject = form.Fields.find(\r\n          (obj) => obj.Name === fieldName\r\n        );\r\n        GlobalService.debugLog(\"fieldName\", fieldName);\r\n        GlobalService.debugLog(\"foundObject\", foundObject);\r\n        // gestire caso fieldtype 8 [elenco generico]\r\n        // fare un eval per popolare i valuePairs se è presente una formula\r\n        // prendere la label corretta\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n        if (foundObject.FieldType == FieldTypeEnum[\"Elenco generico\"]) \r\n        {\r\n          if (foundObject.Formula) \r\n          {\r\n            // aggiungo a valuepairs i valori calcolati\r\n            // (<ListValueField>foundObject).ValuePairs = {};\r\n            var temp = UtilityHelperService.EvaluateFieldFormula(\r\n              foundObject.Formula,\r\n              record,\r\n              null\r\n            );\r\n              GlobalService.debugLog(\"temp\", temp);\r\n              for (let key2 in temp) {\r\n              if (UtilityHelperService.isNumeric(temp[key2])) \r\n              {\r\n                (<ListValueField>foundObject).ValuePairs[Number(key2)] = temp[key2];\r\n              } else \r\n              {\r\n                (<ListValueField>foundObject).ValuePairs[key2] = temp[key2];\r\n              }\r\n            }\r\n            GlobalService.debugLog(\"(record).Values[fieldName]\", record[fieldName]);\r\n            GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs[record[fieldName]]\", (<ListValueField>foundObject).ValuePairs[record[fieldName]]);\r\n            outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n          }\r\n          let inverted = {};\r\n              GlobalService.debugLog(\"(<ListValueField>foundObject).ValuePairs\", (<ListValueField>foundObject).ValuePairs);\r\n              for (let key in (<ListValueField>foundObject).ValuePairs) \r\n          { \r\n            inverted[(<ListValueField>foundObject).ValuePairs[key]] = key; \r\n          }\r\n          (<ListValueField>foundObject).ValuePairs = inverted;\r\n          outputValuesArray[fieldName] = (<ListValueField>foundObject).ValuePairs[record[fieldName]];\r\n        } else \r\n        {\r\n          GlobalService.debugLog(\"record[fieldName]\", record[fieldName]);\r\n          outputValuesArray[fieldName] = record[fieldName];\r\n        }\r\n        ////////////////////////////////////////////////////////////////////////////////\r\n      } catch (e) {\r\n        console.error(e);\r\n      }\r\n    }\r\n    GlobalService.debugLog(\"outputValuesArray 1\", outputValuesArray);\r\n    // cancello i valori indefiniti o nulli\r\n    for(const chiave in outputValuesArray){\r\n      if(outputValuesArray[chiave] == undefined || outputValuesArray[chiave] == null)\r\n      outputValuesArray[chiave] = ''\r\n    }\r\n    return outputValuesArray;\r\n  }\r\n\r\n  private getResponseTemplate(form: Form): string {\r\n    let template: string = \"\";\r\n    // PREPARO O PRENDO LA STRUTTURA DA STAMPARE\r\n    form.Fields.forEach((baseField: BaseField) => {\r\n      template += '<span class=\"dynaform-question\" style=\"' + baseField.LabelstyleCSS + '\">' + baseField.Description + ':</span> <span class=\"dynaform-response\" style=\"' + baseField.FieldstyleCSS + '\"> ##' + baseField.Name + '##</span> \\n <br> ';\r\n    });\r\n    // (attualmente non esiste il concetto di tempate di output)\r\n    return template;\r\n  }\r\n\r\n  private replaceTemplatePlaceholdersWithValues(template: string, outputValuesArray: Array<any>, regex): string {\r\n    return template.replace(regex, (match, group) => {\r\n      return <string>outputValuesArray[group];\r\n    });\r\n  }   \r\n\r\n}\r\n","<ng-container *ngIf=\"loader\">\r\n\r\n    <div class=\"row eqp-dynamic-module-title add-form-record-header\" *ngIf=\"showTitle\">\r\n        <div class=\"col-md-12\">\r\n            <h4><b>{{form.Name}}</b></h4>\r\n        </div>\r\n    </div>\r\n\r\n    <form [formGroup]=\"formForm\" class=\"add-form-record-form\">\r\n\r\n        <!-- VISUALIZZAZIONE SEMPLICE -->\r\n        <ng-container *ngIf=\"!showListView\" [ngTemplateOutlet]=\"fieldTemplates\"\r\n            [ngTemplateOutletContext]=\"{ fields: form.Fields }\" class=\"add-form-record-semplice\">\r\n        </ng-container>\r\n\r\n    </form>\r\n\r\n    <div class=\"row mt-2 m-2 add-form-record-buttons\"\r\n        *ngIf=\"(showBackButton || showSaveButton)\">\r\n        <div class=\"col-sm-12 m-2 text-right\">\r\n            <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"showListView && showNewSearchButton\" (click)=\"reset()\">\r\n                Nuova ricerca\r\n            </button>\r\n            <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"!showListView && filterResultViewMode != filterResultViewModes.FILTERS_ONLY\"\r\n                (click)=\"ApplyFilter()\">\r\n               Esegui Filtro\r\n            </button>\r\n            <button mat-raised-button color=\"primary\" type=\"button\" *ngIf=\"filterResultViewMode == filterResultViewModes.FILTERS_ONLY\"\r\n                (click)=\"outputExternalFilters()\">\r\n               Salva modifiche filtro\r\n            </button>            \r\n        </div>\r\n    </div>\r\n\r\n    <list-view-form-record\r\n    *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_LISTVIEW && filterResults != null\"\r\n    class=\"dynamic-module-list-view\"\r\n    [configurations]=\"listViewConfigurations\"\r\n    [compileConfigurations]=\"configurations\"\r\n    [endPointConfiguration]=\"endPointConfiguration\"\r\n    [formID]=\"formID\"\r\n    [onlyView]=\"true\"\r\n    [records]=\"filterResults\"\r\n    [externalButtons]=\"externalButtons\"\r\n    >\r\n    </list-view-form-record>\r\n\r\n    <div *ngIf=\"showListView && filterResultViewMode == filterResultViewModes.INTERNAL_EQPTABLE && filterEqpTableResults != null\" class=\"dynamic-module-eqp-table\">\r\n        <tmw-table\r\n\r\n            style=\"cursor: pointer\"\r\n            #table\r\n            emptyTableMessage=\"\"\r\n            [data]=\"filterEqpTableResults\"\r\n            [columns]=\"columns\"\r\n            [exportEqpTable]=\"exportEqpTable\"\r\n\r\n            [chooseColumnsToShow]=\"true\"\r\n            [switchFilterType]=\"true\"\r\n\r\n            [createMatCard]=\"false\"\r\n            [disablePageStorageSave]=\"true\"\r\n            [isMultiLanguage]=\"true\"\r\n\r\n            [matPaginatorCount]=\"filterEqpTableResults != null && filterEqpTableResults.length > 0 ? filterEqpTableResults.length : 0\"\r\n            [matPaginatorIndex]=\"pageIndex\"\r\n            [matPaginatorSize]=\"pageSize\"\r\n            [matPaginatorLength]=\"pageLength\"\r\n        >\r\n        </tmw-table>\r\n    </div> \r\n\r\n</ng-container>\r\n\r\n\r\n\r\n<!-- TEMPLATE PER LA VISUALIZZAZIONE DEI CAMPI DELLA FORM -->\r\n<ng-template #fieldTemplates let-fields='fields' let-outdatedfields='outdatedFields'>\r\n    <div class=\"row\" *ngIf=\"!showListView\">\r\n        <div class=\"mt-2\" *ngFor=\"let field of fields\" [hidden]=\"(!field.InListView && !showHiddenFields)\"\r\n            [ngClass]=\"utilityService.getFieldFilterStyleClass(field, numberOfColumns)\">\r\n            <dynamic-module-filter-fix #fieldTemplate [field]=\"field\" [form]=\"form\" [record]=\"record\" [filterResultViewMode]=\"filterResultViewMode\" [Statistic]=\"getStatisticFromFieldName(Statistic?.Statistics,field.Name)\"\r\n                (filterChange)=\"onFilterChange($event)\">\r\n            </dynamic-module-filter-fix>\r\n        </div>\r\n    </div>\r\n\r\n    <div class=\"row\" *ngIf=\"outdatedTableLoaded && outdatedFields != null && outdatedFields.length > 0\">\r\n\r\n        <div class=\"outdatedTableContainer\">\r\n\r\n            <h2>Filtri Obsoleti</h2>\r\n            <p>Sono filtri che sono stati configurati in una versione precedente di questo modulo e poi salvati</p>\r\n\r\n            <tmw-table\r\n                class=\"outdatedTable\"\r\n                style=\"cursor: pointer\"\r\n                #tableOutdated\r\n                emptyTableMessage=\"\"\r\n                [data]=\"outdatedFields\"\r\n                [columns]=\"columnsOutdated\"\r\n\r\n                [createMatCard]=\"false\"\r\n\r\n                [matPaginatorCount]=\"outdatedFields != null && outdatedFields.length > 0 ? outdatedFields.length : 0\"\r\n                [matPaginatorIndex]=\"0\"\r\n                [matPaginatorSize]=\"5\"\r\n                [matPaginatorLength]=\"[5]\"\r\n            >\r\n            </tmw-table>\r\n        </div>\r\n    </div>\r\n</ng-template>","import {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  ViewChild,\r\n} from \"@angular/core\";\r\nimport { Context } from \"../../../models/context.model\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"../../../models/dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"../../../models/dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"../../../models/dynamicModuleRepairConfig.model\";\r\nimport { DynamicModuleViewModeEnum } from \"../../../models/dynamicModuleViewModeEnum\";\r\nimport {\r\n  EndPointConfiguration,\r\n  EndPointDataParams,\r\n  ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport { Form, FormTypeEnum } from \"../../../models/form.model\";\r\nimport { DynamicModuleListFormRecordActionsDefault } from \"../../../models/dynamicModuleListFormRecordActionsDefault\";\r\nimport { DynRecord, Record, RecordButton } from \"../../../models/record.model\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { DynamicModuleFilterResultViewModeEnum } from \"../../../models/dynamicModuleFilterResultViewModeEnum.model\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\nimport { eventOut } from \"../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { ActionButton, FireTrigger, Trigger } from \"../../../models/trigger.model\";\r\nimport { ListViewFormRecordComponent } from '../../private/form-records/list-view-form-record/list-view-form-record.component';\r\nimport { FilterStatistic } from '../../../models/statistic.model';\r\nimport { DomSanitizer, SafeStyle } from '@angular/platform-browser';\r\n\r\n@Component({\r\n  selector: \"eqp-dynamic-module\",\r\n  templateUrl: \"./eqp-dynamic-module.component.html\",\r\n  styleUrls: [\"./eqp-dynamic-module.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleComponent implements OnInit, AfterViewInit {\r\n\r\n  @Input() debugMode: boolean = false;\r\n\r\n  // @Input() configurations: DynamicModuleConfig;\r\n\r\n  @Input() configurations: DynamicModuleGeneralConfig;\r\n  @Input() formID: string;\r\n  @Input() starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n\r\n  @Input() userID: string = \"0\";\r\n  @Input() orgaID: string = \"0\";  \r\n  @Input() showTitle: boolean = true;\r\n  @Input() showBackButton: boolean = true;\r\n  @Input() showSaveButton = true;\r\n  @Input() values: Array<Record> = null;\r\n  @Input() FormJSON = \"\";\r\n  @Input() formulaObject: any = {}; // rappresenta il contesto della piattaforma chiamante per la valutazione delle formule. Esempio: {currole: role, user: user, medical: medicalexamination}\r\n  @Input() externalButtons: Array<RecordButton> = new Array<RecordButton>();\r\n  @Input() actionButtons: Array<ActionButton> = new Array<ActionButton>();\r\n  @Input() listViewRecordTitle: Array<string> = new Array<string>();\r\n  @Input() defaultListViewFunction: Function = null;\r\n  @Input() defaultListActions: DynamicModuleListFormRecordActionsDefault = new DynamicModuleListFormRecordActionsDefault();\r\n  @Input() onSaveBackToList = false;\r\n  @Input() onBackTo: DynamicModuleViewModeEnum = null;\r\n  @Input() filterResultViewMode: DynamicModuleFilterResultViewModeEnum = DynamicModuleFilterResultViewModeEnum.INTERNAL_EQPTABLE;\r\n  @Input() additionalParams: any = null;\r\n  @Input() additionalInfo: any = null;\r\n  @Input() updateInfo: any = null;\r\n  @Input() prefilterParams: any = null;\r\n  @Input() contestualizationParams: any = null; // Contestualizzazione della lista delle risposte\r\n  @Input() showNewSearchButton: boolean = true;\r\n  @Input() highlightFilter: any;\r\n  @Input() selectedRecord: Record | string = null;\r\n  @Input() isDraggableListView: boolean = true;\r\n  @Input() Statistic: FilterStatistic = null;\r\n  @Input() numberOfColumns: number = 3;\r\n  @Input() showHiddenFields: boolean = true;  \r\n  \r\n  @Input() QueryEditorComponent: any; // L'intero componente query Editor\r\n\r\n  context: Context = new Context();\r\n  /**\r\n   * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n   * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n   */\r\n  baseServerUrl: string = null;\r\n\r\n  /**\r\n   * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n   * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n   */\r\n  userToken: string = null;\r\n\r\n  /**\r\n   * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n   * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n   * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n   * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n   */\r\n  endPointConfiguration: EndPointConfiguration = null;\r\n\r\n  //@Input() form: Form = new Form();\r\n  // defaultListActions: dynamicModuleListFormRecordActionsDefault = new dynamicModuleListFormRecordActionsDefault();\r\n  // FormJSON: string = \"\";\r\n\r\n  /**\r\n   * Eventi emessi quando si salva, elimina o duplica un record\r\n   * se non è stato specificato un endpoint da chiamare.\r\n   */\r\n  @Output() saveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() deleteRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() SaveJSON: EventEmitter<string> = new EventEmitter<string>();\r\n  @Output() afterFilter: EventEmitter<Array<DynRecord>> = new EventEmitter<Array<DynRecord>>();\r\n  /**\r\n   * Eventi emessi DOPO aver eseguito una chiamata al server per il salvataggio,\r\n   * l'eliminazione o la duplicazione di un record all'endpoint specificato.\r\n   */\r\n  @Output() afterSaveRecord: EventEmitter<Record> = new EventEmitter<Record>();\r\n  @Output() afterDeleteRecord: EventEmitter<Record> =\r\n    new EventEmitter<Record>();\r\n  @Output() dragStarted: EventEmitter<Record> = new EventEmitter<any>();\r\n  @Output() dragReleased: EventEmitter<void> = new EventEmitter<void>();\r\n  @Output() clickDragIndicator: EventEmitter<Record> = new EventEmitter<any>();  \r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n  @Output() afterOutputExternalFilters: EventEmitter<FilterStatistic> = new EventEmitter<FilterStatistic>();\r\n\r\n  @ViewChild('listViewFormRecord', { static: false }) listViewFormRecord: ListViewFormRecordComponent;\r\n\r\n  form: Form = new Form();\r\n  lastform: Form = new Form();\r\n  FormTypeEnum = FormTypeEnum;\r\n  dynamicModuleViewModeEnum = DynamicModuleViewModeEnum;\r\n  onlyView: boolean;\r\n  viewMode: DynamicModuleViewModeEnum;\r\n  defaultViewMode: DynamicModuleViewModeEnum;\r\n\r\n  dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n  dynamicModuleListConfig: DynamicModuleListConfig;\r\n  dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n  loader: boolean = false;\r\n  isDuplicate: boolean = false;\r\n\r\n  constructor(\r\n    public utilityHelperService: UtilityHelperService,\r\n    private changeDetector: ChangeDetectorRef,\r\n    private sanitizer: DomSanitizer\r\n  ) {}\r\n\r\n  get formBgStyle(): SafeStyle | null {\r\n    if (!this.form?.BgImageBase64) return null;\r\n    return this.sanitizer.bypassSecurityTrustStyle([\r\n      `background-image: url('data:image/png;base64,${this.form.BgImageBase64}')`,\r\n      'background-size: cover',\r\n      'background-position: center',\r\n      'background-repeat: no-repeat',\r\n    ].join('; '));\r\n  }\r\n\r\n  get formThemeStyle(): SafeStyle | null {\r\n    if (!this.form?.ThemeCSS) return null;\r\n    return this.sanitizer.bypassSecurityTrustStyle(this.form.ThemeCSS.trim().replace(/;$/, ''));\r\n  }\r\n\r\n  async ngOnInit() {\r\n    \r\n    GlobalService.debugMode = this.debugMode;\r\n\r\n    this.onBackTo = (this.onBackTo == null) ? this.starterViewMode : this.onBackTo;\r\n\r\n    if (this.viewMode == DynamicModuleViewModeEnum.EXTERNAL_FILTER){\r\n      this.filterResultViewMode = DynamicModuleFilterResultViewModeEnum.FILTERS_ONLY;\r\n    }\r\n\r\n    this.dynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n      this.showTitle,\r\n      this.showSaveButton,\r\n      this.showBackButton,\r\n      this.userID,\r\n      this.additionalParams,\r\n      this.additionalInfo,\r\n      this.prefilterParams,\r\n      this.showNewSearchButton\r\n    );\r\n    this.dynamicModuleListConfig = new DynamicModuleListConfig(\r\n      this.showTitle,\r\n      this.values,\r\n      this.defaultListActions,\r\n      this.userID,\r\n      new Array<RecordButton>(),\r\n      this.updateInfo,\r\n      this.listViewRecordTitle,\r\n      this.isDraggableListView\r\n    );\r\n    this.dynamicModuleRepairConfig = new DynamicModuleRepairConfig(\r\n      this.FormJSON\r\n    );\r\n\r\n    this.context = this.configurations.context;\r\n    this.baseServerUrl = this.configurations.baseServerUrl;\r\n    this.userToken = this.configurations.userToken;\r\n    this.endPointConfiguration = this.configurations.endPointConfiguration;\r\n    //this.formID = this.configurations.dynamicModuleGeneralConfig.formID\r\n\r\n    // this.viewMode = this.starterViewMode\r\n    UtilityHelperService.SetContext(this.context);\r\n    \r\n    this.configureDefaultEndPoints();\r\n\r\n    if (this.FormJSON == \"\") {\r\n      // prende il form e imposta la viewmode corretta\r\n      // await this.getFormByID();\r\n    }\r\n\r\n    // this.viewMode = this.starterViewMode;\r\n    GlobalService.debugLog(\"dynamicModuleCompileConfig\", this.dynamicModuleCompileConfig)\r\n    this.loader = true\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n\r\n    if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE || this.starterViewMode == DynamicModuleViewModeEnum.FILTER) {\r\n      // da vedere in getFormByID\r\n      this.defaultViewMode = this.starterViewMode;\r\n      setTimeout(() => this.onAddViewEditRecord(null), 1000);\r\n    } else {\r\n      this.viewMode = this.starterViewMode;\r\n      this.loader = true;\r\n      setTimeout(_ => { this.changeDetector.detectChanges() }, 0); // refresh ui\r\n\r\n    }\r\n  }\r\n\r\n  // getFormByID(id: string = this.formID) {\r\n  //   const dynamicModuleParams: Array<EndPointDataParams> =\r\n  //     new Array<EndPointDataParams>();\r\n  //   dynamicModuleParams.push({\r\n  //     ParamName: \"id\",\r\n  //     ParamValue: id,\r\n  //     ParamType: ParamTypeEnum[\"Query param\"],\r\n  //   });\r\n  //   this.utilityHelperService.RunEndPointCall(\r\n  //     this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n  //     dynamicModuleParams,\r\n  //     (res: Form) => {\r\n  //       this.lastform = res;\r\n  //       this.form = res;\r\n  //       // this.getRecordsByFormID();\r\n\r\n  //       // if (this.starterViewMode == DynamicModuleViewModeEnum.COMPILE) {\r\n  //       //   this.onAddViewEditRecord(null);\r\n  //       // }\r\n  //       // this.viewMode = this.starterViewMode;\r\n  //     },\r\n  //     (err) => {}\r\n  //   );\r\n  // }\r\n\r\n  /**\r\n   * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n   * a cui si deve connettere e al token da passare per autenticarsi.\r\n   * Se la proprietà \"baseServerUrl\" è null e non sono stati configurati i vari endpoint allora\r\n   * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n   */\r\n  configureDefaultEndPoints() {\r\n    if (!this.endPointConfiguration && this.baseServerUrl) {\r\n      this.endPointConfiguration =\r\n        this.utilityHelperService.ConfigureDefaultEndPoints(\r\n          this.baseServerUrl,\r\n          this.userToken\r\n        );    \r\n      }\r\n  }\r\n\r\n  /**\r\n   * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n   * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n   * La risposta della chiamata deve essere un array di oggetti di tipo \"DynRecord\"\r\n   * a partire dai quali vengono ricreati i Record usati nel client.\r\n   */\r\n  // async getRecordsByFormID() {\r\n    // if (\r\n    //   this.endPointConfiguration &&\r\n    //   this.endPointConfiguration.Records &&\r\n    //   this.endPointConfiguration.Records.GetByFormIDEndPoint\r\n    // ) {\r\n    //   var dynamicModuleParams = [\r\n    //     {\r\n    //       ParamName: \"EntID\",\r\n    //       ParamValue: this.form.ID,\r\n    //       ParamType: ParamTypeEnum[\"Query param\"],\r\n    //     },\r\n    //   ];\r\n    //   await this.utilityHelperService.RunEndPointCall(\r\n    //     this.endPointConfiguration.Records.GetByFormIDEndPoint,\r\n    //     dynamicModuleParams,\r\n    //     (res: Array<DynRecord>) => {\r\n    //       this.dynamicModuleListConfig.values = new Array<Record>();\r\n    //       res.forEach((r) => {\r\n    //         var tmpRec: Record = new Record();\r\n    //         tmpRec = JSON.parse(r.SerializedValues);\r\n    //         tmpRec.ID = r.ID;\r\n    //         tmpRec.EntID = r.EntID;\r\n    //         tmpRec.Version = r.Version;\r\n    //         tmpRec.userID = r.userID;\r\n    //         tmpRec.AnswerDate = r.AnswerDate;\r\n    //         this.dynamicModuleListConfig.values.push(tmpRec);\r\n    //       });\r\n    //     }\r\n    //   );\r\n    // }\r\n  // }\r\n\r\n  onGoBack(){\r\n    this.viewMode = this.onBackTo ;\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n   * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n   * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n   * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n   * @param event Oggetto con due proprietà:\r\n   * \"record\" = oggetto da modificare/visualizzare,\r\n   * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n   */\r\n  onAddViewEditRecord(event: { record: Record; onlyView: boolean }) {\r\n\r\n    if (event != null) {\r\n      this.onlyView = event.onlyView;\r\n      GlobalService.debugLog(\"Version modulo\", event.record.Version)\r\n      if (\r\n        this.endPointConfiguration &&\r\n        this.endPointConfiguration.Records &&\r\n        this.endPointConfiguration.Records.GetByIDEndPoint\r\n      ) {\r\n        // preparo la versione corretta del form\r\n        var dynamicModuleParams = [\r\n          {\r\n            ParamName: \"EntID\",\r\n            ParamValue: event.record.EntID,\r\n            ParamType: ParamTypeEnum[\"Query param\"],\r\n          },\r\n          {\r\n            ParamName: \"Version\",\r\n            ParamValue: event.record.Version,\r\n            ParamType: ParamTypeEnum[\"Query param\"],\r\n          },\r\n        ];\r\n        GlobalService.debugLog(\"query params\", dynamicModuleParams)\r\n        this.utilityHelperService.RunEndPointCall(\r\n          this.endPointConfiguration.Forms.GetByIDAndVersionEndPoint,\r\n          dynamicModuleParams,\r\n          (res: Form) => {\r\n            this.form = res;\r\n            this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n            this.form.ActionButtons = JSON.parse(this.form.ObjectActionButtons);\r\n            this.actionButtons = this.form.ActionButtons;\r\n\r\n            GlobalService.debugLog(\"RES\", res)\r\n            // preparo i dati del record\r\n            var dynamicRecordParams = [\r\n              {\r\n                ParamName: \"id\",\r\n                ParamValue: event.record.ID,\r\n                ParamType: ParamTypeEnum[\"Query param\"],\r\n              },\r\n            ];\r\n            this.utilityHelperService.RunEndPointCall(\r\n              this.endPointConfiguration.Records.GetByIDEndPoint,\r\n              dynamicRecordParams,\r\n              (res: DynRecord) => {\r\n                this.selectedRecord = JSON.parse(res.SerializedValues);\r\n                (this.selectedRecord as Record).ID = res.ID;\r\n                (this.selectedRecord as Record).EntID = res.EntID;\r\n                (this.selectedRecord as Record).userID = res.userID;\r\n                (this.selectedRecord as Record).Version = res.Version;\r\n                this.viewMode = this.defaultViewMode;\r\n                this.loader = true;\r\n              }\r\n            );\r\n          }\r\n        );\r\n      } else {\r\n        this.selectedRecord = JSON.parse(JSON.stringify(event.record));\r\n        this.viewMode = this.defaultViewMode;\r\n        this.loader = true;\r\n      }\r\n    } else if (this.selectedRecord != null && typeof this.selectedRecord === \"string\"){\r\n\r\n        // preparo i dati del record\r\n        var dynamicRecordParams = [\r\n          {\r\n            ParamName: \"id\",\r\n            ParamValue: this.selectedRecord,\r\n            ParamType: ParamTypeEnum[\"Query param\"],\r\n          },\r\n        ];\r\n        this.utilityHelperService.RunEndPointCall(\r\n          this.endPointConfiguration.Records.GetByIDEndPoint,\r\n          dynamicRecordParams,\r\n          (res: DynRecord) => {\r\n            this.selectedRecord = JSON.parse(res.SerializedValues);\r\n            (this.selectedRecord as Record).ID = res.ID;\r\n            (this.selectedRecord as Record).EntID = res.EntID;\r\n            (this.selectedRecord as Record).userID = res.userID;\r\n            (this.selectedRecord as Record).Version = res.Version;\r\n            this.viewMode = this.defaultViewMode;\r\n            this.loader = true;\r\n          }\r\n        );\r\n\r\n    } else {\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: this.formID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n          // console.log(\"success RunEndPointCall\",res,this.defaultViewMode);\r\n          this.form = res;\r\n\r\n          if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\"){\r\n            this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n          } else {\r\n            this.form.Triggers = new Array<Trigger>();\r\n          }\r\n\r\n          if (this.form.ObjectActionButtons != null && this.form.ObjectActionButtons != \"\"){\r\n            this.form.ActionButtons = JSON.parse(this.form.ObjectActionButtons);\r\n          } else {\r\n            this.form.ActionButtons = new Array<ActionButton>();\r\n          }       \r\n\r\n          this.actionButtons = this.form.ActionButtons;\r\n          this.selectedRecord = null;\r\n          this.onlyView = false;\r\n          this.viewMode = this.defaultViewMode;\r\n          this.loader = true;\r\n        },\r\n        (err) => {\r\n          console.error(\"error RunEndPointCall\",err);\r\n        }\r\n      );\r\n\r\n      // this.selectedRecord = null;\r\n      // this.onlyView = false;\r\n      // this.viewMode = DynamicModuleViewModeEnum.COMPILE;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato quando si vuole aggiungere, visualizzare o modificare un record.\r\n   * Se l'evento è null vuol dire che stiamo aggiungendo un nuovo record altrimenti siamo in modifica\r\n   * o visualizzazione. In questi ultimi due casi, se è stato configurato un endpoint per il recupero\r\n   * del record completo allora viene effettuata una chiamata al server, altrimenti viene usato l'oggetto selezionato.\r\n   * @param event Oggetto con due proprietà:\r\n   * \"record\" = oggetto da modificare/visualizzare,\r\n   * \"onlyView\" = booleano (se TRUE siamo in visualizzazione altrimenti in modifica)\r\n   */\r\n  onViewRecord(record: Record) {\r\n      this.loader = false\r\n      this.selectedRecord = record\r\n      this.viewMode = DynamicModuleViewModeEnum.VIEW\r\n      this.loader = true\r\n\r\n  }\r\n\r\n  // #region SAVE\r\n  /**\r\n   * Metodo per gestire il componente dopo che il record è stato aggiunto o modificato.\r\n   * @param event Oggetto di tipo Record da salvare.\r\n   */\r\n  onSaveRecord(event: Record) {\r\n    // this.getRecordsByFormID();\r\n    this.saveRecord.emit(event);\r\n    // if (this.onSaveBackToList) {\r\n    //   this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n    // } else {\r\n    //   this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n    // }\r\n    this.viewMode = this.onBackTo\r\n  }\r\n\r\n  /**\r\n   * Metodo per gestire il componente dopo che e stata richiesta una aggiunto o una modifica del record nell' add-form-record.\r\n   * @param event Oggetto di tipo Record da salvare.\r\n   */\r\n  onAfterSaveRecord(event: Record) {\r\n    this.afterSaveRecord.emit(event);\r\n    // if (this.onSaveBackToList) {\r\n    //   this.viewMode = DynamicModuleViewModeEnum.LIST;\r\n    // } else {\r\n    //   this.viewMode = DynamicModuleViewModeEnum.NONE;\r\n    // }\r\n    this.viewMode = this.onBackTo\r\n  }\r\n\r\n\r\n  onSaveJson(record: string) {\r\n    this.SaveJSON.emit(record);\r\n  }\r\n  // #endregion SAVE\r\n\r\n\r\n\r\n\r\n\r\n\r\n  reload(){\r\n    this.loader = false;\r\n    setTimeout(\r\n      () => this.loader = true,\r\n      50\r\n    )\r\n  }\r\n\r\n  //#region DELETE \r\n  /**\r\n   * Metodo per eliminare un record dalla lista.\r\n   * @param record Record da eliminare selezionato sulla eqp-table.\r\n   */\r\n  onDeleteRecord(record: Record) {\r\n    if (record.hasOwnProperty(\"record\")){ record = (record as any).record; }\r\n    if (\r\n      this.endPointConfiguration &&\r\n      this.endPointConfiguration.Records.DeleteEndPoint\r\n    ) {\r\n      EqpDynamicModuleDialogService.Confirm(\r\n        \"Eliminare il record selezionato?\",\r\n        () => {\r\n          var dynamicModuleParams = [\r\n            {\r\n              ParamName: \"id\",\r\n              ParamValue: record.ID,\r\n              ParamType: ParamTypeEnum[\"Query param\"],\r\n            },\r\n          ];\r\n          this.utilityHelperService.RunEndPointCall(\r\n            this.endPointConfiguration.Records.DeleteEndPoint,\r\n            dynamicModuleParams,\r\n            (res) => {\r\n              // this.getRecordsByFormID();\r\n              this.afterDeleteRecord.emit(record);\r\n              // this.reloadTables()\r\n              this.reload();\r\n            }\r\n          );\r\n        },\r\n        false,\r\n        \"Richiesta conferma\"\r\n      );\r\n    } else {\r\n      this.deleteRecord.emit(record);\r\n    }\r\n  }\r\n  onAfterDeleteRecord(record: Record) {\r\n    this.loader = false\r\n    setTimeout(() => this.ngOnInit(), 50 )\r\n    this.afterDeleteRecord.emit(record);\r\n  }\r\n  //#ednregion DELETE \r\n\r\n  onAfterFilter(ev){\r\n    this.afterFilter.emit(ev);\r\n  }\r\n\r\n  onDragStarted(el: any){\r\n    this.dragStarted.emit(el);\r\n  }\r\n\r\n  onDragReleased(){\r\n    this.dragReleased.emit();\r\n  }\r\n\r\n  onClickDragIndicator(el: any){\r\n    this.clickDragIndicator.emit(el);\r\n  }\r\n\r\n  onExternalComponentOut(ev: eventOut){\r\n    this.out.emit(ev);\r\n  }\r\n\r\n  onFireTrigger(ev: FireTrigger){\r\n    this.fireTrigger.emit(ev);\r\n  }\r\n\r\n  /** utilizzato in TMED */ \r\n  reloadHTMLReadableValues(answerId: string){\r\n    this.listViewFormRecord.reloadHTMLReadableValues(answerId);\r\n  }\r\n\r\n  onAfterOutputExternalFilters(ev: FilterStatistic){\r\n    this.afterOutputExternalFilters.emit(ev);\r\n  }\r\n\r\n}\r\n","<div class=\"form-bg-wrapper\" [style]=\"formBgStyle\">\r\n<div class=\"form-theme-wrapper\" [style]=\"formThemeStyle\">\r\n<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n<!-- [record]=\"'b3d943c0-9c01-4973-948b-7aa418634f72'\" -->\r\n<view-form-record\r\n  *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.VIEW\"\r\n  class=\"dynamic-module-view\"\r\n  [endPointConfiguration]=\"endPointConfiguration\"\r\n  [record]=\"selectedRecord\"\r\n  [actionButtons]=\"actionButtons\"\r\n  (goBackEvent)=\"onGoBack()\"\r\n  (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</view-form-record>\r\n\r\n<graphs\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.GRAPHS\"\r\nclass=\"dynamic-module-view\"\r\n[endPointConfiguration]=\"endPointConfiguration\"\r\n[form]=\"form\"\r\n[formID]=\"formID\"\r\n[userID]=\"userID\"\r\n[actionButtons]=\"actionButtons\"\r\n[configurations]=\"dynamicModuleCompileConfig\"\r\n(fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</graphs>\r\n\r\n<filter-form-statistic\r\n*ngIf=\"loader && (viewMode == dynamicModuleViewModeEnum.FILTER || viewMode == dynamicModuleViewModeEnum.EXTERNAL_FILTER)\"\r\n  class=\"dynamic-module-compile\"\r\n  [form]=\"form\"\r\n  [formID]=\"formID\"\r\n  [record]=\"selectedRecord\"\r\n  [onlyView]=\"onlyView\"\r\n  [showHiddenFields]=\"showHiddenFields\"\r\n  [defaultListActions]=\"defaultListActions\"\r\n  [filterResultViewMode]=\"filterResultViewMode\"\r\n  [endPointConfiguration]=\"endPointConfiguration\"\r\n  [actionButtons]=\"actionButtons\"\r\n  [userID]=\"userID\"\r\n  [Statistic]=\"Statistic\"\r\n  [numberOfColumns]=\"numberOfColumns\"\r\n\r\n  [configurations]=\"dynamicModuleCompileConfig\"\r\n  (afterFilter)=\"onAfterFilter($event)\"\r\n  (fireTrigger)=\"onFireTrigger($event)\"\r\n  (afterOutputExternalFilters)=\"onAfterOutputExternalFilters($event)\"\r\n>\r\n</filter-form-statistic>\r\n\r\n<add-form-record\r\n*ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.COMPILE\"\r\n  class=\"dynamic-module-compile\"\r\n  [form]=\"form\"\r\n  [record]=\"selectedRecord\"\r\n  [formulaObject]=\"formulaObject\"\r\n  [onlyView]=\"onlyView\"\r\n  [isDuplicate]=\"isDuplicate\"\r\n  [showTitle]=\"showTitle\"\r\n\r\n  [QueryEditorComponent]=\"QueryEditorComponent\"\r\n  [endPointConfiguration]=\"endPointConfiguration\"\r\n  [userID]=\"userID\"\r\n  [orgaID]=\"orgaID\"\r\n\r\n  [actionButtons]=\"actionButtons\"\r\n  [configurations]=\"dynamicModuleCompileConfig\"\r\n\r\n  (out)=\"onExternalComponentOut($event)\"\r\n  (saveRecordEvent)=\"onSaveRecord($event)\"\r\n  (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n  (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</add-form-record>\r\n\r\n<list-form-record\r\n  *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LIST\"\r\n  class=\"dynamic-module-list\"\r\n  [formID]=\"formID\"\r\n\r\n  [endPointConfiguration]=\"endPointConfiguration\"\r\n  [contestualizationParams]=\"contestualizationParams\"\r\n\r\n  [configurations]=\"dynamicModuleListConfig\"\r\n  [externalButtons]=\"externalButtons\"\r\n  [actionButtons]=\"actionButtons\"\r\n\r\n  (onViewRecord)=\"onViewRecord($event)\"\r\n  (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n  (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n  (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n\r\n  (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</list-form-record>\r\n\r\n<hlist-form-record\r\n  *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.HLIST\"\r\n  class=\"dynamic-module-hlist\"\r\n  [formID]=\"formID\"\r\n  [formulaObject]=\"formulaObject\"\r\n\r\n  [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n  [configurations]=\"dynamicModuleListConfig\"\r\n  [externalButtons]=\"externalButtons\"\r\n  [actionButtons]=\"actionButtons\"\r\n\r\n  (onViewRecord)=\"onViewRecord($event)\"\r\n  (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n  (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n  (onAfterDeleteRecord)=\"onAfterDeleteRecord($event)\"\r\n  (fireTrigger)=\"onFireTrigger($event)\"\r\n>\r\n</hlist-form-record>\r\n\r\n<repair-form-fields\r\n  *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.REPAIR\"\r\n  class=\"dynamic-module-repair\"\r\n  [formID]=\"formID\"\r\n\r\n  [configurations]=\"dynamicModuleRepairConfig\"\r\n  [endPointConfiguration]=\"endPointConfiguration\"\r\n\r\n  (onSaveJson)=\"onSaveJson($event)\"\r\n>\r\n</repair-form-fields>\r\n\r\n<list-view-form-record\r\n  #listViewFormRecord\r\n  *ngIf=\"loader && viewMode == dynamicModuleViewModeEnum.LISTWIEW\"\r\n  class=\"dynamic-module-list-view\"\r\n  \r\n  [configurations]=\"dynamicModuleListConfig\"\r\n  [compileConfigurations]=\"dynamicModuleCompileConfig\"\r\n  [endPointConfiguration]=\"endPointConfiguration\"\r\n  [contestualizationParams]=\"contestualizationParams\"\r\n  \r\n  [formID]=\"formID\"\r\n  [userID]=\"userID\"\r\n  [orgaID]=\"orgaID\"\r\n  [formulaObject]=\"formulaObject\"\r\n\r\n  [defaultListViewFunction]=\"defaultListViewFunction\"\r\n  [externalButtons]=\"externalButtons\"\r\n  [actionButtons]=\"actionButtons\"\r\n  \r\n  [highlightFilter]=\"highlightFilter\"\r\n  [onlyView]=\"!defaultListActions.edit\"\r\n  \r\n  [QueryEditorComponent]=\"QueryEditorComponent\"\r\n\r\n  (onAddViewEditRecord)=\"onAddViewEditRecord($event)\"\r\n  (onDeleteRecord)=\"onDeleteRecord($event)\"\r\n  (saveRecordEvent)=\"onSaveRecord($event)\"\r\n  (afterSaveRecordEvent)=\"onAfterSaveRecord($event)\"\r\n  (dragStarted)=\"onDragStarted($event)\"\r\n  (dragReleased)=\"onDragReleased()\"\r\n  (clickDragIndicator)=\"onClickDragIndicator($event)\"\r\n  (fireTrigger)=\"onFireTrigger($event)\"\r\n  >\r\n</list-view-form-record>\r\n\r\n</div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\n\r\n//Angular Material Components\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSidenavModule } from '@angular/material/sidenav';\r\nimport { MatToolbarModule } from '@angular/material/toolbar';\r\nimport { MatListModule } from '@angular/material/list';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatExpansionModule } from '@angular/material/expansion';\r\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\n\r\n\r\n@NgModule({\r\n  imports: [\r\n    MatCheckboxModule,\r\n    MatButtonModule,\r\n    MatInputModule,\r\n    MatAutocompleteModule,\r\n    MatDatepickerModule,\r\n    MatFormFieldModule,\r\n    MatRadioModule,\r\n    MatSelectModule,\r\n    MatSliderModule,\r\n    MatSlideToggleModule,\r\n    MatMenuModule,\r\n    MatSidenavModule,\r\n    MatToolbarModule,\r\n    MatListModule,\r\n    MatGridListModule,\r\n    MatCardModule,\r\n    MatStepperModule,\r\n    MatTabsModule,\r\n    MatExpansionModule,\r\n    MatButtonToggleModule,\r\n    MatChipsModule,\r\n    MatIconModule,\r\n    MatProgressSpinnerModule,\r\n    MatProgressBarModule,\r\n    MatDialogModule,\r\n    MatTooltipModule,\r\n    MatSnackBarModule,\r\n    MatTableModule,\r\n    MatSortModule,\r\n    MatPaginatorModule,\r\n    MatDatepickerModule,\r\n    MatNativeDateModule\r\n  ],\r\n  exports: [\r\n    MatCheckboxModule,\r\n    MatButtonModule,\r\n    MatInputModule,\r\n    MatAutocompleteModule,\r\n    MatDatepickerModule,\r\n    MatFormFieldModule,\r\n    MatRadioModule,\r\n    MatSelectModule,\r\n    MatSliderModule,\r\n    MatSlideToggleModule,\r\n    MatMenuModule,\r\n    MatSidenavModule,\r\n    MatToolbarModule,\r\n    MatListModule,\r\n    MatGridListModule,\r\n    MatCardModule,\r\n    MatStepperModule,\r\n    MatTabsModule,\r\n    MatExpansionModule,\r\n    MatButtonToggleModule,\r\n    MatChipsModule,\r\n    MatIconModule,\r\n    MatProgressSpinnerModule,\r\n    MatProgressBarModule,\r\n    MatDialogModule,\r\n    MatTooltipModule,\r\n    MatSnackBarModule,\r\n    MatTableModule,\r\n    MatSortModule,\r\n    MatPaginatorModule\r\n  ],\r\n})\r\nexport class MaterialModule { }","import { TemplateRef } from \"@angular/core\";\r\nimport { MatDialogRef } from \"@angular/material/dialog\";\r\nimport { Form } from \"./form.model\";\r\n\r\nexport class DynamicModuleConfiguratorSpecificConfig {\r\n  form: Form = new Form();\r\n  orgaID: string = null;\r\n  UserID: number = 0;\r\n  innerFormManagment: boolean = false;\r\n  innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n  constructor(\r\n    form: Form = new Form(),\r\n    orgaID: string = null,\r\n    UserID: number = 0,\r\n    innerFormManagment: boolean = false,\r\n    innerFormRef: MatDialogRef<TemplateRef<any>> = null\r\n  ) {\r\n    this.form = form;\r\n    this.orgaID = orgaID;\r\n    this.UserID = UserID;\r\n    this.innerFormManagment = innerFormManagment;\r\n    this.innerFormRef = innerFormRef;\r\n  }\r\n}\r\n","import { Context } from \"./context.model\";\r\nimport { DynamicModuleViewModeEnum } from \"./dynamicModuleViewModeEnum\";\r\nimport { EndPointConfiguration } from \"./endPointConfiguration.model\";\r\nimport { RecordButton } from \"./record.model\";\r\n\r\nexport class DynamicModuleGeneralConfig {\r\n  /**\r\n   * Url del server da chiamare per recuperare, salvare o eliminare i record.\r\n   * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n   */\r\n  baseServerUrl: string = null;\r\n\r\n  /**\r\n   * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n   * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n   */\r\n  userToken: string = null;\r\n\r\n  /**\r\n   * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n   * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n   * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n   * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n   */\r\n  endPointConfiguration: EndPointConfiguration = null;\r\n\r\n  context: Context = new Context();\r\n\r\n  /**\r\n   * imposta la modalità di lavoro del componente COMPILE/LIST/REPAIR\r\n   */\r\n  // starterViewMode: DynamicModuleViewModeEnum = DynamicModuleViewModeEnum.LIST;\r\n  /**\r\n   * Specifica del form da visualizzare DynaForms.ID\r\n   */\r\n  // formID: string;\r\n\r\n  constructor( baseServerUrl: string = \"\", userToken: string = \"\", context: Context = new Context(), endPointConfiguration: EndPointConfiguration = null){\r\n    this.baseServerUrl = baseServerUrl;\r\n    this.userToken = userToken;\r\n    this.context = context;\r\n    this.endPointConfiguration = endPointConfiguration;\r\n  }\r\n}\r\n","import { tick } from \"@angular/core/testing\";\r\nimport { DynamicModuleConfiguratorSpecificConfig } from \"./dynamicModuleConfiguratorSpecificConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\n\r\nexport class DynamicModuleConfiguratorConfig {\r\n  dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n  dynamicModuleConfiguratorSpecificConfig: DynamicModuleConfiguratorSpecificConfig\r\n\r\n  constructor( general: DynamicModuleGeneralConfig = new DynamicModuleGeneralConfig(), specific: DynamicModuleConfiguratorSpecificConfig = new DynamicModuleConfiguratorSpecificConfig()) {\r\n    this.dynamicModuleGeneralConfig = general\r\n    this.dynamicModuleConfiguratorSpecificConfig = specific\r\n  }\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\nimport { KeyValue } from \"../trigger.model\";\r\n\r\nexport class ActionButtonFieldStyleCSS {\r\n    // Bottone (button.btn)\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerSelezionato?: string;\r\n    // Icona (mat-icon dentro il bottone)\r\n    IconaNormale?: string;\r\n    IconaMouseover?: string;\r\n    IconaSelezionato?: string;\r\n    // Etichetta del bottone (span.btn-label)\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    DescrizioneSelezionato?: string;\r\n}\r\n\r\nexport class ActionButtonField extends BaseField {\r\n    ButtonUniqueId: string;\r\n    ButtonCode: string;\r\n    Icon: string;\r\n    ButtonLabel: string;\r\n    execution: string;\r\n    formulas: Array<KeyTypeValue>;\r\n    formulasTemp?: any;\r\n    userPatient: string;\r\n    userMedicalExamination: number;\r\n    ActionButtonFieldStyleCSS?: ActionButtonFieldStyleCSS;\r\n}\r\n\r\n\r\nexport class KeyTypeValue\r\n{\r\n    key: string;\r\n    tooltip: string;\r\n    type: string;\r\n    value: string;\r\n    allowedValues:KeyValue[];   // da specificare nel caso di TriggerPropertyTypeEnum.DROPDOWN_LIST\r\n    selectedAllowedValue:KeyValue; \r\n}","import { FieldTypeEnum } from './baseField.model';\r\n\r\nexport class FieldExtraConfig {\r\n    FieldConfigCode: string; // Il code del campo di configurazione\r\n    FieldConfigLabel: string; // La descrizione testuale del campo\r\n    FieldConfigType: FieldTypeEnum; // Il tipo di campo che rappresenta la configurazione: booleano, testo, intero ecc\r\n}\r\n\r\nexport class FieldExtraValues {\r\n    FieldConfigParentFieldCode: string // Il campo parent che eredita la configurazione extra\r\n    FieldConfigCode: string; // Il code del campo di configurazione\r\n    FieldConfigValue: any; // il valore della risposta\r\n}","export class Formula {\r\n    formula:string;\r\n    current_number:number = 0;\r\n    prev_number:number = 0;\r\n    stack:string[] = [];\r\n    start:boolean = false; \r\n    dotted:boolean = false; // input number having dot\r\n    is_operand:boolean = false;\r\n    radians:boolean = true;\r\n    operation:string = '';\r\n    memory:number = 0;\r\n    in_memory:boolean = false;\r\n    bracket:boolean = false;\r\n    secondScreen:boolean = false;\r\n\r\n    constructor(formula:string='') {\r\n        this.formula=formula;\r\n    }\r\n\r\n    get() {\r\n        return this.formula;\r\n    }\r\n\r\n    parse(value:string):number {\r\n        return parseFloat(value);\r\n    }\r\n\r\n    getCurrentNumber() {\r\n        return this.parse(this.formula);\r\n    }\r\n\r\n    setRadians(switcher:boolean):boolean {\r\n        this.radians=switcher;\r\n        return this.radians;\r\n    }\r\n\r\n\r\n    clear():string {\r\n        this.formula = '0';\r\n\r\n        this.dotted = false;\r\n        this.is_operand = false;\r\n        this.operation = '';\r\n        this.start = false;\r\n        this.stack = [];\r\n        this.bracket = false;\r\n        return this.formula;\r\n    }\r\n\r\n    clearMemory() {\r\n        this.memory = 0;\r\n        this.in_memory = false;\r\n    }\r\n\r\n    sumToMemory() {\r\n        let value=this.getCurrentNumber();\r\n        this.memory += value;\r\n        this.in_memory = true;\r\n        this.start = true;\r\n    }\r\n\r\n    deductToMemory() {\r\n        let value=this.getCurrentNumber();\r\n        this.memory -= value;\r\n        this.in_memory = true;\r\n        this.start = true;\r\n    }\r\n\r\n    readMemory():string {\r\n        this.formula=this.memory.toString();\r\n        return this.formula;\r\n    }\r\n\r\n    addBracket(value:string):void {\r\n        // brackets can be set only if we have not set them before and we set operand (if we set brackets first - it will not make sense)\r\n        if (value == '(' && this.bracket == false && this.is_operand == true) {\r\n            this.stack.push(value);\r\n            this.bracket = true;\r\n            this.is_operand = false;\r\n        }\r\n        if (value == ')' && this.bracket == true && this.is_operand != true) {\r\n            this.bracket = false;\r\n            this.stack.push(this.formula);\r\n            this.stack.push(')');\r\n            this.is_operand = false;\r\n            this.start = true;\r\n            this.formula=eval(this.stack.join('')).toString();\r\n            this.stack=[this.formula];\r\n        }\r\n    }\r\n\r\n    setOperation(operand:string):void {\r\n        this.operation=operand;\r\n        // If operator already set - nothing doing\r\n        if (this.is_operand) {\r\n            this.operation = operand;\r\n            return null;\r\n        }\r\n        this.is_operand = true;\r\n        this.stack.push(this.formula);\r\n        this.stack.push(this.operation);\r\n        this.start=true;\r\n    }\r\n\r\n    calculate():number {\r\n        let result:number;\r\n        if (this.stack.length<3) return;\r\n        this.is_operand = false;\r\n        this.current_number=this.parse(this.stack.pop());\r\n        this.operation=this.stack.pop();\r\n        this.prev_number=this.parse(this.stack.pop());\r\n        if (!this.prev_number) return 0;\r\n\r\n        switch (this.operation) {\r\n            case '+':\r\n                result=this.prev_number+this.current_number;\r\n                this.show(result);\r\n                break;\r\n            case '-':\r\n                result=this.prev_number-this.current_number;\r\n                this.show(result);\r\n                break;\r\n            case '*':\r\n                result=this.prev_number*this.current_number;\r\n                this.show(result);\r\n                break;\r\n            case '/':\r\n                result=this.prev_number/this.current_number;\r\n                this.show(result);\r\n                break;\r\n            case 'sqrt':\r\n                result=Math.pow(this.prev_number,1/this.current_number);\r\n                this.show(result);\r\n                break;\r\n            case 'pow':\r\n                result=Math.pow(this.prev_number,this.current_number);\r\n                this.show(result);\r\n                break;\r\n            case 'yx':\r\n                result = Math.pow(this.current_number, this.prev_number);\r\n                this.show(result);\r\n                break;\r\n            case 'log':\r\n                result = Math.log(this.prev_number) / Math.log(this.current_number);\r\n                break;\r\n        }\r\n\r\n        this.current_number=this.parse(this.formula);\r\n\r\n        this.start=true;\r\n        return result;\r\n    }\r\n\r\n\r\n    addValue(value:string,start:boolean):string {\r\n        if (start || this.start || (this.dotted == false && this.formula == '0' && value != '.')) {\r\n            this.formula='';\r\n        }\r\n        this.start=start;\r\n        if (value=='.') {\r\n            if (this.dotted==true) {\r\n                return this.formula;    \r\n            }\r\n            this.dotted=true;\r\n        }\r\n        this.formula+=value;\r\n        this.is_operand = false;\r\n        return this.formula;\r\n    }\r\n\r\n    removeSymbol():void {\r\n        let len=this.formula.length;\r\n        let last_symbol=this.formula.substring(len - 1,len);\r\n        if (last_symbol == '.') {\r\n            this.dotted=false;\r\n        }\r\n        this.formula=this.formula.slice(0,-1);\r\n    }\r\n\r\n    singleton(operand:string,data:any):number {\r\n        let result:number=0;\r\n        let rad:number=0;\r\n        let grad=180/Math.PI;\r\n        this.current_number=parseFloat(this.formula);\r\n        \r\n        switch (operand) {\r\n            case 'invert':\r\n                result=this.current_number*data;\r\n            break;\r\n            case 'sqrt':\r\n                result=Math.sqrt(this.current_number);\r\n            break;\r\n            case 'sqrt3':\r\n                result=Math.pow(this.current_number,1/3);\r\n            break;\r\n            case 'ln':\r\n                result=Math.log(this.current_number);\r\n            break;\r\n            case 'lg':\r\n                result=Math.log(this.current_number)/Math.log(data);\r\n            break;\r\n            case 'pow_base':\r\n                let base=data=='e' ? Math.E : data;\r\n                result=Math.pow(base,this.current_number);\r\n            break;\r\n            case 'pow':\r\n                let step=parseFloat(data);\r\n                result=Math.pow(this.current_number,step);\r\n            break;\r\n            case 'div':\r\n                result=1/this.current_number;\r\n            break;\r\n            case 'sin':\r\n                rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n                result=Math.sin(rad);\r\n            break;\r\n            case 'cos':\r\n                rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n                result=Math.cos(rad);\r\n            break;\r\n            case 'tan':\r\n                rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n                result=Math.tan(rad);\r\n            break;\r\n            case 'sinh':\r\n                rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n                result=(Math.exp(rad)-Math.exp(-rad))/2;\r\n            break;\r\n            case 'cosh':\r\n                rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n                result=(Math.exp(rad)+Math.exp(-rad))/2;\r\n            break;\r\n            case 'tanh':\r\n                rad=(this.radians) ? this.current_number : this.current_number/grad;\r\n                result=(Math.exp(rad)-Math.exp(-rad))/(Math.exp(rad)+Math.exp(-rad));\r\n            break;\r\n            case 'asin':\r\n                result=Math.asin(this.current_number);\r\n                result=(this.radians) ? result : result*grad;\r\n            break;\r\n            case 'acos':\r\n                result=Math.acos(this.current_number);\r\n                result=(this.radians) ? result : result*grad;\r\n            break;\r\n            case 'atan':\r\n                result=Math.atan(this.current_number);\r\n                result=(this.radians) ? result : result*grad;\r\n            break;\r\n            case 'asinh':\r\n                result=Math.asinh(this.current_number);\r\n                result=(this.radians) ? result : result*grad;\r\n            break;\r\n            case 'acosh':\r\n                result=Math.acosh(this.current_number);\r\n                result=(this.radians) ? result : result*grad;\r\n            break;\r\n            case 'atanh':\r\n                result=Math.atanh(this.current_number);\r\n                result=(this.radians) ? result : result*grad;\r\n            break;\r\n            case 'rand':\r\n                result=Math.random();\r\n            break;\r\n            case 'factorial':\r\n                let n=Math.ceil(this.current_number);\r\n                result=1;\r\n                for (let i=1;i<=n;i++) {\r\n                    result*=i;\r\n                }\r\n            break;\r\n            case 'percent':\r\n                result=this.current_number/100;\r\n            break;\r\n            case 'ee':\r\n                this.formula=this.current_number.toExponential();\r\n                return 0;\r\n        }\r\n\r\n        this.start=true;\r\n        this.show(result);\r\n        return result;\r\n    }\r\n\r\n    show(value:number):string {\r\n        this.formula=value.toString();\r\n        return this.formula;\r\n    }\r\n}","import { Component, OnInit, Inject, OnChanges, SimpleChanges, ViewChild, ElementRef } from '@angular/core';\r\nimport { MatDialog, MAT_DIALOG_DATA } from '@angular/material/dialog'\r\nimport { Formula } from '../../../modules/formula.model';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { BaseField } from '../../../models/baseField.model';\r\nimport { GlobalService } from '../../../services/global.service';\r\nimport * as acorn from \"acorn\";\r\nimport { DynAttachment } from '../../..//models/dynAttachment';\r\nimport { AttachmentField } from '../../../models/fields/attachmentField.model';\r\n\r\n@Component({\r\n  selector: 'eqp-dynamic-module-add-formula-component',\r\n  templateUrl: './add-formula-field.component.html',\r\n  styleUrls: ['./add-formula-field.component.scss']\r\n})\r\n\r\nexport class AddFormulaComponent implements OnInit, OnChanges {\r\n\r\n  @ViewChild('formula', { static: false }) formulaTextArea: ElementRef<HTMLTextAreaElement>;\r\n  caretPosition: number = 0;\r\n  fieldNull: boolean = true;\r\n  fieldSearched: string = \"\";\r\n  formula = new Formula('0');\r\n  stringaFormula: string = \"\";\r\n  counter: number = 0;\r\n  Fields: Array<BaseField> = [];\r\n  fieldBeingDragged: any = null;\r\n  formulaObject: any = null;\r\n  fullFieldMap: Record<string, string[] | any> = {};\r\n  filteredFieldMap: Record<string, string[]> = {};\r\n  recObj: Array<any> = new Array<any>;\r\n  error: string;\r\n\r\n  constructor(@Inject(MAT_DIALOG_DATA) public data: any,\r\n    public dialogRef: MatDialogRef<AddFormulaComponent>,\r\n    public dialog: MatDialog) {\r\n  }\r\n\r\n  //#region ngOnInit\r\n  ngOnInit(): void {\r\n    this.Fields = this.data.fields;\r\n\r\n    /////\r\n    // #region Gestione FormulaObject\r\n    /////\r\n    if (this.data.formulaObject != null) {\r\n      this.formulaObject = this.data.formulaObject;\r\n      GlobalService.debugLog(\"FORMULAOBJECT ASSEGNATO\", this.formulaObject);\r\n    }\r\n\r\n    if (this.formulaObject == null) { this.formulaObject = {}; }\r\n\r\n    this.fullFieldMap = this.getNestedPropertiesMap(this.formulaObject);\r\n\r\n    // aggiungo i fields\r\n    if (this.Fields != null && this.Fields.length > 0) {\r\n      this.fullFieldMap.rec = [];\r\n      this.recObj = [];\r\n\r\n      let recFiller = (item, field) => {\r\n        this.fullFieldMap.rec[\"rec.\" + field.Label] = [];\r\n        // funx per le chiavi degli oggetti\r\n        Object.keys(item).forEach(\r\n          (key) => {\r\n            // pusho tutte le chiavi\r\n            // this.fullFieldMap.rec.push(\"rec.\" + field.Label + \".\" + key);//;[field.Label] = \"\";\r\n            this.fullFieldMap.rec[\"rec.\" + field.Label].push(\"rec.\" + field.Label + \".\" + key);//;[field.Label] = \"\";\r\n          }\r\n        );\r\n      };\r\n\r\n      // per ogni campo preparo le stringhe per aiutare il configuratore e gli oggetti per l'eval\r\n      this.Fields.forEach((field) => {\r\n\r\n        if(field.FieldType == 6 ){\r\n          // field type 6 è un allegato\r\n          // preparo l'oggetto per l'eval\r\n          this.recObj[field.Label] = new AttachmentField();\r\n          recFiller(this.recObj[field.Label], field)\r\n        } else if(field.FieldType == 8 ){\r\n          // field type 8 elengo generico\r\n          // preparo l'oggetto per l'eval\r\n          this.recObj[field.Label] = [];\r\n          this.fullFieldMap.rec.push(\"rec.\" + field.Label);\r\n        } else if(field.FieldType == 7 || field.FieldType == 11 || field.FieldType == 13 ){\r\n          // field type 7, 11, 13 ha risultato di tipo DynAttachment o lista di tali\r\n          // preparo l'oggetto per l'eval\r\n          this.recObj[field.Label] = new DynAttachment();\r\n          recFiller(this.recObj[field.Label], field)\r\n        } else {\r\n          this.fullFieldMap.rec.push(\"rec.\" + field.Label);//;[field.Label] = \"\";\r\n          this.recObj[field.Label] = undefined;\r\n        }\r\n\r\n      });\r\n\r\n    }\r\n\r\n    this.filteredFieldMap = this.fullFieldMap;\r\n    GlobalService.debugLog(\"RESULT this.getNestedPropertiesMap\", this.fullFieldMap);\r\n    /////\r\n    // #endregion Gestione FormulaObject\r\n    /////\r\n\r\n\r\n\r\n    if (this.Fields != undefined)\r\n      if (this.Fields.length == 0) {\r\n        this.fieldNull = true;\r\n      } else {\r\n        this.fieldNull = false;\r\n      }\r\n\r\n    if (this.data.formula != undefined && this.data.formula != null && this.data.formula != \"\" && this.data.formula != \"undefined\") {\r\n      this.stringaFormula = this.data.formula;\r\n      localStorage.setItem(\"formula\", this.data.formula);\r\n    } else {\r\n      localStorage.setItem(\"formula\", \"\");\r\n    }\r\n  }\r\n  //#endregion ngOnInit\r\n\r\n  clear(): any {\r\n    this.stringaFormula = \"\";\r\n  }\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    this.caretPosition = this.formulaTextArea.nativeElement.selectionStart;\r\n  }\r\n  lostFocus(textArea) {\r\n    this.caretPosition = textArea.selectionStart;\r\n  }\r\n\r\n  //#region fieldSearchEvent\r\n  // fieldSearchEvent() {\r\n  //   this.fieldSearch(this.fieldSearched);\r\n  // }\r\n  fieldSearchEvent(): void {\r\n    const query = this.fieldSearched.toLowerCase();\r\n    this.filteredFieldMap = {};\r\n\r\n    for (const key in this.fullFieldMap) {\r\n      const filtered = this.fullFieldMap[key].filter(path =>\r\n        path.toLowerCase().includes(query)\r\n      );\r\n      if (filtered.length > 0) {\r\n        this.filteredFieldMap[key] = filtered;\r\n      }\r\n    }\r\n  }\r\n\r\n  fieldSearch(text: string) {\r\n    this.Fields = this.data.fields.filter(x => x.Label.indexOf(text) != -1);\r\n  }\r\n  //#endregion fieldSearchEvent\r\n\r\n  back() {\r\n\r\n    if (localStorage.getItem('formula') != undefined || localStorage.getItem('formula') != null || localStorage.getItem('formula') != \"undefined\") {\r\n      this.dialogRef.close({ formula: localStorage.getItem('formula').toString() });\r\n      localStorage.removeItem('formula');\r\n    }\r\n    else\r\n      this.dialogRef.close({ formula: \" \" });\r\n  }\r\n\r\n  addSymbol(value: string): void {\r\n    this.stringaFormula = this.stringaFormula.trim()\r\n    let lastChar = this.stringaFormula.charAt(this.stringaFormula.length - 1);\r\n    // se l'ultimo carattere è un operatore matematico mi limito a concatenare la fomrula\r\n    // altrimenti vado a moltiplicare quello che c'era prima per la formula che sto aggiungendo\r\n    const nonCalcolableChars = ['+','-','*','/','(','[',']','{','}','<','>','=',':',';','!',''];\r\n    if ( nonCalcolableChars.includes(lastChar)) {\r\n      if (this.caretPosition != 0) {\r\n        var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n        substringa = substringa.trim();\r\n        substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n        this.stringaFormula = substringa;\r\n      }\r\n      else {\r\n        this.stringaFormula = this.stringaFormula + \" \" + value;\r\n      }\r\n\r\n    }\r\n    else {\r\n      if (this.caretPosition != 0) {\r\n        var substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n        substringa = substringa.trim();\r\n        substringa = substringa + \" * \" + value + this.stringaFormula.substring(this.caretPosition);\r\n        this.stringaFormula = substringa;\r\n      }\r\n      else {\r\n        this.stringaFormula = this.stringaFormula + \" * \" + value;\r\n      }\r\n\r\n    }\r\n  }\r\n\r\n  addListNumberReader() {\r\n    this.counter++;\r\n    const value = \"let value\" + this.counter + \" = 0; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n    this.addNumber(value);\r\n  }\r\n\r\n  addListStringrReader() {\r\n    this.counter++;\r\n    const value = \"let value\" + this.counter + \" = \\\"\\\"; let elenco\" + this.counter + \" = INSERISCI_IL_TUO_ELENCO; if (elenco\" + this.counter + \" != null && elenco\" + this.counter + \".constructor == Array){ for (let i = 0; i < elenco\" + this.counter + \".length; i++) { value\" + this.counter + \" += elenco\" + this.counter + \"[i]; } } else { value\" + this.counter + \" = elenco\" + this.counter + \" }\";\r\n    this.addNumber(value);\r\n  }\r\n\r\n  addArrayList(): void {\r\n    this.counter++;\r\n    const value = \"var outputList\" + this.counter + \" = { \\\"key\\\" : value , \\\"key2\\\" : value2 }; outputList\" + this.counter + \";\";\r\n    this.addNumber(value);\r\n  }\r\n\r\n  addNumber(value: string): void {\r\n    this.stringaFormula = this.stringaFormula.trim();\r\n    if (UtilityHelperService.isNumeric(value)) {\r\n      if (this.caretPosition != 0) {\r\n        let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n        substringa = substringa.trim();\r\n        substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n        this.stringaFormula = substringa;\r\n      }\r\n      else {\r\n        this.stringaFormula = this.stringaFormula + value;\r\n      }\r\n      this.caretPosition += 1;\r\n    }\r\n    else {\r\n      if (value == \".\") {\r\n        if (this.caretPosition != 0) {\r\n          let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n          substringa = substringa.trim();\r\n          substringa = substringa + value + this.stringaFormula.substring(this.caretPosition);\r\n          this.stringaFormula = substringa;\r\n        }\r\n        else {\r\n          this.stringaFormula = this.stringaFormula + value;\r\n        }\r\n      } else {\r\n        if (this.caretPosition != 0) {\r\n          let substringa = this.stringaFormula.substring(0, this.caretPosition);\r\n          substringa = substringa.trim();\r\n          substringa = substringa + \" \" + value + this.stringaFormula.substring(this.caretPosition);\r\n          this.stringaFormula = substringa;\r\n        }\r\n        else {\r\n          this.stringaFormula = this.stringaFormula + \" \" + value;\r\n        }\r\n      }\r\n      this.caretPosition += 2;\r\n    }\r\n  }\r\n\r\n  addDateNow() {\r\n    this.stringaFormula = this.stringaFormula + \" let date = new Date(); date \";\r\n  }\r\n\r\n  addElencoImmagini(nomechiave) {\r\n    this.stringaFormula = this.stringaFormula + \" let fieldname = 'NOME DEL CAMPO'; rec[fieldname].\" + nomechiave + \" \";\r\n  }\r\n\r\n  onDraggedField() {\r\n    if (this.fieldBeingDragged != null) {\r\n      this.stringaFormula = this.stringaFormula.substring(0, this.caretPosition) + this.fieldBeingDragged + \" \" + this.stringaFormula.substring(this.caretPosition);\r\n      this.caretPosition = this.stringaFormula.length;\r\n      this.fieldBeingDragged = null;\r\n    }\r\n  }\r\n\r\n  onDragStarted(label) {\r\n    this.fieldBeingDragged = label;\r\n  }\r\n\r\n  chkFormula(formula: string){\r\n\r\n    \r\n    try {\r\n      acorn.parse(formula, { ecmaVersion: 2020 });\r\n    } catch (err) {\r\n      console.error(\"Errore di sintassi:\", err.message);\r\n      this.error = err.message;\r\n      return;\r\n    }\r\n\r\n      // 2. Controllo runtime\r\n    try {      \r\n      //! questo metodo è più sicuro ma richiede di trasformare tutte le vecchie formule in modo da avere un return\r\n      // creo una funzione che accetta rec e ctx\r\n      // const fn = new Function(\"rec\", \"ctx\", `return ${formula};`);\r\n      // eseguo passando i valori\r\n      // fn(this.fullFieldMap.rec, this.formulaObject)\r\n\r\n      //! questo metodo è poco sicuro ma è nato così\r\n      let rec = this.recObj;\r\n      let ctx = this.formulaObject;\r\n      const evaluatedValue = eval(formula);\r\n    } catch (err: any) {\r\n      console.error(\"Errore di runtime: \" + err.message);\r\n      this.error = err.message;\r\n      return;\r\n    }\r\n\r\n    this.error = null;\r\n  }\r\n\r\n  //#region save\r\n  save() {\r\n    this.stringaFormula = this.stringaFormula.trim();\r\n\r\n    this.chkFormula(this.stringaFormula);\r\n\r\n    if(this.error != null){\r\n      return;\r\n    }\r\n\r\n    if (UtilityHelperService.stringCheckParentesis(this.stringaFormula)) {\r\n      localStorage.removeItem('formula');\r\n      this.dialogRef.close({ formula: this.stringaFormula });\r\n    }\r\n    else {\r\n      this.dialog.open(DialogDataExampleDialog, {\r\n      });\r\n    }\r\n  }\r\n  //#endregion save\r\n\r\n  //#region getNestedPropertiesMap\r\n  //obj: any: è l'oggetto da analizzare.\r\n  //Record<string, string[]>: indica che il risultato sarà un oggetto i cui campi sono stringhe, e i valori sono array di stringhe.\r\n  getNestedPropertiesMap(obj: any): Record<string, string[]> {\r\n    const result: Record<string, string[]> = {};\r\n\r\n    for (const key in obj) {\r\n      //Il controllo con hasOwnProperty serve per evitare proprietà ereditate (buona pratica)\r\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n        const value = obj[key];\r\n\r\n        if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\r\n          //Se il valore è un oggetto, chiamiamo getPropertyPaths per ottenere i percorsi annidati.\r\n          result[key] = this.getPropertyPaths(value, \"ctx.\" + key);\r\n        } else {\r\n          //Altrimenti, salviamo solo il nome diretto.\r\n          result[key] = [\"ctx.\" + key];\r\n        }\r\n      }\r\n    }\r\n\r\n    return result;\r\n  }\r\n  //#endregion getNestedPropertiesMap\r\n\r\n  //#region getPropertyPaths\r\n  // Riceve un oggetto da esplorare e un prefisso (\"user\", \"med\", ecc.).\r\n  //Restituisce un array di stringhe con i percorsi delle proprietà figlie.\r\n  getPropertyPaths(obj: any, prefix: string): string[] {\r\n    const paths: string[] = [];\r\n\r\n    for (const key in obj) {\r\n      if (Object.prototype.hasOwnProperty.call(obj, key)) {\r\n        const value = obj[key];\r\n        //Costruisce il percorso completo\r\n        const fullPath = `${prefix}.${key}`;\r\n\r\n        if (value !== null && typeof value === \"object\" && !Array.isArray(value)) {\r\n          //Se troviamo un oggetto annidato (es. ClinicLibrary), chiamiamo di nuovo la funzione (ricorsione).\r\n          paths.push(...this.getPropertyPaths(value, fullPath));\r\n        } else {\r\n          //Altrimenti, aggiungiamo il percorso finale all'array.\r\n          paths.push(fullPath);\r\n        }\r\n      }\r\n    }\r\n\r\n    return paths;\r\n  }\r\n  //#endregion getPropertyPaths\r\n\r\n  isKeyValueList(list: any[]): boolean {\r\n    const result =  Array.isArray(list) && list.length > 0;\r\n    return result;\r\n  }\r\n}\r\n\r\n@Component({\r\n  selector: 'dialog-data-example',\r\n  templateUrl: 'dialog-data-example.component.html'\r\n})\r\nexport class DialogDataExampleDialog {\r\n  constructor() { }\r\n}","<div class=\"container\">\r\n  <div class=\"row\">\r\n    <div class=\"col-9\">\r\n      <div class=\"row\">\r\n        <div class=\"col-12 pt-2\">\r\n          <div class=\"p-1\">\r\n            <textarea\r\n              name=\"formula\"\r\n              #formula\r\n              type=\"textarea\"\r\n              id=\"formula\"\r\n              rows=\"10\"\r\n              style=\"width: 100%\"\r\n              class=\"droptarget\"\r\n              (click)=\"lostFocus(formula)\"\r\n              (keyup)=\"lostFocus(formula)\"\r\n              (blur)=\"lostFocus(formula)\"\r\n              (mouseup)=\"onDraggedField()\"\r\n              [(ngModel)]=\"stringaFormula\"\r\n            ></textarea>\r\n            <div>\r\n              <p *ngIf=\"error\" style=\"color:red;\">{{error}}</p>\r\n              <p *ngIf=\"!error\"> Ok </p>\r\n              <span>\r\n                <button type=\"button\" (click)=\"this.chkFormula(stringaFormula)\"> Test formula </button>\r\n                <span *ngIf=\"error\" class=\"ms-3\">\r\n                  <!-- Spesso in fondo all'errore ci sono due numeri traparentesi. Indicano rispettivamente la riga e il carattere. -->\r\n                  Tra parentesi indicato la riga e il carattere in cui vi è errore\r\n                </span>\r\n              </span>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"row\">\r\n        <div class=\"col-12\">\r\n          <div class=\"p-1 form-group\">\r\n            <form method=\"POST\" class=\"alert alert-secondary\">\r\n              <div class=\"w-100\">\r\n                <div class=\"row pt-2\">\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addDateNow()\"\r\n                    >\r\n                      dateNow\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addListStringrReader()\"\r\n                    >\r\n                      Leggi Elenco Txt\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addListNumberReader()\"\r\n                    >\r\n                      Leggi Elenco Num\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addArrayList()\"\r\n                    >\r\n                      ArrayList\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"\r\n                        addNumber(\r\n                          'if( Condizione ) { se vera } else { se falsa }'\r\n                        )\r\n                      \"\r\n                    >\r\n                      IF\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addNumber('/100')\"\r\n                    >\r\n                      %\r\n                    </button>\r\n                  </div>\r\n\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-danger\"\r\n                      (click)=\"clear()\"\r\n                    >\r\n                      C\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-xl btn-info\"\r\n                      (click)=\"addNumber('/')\"\r\n                    >\r\n                      &divide;\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n                <div class=\"row pt-2\">\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.pow( valore ,2)')\"\r\n                    >\r\n                      x<sup>2</sup>\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.pow( valore ,3)')\"\r\n                    >\r\n                      x<sup>3</sup>\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.pow( valore , potenza )')\"\r\n                    >\r\n                      x<sup>y</sup>\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addNumber(' * 3.14 ')\"\r\n                    >\r\n                      &#x213C;\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('7')\"\r\n                    >\r\n                      7\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('8')\"\r\n                    >\r\n                      8\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('9')\"\r\n                    >\r\n                      9\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-xl btn-info\"\r\n                      (click)=\"addNumber('*')\"\r\n                    >\r\n                      &times;\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n                <div class=\"row pt-2\">\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.sqrt( valore )')\"\r\n                    >\r\n                      <sup>2</sup>&radic;x\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.pow( radice , 1/ valore )')\"\r\n                    >\r\n                      <sup>y</sup>&radic;x\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.log( valore )')\"\r\n                    >\r\n                      ln\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.log10( valore )')\"\r\n                    >\r\n                      log\r\n                    </button>\r\n                  </div>\r\n\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('4')\"\r\n                    >\r\n                      4\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('5')\"\r\n                    >\r\n                      5\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('6')\"\r\n                    >\r\n                      6\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-xl btn-info\"\r\n                      (click)=\"addNumber('-')\"\r\n                    >\r\n                      &minus;\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n                <div class=\"row pt-2\">\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.sin( valore )')\"\r\n                    >\r\n                      sin\r\n                    </button>\r\n                  </div>\r\n\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.cos( valore )')\"\r\n                    >\r\n                      cos\r\n                    </button>\r\n                  </div>\r\n\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addSymbol('Math.tan( valore )')\"\r\n                    >\r\n                      tan\r\n                    </button>\r\n                  </div>\r\n\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addNumber('* 2.718281828459045')\"\r\n                    >\r\n                      e\r\n                    </button>\r\n                  </div>\r\n\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('1')\"\r\n                    >\r\n                      1\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('2')\"\r\n                    >\r\n                      2\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('3')\"\r\n                    >\r\n                      3\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-xl btn-info\"\r\n                      (click)=\"addNumber('+')\"\r\n                    >\r\n                      &#43;\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n                <div class=\"row pt-2\">\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addElencoImmagini('ButtonKey')\"\r\n                    >\r\n                      Elenco Immagini: Chiave\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-secondary\"\r\n                      (click)=\"addElencoImmagini('ButtonValue')\"\r\n                    >\r\n                      Elenco Immagini: Valore\r\n                    </button>                    \r\n                  </div>\r\n                  <div class=\"col\"></div>\r\n                  <div class=\"col\"></div>\r\n\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('0')\"\r\n                    >\r\n                      0\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-success\"\r\n                      (click)=\"addNumber('.')\"\r\n                    >\r\n                      .\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\">\r\n                    <button\r\n                      class=\"form-control btn btn-sm btn-primary bg-danger text-white \"\r\n                      (click)=\"back()\"\r\n                    >\r\n                      ❌ Annulla\r\n                    </button>\r\n                  </div>\r\n                  <div class=\"col d-lt-flex\" [matTooltip]=\"error ? 'Testa la formula per abilitare' : 'Testa la formula e Salva 😊'\">\r\n                    <button\r\n                      [disabled]=\"error\"\r\n                      class=\"form-control btn btn-sm btn-primary bg-success text-white \"\r\n                      (click)=\"save()\"\r\n                    >\r\n                      💾 Salva\r\n                    </button>\r\n                  </div>\r\n                </div>\r\n              </div>\r\n            </form>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"col-3 p-2 overflow-auto\" style=\"max-height: 80vh;\">\r\n      <mat-form-field class=\"example-full-width\">\r\n        <mat-label>Ricerca</mat-label>\r\n        <input\r\n          matInput\r\n          placeholder=\"Cerca campo\"\r\n          [(ngModel)]=\"fieldSearched\"\r\n          (input)=\"fieldSearchEvent()\"\r\n        />\r\n        <tmw-icon class=\"mat-icon\" matSuffix name=\"search\"></tmw-icon>\r\n      </mat-form-field>\r\n    \r\n      <mat-accordion multi>\r\n        <mat-expansion-panel *ngFor=\"let group of filteredFieldMap | keyvalue\">\r\n          <!-- ACCORDION 1 LIVELLO -->\r\n          <mat-expansion-panel-header>\r\n            <mat-panel-title>\r\n              {{ group.key }}\r\n            </mat-panel-title>\r\n          </mat-expansion-panel-header>\r\n\r\n          <!-- CONTENUTO PRIMO LIVELLO -->\r\n          <div\r\n            cdkDropList\r\n            cdkDropListOrientation=\"vertical\"\r\n            class=\"example-list\"\r\n          >\r\n          <ng-container  *ngFor=\"let field of group.value | keyvalue\" >\r\n              <!-- SE NON CONTINE LISTA -->\r\n              <div\r\n                *ngIf=\"!isKeyValueList(field.value)\" \r\n                class=\"example-box\"\r\n                cdkDrag\r\n                draggable=\"true\"\r\n                (cdkDragStarted)=\"onDragStarted(field.value)\"\r\n                [attr.data-drag-data]=\"field.value\"\r\n              >\r\n                {{ field.value }}\r\n              </div>\r\n\r\n              <!-- SE CONTIENE LISTA -->\r\n              <div *ngIf=\"isKeyValueList(field.value)\">\r\n                <mat-accordion multi class=\"nested-accordion\">\r\n    \r\n                  <!-- HEADER SECONDO LIVELLO -->\r\n                  <mat-expansion-panel>\r\n                    <mat-expansion-panel-header>\r\n                      <mat-panel-title>\r\n                        {{ field.key }}\r\n                      </mat-panel-title>\r\n                    </mat-expansion-panel-header>\r\n      \r\n                    <!-- CONTENUTO SECONDO LIVELLO -->\r\n                    <div *ngFor=\"let item of field.value\"\r\n                      class=\"example-box\"\r\n                      cdkDrag\r\n                      draggable=\"true\"\r\n                      (cdkDragStarted)=\"onDragStarted(item)\"\r\n                      [attr.data-drag-data]=\"item\"\r\n                    >\r\n                      {{ item }}\r\n                    </div>\r\n\r\n                  </mat-expansion-panel>\r\n                </mat-accordion>\r\n              </div>\r\n\r\n\r\n            </ng-container>\r\n\r\n          </div>\r\n\r\n\r\n\r\n          <!-- <div\r\n            cdkDropList\r\n            cdkDropListOrientation=\"vertical\"\r\n            class=\"example-list\"\r\n          >\r\n            <div\r\n              class=\"example-box\"\r\n              *ngFor=\"let field of group.value\"\r\n              cdkDrag\r\n              draggable=\"true\"\r\n              (cdkDragStarted)=\"onDragStarted(field)\"\r\n              [attr.data-drag-data]=\"field\"\r\n            >\r\n              {{ field }}\r\n            </div>\r\n          </div> -->\r\n\r\n\r\n\r\n\r\n\r\n\r\n\r\n        </mat-expansion-panel>\r\n      </mat-accordion>\r\n    </div>\r\n    \r\n  </div>\r\n</div>\r\n","<h1 mat-dialog-title>Errore!</h1>\r\n<div mat-dialog-content>\r\n  La funzione inserita contiene parentesi non chiuse! prima di salvare controlla la funzione.\r\n  \r\n</div>","import { Component, Input, EventEmitter, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { ActionButton, ActionFlagEnum, TriggerProperty, TriggerPropertyTypeEnum } from '../../../models/trigger.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from '../../../models/endPointConfiguration.model';\r\nimport { FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\n\r\nimport { GlobalService } from '../../../services/global.service';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\nimport { ActionButtonField } from '../../../models/fields/actionButton.model';\r\n\r\n@Component({\r\n  selector: 'action-button-creator',\r\n  templateUrl: './action-button-creator.component.html',\r\n  styleUrls: ['./action-button-creator.component.scss']\r\n})\r\nexport class ActionButtonCreatorComponent {\r\n\r\n  @Input(\"form\") form: Form;\r\n  @Input(\"actionButton\") actionButton: ActionButton = null;\r\n  @Input(\"actionButtonField\") actionButtonField: ActionButtonField = null;\r\n  @Input(\"formulas\") formulas: any = null;\r\n  @Input(\"endPointConfiguration\") endPointConfiguration: EndPointConfiguration;\r\n  @Input(\"InField\") InField: boolean = false;\r\n  @Input() formulaObject: any = {};\r\n\r\n  @Output() onSaveRecord: EventEmitter<ActionButton> = new EventEmitter<ActionButton>();\r\n  @Output() onChangeSomething: EventEmitter<ActionButton> = new EventEmitter<ActionButton>();\r\n\r\n    FieldTypeEnum = FieldTypeEnum;\r\n    isSaving: boolean = false;\r\n    selectedFormula: any;\r\n    formulaKeys: Array<any> = new Array<any>();\r\n    formulaFieldsStructure: Array<any> = new Array<any>();\r\n    actionsFlag = ActionFlagEnum;\r\n    triggerPropertyType = TriggerPropertyTypeEnum;\r\n  \r\n    dialogFormulaRef: MatDialogRef<TemplateRef<any>>;\r\n    @ViewChild(\"dialogFormula\", { static: true }) dialogFormula: TemplateRef<any>;\r\n  \r\n    forms: Array<Form>;\r\n    private modulesLoaded: boolean = false;\r\n\r\n    constructor(private dialog: MatDialog, private utilityHelperService: UtilityHelperService){}\r\n    \r\n    ngOnInit(){\r\n\r\n      ///\r\n      /// Questo componente funziona sia per i bottoni dei fields sia per i bottoni sugli header (addrecord, listview eccetera)\r\n      /// Se si sta lavorando sui fields è popolato 'this.actionButtonField' altrimenti è null.\r\n      ///\r\n\r\n      if (this.actionButtonField != null){\r\n        this.actionButton = <ActionButton>this.actionButtonField;\r\n      }\r\n      \r\n      if (this.actionButton != null && this.actionButton.execution != null) {\r\n        this.selectedFormula = {};\r\n        this.selectedFormula.key = this.actionButton.execution;\r\n\r\n        /*\r\n        if (this.actionButtonField == null){\r\n          this.formulaFieldsStructure = new Array<any>();\r\n          this.formulas.forEach((res) => {\r\n            this.formulaFieldsStructure.push({\"key\": res.key, \"type\": this.formulas[this.selectedFormula.key][res].type, \"tooltip\": this.formulas[this.selectedFormula.key][res].tooltip});\r\n          });   \r\n\r\n          Object.keys(this.actionButton.formulasTemp).forEach((res) => {\r\n            this.formulaFieldsStructure.find(x => x.key == res).value = this.actionButton.formulasTemp[res].value;\r\n          });\r\n        } else {\r\n          this.formulaFieldsStructure.push(this.actionButton.formulas);\r\n        }\r\n\r\n        */\r\n\r\n        if (this.actionButtonField == null){\r\n          Object.keys(this.actionButton.formulasTemp).forEach((key) => {\r\n            if (!this.isAnActionKey(key, this.actionButton, this.formulas)){ return; }\r\n            this.formulaFieldsStructure.push(this.actionButton.formulasTemp[key]);\r\n          });\r\n\r\n        } else {\r\n          this.formulaFieldsStructure = this.actionButtonField.formulas;\r\n        }        \r\n\r\n      }\r\n\r\n      if (this.actionButton == null){\r\n        this.actionButton = new ActionButton();\r\n      }\r\n\r\n      // aggiungo un elemento monoformula da eseguire solo all'azione per il modulo\r\n      this.formulas.execute_formula = {};\r\n      this.formulas.execute_formula.formula = new TriggerProperty(TriggerPropertyTypeEnum.STRING);\r\n\r\n      if(this.formulas){\r\n        Object.keys(this.formulas).forEach((res) => {\r\n          this.formulaKeys.push({\"key\": res});\r\n        });\r\n      }\r\n\r\n      this.ensureModulesLoaded();\r\n\r\n    }\r\n\r\n    openFormulaDialog(formulaField: any) {\r\n      this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {\r\n        disableClose: true,\r\n        hasBackdrop: true,\r\n        width: \"75%\",\r\n        data: {\r\n          formula: this.formulaFieldsStructure.find(x => x.key == formulaField.key).value,\r\n          fields: this.form.Fields,\r\n          formulaObject: this.formulaObject\r\n        },\r\n      });\r\n      this.dialogFormulaRef.afterClosed().subscribe((result) => {\r\n        var formulaToChange = this.formulaFieldsStructure.find(x => x.key == formulaField.key);\r\n        formulaToChange.value = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n        this.onFormulaFieldChange(formulaToChange);\r\n      });\r\n    }\r\n\r\n    /**aggiorna  selectedFormula con il valore restituito dalla select\r\n     * qui non è chiaro se e quando richiamare il changeSomething \r\n     * */\r\n    onDropDownSelection(selectedAllowedValue){\r\n      \r\n      this.changeSomething(); // non si capisce a che serve, assegna cose\r\n      this.selectedFormula.selectedAllowedValue = selectedAllowedValue.value;\r\n\r\n    }\r\n\r\n    onFormulaFieldChange(formulaField: any){\r\n       this.changeSomething();\r\n    }    \r\n\r\n    onEqpSelectModule(ev, formulaField){\r\n      if (ev != null){\r\n        formulaField.value = ev.ID;    \r\n      } else {\r\n        formulaField.value = \"\";\r\n      }\r\n      this.changeSomething();\r\n    }    \r\n\r\n  saveOrExitForm(exit: boolean) {\r\n    GlobalService.debugLog('add-form-record saveRecordEvent')\r\n    if (exit) {\r\n      this.onSaveRecord.emit(null);\r\n    } else {\r\n\r\n      if (this.actionButton.ButtonUniqueId == null){ this.actionButton.ButtonUniqueId = this.generateGUID(); }\r\n      this.actionButton.ButtonCode = this.selectedFormula.key;\r\n\r\n      this.formulaFieldsStructure.forEach((formulaField) => {\r\n        if (typeof this.actionButton.formulas == \"undefined\"){ this.actionButton.formulas = {}; }\r\n        this.actionButton.formulasTemp[formulaField.key] = formulaField;\r\n        this.actionButton.execution = this.selectedFormula.key;\r\n      });\r\n      this.isSaving = true;\r\n\r\n      GlobalService.debugLog(\"ActionButtonCreatorComponent saveOrExitForm()\", this.actionButton);\r\n      this.onSaveRecord.emit(this.actionButton);\r\n    }\r\n  }    \r\n\r\n  generateGUID(): string {\r\n    const timestamp = new Date().getTime();\r\n    const randomNum = Math.floor(Math.random() * 1000000);\r\n    return `${timestamp}-${randomNum}`;\r\n  }\r\n\r\n  changeSomething(){\r\n    this.actionButton.ButtonCode = this.selectedFormula.key;\r\n\r\n    if (!this.actionButton.formulasTemp){ this.actionButton.formulasTemp = {}; }\r\n\r\n    this.formulaFieldsStructure.forEach((formulaField) => {\r\n      if (typeof this.actionButton.formulas == \"undefined\"){ this.actionButton.formulas = {}; }\r\n      this.actionButton.formulasTemp[formulaField.key] = formulaField;\r\n      this.actionButton.execution = this.selectedFormula.key;\r\n    });\r\n\r\n    this.onChangeSomething.emit(this.actionButton);\r\n  }\r\n\r\n  /**\r\n   * Chiama l'endpoint \"tutti i form\" solo se il tipo di action button attualmente selezionato\r\n   * ha almeno un campo DMMODULE, e solo la prima volta per apertura di modale: le chiamate\r\n   * successive (anche cambiando Tipo Action Button più volte) riusano \"this.forms\" già scaricato.\r\n   */\r\n  private ensureModulesLoaded(){\r\n    const needsModules = this.formulaFieldsStructure.some((f) => f.type == TriggerPropertyTypeEnum.DMMODULE);\r\n    if (!needsModules) { return; }\r\n\r\n    if (this.modulesLoaded) {\r\n      this.applyModulesToStructure();\r\n      return;\r\n    }\r\n\r\n    this.getAllModules();\r\n  }\r\n\r\n  private getAllModules(){\r\n\r\n    const dynamicModuleParams: Array<EndPointDataParams> =\r\n      new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"orgaid\",\r\n      ParamValue: this.form.OrgaID,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetAllFormEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Array<Form>) => {\r\n        this.forms = res;\r\n        this.forms = this.forms.sort((uno, due) => uno.Name.localeCompare(due.Name));\r\n        this.modulesLoaded = true;\r\n\r\n        this.applyModulesToStructure();\r\n      },\r\n      (err) => { }\r\n    );\r\n  }\r\n\r\n  private applyModulesToStructure(){\r\n    this.formulaFieldsStructure.forEach((res) => {\r\n      if (res.type == TriggerPropertyTypeEnum.DMMODULE){\r\n        res.object = this.forms.find(x => x.ID == res.value);\r\n      }\r\n    });\r\n  }\r\n\r\n  onChangeFormula(formula: any){\r\n\r\n    if (formula == null){  \r\n      this.changeSomething();\r\n      return;\r\n    }\r\n\r\n    GlobalService.debugLog('@@trigger-creator:onChangeFormula selected formula',formula)\r\n    GlobalService.debugLog('@@trigger-creator:onChangeFormula formulas',this.formulas)\r\n    GlobalService.debugLog(\"onChangeFormula formula.key\", formula.key);\r\n\r\n    this.formulaFieldsStructure = new Array<any>();\r\n\r\n\r\n    //------------\r\n    Object.keys(this.formulas[formula.key]).forEach((res) => {\r\n\r\n      this.formulaFieldsStructure.push({\r\n        \"key\": res, \r\n        \"type\": this.formulas[formula.key][res].type, \r\n        \"tooltip\": this.formulas[formula.key][res].tooltip,\r\n        \"value\" : this.formulas[formula.key][res].value,\r\n        /** per valori vincolati a liste */\r\n        \"allowedValues\" : this.formulas[formula.key][res].allowedValues,\r\n        \"selectedAllowedValue\" : this.formulas[formula.key][res].selectedAllowedValue\r\n\r\n      }); \r\n    });  \r\n    //------------\r\n    /* *** originale ***\r\n    Object.keys(this.formulas[formula.key]).forEach((res) => {\r\n      this.formulaFieldsStructure.push({\"key\": res, \"type\": this.formulas[formula.key][res].type\r\n      });\r\n    });\r\n    *** */\r\n    GlobalService.debugLog('@@trigger-creator:onChangeFormula formulaFieldsStructure',this.formulaFieldsStructure)\r\n\r\n    this.ensureModulesLoaded();\r\n\r\n    this.changeSomething();\r\n  }\r\n  \r\n  isAnActionKey(key, field: ActionButton, formulas: Array<any>){\r\n    var code = field.ButtonCode;\r\n    var els = formulas[code];\r\n    return (Object.keys(els).find(x => x == key) != null);\r\n  }\r\n\r\n}\r\n","\r\n<mat-card class=\"add-form-field\">\r\n    <mat-card-header *ngIf=\"!InField\">\r\n        <mat-card-title>\r\n            {{actionButton != null ? \"Modifica\" : \"Aggiungi\"}} bottone azione\r\n        </mat-card-title>\r\n    </mat-card-header>\r\n\r\n    <mat-card-content>\r\n\r\n    <div class=\"container-fluid containerContent padder\">\r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-3\">Tipo Action Button</div>\r\n            <div class=\"col-9\">\r\n                <tmw-select [arrayData]=\"formulaKeys\" [(ngModelInput)]=\"selectedFormula\"\r\n                [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\" [showCancelButton]=\"true\" (ngModelInputChange)=\"onChangeFormula($event)\">\r\n                </tmw-select>            \r\n            </div>\r\n        </div>\r\n  \r\n          <div class=\"row\">\r\n            <div class=\"col-3\">Etichetta</div>\r\n            <div class=\"col-9\">\r\n                <mat-form-field>\r\n                    <mat-label  class=\"pt-1\"> Etichetta </mat-label>\r\n                    <input matInput [(ngModel)]=\"actionButton.ButtonLabel\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n                </mat-form-field>\r\n            </div>\r\n          </div>\r\n  \r\n          <div class=\"row\">\r\n            <div class=\"col-3\">Icona (<a href='https://tabler.io/icons' target=\"_blank\">lista</a>)</div>\r\n            <div class=\"col-9\">\r\n                <mat-form-field>\r\n                    <mat-label  class=\"pt-1\"> Icona (<a href='https://tabler.io/icons' target=\"_blank\">lista</a>) </mat-label>\r\n                    <input matInput [(ngModel)]=\"actionButton.Icon\" [readonly]=\"false\" (keyup)=\"changeSomething()\">\r\n                </mat-form-field>\r\n            </div>\r\n          </div>   \r\n          \r\n          <div class=\"row\" *ngIf=\"!InField\">\r\n            <div class=\"col-3\">Sezioni</div>\r\n            <div class=\"col-9\">\r\n                <mat-label  class=\"pt-1\"> Sezioni </mat-label>\r\n                <tmw-select\r\n                  [enumData]=\"actionsFlag\"\r\n                  [isSearchable]=\"true\"\r\n                  [isMultiSelect] = \"true\"\r\n                  [(ngModelInput)]=\"actionButton.ShowIn\"        \r\n                  (ngModelInputChange)=\"changeSomething()\"             \r\n                >\r\n                </tmw-select>\r\n            </div>\r\n          </div>   \r\n\r\n        <div class=\"row\" *ngFor=\"let formulaField of formulaFieldsStructure\">\r\n            <div class=\"col-3\">{{formulaField.key}}</div>\r\n            <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.STRING\">\r\n                <mat-form-field>\r\n                    <mat-label  class=\"pt-1\"> {{formulaField.key}}</mat-label>\r\n                    <input matInput [readonly]=\"false\" [required]=\"false\" [matTooltip]=\"formulaField.tooltip\" (click)=\"openFormulaDialog(formulaField)\" [(ngModel)]=\"formulaField.value\" (ngModelChange)=\"onFormulaFieldChange(formulaField)\">\r\n                </mat-form-field>\r\n            </div>\r\n            <!-- i campi con valori(non calcolati) vincolati li mostro in una select-->\r\n\r\n            <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DROPDOWN_LIST\">\r\n               \r\n                    <tmw-select\r\n                        [placeholder]=\"'Seleziona valore'\"\r\n                        [arrayData]=\"formulaField.allowedValues\"\r\n                        (ngModelInputChange)=\"onDropDownSelection($event)\"\r\n                        [(ngModelInput)]=\"formulaField.selectedAllowedValue\"\r\n                        [arrayKeyProperty]=\"'key'\"\r\n                        [arrayValueProperty]=\"'value'\"\r\n                        [isRequired]=\"false\"\r\n                        class=\"eqp-form-field eqp-coloured\">\r\n                    </tmw-select>\r\n                   \r\n            </div>\r\n            \r\n            <!-- fine gestione liste-->\r\n            <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DMMODULE\">\r\n                <tmw-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"formulaField.object\" [isSearchable]=\"true\"\r\n                [arrayKeyProperty]=\"'ID'\" [arrayValueProperty]=\"'Name'\" [ngModelOptions]=\"{ standalone: true }\" (ngModelInputChange)=\"onEqpSelectModule($event, formulaField)\">\r\n                </tmw-select>\r\n            </div>\r\n        </div>\r\n\r\n    </div>\r\n\r\n    </mat-card-content>\r\n    <mat-card-footer *ngIf=\"!InField\">\r\n        <div class=\"d-flex justify-content-end mt-2 mb-1 me-3\"> \r\n            <button class=\"mr-2\" mat-raised-button type=\"button\" (click)=\"saveOrExitForm(true)\">\r\n                Annulla\r\n            </button>\r\n            <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\"\r\n                (click)=\"saveOrExitForm(false)\" [disabled]=\"isSaving\">\r\n                <span *ngIf=\"!isSaving\">Salva</span>\r\n                <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n            </button>\r\n        </div>\r\n    </mat-card-footer>\r\n\r\n</mat-card>\r\n\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n    <eqp-dynamic-module-add-formula-component>\r\n    </eqp-dynamic-module-add-formula-component>\r\n</ng-template>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { FieldExtraConfig, FieldExtraValues } from '../../../models/fieldExtraConfig.model';\r\nimport { Form } from '../../../models/form.model';\r\nimport { EndPointConfiguration } from '../../../models/endPointConfiguration.model';\r\nimport { BaseField, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';\r\n\r\n@Component({\r\n  selector: 'dynamic-module-field-extra-fix',\r\n  templateUrl: './dynamic-module-field-extra-fix.component.html',\r\n  styleUrls: ['./dynamic-module-field-extra-fix.component.scss']\r\n})\r\nexport class DynamicModuleFieldExtraFixComponent {\r\n\r\n  @Input() fieldExtraConfig: FieldExtraConfig;\r\n  @Input() form: Form;\r\n  @Input() field: BaseField;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n\r\n  @Output() configValueChange: EventEmitter<FieldExtraValues> = new EventEmitter<FieldExtraValues>();\r\n\r\n  FieldTypeEnum = FieldTypeEnum;\r\n  FieldExtraValues: FieldExtraValues = new FieldExtraValues();\r\n  loaded: boolean = false;\r\n  formExtraGroup: UntypedFormGroup;\r\n\r\n  constructor(\r\n    private formBuilder: UntypedFormBuilder\r\n  ) {}  \r\n\r\n  ngOnInit(){\r\n\r\n    this.FieldExtraValues = this.form.FldExtraConfigValues.find(x => x.FieldConfigCode == this.fieldExtraConfig.FieldConfigCode && (x.FieldConfigParentFieldCode == this.field.Name || x.FieldConfigParentFieldCode === undefined));\r\n\r\n    if (this.fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano']){\r\n      this.FieldExtraValues.FieldConfigValue = this.FieldExtraValues.FieldConfigValue == \"false\" || !this.FieldExtraValues.FieldConfigValue ? false : true;\r\n    }\r\n\r\n    this.configureForm();\r\n    this.loaded = true;\r\n  }\r\n\r\n  configureForm(){\r\n      this.formExtraGroup = this.formBuilder.group({\r\n        element: [this.FieldExtraValues.FieldConfigValue]\r\n      });\r\n  }\r\n\r\n}\r\n","\r\n\r\n<div [formGroup]=\"formExtraGroup\">\r\n\r\n  <mat-form-field appearance=\"outline\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Campo di testo'] && loaded\">\r\n      <mat-label class=\"pt-1\">\r\n        {{ fieldExtraConfig.FieldConfigLabel }}\r\n      </mat-label>\r\n      <input\r\n        matInput\r\n        [formControlName]=\"'element'\"\r\n        [(ngModel)]=\"FieldExtraValues.FieldConfigValue\"\r\n      />\r\n\r\n      <tmw-icon class=\"mat-icon\"\r\n        matSuffix\r\n        SpeechToText\r\n        [(bindedText)]=\"FieldExtraValues.FieldConfigValue\"\r\n        style=\"cursor: pointer\" name=\"microphone\"></tmw-icon>\r\n  </mat-form-field>\r\n\r\n  <mat-slide-toggle color=\"primary\" *ngIf=\"fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano'] && loaded\"\r\n  [formControlName]=\"'element'\"\r\n  [(ngModel)]=\"FieldExtraValues.FieldConfigValue\">\r\n  {{ fieldExtraConfig.FieldConfigLabel }}\r\n  </mat-slide-toggle>\r\n\r\n</div>","import {\r\n  ChangeDetectorRef,\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  TemplateRef,\r\n  ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n  AbstractControl,\r\n  FormControl,\r\n  UntypedFormBuilder,\r\n  UntypedFormControl,\r\n  UntypedFormGroup,\r\n  ValidationErrors,\r\n  ValidatorFn,\r\n  Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n  AttachmentType,\r\n  TmwAttachmentsComponent,\r\n  TmwAttachmentDTO,\r\n} from \"tmw-attachments\";\r\nimport { EnumHelper, TmwSelectOption } from \"tmw-select\";\r\nimport { ConfigColumn, TypeColumn } from \"tmw-table\";\r\nimport {\r\n  BaseField,\r\n  ColSpanSizesEnum,\r\n  DataGetterCardinalityEnum,\r\n  FieldInvisibilityEnum,\r\n  FieldTypeEnum\r\n} from \"../../../models/baseField.model\";\r\nimport {\r\n  AttachmentField,\r\n  AttachmentFieldStyleCSS,\r\n  AvailableFileExtensions,\r\n  AvailableImageExtensions,\r\n} from \"../../../models/fields/attachmentField.model\";\r\nimport {\r\n  BooleanField,\r\n  BooleanFieldStyleCSS,\r\n  BoolPresentantioEnum,\r\n} from \"../../../models/fields/booleanField.model\";\r\nimport {\r\n  DateField,\r\n  DateFieldStyleCSS,\r\n  DateTimeTypeEnum,\r\n} from \"../../../models/fields/dateField.model\";\r\nimport { ImageField, ImageFieldStyleCSS } from \"../../../models/fields/imageField.model\";\r\nimport {\r\n  ListPresentationEnum,\r\n  ListValueField,\r\n  ListValueFieldStyleCSS,\r\n} from \"../../../models/fields/listValueField.model\";\r\nimport { LookupField } from \"../../../models/fields/lookupField.model\";\r\nimport { NumericField, NumericFieldIconPositionEnum, NumericFieldStyleCSS } from \"../../../models/fields/numericField.model\";\r\nimport { TextareaField, TextareaFieldIconPositionEnum, TextareaFieldStyleCSS } from \"../../../models/fields/textareaField.model\";\r\nimport {\r\n  TextFieldIconPositionEnum,\r\n  TextFieldStyleCSS,\r\n  TextMaskEnum,\r\n  TextField,\r\n} from \"../../../models/fields/textField.model\";\r\nimport { FormFieldGroup, Form } from '../../../models/form.model';\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\nimport { ImageSelectorField, ImageSelectorFieldStyleCSS } from \"../../../models/fields/imageSelectorField.model\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { LabelField, LabelFieldStyleCSS } from \"../../../models/fields/labelField.model\";\r\nimport { ImageWithMarkersField, ImageWithMarkersFieldStyleCSS } from \"../../../models/fields/imageWithMarkersField.model\";\r\nimport { AttachmentFieldTypeEnum, DynAttachment } from \"../../../models/dynAttachment\";\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { DataGetterTypeEnum, DataGetter } from '../../../models/baseField.model';\r\nimport { QueryEditorModeEnum } from \"../dbgetter/dbgetter.component\";\r\nimport { ModeEnum, TimeTypeEnum } from \"tmw-picker\";\r\nimport { EndPointConfiguration, EndPointDataParams, ParamTypeEnum } from \"../../../models/endPointConfiguration.model\";\r\nimport { Contestualization } from \"../../../models/getter.model\";\r\nimport { Capacitor } from '@capacitor/core';\r\nimport { ActionButtonField, ActionButtonFieldStyleCSS, KeyTypeValue } from \"../../../models/fields/actionButton.model\";\r\nimport { FieldExtraConfig, FieldExtraValues } from '../../../models/fieldExtraConfig.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum } from '../../../models/statistic.model';\r\n\r\n@Component({\r\n  selector: \"eqp-dynamic-module-add-form-field\",\r\n  templateUrl: \"./add-form-field.component.html\",\r\n  styleUrls: [\"./add-form-field.component.scss\"],\r\n})\r\nexport class AddFormFieldComponent implements OnInit {\r\n\r\n  @Input() fieldsExtraConfig: Array<FieldExtraConfig>;\r\n  @Input() form: Form;\r\n  @Input() endPointConfiguration: EndPointConfiguration;\r\n  @Input() field: BaseField | any;\r\n  @Input() indexField: number;\r\n  @Input() formFieldsGroups: Array<FormFieldGroup>;\r\n  /** Elenco dei Field creati nella form, usati per popolare l'autocomplete della proprietà Formula. */\r\n  @Input() availableFields: Array<BaseField>;\r\n  @Input() fieldTypesToExclude: Array<FieldTypeEnum> = [FieldTypeEnum[\"Form di dettaglio\"], FieldTypeEnum.Lookup];\r\n  @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n  @Input() contestualization: Array<Contestualization> = null;\r\n  @Input() actionButtons: any;\r\n  @Input() formulaObject: any;\r\n\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n  @Output() saveFieldEvent: EventEmitter<{ field: BaseField, reopen: number }> = new EventEmitter<{ field: BaseField, reopen: number }>();\r\n  @Output() openAiEditForFieldEvent: EventEmitter<string> = new EventEmitter<string>();\r\n  @Output() openAiGraphicSuggestEvent: EventEmitter<{ code: string; hint: string }> = new EventEmitter<{ code: string; hint: string }>();\r\n\r\n  @Input() aiFieldSuggestLoading: boolean = false;\r\n\r\n  showGraphicSuggestInput: boolean = false;\r\n  graphicSuggestHint: string = '';\r\n\r\n  private static readonly HINT_PALETTES = [\r\n    'monocromatico vibrante', 'complementare', 'triadico', 'analogo caldo', 'analogo freddo',\r\n    'pastello delicato', 'neon su scuro', 'earth tones', 'oceano profondo', 'tramonto colorato',\r\n    'foresta autunnale', 'lavanda e oro', 'corallo e turchese', 'rosso e antracite', 'verde acqua e sabbia',\r\n    'viola elettrico e giallo limone', 'rosa cipria e grigio perla', 'blu cobalto e arancio bruciato',\r\n    'oro antico e bordeaux', 'menta fresca e cioccolato', 'argento e blu acciaio', 'pesca e indaco',\r\n    'rosso ciliegia e avorio', 'teal scuro e rame', 'lime e blu navy', 'lilla e verde salvia',\r\n    'azzurro ghiaccio e grigio ardesia', 'ambra e petrolio', 'smeraldo e rosa antico', 'bianco e nero con accento rosso fuoco',\r\n  ];\r\n  private static readonly HINT_STYLES = [\r\n    'minimalista', 'bold e vivace', 'elegante e sobrio', 'giocoso e dinamico', 'industriale',\r\n    'retrofuturista', 'organico e naturale', 'tech/digitale', 'luxury premium', 'vintage morbido',\r\n    'flat design pulito', 'glassmorphism', 'neumorfismo', 'dark mode raffinato',\r\n    'brutalist con bordi spessi', 'scandinavo pulito', 'art déco geometrico', 'cyberpunk distopico',\r\n    'pop art a tinte piatte', 'watercolor pastello sfumato', 'neon anni ottanta', 'material design con ombre',\r\n    'aurora boreale', 'swiss style tipografico', 'tropicale vivace', 'monocromo con accento singolo',\r\n    'aurora notturna scura', 'cottagecore caldo',\r\n  ];\r\n  private static readonly HINT_ADJECTIVES = [\r\n    'originale', 'imprevedibile', 'accattivante', 'spettacolare', 'delicato',\r\n    'audace', 'raffinato', 'giocoso', 'vivace', 'misterioso',\r\n    'caldo', 'fresco', 'romantico', 'futuristico', 'elegante',\r\n    'rustico', 'moderno', 'vintage', 'armonioso', 'sorprendente',\r\n  ];\r\n\r\n  randomizeGraphicHint(): void {\r\n    const pick = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)];\r\n    const C = AddFormFieldComponent;\r\n    const palette = pick(C.HINT_PALETTES);\r\n    const style   = pick(C.HINT_STYLES);\r\n    const adj1    = pick(C.HINT_ADJECTIVES);\r\n    const useTwo  = Math.random() < 0.5;\r\n    const adj2    = useTwo ? pick(C.HINT_ADJECTIVES.filter(a => a !== adj1)) : null;\r\n    const adjText = adj2 ? `${adj1} e ${adj2}` : adj1;\r\n    this.graphicSuggestHint = `Palette ${palette}, stile ${style}, ${adjText}`;\r\n  }\r\n\r\n  private ensureFieldCode(): string {\r\n    if (!this.field?.Label?.trim()) {\r\n      this.field.Description = this.field.Description?.trim() || 'Campo senza Nome';\r\n      this.field.Label = '_camposenzanome_';\r\n    }\r\n    return this.field.Label;\r\n  }\r\n\r\n  onOpenAiEditForField(): void {\r\n    this.openAiEditForFieldEvent.emit(this.field?.Label ?? '');\r\n  }\r\n\r\n  onGraphicSuggest(): void {\r\n    const code = this.ensureFieldCode();\r\n    this.openAiGraphicSuggestEvent.emit({ code, hint: this.graphicSuggestHint });\r\n    this.showGraphicSuggestInput = false;\r\n    this.graphicSuggestHint = '';\r\n  }\r\n\r\n  resizedImagesHeightPx: number;\r\n  fieldFormGroup: UntypedFormGroup;\r\n  keyValueObject: { key: string; value: string } = { key: \"\", value: \"\" };\r\n  availableColSpanSizesCompilazione: Array<TmwSelectOption> = [];\r\n  availableColSpanSizesRisposta: Array<TmwSelectOption> = [];\r\n  formulaAutocompleteOptions: Array<{ label: string; value: string }>;\r\n  VisibleIfAutocompleteOptions: Array<{ label: string; value: string }>;\r\n  AvailableFileExtensions = AvailableFileExtensions;\r\n  AvailableImageExtensions = AvailableImageExtensions;\r\n  fieldInvisibilityEnum = FieldInvisibilityEnum;\r\n  columnKeys: Array<{ key: string; value: string }> = new Array<{ key: string; value: string }>();\r\n  aggregationFunctionEnum: any;\r\n\r\n  //#region Template dei vari pezzi di form per la creazione di un campo(in base al tipo scelto).\r\n  fieldTypeFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"textFieldFormTemplate\", { static: true })\r\n  textFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"labelFieldFormTemplate\", { static: true })\r\n  labelFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"buttonFieldFormTemplate\", { static: true })\r\n  buttonFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"textareaFieldFormTemplate\", { static: true })\r\n  textareaFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"booleadFieldFormTemplate\", { static: true })\r\n  booleadFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"dateFieldFormTemplate\", { static: true })\r\n  dateFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"numericFieldFormTemplate\", { static: true })\r\n  numericFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"attachmentFieldFormTemplate\", { static: true })\r\n  attachmentFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"imageFieldFormTemplate\", { static: true })\r\n  imageFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"imageWithMarkersFieldFormTemplate\", { static: true })\r\n  imageWithMarkersFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"imageFieldSelectorFormTemplate\", { static: true })\r\n  imageFieldSelectorFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"listValueFieldFormTemplate\", { static: true })\r\n  listValueFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"lookupFieldFormTemplate\", { static: true })\r\n  lookupFieldFormTemplate: TemplateRef<any>;\r\n  @ViewChild(\"dataGetterTemplate\", { static: true })\r\n  dataGetterTemplate: TemplateRef<any>;\r\n\r\n  //#endregion\r\n\r\n  //#region Proprietà per gestire i metadata nei campi ti dipo Allegato o Immagine\r\n  metadataColumns: Array<ConfigColumn>;\r\n  //@ViewChild('metadataFieldsTable', { static: false }) metadataFieldsTable: EqpTableComponent;\r\n  selectedMetadata: BaseField;\r\n  //indexSelectedMetadata: number;\r\n  //dialogMetadataRef: MatDialogRef<TemplateRef<any>>;\r\n  dialogVisibleIfRef: MatDialogRef<TemplateRef<any>>;\r\n  dialogReadOnlyIfRef: MatDialogRef<TemplateRef<any>>;\r\n  //@ViewChild('dialogMetadata', { static: true }) dialogMetadata: TemplateRef<any>;\r\n  @ViewChild(\"dialogFormula\", { static: true }) dialogFormula: TemplateRef<any>;\r\n  dialogFormulaRef: MatDialogRef<TemplateRef<any>>;\r\n  //#endregion\r\n\r\n\r\n  // @ViewChild(\"dialogAvantiIndietro\", { static: true }) dialogAvantiIndietro: TemplateRef<any>;\r\n  // dialogAvantiIndietroRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n  //#region Proprietà per gestire le immagini nei capi di tipo elenco generico\r\n  @ViewChild(\"buttonImagesKeyValueInputColumn\", { static: true })\r\n  buttonImagesKeyValueInputColumn: TemplateRef<any>;\r\n  //#endregion\r\n\r\n  //#region Enumeratori usati nell'html\r\n  FieldTypeEnum = FieldTypeEnum;\r\n  BoolPresentantioEnum = BoolPresentantioEnum;\r\n  DateTimeTypeEnum = DateTimeTypeEnum;\r\n  ListPresentationEnum = ListPresentationEnum;\r\n  TextMaskEnum = TextMaskEnum;\r\n  TextFieldIconPositionEnum = TextFieldIconPositionEnum;\r\n  NumericFieldIconPositionEnum = NumericFieldIconPositionEnum;\r\n  TextareaFieldIconPositionEnum = TextareaFieldIconPositionEnum;\r\n\r\n  readonly dateTimeIconPositionOptions = [\r\n    { value: 'left',  label: 'Sinistra' },\r\n    { value: 'right', label: 'Destra' },\r\n  ];\r\n  AttachmentType = AttachmentType;\r\n  attachmentFieldTypeEnum = AttachmentFieldTypeEnum;\r\n  dataGetterTypeEnum = DataGetterTypeEnum;\r\n  subscription: any;\r\n\r\n  showTextFieldIcon: boolean = false;\r\n  showNumericFieldIcon: boolean = false;\r\n  showTextareaFieldIcon: boolean = false;\r\n\r\n  //#endregion\r\n\r\n  //#region Gestione delle liste di immagini\r\n  configColumnListImages: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n  configColumnImage: Array<ConfigColumn> = new Array<ConfigColumn>();\r\n  @ViewChild('GenericListImagesImageTemplate', { static: true }) GenericListImagesImageTemplate: TemplateRef<any>;\r\n  @ViewChild('GenericListImagesKeyTemplate', { static: true }) GenericListImagesKeyTemplate: TemplateRef<any>;\r\n  @ViewChild('GenericListImagesValueTemplate', { static: true }) GenericListImagesValueTemplate: TemplateRef<any>;\r\n  @ViewChild('imageSelectorAttachments', { static: false }) imageSelectorAttachments: TmwAttachmentsComponent;\r\n  @ViewChild('imageAttachment', { static: false }) imageAttachment: TmwAttachmentsComponent;\r\n  //#endregion\r\n\r\n  // DB Getter\r\n  dialogQERef: MatDialogRef<TemplateRef<any>>;\r\n  //@ViewChild('dialogMetadata', { static: true }) dialogMetadata: TemplateRef<any>;\r\n  @ViewChild(\"dialogQE\", { static: true }) dialogQE: TemplateRef<any>;\r\n\r\n  // TMW-PICKER\r\n  mode = ModeEnum\r\n  timeType = TimeTypeEnum\r\n\r\n  // DM Getter\r\n  forms: Array<Form> = new Array<Form>();\r\n  DMModule: any;\r\n  DMField: any;\r\n  DMFields: Array<{ key: string }>;\r\n  DMGetterCardinalities = DataGetterCardinalityEnum;\r\n\r\n  platform: string = Capacitor.getPlatform();\r\n\r\n  loadedFieldExtra: boolean = false;\r\n  aggregationFieldLoaded: boolean = false;\r\n\r\n  // Preview live per TextField / NumericField\r\n  previewRecord: any = {};\r\n  styleVersion: number = 0;\r\n  previewForceState: string | null = null;\r\n\r\n  get isTextField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Campo di testo'];\r\n  }\r\n\r\n  get isNumericField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Campo numerico'];\r\n  }\r\n\r\n  get isTextareaField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Area di testo'];\r\n  }\r\n\r\n  get isBooleanField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Booleano'];\r\n  }\r\n\r\n  get isAttachmentField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Allegato'];\r\n  }\r\n\r\n  get isLabelField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Etichetta'];\r\n  }\r\n\r\n  get isDateField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Data e/o ora'];\r\n  }\r\n\r\n  get isActionButtonField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Bottone'];\r\n  }\r\n\r\n  get isImageField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Immagine'];\r\n  }\r\n\r\n  get isImageWithMarkersField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Immagine con markers'];\r\n  }\r\n\r\n  get isListValueField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Elenco generico'];\r\n  }\r\n\r\n  get isImageSelectorField(): boolean {\r\n    return Number(this.field?.FieldType) === FieldTypeEnum['Elenco immagini'];\r\n  }\r\n\r\n  /** Metadati degli elementi del TextField per le tab CSS */\r\n  readonly textFieldStyleElements = [\r\n    { key: 'Container',   label: 'Contenitore' },\r\n    { key: 'Input',       label: 'Casella di testo' },\r\n    { key: 'Descrizione', label: 'Descrizione (label)' },\r\n    { key: 'Icona',       label: 'Icona' },\r\n    { key: 'Microfono',   label: 'Microfono' },\r\n    { key: 'Errore',      label: 'Testo errore' },\r\n  ];\r\n\r\n  /** Metadati degli stati per le tab CSS */\r\n  readonly textFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n    { key: 'Focused',   label: 'Selezionato' },\r\n    { key: 'NotValid',  label: 'Non Valido' },\r\n    { key: 'Readonly',  label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedTextFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del NumericField per le tab CSS (senza Microfono) */\r\n  readonly numericFieldStyleElements = [\r\n    { key: 'Container',   label: 'Contenitore' },\r\n    { key: 'Input',       label: 'Casella numerica' },\r\n    { key: 'Descrizione', label: 'Descrizione (label)' },\r\n    { key: 'Icona',       label: 'Icona' },\r\n    { key: 'Errore',      label: 'Testo errore' },\r\n  ];\r\n\r\n  readonly numericFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n    { key: 'Focused',   label: 'Selezionato' },\r\n    { key: 'NotValid',  label: 'Non Valido' },\r\n    { key: 'Readonly',  label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedNumericFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del TextareaField per le tab CSS */\r\n  readonly textareaFieldStyleElements = [\r\n    { key: 'Container',   label: 'Contenitore' },\r\n    { key: 'Input',       label: 'Area di testo' },\r\n    { key: 'Descrizione', label: 'Descrizione (label)' },\r\n    { key: 'Icona',       label: 'Icona' },\r\n    { key: 'Microfono',   label: 'Microfono' },\r\n    { key: 'Errore',      label: 'Testo errore' },\r\n  ];\r\n\r\n  readonly textareaFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n    { key: 'Focused',   label: 'Selezionato' },\r\n    { key: 'NotValid',  label: 'Non Valido' },\r\n    { key: 'Readonly',  label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedTextareaFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del BooleanField per le tab CSS (3 elementi, senza NotValid) */\r\n  readonly booleanFieldStyleElements = [\r\n    { key: 'Container',   label: 'Contenitore' },\r\n    { key: 'Scelta',      label: 'Controllo (toggle / checkbox / radio)' },\r\n    { key: 'Descrizione', label: 'Descrizione (label)' },\r\n  ];\r\n\r\n  readonly booleanFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n    { key: 'Focused',   label: 'Selezionato' },\r\n    { key: 'Readonly',  label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedBooleanFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del AttachmentField per le tab CSS */\r\n  readonly attachmentFieldStyleElements = [\r\n    { key: 'Container',        label: 'Contenitore' },\r\n    { key: 'Label',            label: 'Label / intestazione' },\r\n    { key: 'BottoneAggiungi',  label: 'Bottone Aggiungi' },\r\n    { key: 'BottoneDownload',  label: 'Bottone Download' },\r\n    { key: 'BottoneElimina',   label: 'Bottone Elimina' },\r\n    { key: 'BottoneAnteprima', label: 'Bottone Anteprima' },\r\n    { key: 'CampoNomeFile',    label: 'Campo nome file' },\r\n  ];\r\n\r\n  readonly attachmentFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n    { key: 'NotValid',  label: 'Non Valido' },\r\n    { key: 'Readonly',  label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedAttachmentFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del LabelField per le tab CSS (1 elemento, 2 stati) */\r\n  readonly labelFieldStyleElements = [\r\n    { key: 'Container', label: 'Contenitore' },\r\n  ];\r\n\r\n  readonly labelFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n  ];\r\n\r\n  selectedLabelFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del DateField per le tab CSS (8 elementi, 5 stati) */\r\n  readonly dateFieldStyleElements = [\r\n    { key: 'Container',          label: 'Contenitore esterno' },\r\n    { key: 'Descrizione',        label: 'Descrizione (label)' },\r\n    { key: 'ContenitoreInterno', label: 'Contenitore interno' },\r\n    { key: 'CampoData',          label: 'Casella di testo' },\r\n    { key: 'IconaCalendario',    label: 'Bottone calendario' },\r\n    { key: 'IconaOrologio',      label: 'Bottone orologio' },\r\n    { key: 'IconaCancellazione', label: 'Bottone cancellazione' },\r\n    { key: 'Tooltip',            label: 'Tooltip' },\r\n  ];\r\n\r\n  readonly dateFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n    { key: 'Focused',   label: 'Selezionato' },\r\n    { key: 'NotValid',  label: 'Non Valido' },\r\n    { key: 'Readonly',  label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedDateFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del ActionButtonField per le tab CSS (3 elementi, 3 stati) */\r\n  readonly actionButtonFieldStyleElements = [\r\n    { key: 'Container',   label: 'Bottone' },\r\n    { key: 'Icona',       label: 'Icona' },\r\n    { key: 'Descrizione', label: 'Etichetta (label)' },\r\n  ];\r\n\r\n  readonly actionButtonFieldStyleStates = [\r\n    { key: 'Normale',     label: 'Normale' },\r\n    { key: 'Mouseover',   label: 'Mouse Sopra' },\r\n    { key: 'Selezionato', label: 'Selezionato (click)' },\r\n  ];\r\n\r\n  selectedActionButtonFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del ImageField per le tab CSS (3 elementi, 2 stati) */\r\n  readonly imageFieldStyleElements = [\r\n    { key: 'Container',      label: 'Contenitore' },\r\n    { key: 'Descrizione',    label: 'Descrizione (label)' },\r\n    { key: 'BottoneDisegna', label: 'Bottone Disegna' },\r\n  ];\r\n\r\n  readonly imageFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n  ];\r\n\r\n  selectedImageFieldStyleState: string | null = null;\r\n\r\n  /** Metadati degli elementi del ImageWithMarkersField per le tab CSS (3 elementi, 2 stati) */\r\n  readonly imageWithMarkersFieldStyleElements = [\r\n    { key: 'Container',    label: 'Contenitore' },\r\n    { key: 'Descrizione',  label: 'Descrizione (label)' },\r\n    { key: 'BottoneMarca', label: 'Bottone Marca' },\r\n  ];\r\n\r\n  readonly imageWithMarkersFieldStyleStates = [\r\n    { key: 'Normale',   label: 'Normale' },\r\n    { key: 'Mouseover', label: 'Mouse Sopra' },\r\n  ];\r\n\r\n  selectedImageWithMarkersFieldStyleState: string | null = null;\r\n\r\n  //#region ListValueFieldStyleCSS — metadati per le tab CSS\r\n\r\n  private readonly listValueComboElements = [\r\n    { key: 'Container',       label: 'Contenitore' },\r\n    { key: 'Label',           label: 'Etichetta' },\r\n    { key: 'CasellaTrigger',  label: 'Casella Select' },\r\n    { key: 'BottoneCancella', label: 'Bottone Cancella' },\r\n  ];\r\n  private readonly listValueRadioElements = [\r\n    { key: 'Container', label: 'Contenitore' },\r\n    { key: 'Label',     label: 'Etichetta' },\r\n    { key: 'Opzione',   label: 'Opzione' },\r\n    { key: 'Selezione', label: 'Selezione (radio)' },\r\n  ];\r\n  private readonly listValueButtonElements = [\r\n    { key: 'Label',   label: 'Etichetta' },\r\n    { key: 'Bottone', label: 'Bottone' },\r\n  ];\r\n\r\n  get listValueStyleElements() {\r\n    const lv = this.field as ListValueField;\r\n    const mode = Number(lv?.PresentationMode);\r\n    if (mode === ListPresentationEnum['Combo box']) return this.listValueComboElements;\r\n    if (mode === ListPresentationEnum['Pulsante con testo']) return this.listValueButtonElements;\r\n    return this.listValueRadioElements;\r\n  }\r\n\r\n  readonly listValueFieldStyleStates = [\r\n    { key: 'Normale',     label: 'Normale' },\r\n    { key: 'Mouseover',   label: 'Mouse Sopra' },\r\n    { key: 'Selezionato', label: 'Selezionato' },\r\n    { key: 'NotValid',    label: 'Non Valido' },\r\n    { key: 'Readonly',    label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedListValueFieldStyleState: string | null = null;\r\n\r\n  //#endregion ListValueFieldStyleCSS\r\n\r\n  //#region ImageSelectorFieldStyleCSS — metadati per le tab CSS\r\n\r\n  readonly imageSelectorFieldStyleElements = [\r\n    { key: 'Container',        label: 'Contenitore' },\r\n    { key: 'CasellaSelezione', label: 'Casella di selezione' },\r\n    { key: 'Descrizione',      label: 'Descrizione (label)' },\r\n    { key: 'Selezioni',        label: 'Selezioni (checkbox)' },\r\n  ];\r\n\r\n  readonly imageSelectorFieldStyleStates = [\r\n    { key: 'Normale',     label: 'Normale' },\r\n    { key: 'Mouseover',   label: 'Mouse Sopra' },\r\n    { key: 'Selezionato', label: 'Selezionato' },\r\n    { key: 'NotValid',    label: 'Non Valido' },\r\n    { key: 'Readonly',    label: 'Sola Lettura' },\r\n  ];\r\n\r\n  selectedImageSelectorFieldStyleState: string | null = null;\r\n\r\n  //#endregion ImageSelectorFieldStyleCSS\r\n\r\n  constructor(\r\n    private formBuilder: UntypedFormBuilder,\r\n    private enumHelper: EnumHelper,\r\n    private dialog: MatDialog,\r\n    private cdr: ChangeDetectorRef,\r\n    private httpClient: HttpClient,\r\n    private utilityHelperService: UtilityHelperService\r\n  ) { }\r\n\r\n  async ngOnInit() {\r\n\r\n    this.configureColumns();\r\n    this.configureFieldsExtra();\r\n\r\n    if (this.field.DataGetter == null) { this.field.DataGetter = new DataGetter(); }\r\n    if (this.field.DataGetter.DataGetterType != null && this.field.DataGetter.DataGetterType == DataGetterTypeEnum[\"Da modulo dinamico\"]) {\r\n      await this.getAllModules();\r\n    }\r\n\r\n    if (typeof this.field.DataGetter.DataGetterHasResetButton === \"undefined\") {\r\n      this.field.DataGetter.DataGetterHasResetButton = true;\r\n    }\r\n\r\n    if (typeof this.field.DataGetter.DataGetterValue != \"undefined\" && this.field.DataGetter.DataGetterValue != null) {\r\n      this.createColumnKeys(this.field.DataGetter.DataGetterValue.Params);\r\n    }\r\n\r\n    if (\r\n      !this.fieldTypesToExclude.includes(FieldTypeEnum[\"Form di dettaglio\"])\r\n    ) {\r\n      this.fieldTypesToExclude.push(FieldTypeEnum[\"Form di dettaglio\"]);\r\n    }\r\n\r\n    this.onFieldTypeChange(false);\r\n    this.availableFields = this.availableFields\r\n      ? this.availableFields.filter((f) => f != this.field)\r\n      : [];\r\n\r\n  }\r\n\r\n  /**\r\n   * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n   * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n   * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n   * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n   * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n   * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n   */\r\n  // setFormulaAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n  //   // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n  //   // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n  //   // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n  //   // si prederebbe la selezione appena fatta).\r\n  //   if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n  //     this.formulaAutocompleteOptions = UtilityHelperService.GetAutocompleteOptions(this.availableFields, this.field.Formula);\r\n  //   }\r\n  // }\r\n  setVisibleIfAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n    // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n    // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n    // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n    // si prederebbe la selezione appena fatta).\r\n    if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n      this.VisibleIfAutocompleteOptions =\r\n        UtilityHelperService.GetAutocompleteOptions(\r\n          this.availableFields,\r\n          this.field.VisibleIf\r\n        );\r\n    }\r\n  }\r\n  omit_special_char(event) {\r\n    var k;\r\n    k = event.keyCode; //         k = event.keyCode;  (Both can be used)\r\n    if (k == 34) {\r\n      event.keyCode = 0;\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Crea il FormGroup per l'aggiunta di un nuovo campo all'interno della form.\r\n   * Metodo richiamato ogni volta che cambia il tipo del campo scelto o viene aggiunto/modificato un Field\r\n   */\r\n  createFieldForm() {\r\n    this.fieldFormGroup = this.formBuilder.group({\r\n      Label: [\r\n        this.field.Label,\r\n        [\r\n          Validators.required,\r\n          this.questionPoll,\r\n          Validators.pattern(\"^[a-zA-Z ]*$\"),\r\n        ],\r\n      ],\r\n      Description: [\r\n        this.field.Description,\r\n        [Validators.required, this.questionPoll],\r\n      ],\r\n      Readonly: [this.field.Readonly],\r\n      ReadonlyIf: [this.field.ReadonlyIf],\r\n      Required: [this.field.Required],\r\n      FieldType: [\r\n        this.field.FieldType,\r\n        [Validators.required, this.questionPoll],\r\n      ],\r\n      DMModule: [null],\r\n      DMField: [null],\r\n      DataGetterType: [\r\n        this.field.DataGetter.DataGetterType,\r\n        [Validators.required],\r\n      ],\r\n      ColSpanSizes: [this.field.ColSpanSizes],\r\n      InListView: [this.field.InListView],\r\n      Invisibility: [this.field.Invisibility],\r\n      VisibleIf: [this.field.VisibleIf, this.questionPoll],\r\n      Maintain_Value: [this.field.Maintain_Value],\r\n      Tooltip: [this.field.Tooltip, this.questionPoll],\r\n      LabelstyleCSS: [this.field.LabelstyleCSS, this.questionPoll],\r\n      FieldstyleCSS: [this.field.FieldstyleCSS, this.questionPoll],\r\n      Formula: [this.field.Formula, this.questionPoll],\r\n      DataGetterValue: [this.field.DataGetter.DataGetterValue, this.questionPoll],\r\n      DataGetterHasResetButton: [this.field.DataGetter.DataGetterHasResetButton, this.questionPoll],\r\n      DataGetterIsMultiselect: [this.field.DataGetter.DataGetterIsMultiselect, this.questionPoll],\r\n\r\n      AnswerStyleLabelstyleCSS: [this.field.AnswerStyle.LabelstyleCSS, this.questionPoll],\r\n      AnswerStyleFieldstyleCSS: [this.field.AnswerStyle.FieldstyleCSS, this.questionPoll],\r\n      AnswerStyleVisibleIf: [this.field.AnswerStyle.VisibleIf, this.questionPoll],\r\n      AnswerStyleColSpanSizes: [this.field.AnswerStyle.ColSpanSizes],\r\n      AnswerStyleInListView: [this.field.AnswerStyle.InListView],\r\n      AnswerStyleInvisibility: [this.field.AnswerStyle.Invisibility],\r\n    });\r\n\r\n    GlobalService.debugLog(\"FORM FIELD CREATO\", this.field.DataGetter);\r\n\r\n    if (this.formFieldsGroups) {\r\n      this.fieldFormGroup.addControl(\r\n        \"FieldGroup\",\r\n        new UntypedFormControl(this.field.FieldGroup, Validators.required)\r\n      );\r\n    }\r\n  }\r\n  questionPoll(control: FormControl): { [s: string]: boolean } {\r\n    // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n    if (control.value != undefined) {\r\n      if (\r\n        UtilityHelperService.stringCheckParentesis(\r\n          control.value,\r\n          control.hasValidator(Validators.required)\r\n        )\r\n      ) {\r\n        return null;\r\n      } else {\r\n        return { \"Missing Parenthesis\": true };\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n  stringSanitaizedValidator(control: FormControl): { [s: string]: boolean } {\r\n    // c'è un FormControl che è vuoto che da problemi (probabilmente type Data, campo Formato)\r\n    if (control.value != undefined) {\r\n      if (\r\n        UtilityHelperService.stringCheckParentesis(\r\n          control.value,\r\n          control.hasValidator(Validators.required)\r\n        )\r\n      ) {\r\n        return null;\r\n      } else {\r\n        return { \"La formula non è valida\": true };\r\n      }\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n  // getAllFormValidationErrors() {\r\n  //   Object.keys(this.fieldFormGroup.controls).forEach((key) => {\r\n  //     const controlErrors: ValidationErrors =\r\n  //       this.fieldFormGroup.get(key).errors;\r\n  //     if (controlErrors != null) {\r\n  //       Object.keys(controlErrors).forEach((keyError) => {\r\n  //         console.log(\r\n  //           \"Key control: \" + key + \", keyError: \" + keyError + \", err value: \",\r\n  //           controlErrors[keyError]\r\n  //         );\r\n  //       });\r\n  //     }\r\n  //   });\r\n  // }\r\n\r\n  /**\r\n   * Metodo chiamato dai mat-error per prendere gli errori generati relativi al campo.\r\n   * @param control è il nome del GroupControl di cui leggere se ci sono errori\r\n   */\r\n  getFormValidationErrors(control: string) {\r\n    if (control == \"Label\") GlobalService.debugLog('getFormValidationErrors', this.fieldFormGroup.controls[\"Label\"]);\r\n\r\n    const controlErrors: ValidationErrors =\r\n      this.fieldFormGroup.controls[control].errors;\r\n    let errors = [];\r\n    let values = [];\r\n    if (controlErrors != null) {\r\n      Object.keys(controlErrors).forEach((keyError) => {\r\n        errors.push(keyError);\r\n      });\r\n      GlobalService.debugLog('control: ', control);\r\n      GlobalService.debugLog('errors: ', errors);\r\n      GlobalService.debugLog('values: ', values);\r\n    }\r\n    return errors.join(\", \");\r\n  }\r\n\r\n  setAggregation(enumType: any, reset: boolean) {\r\n    this.aggregationFunctionEnum = enumType;\r\n    if (reset) { this.field.Aggregations = []; }\r\n    setTimeout(() => { this.aggregationFieldLoaded = true; }, 100);\r\n  }\r\n\r\n  //#region onFieldTypeChange\r\n  /**\r\n   * Metodo chiamato quando cambia il FieldType del BaseField che si sta aggiungendo/modificando.\r\n   * Ricrea l'oggetto field popolando solo le proprietà del BaseField inserite dall'utente\r\n   * (quelle comuni a tutte le tipologie di campo), ricrea la form e, in base al FieldType scelto,\r\n   * aggiunge alla form i FormControl necessari e seleziona il template corretto da usare.\r\n   * @param restoreField Se TRUE ripristina i valori base (ereditati dal modello BaseField) del campo aggiunto/modificato\r\n   */\r\n  onFieldTypeChange(restoreField: boolean = true) {\r\n    this.aggregationFieldLoaded = false;\r\n\r\n\r\n    if (restoreField) {\r\n      this.restoreBaseFieldProperties();\r\n    }\r\n\r\n    this.createFieldForm();\r\n    this.onColSpanSizeSelect();\r\n    if ((this.field as BaseField).InListView == null) {\r\n      this.field.InListView = true;\r\n    }\r\n    if ((this.field as BaseField).Invisibility == null) {\r\n      this.field.Invisibility = FieldInvisibilityEnum.NASCOSTO;\r\n    }\r\n    this.fieldTypeFormTemplate = null;\r\n\r\n    switch (this.field.FieldType) {\r\n\r\n      //#region CAMPO DI TESTO\r\n      case FieldTypeEnum[\"Campo di testo\"]:\r\n        this.setAggregation(NotNumberAggregationFunctionEnum, restoreField);\r\n\r\n        if ((this.field as TextField).TextMask != null) {\r\n          (this.field as TextField).TextMask = Number((this.field as TextField).TextMask) as TextMaskEnum;\r\n        }\r\n\r\n        if ((this.field as TextField).Microphone == null) {\r\n          this.field.Microphone = false;\r\n        }\r\n        this.fieldFormGroup.addControl(\r\n          \"TextMask\",\r\n          new UntypedFormControl((this.field as TextField).TextMask)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"MaxLenght\",\r\n          new UntypedFormControl((this.field as TextField).MaxLenght, [\r\n            this.questionPoll,\r\n            Validators.pattern(\"^[0-9]*$\"),\r\n          ])\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"MinLenght\",\r\n          new UntypedFormControl((this.field as TextField).MinLenght, [\r\n            this.questionPoll,\r\n            Validators.pattern(\"^[0-9]*$\"),\r\n          ])\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"Microphone\",\r\n          new UntypedFormControl((this.field as TextField).Microphone)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"IconName\",\r\n          new UntypedFormControl((this.field as TextField).IconName)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"IconPosition\",\r\n          new UntypedFormControl((this.field as TextField).IconPosition)\r\n        );\r\n        this.showTextFieldIcon = !!((this.field as TextField).IconName);\r\n        this.fieldTypeFormTemplate = this.textFieldFormTemplate;\r\n        this.initTextFieldPreview();\r\n        break;\r\n      //#endregion CAMPO DI TESTO\r\n\r\n      //#region LABEL\r\n      case FieldTypeEnum['Etichetta']:\r\n        if ((this.field as LabelField).Etichetta == null) {\r\n          this.field.Etichetta = \"\";\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"Etichetta\",\r\n          new UntypedFormControl((this.field as LabelField).Etichetta)\r\n        );\r\n        this.fieldTypeFormTemplate = this.labelFieldFormTemplate;\r\n        this.initLabelFieldPreview();\r\n        break;\r\n      //#endregion LABEL\r\n\r\n      //#region BUTTON\r\n      case FieldTypeEnum['Bottone']:\r\n        if ((this.field as ActionButtonField).ButtonCode == null) {\r\n          this.field.ButtonCode = \"\";\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"Codice\",\r\n          new UntypedFormControl((this.field as ActionButtonField).ButtonCode)\r\n        );\r\n\r\n        if ((this.field as ActionButtonField).ButtonCode == null) {\r\n          this.field.ButtonCode = \"\";\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"Icona\",\r\n          new UntypedFormControl((this.field as ActionButtonField).Icon)\r\n        );\r\n        this.fieldTypeFormTemplate = this.buttonFieldFormTemplate;\r\n        this.initActionButtonFieldPreview();\r\n        break;\r\n      //#endregion BUTTON      \r\n\r\n      //#region AREA DI TESTO\r\n      case FieldTypeEnum[\"Area di testo\"]:\r\n        this.setAggregation(NotNumberAggregationFunctionEnum, restoreField);\r\n\r\n        if ((this.field as TextareaField).Microphone == null) {\r\n          this.field.Microphone = false;\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"Rows\",\r\n          new UntypedFormControl((this.field as TextareaField).Rows, [\r\n            this.questionPoll,\r\n            Validators.pattern(\"^[0-9]*$\"),\r\n          ])\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"MaxLenght\",\r\n          new UntypedFormControl((this.field as TextareaField).MaxLenght, [\r\n            this.questionPoll,\r\n            Validators.pattern(\"^[0-9]*$\"),\r\n          ])\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"MinLenght\",\r\n          new UntypedFormControl((this.field as TextareaField).MinLenght, [\r\n            this.questionPoll,\r\n            Validators.pattern(\"^[0-9]*$\"),\r\n          ])\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"Microphone\",\r\n          new UntypedFormControl((this.field as TextareaField).Microphone)\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"IconName\",\r\n          new UntypedFormControl((this.field as TextareaField).IconName)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"IconPosition\",\r\n          new UntypedFormControl((this.field as TextareaField).IconPosition)\r\n        );\r\n\r\n        this.showTextareaFieldIcon = !!((this.field as TextareaField).IconName);\r\n        this.initTextareaFieldPreview();\r\n        this.fieldTypeFormTemplate = this.textareaFieldFormTemplate;\r\n        break;\r\n      //#endregion AREA DI TESTO\r\n\r\n      //#region BOOLEANO\r\n      case FieldTypeEnum.Booleano:\r\n        this.setAggregation(NotNumberAggregationFunctionEnum, restoreField);\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"IsTristate\",\r\n          new UntypedFormControl((this.field as BooleanField).IsTristate)\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"PresetationType\",\r\n          new UntypedFormControl(\r\n            (this.field as BooleanField).PresetationType,\r\n            Validators.required\r\n          )\r\n        );\r\n        this.fieldTypeFormTemplate = this.booleadFieldFormTemplate;\r\n        this.initBooleanFieldPreview();\r\n        break;\r\n      //#endregion BOOLEANO\r\n\r\n      //#region DATA E/I ORA\r\n      case FieldTypeEnum[\"Data e/o ora\"]:\r\n        this.setAggregation(NotNumberAggregationFunctionEnum, restoreField);\r\n\r\n        if (this.field.IsOnlyDate == null) {\r\n          this.field.IsOnlyDate = DateTimeTypeEnum[\"Solo data\"];\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"IsOnlyDate\",\r\n          new UntypedFormControl((this.field as DateField).IsOnlyDate, [\r\n            Validators.required,\r\n            this.questionPoll,\r\n          ])\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"MinDate\",\r\n          new UntypedFormControl(\r\n            (this.field as DateField).MinDate,\r\n            this.questionPoll\r\n          )\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"MaxDate\",\r\n          new UntypedFormControl(\r\n            (this.field as DateField).MaxDate,\r\n            this.questionPoll\r\n          )\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"DateFormat\",\r\n          new UntypedFormControl((this.field as DateField).DateFormat)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"IconsPosition\",\r\n          new UntypedFormControl((this.field as DateField).IconsPosition)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"CloseIconPosition\",\r\n          new UntypedFormControl((this.field as DateField).CloseIconPosition)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"UseTooltip\",\r\n          new UntypedFormControl((this.field as DateField).UseTooltip ?? false)\r\n        );\r\n        this.fieldTypeFormTemplate = this.dateFieldFormTemplate;\r\n        this.initDateFieldPreview();\r\n        break;\r\n      //#endregion DATA E/I ORA\r\n\r\n      //#region CAMPO NUMERICO\r\n      case FieldTypeEnum[\"Campo numerico\"]:\r\n        this.setAggregation(NumberAggregationFunctionEnum, restoreField);\r\n\r\n        if ((this.field as NumericField).IsInteger == null) {\r\n          this.field.IsInteger = true;\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"IsInteger\",\r\n          new UntypedFormControl((this.field as NumericField).IsInteger)\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"MinValue\",\r\n          new UntypedFormControl((this.field as NumericField).MinValue, [\r\n            this.questionPoll,\r\n            Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n          ])\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"MaxValue\",\r\n          new UntypedFormControl((this.field as NumericField).MaxValue, [\r\n            this.questionPoll,\r\n            Validators.pattern(\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\"), //(\"^[0-9]*$\"),\r\n          ])\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"DecimalSeparator\",\r\n          new UntypedFormControl(\r\n            (this.field as NumericField).DecimalSeparator,\r\n            [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n          )\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"DecimalPrecision\",\r\n          new UntypedFormControl(\r\n            (this.field as NumericField).DecimalPrecision,\r\n            [this.questionPoll, Validators.pattern(\"^[0-9]+$\")]\r\n          )\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"ThousandsSeparator\",\r\n          new UntypedFormControl(\r\n            (this.field as NumericField).ThousandsSeparator,\r\n            [this.questionPoll, Validators.pattern(\"^[a-zA-Z -/',._/\\\\^<>]+\")]\r\n          )\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"CurrencySymbol\",\r\n          new UntypedFormControl(\r\n            (this.field as NumericField).CurrencySymbol,\r\n            this.questionPoll\r\n          )\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"MeasureUnit\",\r\n          new UntypedFormControl(\r\n            (this.field as NumericField).MeasureUnit,\r\n            this.questionPoll\r\n          )\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"IconName\",\r\n          new UntypedFormControl((this.field as NumericField).IconName)\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"IconPosition\",\r\n          new UntypedFormControl((this.field as NumericField).IconPosition)\r\n        );\r\n        this.showNumericFieldIcon = !!((this.field as NumericField).IconName);\r\n        this.fieldTypeFormTemplate = this.numericFieldFormTemplate;\r\n        this.initNumericFieldPreview();\r\n        break;\r\n      //#endregion CAMPO NUMERICO\r\n\r\n      //#region ALLEGATO\r\n      case FieldTypeEnum.Allegato:\r\n        this.fieldFormGroup.addControl(\r\n          \"AllowedMimeTypes\",\r\n          new UntypedFormControl(\r\n            (this.field as AttachmentField).AllowedMimeTypes\r\n          )\r\n        );\r\n        this.fieldFormGroup.addControl(\r\n          \"isMultiAttach\",\r\n          new UntypedFormControl((this.field as AttachmentField).isMultiAttach)\r\n        );\r\n        this.fieldTypeFormTemplate = this.attachmentFieldFormTemplate;\r\n        this.initAttachmentFieldPreview();\r\n        break;\r\n      //#endregion ALLEGATO\r\n\r\n      //#region IMMAGINE\r\n      case FieldTypeEnum.Immagine:\r\n        if (typeof (this.field as ImageField).DynAttachment == \"undefined\") {\r\n          (this.field as ImageField).DynAttachment = null;\r\n        }\r\n\r\n        if (typeof (this.field as ImageField).EnableDrawing == \"undefined\") {\r\n          (this.field as ImageField).EnableDrawing = false;\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"ResizedImagesHeightPx\",\r\n          new UntypedFormControl(\r\n            (this.field as ImageField).ResizedImagesHeightPx,\r\n            [Validators.required, Validators.max(4320)]\r\n          )\r\n        );\r\n        (this.field as ImageField).ResizedImagesHeightPx = (this.field as ImageField).ResizedImagesHeightPx != null ? (this.field as ImageField).ResizedImagesHeightPx : 128;\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"EnableDrawing\",\r\n          new UntypedFormControl((this.field as ImageField).EnableDrawing)\r\n        );\r\n\r\n        this.fieldTypeFormTemplate = this.imageFieldFormTemplate;\r\n        this.initImageFieldPreview();\r\n        break;\r\n\r\n      /*\r\n      (this.field as ImageField).AttachDefinition = new AttachmentField();\r\n      this.fieldFormGroup.addControl(\r\n        \"EnableDrawing\",\r\n        new UntypedFormControl((this.field as ImageField).EnableDrawing)\r\n      );\r\n      this.fieldFormGroup.addControl(\r\n        \"ImageIsContextualAttachment\",\r\n        new UntypedFormControl(\r\n          (this.field as ImageField).ImageIsContextualAttachment\r\n        )\r\n      );\r\n      // Imposto i FormControl variabili.\r\n      this.onImageIsContextualAttachmentChange();\r\n      this.fieldTypeFormTemplate = this.imageFieldFormTemplate;\r\n      break;\r\n      */\r\n      //#endregion IMMAGINE\r\n\r\n      //#region ELENCO GENERICO\r\n      case FieldTypeEnum[\"Elenco generico\"]:\r\n        this.setAggregation(NotNumberAggregationFunctionEnum, restoreField);\r\n\r\n        if ((this.field as ListValueField).InListView == null) {\r\n          this.field.InListView = true;\r\n        }\r\n        if ((this.field as ListValueField).Invisibility == null) {\r\n          this.field.Invisibility = FieldInvisibilityEnum.NASCOSTO;\r\n        }\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"IsMultiChoiche\",\r\n          new UntypedFormControl((this.field as ListValueField).IsMultiChoiche)\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"PresentationMode\",\r\n          new UntypedFormControl(\r\n            (this.field as ListValueField).PresentationMode,\r\n            Validators.required\r\n          )\r\n        );\r\n        this.fieldTypeFormTemplate = this.listValueFieldFormTemplate;\r\n        this.initListValueFieldPreview();\r\n        break;\r\n      //#endregion ELENCO GENERICO\r\n\r\n      //#region ELENCO IMMAGINI\r\n      case FieldTypeEnum[\"Elenco immagini\"]:\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"IsMultiChoiche\",\r\n          new UntypedFormControl((this.field as ImageSelectorField).IsMultiChoiche)\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"ResizedImagesHeightPx\",\r\n          new UntypedFormControl(\r\n            (this.field as ImageSelectorField).ResizedImagesHeightPx,\r\n            [Validators.required, Validators.max(4320)]\r\n          )\r\n        );\r\n        this.fieldTypeFormTemplate = this.imageFieldSelectorFormTemplate;\r\n        this.initImageSelectorFieldPreview();\r\n        break;\r\n      //#endregion ELENCO IMMAGINI\r\n\r\n      //#region IMMAGINE CON MARKER\r\n      case FieldTypeEnum[\"Immagine con markers\"]:\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"ResizedImagesHeightPx\",\r\n          new UntypedFormControl(\r\n            (this.field as ImageWithMarkersField).ResizedImagesHeightPx,\r\n            [Validators.required, Validators.max(4320)]\r\n          )\r\n        );\r\n        this.fieldTypeFormTemplate = this.imageWithMarkersFieldFormTemplate;\r\n        this.initImageWithMarkersFieldPreview();\r\n        break;\r\n      //#endregion IMMAGINE CON MARKER        \r\n\r\n      //#region LOOKUP\r\n      case FieldTypeEnum.Lookup:\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"EntitySourceName\",\r\n          new UntypedFormControl(\r\n            (this.field as LookupField).EntitySourceName,\r\n            Validators.required\r\n          )\r\n        );\r\n\r\n        this.fieldFormGroup.addControl(\r\n          \"UseAsGetOrDiscard\",\r\n          new UntypedFormControl((this.field as LookupField).UseAsGetOrDiscard)\r\n        );\r\n        this.fieldTypeFormTemplate = this.lookupFieldFormTemplate;\r\n        break;\r\n      //#endregion LOOKUP\r\n    }\r\n    if (\r\n      [\r\n        FieldTypeEnum.Allegato,\r\n        FieldTypeEnum.Immagine,\r\n        FieldTypeEnum[\"Form di dettaglio\"],\r\n      ].includes(this.field.FieldType)\r\n    ) {\r\n      this.field.Formula = null;\r\n      this.fieldFormGroup.controls[\"Formula\"].disable();\r\n      this.fieldFormGroup.controls[\"InListView\"].disable();\r\n      this.fieldFormGroup.controls[\"Invisibility\"].disable();\r\n    } else {\r\n      this.fieldFormGroup.controls[\"Formula\"].enable();\r\n      this.fieldFormGroup.controls[\"InListView\"].enable();\r\n      this.fieldFormGroup.controls[\"Invisibility\"].enable();\r\n    }\r\n    if (\r\n      [\r\n        FieldTypeEnum.Allegato,\r\n        FieldTypeEnum.Immagine,\r\n        FieldTypeEnum[\"Form di dettaglio\"],\r\n        FieldTypeEnum[\"Data e/o ora\"],\r\n      ].includes(this.field.FieldType)\r\n    ) {\r\n      this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n      this.fieldFormGroup.controls[\"FieldstyleCSS\"].disable();\r\n    } else {\r\n      this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n      this.fieldFormGroup.controls[\"FieldstyleCSS\"].enable();\r\n    }\r\n    if ([FieldTypeEnum.Booleano].includes(this.field.FieldType)) {\r\n      this.fieldFormGroup.controls[\"LabelstyleCSS\"].disable();\r\n    } else {\r\n      this.fieldFormGroup.controls[\"LabelstyleCSS\"].enable();\r\n    }\r\n\r\n\r\n  }\r\n  //#endregion onFieldTypeChange\r\n\r\n  //#region onDataGetterTypeChange\r\n  async onDataGetterTypeChange() {\r\n    if (this.field.DataGetter.DataGetterType == DataGetterTypeEnum['Da modulo dinamico'] && this.forms.length == 0) {\r\n      this.getAllModules();\r\n    }\r\n\r\n    if (this.field.DataGetter.DataGetterType != DataGetterTypeEnum.Formula) {\r\n      this.field.Formula = null;\r\n    }\r\n\r\n    this.field.DataGetter.DataGetterValue = null;\r\n    this.DMModule = null;\r\n    this.DMField = null;\r\n  }\r\n  //#endregion onDataGetterTypeChange\r\n\r\n  /**\r\n   * Metodo invocato al cambio del valore della proprietà ImageIsContextualAttachment nel caso\r\n   * di campi di tipo Immagine. Se TRUE allora rimuove i FormControl per le proprietà IsMultiAttach\r\n   * e AllowedMimeTypes e aggiunge i FormControl per le proprietà ImgName e ContextualAttachment,\r\n   * altrimenti il contrario.\r\n   */\r\n  onImageIsContextualAttachmentChange() {\r\n\r\n    /*\r\n    (this.field as ImageField).ImgName = null;\r\n    (this.field as ImageField).AttachDefinition.AllowedMimeTypes = [];\r\n    (this.field as ImageField).AttachDefinition.IsMultiAttach = false;\r\n    (this.field as ImageField).ContextualAttachment = null;\r\n\r\n    if ((this.field as ImageField).ImageIsContextualAttachment) {\r\n      this.fieldFormGroup.removeControl(\"IsMultiAttach\");\r\n      this.fieldFormGroup.removeControl(\"AllowedMimeTypes\");\r\n      this.fieldFormGroup.addControl(\r\n        \"ImgName\",\r\n        new UntypedFormControl(\r\n          (this.field as ImageField).ImgName,\r\n          Validators.required\r\n        )\r\n      );      \r\n      this.fieldFormGroup.addControl(\r\n        \"ContextualAttachment\",\r\n        new UntypedFormControl(\r\n          (this.field as ImageField).ContextualAttachment,\r\n          Validators.required\r\n        )\r\n      );\r\n    } else {\r\n      this.fieldFormGroup.removeControl(\"ImgName\");\r\n      this.fieldFormGroup.removeControl(\"ContextualAttachment\");\r\n      this.fieldFormGroup.addControl(\r\n        \"IsMultiAttach\",\r\n        new UntypedFormControl(\r\n          (this.field as ImageField).AttachDefinition.IsMultiAttach\r\n        )\r\n      );\r\n      this.fieldFormGroup.addControl(\r\n        \"AllowedMimeTypes\",\r\n        new UntypedFormControl(\r\n          (this.field as ImageField).AttachDefinition.AllowedMimeTypes\r\n        )\r\n      );\r\n    }\r\n    */\r\n\r\n  }\r\n\r\n  /**\r\n   * Metodo per intercettare l'aggiunta di un allegato nei campi di tipo Immagine per aggiornare\r\n   * il valore della proprietà ContextualAttachment e la validazione del relativo FormControl.\r\n   * @param event Array contenente l'elenco aggiornato degli allegati caricati (nel nostro caso ne contiene al più 1).\r\n   */\r\n  catchContextualAttachmentChange(event: Array<TmwAttachmentDTO>) {\r\n    /*\r\n    if (event && event.length > 0) {\r\n      (this.field as ImageField).ContextualAttachment = event[0];\r\n    } else {\r\n      (this.field as ImageField).ContextualAttachment = null;\r\n    }\r\n    this.fieldFormGroup.controls[\"ContextualAttachment\"].setValue(\r\n      (this.field as ImageField).ContextualAttachment\r\n    );\r\n    */\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato alla selezione di una classe nella select per le colonne di bootstrap\r\n   * da usare nella visualizzazione del campo. Questa funzione manipola la sorgente dati per\r\n   * la eqp-select in modo da escludere i valori dell'enumeratore che fanno riferimento ad\r\n   * una larghezza di schermo già selezionata. Esempio: per gli schermi piccoli (sm) l'utente\r\n   * seleziona la classe \"col-sm-6\", al change del valore questo metodo rimuove dalla select\r\n   * tutti gli altri valori per la grandezza di schermo selezionata.\r\n   */\r\n  onColSpanSizeSelect() {\r\n    // Recupero l'array degli oggetti chiave-valore che rappreseta l'enumeratore\r\n    let colSizeClassEnumArray = this.enumHelper.getEnumArray(\r\n      ColSpanSizesEnum,\r\n      false,\r\n      null\r\n    );\r\n    // Costruisco l'array delle classi selezionate dall'utente in formato stringa\r\n    let selectedDimensionsCompilazione: Array<string> = this.field.ColSpanSizes\r\n      ? this.field.ColSpanSizes.map((col) => ColSpanSizesEnum[col])\r\n      : [];\r\n    let selectedDimensionsRisposta: Array<string> = this.field.AnswerStyle.ColSpanSizes\r\n      ? this.field.AnswerStyle.ColSpanSizes.map((col) => ColSpanSizesEnum[col])\r\n      : [];\r\n    // Filtro i valori ottenuti dall'enumeratore per escludere tutti i valori per le\r\n    // grandezze di schermo già selezionatead esclusione dei valori selezionati.\r\n    this.availableColSpanSizesCompilazione = colSizeClassEnumArray.filter(\r\n      (value: { key: number; value: string }) =>\r\n        !selectedDimensionsCompilazione.find(\r\n          (col) =>\r\n            value.value.includes(col.substring(4, 6)) && value.value != col\r\n        )\r\n    );\r\n    this.availableColSpanSizesRisposta = colSizeClassEnumArray.filter(\r\n      (value: { key: number; value: string }) =>\r\n        !selectedDimensionsRisposta.find(\r\n          (col) =>\r\n            value.value.includes(col.substring(4, 6)) && value.value != col\r\n        )\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato al cambio del tipo di visualizzazione scelta per i campi di tipo elenco generico.\r\n   * Se viene scelta la visualizzazione ad immagini svuota la lista delle coppie chiave-valore inserite\r\n   * in precedenza, altrimenti svuota la lista delle immagini caricate.\r\n   */\r\n  onPresentationModeChange() {\r\n    if (this.field.PresentationMode == ListPresentationEnum['Radio button']) {\r\n      this.field.IsMultiChoiche = false;\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato al salvataggio degli allegati quando viene configurato un campo di tipo \"Elenco generico\"\r\n   * con il tipo di visualizzazione ad immagini. Intercetta l'elenco aggiornato delle immagini caricate e lo\r\n   * memorizza nell'oggetto field corrente.\r\n   * @param attachments Array aggiornato degli allegati caricati.\r\n   */\r\n  catchButtonImagesChange(attachments: Array<TmwAttachmentDTO>) {\r\n\r\n    (this.field as ImageSelectorField).AttachmentList = attachments as Array<DynAttachment>;\r\n\r\n    (this.field as ImageSelectorField).AttachmentList.forEach((attachment: DynAttachment) => {\r\n      if (typeof attachment.ImageHeightPx == \"undefined\") {\r\n\r\n        var myBase64 = \"data:image/\" + attachment.FileExtension.toLowerCase() + \";base64,\" + attachment.FileDataBase64;\r\n        var img = new Image();\r\n\r\n        img.src = myBase64;\r\n        var self = this;\r\n        img.addEventListener('load', function () {\r\n          attachment.ImageWidthPx = img.width;\r\n          attachment.ImageHeightPx = img.height;\r\n          attachment.AttachmentFieldType = AttachmentFieldTypeEnum.ELENCO_IMMAGINI;\r\n          if (self.imageSelectorAttachments) { self.imageSelectorAttachments.reloadData(); }\r\n        });\r\n\r\n      }\r\n    });\r\n\r\n  }\r\n\r\n  catchButtonImageChange(attachments: Array<TmwAttachmentDTO>) {\r\n\r\n    (this.field as ImageField).DynAttachment = attachments[attachments.length - 1] as DynAttachment;\r\n\r\n    if (this.field.DynAttachment != null && typeof this.field.DynAttachment.ImageHeightPx == \"undefined\") {\r\n\r\n      var myBase64 = \"data:image/\" + this.field.DynAttachment.FileExtension.toLowerCase() + \";base64,\" + this.field.DynAttachment.FileDataBase64;\r\n      var img = new Image();\r\n\r\n      img.src = myBase64;\r\n      var self = this;\r\n      img.addEventListener('load', function () {\r\n        self.field.DynAttachment.ImageWidthPx = img.width;\r\n        self.field.DynAttachment.ImageHeightPx = img.height;\r\n        self.field.DynAttachment.AttachmentFieldType = AttachmentFieldTypeEnum.IMMAGINE;\r\n      });\r\n\r\n    }\r\n\r\n  }\r\n\r\n  catchButtonImageWithMarkersChange(attachments: Array<TmwAttachmentDTO>) {\r\n\r\n    (this.field as ImageWithMarkersField).DynAttachment = attachments[attachments.length - 1] as DynAttachment;\r\n\r\n    if (this.field.DynAttachment != null && typeof this.field.DynAttachment.ImageHeightPx == \"undefined\") {\r\n\r\n      var myBase64 = \"data:image/\" + this.field.DynAttachment.FileExtension.toLowerCase() + \";base64,\" + this.field.DynAttachment.FileDataBase64;\r\n      var img = new Image();\r\n\r\n      img.src = myBase64;\r\n      var self = this;\r\n      img.addEventListener('load', function () {\r\n        self.field.DynAttachment.ImageWidthPx = img.width;\r\n        self.field.DynAttachment.ImageHeightPx = img.height;\r\n        self.field.DynAttachment.AttachmentFieldType = AttachmentFieldTypeEnum.IMMAGINE_CON_MARKERS;\r\n      });\r\n\r\n    }\r\n\r\n  }\r\n\r\n  /**\r\n   * Metodo chiamato al keyup degli input testuali che prevedono l'aggiunta del valore inserito in un array.\r\n   * Se l'utente preme il tasto invio, in base al tipo di campo che sta inserendo/modificando, questo metodo\r\n   * aggiunge il valore inserito dall'utente nella lista di stringhe corretta (in input viene passato il nome\r\n   * della proprietà in cui inserire la stringa).\r\n   * @param event Evento che rappresenta il keyup dell'utente\r\n   * @param propertyName Nome della proprietà del field in cui inserire la stringa digitata.\r\n   */\r\n  onMultiSelectInputKeyup(event, propertyName: string) {\r\n    if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n      switch (this.field.FieldType) {\r\n        case FieldTypeEnum.Lookup:\r\n        case FieldTypeEnum.Allegato:\r\n          if (!this.field[propertyName]) {\r\n            this.field[propertyName] = new Array<string>();\r\n          }\r\n          this.field[propertyName].push(event.currentTarget.value);\r\n          break;\r\n        case FieldTypeEnum[\"Immagine con markers\"]:\r\n          break;\r\n        case FieldTypeEnum.Immagine:\r\n          break;\r\n        case FieldTypeEnum[\"Elenco generico\"]:\r\n          if (!this.keyValueObject.key || !this.keyValueObject.value) {\r\n            return;\r\n          }\r\n          if (!(this.field as ListValueField).ValuePairs) {\r\n            (this.field as ListValueField).ValuePairs = {};\r\n          }\r\n          (this.field as ListValueField).ValuePairs[this.keyValueObject.key] =\r\n            this.keyValueObject.value;\r\n          this.keyValueObject = { key: \"\", value: \"\" };\r\n          this.styleVersion++;\r\n          break;\r\n      }\r\n      event.currentTarget.value = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo chiamato per mostrare come elenco le opzioni aggiunte in un campo di tipo \"Elenco generico\".\r\n   * @returns Restituisce un array di oggetti del tipo { key: string, value: string } con i valori inseriti dall'utente.\r\n   */\r\n  getDictionaryKeyValue() {\r\n    if ((this.field as ListValueField).ValuePairs) {\r\n      return Object.keys((this.field as ListValueField).ValuePairs).map((k) => {\r\n        return {\r\n          key: k,\r\n          value: (this.field as ListValueField).ValuePairs[k],\r\n        };\r\n      });\r\n    } else {\r\n      return [];\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per rimuovere una opzione aggiunta al campo di tipo \"Elenco generico\"\r\n   * @param key Nome della chiave da rimuovere\r\n   */\r\n  deleteKeyFromDictionary(key: string) {\r\n    delete (this.field as ListValueField).ValuePairs[key];\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#region openFormulaDialog\r\n  openFormulaDialog() {\r\n    this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n      data: {\r\n        fields: this.availableFields,\r\n        formula: this.field.Formula,\r\n        formulaObject: this.formulaObject\r\n      },\r\n    });\r\n    this.dialogFormulaRef.afterClosed().subscribe((result) => {\r\n      this.field.Formula = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n    });\r\n  }\r\n  //#endregion openFormulaDialog\r\n\r\n\r\n  //#region avanti indietro\r\n  // avantiIndietro(where: string) {\r\n  //   this.dialogAvantiIndietroRef = this.dialog.open(this.dialogAvantiIndietro, {\r\n  //     disableClose: false,\r\n  //     hasBackdrop: true,\r\n  //     width: \"75%\",\r\n  //     data: {\r\n  //       where: where\r\n  //     },\r\n  //   });\r\n  //   this.dialogAvantiIndietroRef.afterClosed().subscribe((result) => {\r\n  //     console.log(result)\r\n  //     if (result?.action === 'save') {\r\n  //       // console.log(`Hai scelto salva (${result.where})`);\r\n  //       if(where == \"avanti\"){\r\n  //         this.saveAndExitAddField(true, 1);\r\n  //       } else if (where == \"indietro\"){\r\n  //         this.saveAndExitAddField(true, -1);\r\n  //       }\r\n  //     }\r\n  //     if (result?.action === 'nosave') {\r\n  //       // console.log(`Hai scelto via senza salvare (${result.where})`);\r\n  //       if(where == \"avanti\"){\r\n  //         this.saveAndExitAddField(false, 1);\r\n  //       } else if (where == \"indietro\"){\r\n  //         this.saveAndExitAddField(false, -1);\r\n  //       }\r\n  //     }\r\n  //   });\r\n  // }\r\n\r\n  // CloseSave() {\r\n  //   this.dialogAvantiIndietroRef.close({ action: 'save' });\r\n  // }\r\n\r\n  // Close() {\r\n  //   this.dialogAvantiIndietroRef.close({ action: 'nosave'});\r\n  // }\r\n  //#endregion ananti\r\n\r\n  //#region openVisibleIfDialog\r\n  openVisibleIfDialog() {\r\n    this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n      data: {\r\n        fields: this.availableFields,\r\n        formula: this.field.VisibleIf,\r\n        formulaObject: this.formulaObject\r\n      },\r\n    });\r\n    this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n      this.field.VisibleIf = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n    });\r\n  }\r\n  //#endregion openVisibleIfDialog\r\n\r\n  //#region openReadOnlyIfDialog\r\n  openReadOnlyIfDialog() {\r\n    this.dialogReadOnlyIfRef = this.dialog.open(this.dialogFormula, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n      data: {\r\n        fields: this.availableFields,\r\n        formula: this.field.ReadonlyIf,\r\n        formulaObject: this.formulaObject\r\n      },\r\n    });\r\n    this.dialogReadOnlyIfRef.afterClosed().subscribe((result) => {\r\n      this.field.ReadonlyIf = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n    });\r\n  }\r\n  //#endregion openReadOnlyIfDialog\r\n\r\n  //#region openAnswerStyleVisibleIfDialog\r\n  openAnswerStyleVisibleIfDialog() {\r\n    this.dialogVisibleIfRef = this.dialog.open(this.dialogFormula, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n      data: {\r\n        fields: this.availableFields,\r\n        formula: this.field.AnswerStyle.VisibleIf,\r\n        formulaObject: this.formulaObject\r\n      },\r\n    });\r\n    this.dialogVisibleIfRef.afterClosed().subscribe((result) => {\r\n      this.field.AnswerStyle.VisibleIf = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n    });\r\n  }\r\n  //#endregion openAnswerStyleVisibleIfDialog\r\n\r\n  onTextFieldIconToggle(enabled: boolean) {\r\n    if (!enabled) {\r\n      (this.field as TextField).IconName = null;\r\n      (this.field as TextField).IconPosition = null;\r\n      if (this.fieldFormGroup.contains('IconName')) {\r\n        this.fieldFormGroup.get('IconName').setValue(null);\r\n      }\r\n      if (this.fieldFormGroup.contains('IconPosition')) {\r\n        this.fieldFormGroup.get('IconPosition').setValue(null);\r\n      }\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#region TextFieldStyleCSS — helpers per le tab CSS\r\n\r\n  /** Legge il valore di una proprietà CSS da TextFieldStyleCSS */\r\n  getStyleValue(key: string): string {\r\n    return (((this.field as TextField).TextFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  /** Imposta o cancella una proprietà CSS in TextFieldStyleCSS e aggiorna l'anteprima */\r\n  setStyleValue(key: string, value: string): void {\r\n    const tf = this.field as TextField;\r\n    if (!tf.TextFieldStyleCSS) {\r\n      tf.TextFieldStyleCSS = {};\r\n    }\r\n    // undefined viene escluso da JSON.stringify → il JSON rimane compatto\r\n    (tf.TextFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  /** Inizializza la preview del TextField (FormFormGroup + record dummy) */\r\n  initTextFieldPreview(): void {\r\n    if (!this.isTextField) return;\r\n    const tf = this.field as TextField;\r\n    if (!tf.TextFieldStyleCSS) {\r\n      tf.TextFieldStyleCSS = {};\r\n    }\r\n    const controlName = this.field.Label || 'preview_tf';\r\n    this.field.Name = controlName;\r\n    this.previewRecord = { [controlName]: '' };\r\n    this.field.FormFormGroup = this.formBuilder.group({\r\n      [controlName]: ['', [\r\n        ...(tf.MinLenght ? [Validators.minLength(Number(tf.MinLenght))] : []),\r\n        ...(tf.MaxLenght ? [Validators.maxLength(Number(tf.MaxLenght))] : []),\r\n      ]]\r\n    });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  /** Aggiorna Name e FormFormGroup quando il Codice cambia, per mantenere la preview allineata */\r\n  onLabelChangeForPreview(newLabel: string): void {\r\n    if (!this.isTextField && !this.isNumericField && !this.isTextareaField && !this.isBooleanField && !this.isAttachmentField && !this.isLabelField && !this.isDateField && !this.isActionButtonField && !this.isListValueField) return;\r\n    this.field.Name = newLabel || 'preview_tf';\r\n    const initVal = this.isAttachmentField ? [] : (this.isDateField ? null : (this.isListValueField ? ((this.field as ListValueField).IsMultiChoiche ? [] : null) : ''));\r\n    this.previewRecord = { [this.field.Name]: initVal };\r\n    this.field.FormFormGroup = this.formBuilder.group({\r\n      [this.field.Name]: [initVal]\r\n    });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion TextFieldStyleCSS\r\n\r\n  //#region NumericFieldStyleCSS — helpers per le tab CSS\r\n\r\n  /** Sincronizza MinValue/MaxValue dal fieldFormGroup al campo e aggiorna i validator dell'anteprima */\r\n  onNumericMinMaxChange(): void {\r\n    const nf = this.field as NumericField;\r\n    if (this.fieldFormGroup.contains('MinValue')) {\r\n      nf.MinValue = this.fieldFormGroup.get('MinValue').value;\r\n    }\r\n    if (this.fieldFormGroup.contains('MaxValue')) {\r\n      nf.MaxValue = this.fieldFormGroup.get('MaxValue').value;\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  onNumericFieldIconToggle(enabled: boolean) {\r\n    if (!enabled) {\r\n      (this.field as NumericField).IconName = null;\r\n      (this.field as NumericField).IconPosition = null;\r\n      if (this.fieldFormGroup.contains('IconName')) {\r\n        this.fieldFormGroup.get('IconName').setValue(null);\r\n      }\r\n      if (this.fieldFormGroup.contains('IconPosition')) {\r\n        this.fieldFormGroup.get('IconPosition').setValue(null);\r\n      }\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  getNumericStyleValue(key: string): string {\r\n    return (((this.field as NumericField).NumericFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setNumericStyleValue(key: string, value: string): void {\r\n    const nf = this.field as NumericField;\r\n    if (!nf.NumericFieldStyleCSS) {\r\n      nf.NumericFieldStyleCSS = {};\r\n    }\r\n    (nf.NumericFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initNumericFieldPreview(): void {\r\n    if (!this.isNumericField) return;\r\n    const nf = this.field as NumericField;\r\n    if (!nf.NumericFieldStyleCSS) {\r\n      nf.NumericFieldStyleCSS = {};\r\n    }\r\n    const controlName = this.field.Label || 'preview_nf';\r\n    this.field.Name = controlName;\r\n    this.previewRecord = { [controlName]: '' };\r\n    this.field.FormFormGroup = this.formBuilder.group({\r\n      [controlName]: ['']\r\n    });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion NumericFieldStyleCSS\r\n\r\n  //#region TextareaFieldStyleCSS — helpers per le tab CSS\r\n\r\n  onTextareaFieldIconToggle(enabled: boolean) {\r\n    if (!enabled) {\r\n      (this.field as TextareaField).IconName = null;\r\n      (this.field as TextareaField).IconPosition = null;\r\n      if (this.fieldFormGroup.contains('IconName')) {\r\n        this.fieldFormGroup.get('IconName').setValue(null);\r\n      }\r\n      if (this.fieldFormGroup.contains('IconPosition')) {\r\n        this.fieldFormGroup.get('IconPosition').setValue(null);\r\n      }\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  getTextareaStyleValue(key: string): string {\r\n    return (((this.field as TextareaField).TextareaFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setTextareaStyleValue(key: string, value: string): void {\r\n    const ta = this.field as TextareaField;\r\n    if (!ta.TextareaFieldStyleCSS) {\r\n      ta.TextareaFieldStyleCSS = {};\r\n    }\r\n    (ta.TextareaFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initTextareaFieldPreview(): void {\r\n    if (!this.isTextareaField) return;\r\n    const ta = this.field as TextareaField;\r\n    if (!ta.TextareaFieldStyleCSS) {\r\n      ta.TextareaFieldStyleCSS = {};\r\n    }\r\n    const controlName = this.field.Label || 'preview_ta';\r\n    this.field.Name = controlName;\r\n    this.previewRecord = { [controlName]: '' };\r\n    this.field.FormFormGroup = this.formBuilder.group({\r\n      [controlName]: ['']\r\n    });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion TextareaFieldStyleCSS\r\n\r\n  //#region BooleanFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getBooleanStyleValue(key: string): string {\r\n    return (((this.field as BooleanField).BooleanFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setBooleanStyleValue(key: string, value: string): void {\r\n    const bf = this.field as BooleanField;\r\n    if (!bf.BooleanFieldStyleCSS) {\r\n      bf.BooleanFieldStyleCSS = {};\r\n    }\r\n    (bf.BooleanFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initBooleanFieldPreview(): void {\r\n    if (!this.isBooleanField) return;\r\n    const bf = this.field as BooleanField;\r\n    if (!bf.BooleanFieldStyleCSS) {\r\n      bf.BooleanFieldStyleCSS = {};\r\n    }\r\n    const controlName = this.field.Label || 'preview_bf';\r\n    this.field.Name = controlName;\r\n    this.previewRecord = { [controlName]: false };\r\n    this.field.FormFormGroup = this.formBuilder.group({\r\n      [controlName]: [false]\r\n    });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion BooleanFieldStyleCSS\r\n\r\n  //#region AttachmentFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getAttachmentStyleValue(key: string): string {\r\n    return (((this.field as AttachmentField).AttachmentFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setAttachmentStyleValue(key: string, value: string): void {\r\n    const af = this.field as AttachmentField;\r\n    if (!af.AttachmentFieldStyleCSS) {\r\n      af.AttachmentFieldStyleCSS = {};\r\n    }\r\n    (af.AttachmentFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initAttachmentFieldPreview(): void {\r\n    if (!this.isAttachmentField) return;\r\n    const af = this.field as AttachmentField;\r\n    if (!af.AttachmentFieldStyleCSS) {\r\n      af.AttachmentFieldStyleCSS = {};\r\n    }\r\n    if (!af.AllowedMimeTypes) {\r\n      af.AllowedMimeTypes = AvailableFileExtensions.concat(AvailableImageExtensions).map(ext => ext.key);\r\n    }\r\n    const controlName = this.field.Label || 'preview_af';\r\n    this.field.Name = controlName;\r\n    this.previewRecord = { [controlName]: [] };\r\n    this.field.FormFormGroup = this.formBuilder.group({\r\n      [controlName]: [[]]\r\n    });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion AttachmentFieldStyleCSS\r\n\r\n  //#region LabelFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getLabelStyleValue(key: string): string {\r\n    return (((this.field as LabelField).LabelFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setLabelStyleValue(key: string, value: string): void {\r\n    const lf = this.field as LabelField;\r\n    if (!lf.LabelFieldStyleCSS) {\r\n      lf.LabelFieldStyleCSS = {};\r\n    }\r\n    (lf.LabelFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initLabelFieldPreview(): void {\r\n    if (!this.isLabelField) return;\r\n    const lf = this.field as LabelField;\r\n    if (!lf.LabelFieldStyleCSS) {\r\n      lf.LabelFieldStyleCSS = {};\r\n    }\r\n    const controlName = this.field.Label || 'preview_lf';\r\n    this.field.Name = controlName;\r\n    if (!lf.Etichetta) {\r\n      lf.Etichetta = this.field.Description || 'Testo etichetta di esempio';\r\n    }\r\n    this.previewRecord = { [controlName]: lf.Etichetta };\r\n    this.field.FormFormGroup = this.formBuilder.group({ [controlName]: [''] });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion LabelFieldStyleCSS\r\n\r\n  //#region DateField — helpers specifiche e CSS\r\n\r\n  onDateTypeChange(): void {\r\n    const df = this.field as DateField;\r\n    let fmt: string;\r\n    switch (df.IsOnlyDate) {\r\n      case DateTimeTypeEnum['Solo orario']: fmt = 'HH:mm';            break;\r\n      case DateTimeTypeEnum['Data e ora']:  fmt = 'dd/MM/yyyy HH:mm'; break;\r\n      default:                             fmt = 'dd/MM/yyyy';        break;\r\n    }\r\n    df.DateFormat = fmt;\r\n    this.fieldFormGroup.get('DateFormat')?.setValue(fmt);\r\n    this.styleVersion++;\r\n  }\r\n\r\n  getDateStyleValue(key: string): string {\r\n    return (((this.field as DateField).DateFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setDateStyleValue(key: string, value: string): void {\r\n    const df = this.field as DateField;\r\n    if (!df.DateFieldStyleCSS) {\r\n      df.DateFieldStyleCSS = {};\r\n    }\r\n    (df.DateFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initDateFieldPreview(): void {\r\n    if (!this.isDateField) return;\r\n    const df = this.field as DateField;\r\n    if (!df.DateFieldStyleCSS) {\r\n      df.DateFieldStyleCSS = {};\r\n    }\r\n    if (df.IsOnlyDate == null) {\r\n      df.IsOnlyDate = DateTimeTypeEnum['Solo data'];\r\n    }\r\n    const controlName = this.field.Label || 'preview_df';\r\n    this.field.Name = controlName;\r\n    this.previewRecord = { [controlName]: null };\r\n    this.field.FormFormGroup = this.formBuilder.group({\r\n      [controlName]: [null]\r\n    });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion DateFieldStyleCSS\r\n\r\n  //#region ActionButtonFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getActionButtonStyleValue(key: string): string {\r\n    return (((this.field as ActionButtonField).ActionButtonFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setActionButtonStyleValue(key: string, value: string): void {\r\n    const ab = this.field as ActionButtonField;\r\n    if (!ab.ActionButtonFieldStyleCSS) {\r\n      ab.ActionButtonFieldStyleCSS = {};\r\n    }\r\n    (ab.ActionButtonFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initActionButtonFieldPreview(): void {\r\n    if (!this.isActionButtonField) return;\r\n    const ab = this.field as ActionButtonField;\r\n    if (!ab.ActionButtonFieldStyleCSS) {\r\n      ab.ActionButtonFieldStyleCSS = {};\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion ActionButtonFieldStyleCSS\r\n\r\n  //#region ImageFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getImageStyleValue(key: string): string {\r\n    return (((this.field as ImageField).ImageFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setImageStyleValue(key: string, value: string): void {\r\n    const img = this.field as ImageField;\r\n    if (!img.ImageFieldStyleCSS) {\r\n      img.ImageFieldStyleCSS = {};\r\n    }\r\n    (img.ImageFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initImageFieldPreview(): void {\r\n    if (!this.isImageField) return;\r\n    const img = this.field as ImageField;\r\n    if (!img.ImageFieldStyleCSS) {\r\n      img.ImageFieldStyleCSS = {};\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion ImageFieldStyleCSS\r\n\r\n  //#region ImageWithMarkersFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getImageWithMarkersStyleValue(key: string): string {\r\n    return (((this.field as ImageWithMarkersField).ImageWithMarkersFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setImageWithMarkersStyleValue(key: string, value: string): void {\r\n    const iwm = this.field as ImageWithMarkersField;\r\n    if (!iwm.ImageWithMarkersFieldStyleCSS) {\r\n      iwm.ImageWithMarkersFieldStyleCSS = {};\r\n    }\r\n    (iwm.ImageWithMarkersFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initImageWithMarkersFieldPreview(): void {\r\n    if (!this.isImageWithMarkersField) return;\r\n    const iwm = this.field as ImageWithMarkersField;\r\n    if (!iwm.ImageWithMarkersFieldStyleCSS) {\r\n      iwm.ImageWithMarkersFieldStyleCSS = {};\r\n    }\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion ImageWithMarkersFieldStyleCSS\r\n\r\n  //#region ListValueFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getListValueStyleValue(key: string): string {\r\n    return (((this.field as ListValueField).ListValueFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setListValueStyleValue(key: string, value: string): void {\r\n    const lv = this.field as ListValueField;\r\n    if (!lv.ListValueFieldStyleCSS) {\r\n      lv.ListValueFieldStyleCSS = {};\r\n    }\r\n    (lv.ListValueFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initListValueFieldPreview(): void {\r\n    if (!this.isListValueField) return;\r\n    const lv = this.field as ListValueField;\r\n    if (!lv.ListValueFieldStyleCSS) {\r\n      lv.ListValueFieldStyleCSS = {};\r\n    }\r\n    const controlName = this.field.Label || 'preview_lv';\r\n    this.field.Name = controlName;\r\n    const initVal = lv.IsMultiChoiche ? [] : null;\r\n    this.previewRecord = { [controlName]: initVal };\r\n    this.field.FormFormGroup = this.formBuilder.group({ [controlName]: [initVal] });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  onIsMultiChoicheChange(): void {\r\n    if (!this.isListValueField) return;\r\n    this.initListValueFieldPreview();\r\n  }\r\n\r\n  //#endregion ListValueFieldStyleCSS\r\n\r\n  //#region ImageSelectorFieldStyleCSS — helpers per le tab CSS\r\n\r\n  getImageSelectorStyleValue(key: string): string {\r\n    return (((this.field as ImageSelectorField).ImageSelectorFieldStyleCSS) as any)?.[key] ?? '';\r\n  }\r\n\r\n  setImageSelectorStyleValue(key: string, value: string): void {\r\n    const isf = this.field as ImageSelectorField;\r\n    if (!isf.ImageSelectorFieldStyleCSS) {\r\n      isf.ImageSelectorFieldStyleCSS = {};\r\n    }\r\n    (isf.ImageSelectorFieldStyleCSS as any)[key] = value || undefined;\r\n    this.styleVersion++;\r\n  }\r\n\r\n  initImageSelectorFieldPreview(): void {\r\n    if (!this.isImageSelectorField) return;\r\n    const isf = this.field as ImageSelectorField;\r\n    if (!isf.ImageSelectorFieldStyleCSS) {\r\n      isf.ImageSelectorFieldStyleCSS = {};\r\n    }\r\n    const controlName = this.field.Label || 'preview_isf';\r\n    this.field.Name = controlName;\r\n    const initVal = isf.IsMultiChoiche ? [] : null;\r\n    this.previewRecord = { [controlName]: initVal };\r\n    this.field.FormFormGroup = this.formBuilder.group({ [controlName]: [initVal] });\r\n    this.styleVersion++;\r\n  }\r\n\r\n  //#endregion ImageSelectorFieldStyleCSS\r\n\r\n  stringSanitizer(value) {\r\n    if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n      // alert(\"errore!\");\r\n    }\r\n  }\r\n\r\n  //#region disableSaveField\r\n  /**\r\n   * Metodo per disabilitare il pulsante per salvare il campo inserito/modificato.\r\n   * @returns Restituisce un booleano, se true il salvataggio viene disabilitato.\r\n   */\r\n  disableSaveField(): boolean {\r\n\r\n    if (this.fieldFormGroup.invalid) {\r\n      return true;\r\n    }\r\n\r\n    switch (this.field.FieldType) {\r\n      case FieldTypeEnum[\"Elenco generico\"]:\r\n\r\n        if (\r\n          (this.field as ListValueField).Formula != undefined &&\r\n          (this.field as ListValueField).Formula != \"\"\r\n        ) {\r\n          if (!(this.field as ListValueField).ValuePairs) {\r\n            (this.field as ListValueField).ValuePairs = {};\r\n          }\r\n          return false;\r\n        }\r\n\r\n        if (\r\n          (this.field as ListValueField).ValueString != undefined &&\r\n          (this.field as ListValueField).ValueString != null &&\r\n          (this.field as ListValueField).ValueString != \"\") {\r\n          return false\r\n        }\r\n\r\n        return (\r\n          !(this.field as ListValueField).ValuePairs ||\r\n          (this.field as ListValueField).ValuePairs.length === 0\r\n        );\r\n\r\n      case FieldTypeEnum[\"Elenco immagini\"]:\r\n\r\n        return (\r\n          !(this.field as ImageSelectorField).AttachmentList ||\r\n          (this.field as ImageSelectorField).AttachmentList.length === 0 ||\r\n          (this.field as ImageSelectorField).AttachmentList.find(\r\n            (i) => (i.ButtonKey == null || i.ButtonKey === \"undefined\" || i.ButtonKey == '') || (i.ButtonValue == null || i.ButtonValue === \"undefined\" || i.ButtonValue == '')\r\n          ) != null\r\n        );\r\n\r\n      case FieldTypeEnum.Lookup:\r\n        return (\r\n          !(this.field as LookupField).FieldNames ||\r\n          (this.field as LookupField).FieldNames.length === 0\r\n        );\r\n      default:\r\n        return false;\r\n    }\r\n  }\r\n  //#endregion disableSaveField\r\n\r\n  onSaveClick(): void {\r\n    if (this.disableSaveField()) {\r\n      const errors = this.collectValidationErrors();\r\n      EqpDynamicModuleDialogService.Warning(\r\n        errors.length > 0 ? errors : ['Il form contiene errori di validazione.'],\r\n        'Impossibile salvare'\r\n      );\r\n      return;\r\n    }\r\n    this.saveAndExitAddField(true);\r\n  }\r\n\r\n  private collectValidationErrors(): string[] {\r\n    const errors: string[] = [];\r\n\r\n    const labelMap: { [key: string]: string } = {\r\n      Label: 'Codice',\r\n      Description: 'Descrizione',\r\n      FieldType: 'Tipo campo',\r\n      Formula: 'Formula',\r\n      VisibleIf: 'Visibile se',\r\n      ReadonlyIf: 'Sola lettura se',\r\n      TextMask: 'Maschera',\r\n      MaxLength: 'Lunghezza massima',\r\n      MinValue: 'Valore minimo',\r\n      MaxValue: 'Valore massimo',\r\n      DateFormat: 'Formato data',\r\n      Etichetta: 'Testo etichetta',\r\n      IconName: 'Icona',\r\n      ButtonLabel: 'Etichetta bottone',\r\n      InListView: 'Visibile in lista',\r\n      Required: 'Obbligatorio',\r\n      Invisibility: 'Invisibilità',\r\n      FieldstyleCSS: 'Stile campo',\r\n      LabelstyleCSS: 'Stile etichetta',\r\n      AllowedMimeTypes: 'Tipi MIME consentiti',\r\n    };\r\n\r\n    const errorMsgMap: { [key: string]: string } = {\r\n      required: 'è obbligatorio',\r\n      minlength: 'è troppo corto',\r\n      maxlength: 'è troppo lungo',\r\n      pattern: 'contiene caratteri non validi',\r\n      min: 'è inferiore al valore minimo',\r\n      max: 'è superiore al valore massimo',\r\n      email: 'non è un indirizzo email valido',\r\n      matDatepickerParse: 'non è una data valida',\r\n    };\r\n\r\n    Object.keys(this.fieldFormGroup.controls).forEach(controlName => {\r\n      const control = this.fieldFormGroup.get(controlName);\r\n      if (control && control.invalid && control.errors) {\r\n        const label = labelMap[controlName] || controlName;\r\n        Object.keys(control.errors).forEach(errorKey => {\r\n          const msg = errorMsgMap[errorKey] || `ha un errore (${errorKey})`;\r\n          errors.push(`Il campo \"${label}\" ${msg}`);\r\n        });\r\n      }\r\n    });\r\n\r\n    // Errori specifici per tipo campo\r\n    switch (this.field.FieldType) {\r\n      case FieldTypeEnum[\"Elenco generico\"]: {\r\n        const lv = this.field as ListValueField;\r\n        const hasFormula = lv.Formula && lv.Formula !== '';\r\n        const hasValueString = lv.ValueString && lv.ValueString !== '';\r\n        const hasValuePairs = lv.ValuePairs && lv.ValuePairs.length > 0;\r\n        if (!hasFormula && !hasValueString && !hasValuePairs) {\r\n          errors.push('L\\'elenco non contiene valori');\r\n        }\r\n        break;\r\n      }\r\n      case FieldTypeEnum[\"Elenco immagini\"]: {\r\n        const isf = this.field as ImageSelectorField;\r\n        if (!isf.AttachmentList || isf.AttachmentList.length === 0) {\r\n          errors.push('L\\'elenco immagini non contiene elementi');\r\n        } else if (isf.AttachmentList.find(\r\n          i => !i.ButtonKey || i.ButtonKey === 'undefined' || i.ButtonKey === '' ||\r\n               !i.ButtonValue || i.ButtonValue === 'undefined' || i.ButtonValue === ''\r\n        )) {\r\n          errors.push('Alcuni elementi dell\\'elenco immagini non sono completi (chiave o valore mancanti)');\r\n        }\r\n        break;\r\n      }\r\n      case FieldTypeEnum.Lookup: {\r\n        const lf = this.field as LookupField;\r\n        if (!lf.FieldNames || lf.FieldNames.length === 0) {\r\n          errors.push('Il Lookup non ha nessun campo configurato');\r\n        }\r\n        break;\r\n      }\r\n    }\r\n\r\n    return errors;\r\n  }\r\n\r\n  //#region saveAndExitAddField\r\n  /**\r\n   * Metodo per salvare il campo inserito/modificato.\r\n   * Se è stato inserito un field con la stessa label viene generato un errore (le label devono essere univoche).\r\n   * Una volta aggiunto/aggiornato il campo nell'elenco dei Field della Form chiude il dialog e ricarica la tabella\r\n   * che mostra l'elenco dei campi aggiunti alla form.\r\n   */\r\n  saveAndExitAddField(save: boolean, nextRelativeIndex: number = 0) {\r\n    this.setResizedImagesHeightPx();\r\n    this.setFieldOrdinalPosition();\r\n    if (this.imageSelectorAttachments) { this.imageSelectorAttachments.reloadData(); }\r\n    if (save) {\r\n\r\n      this.field.Name = this.field.Label;\r\n      // retrocompatibilità con valuepairs per Elenco Generico\r\n      if (this.field.FieldType == FieldTypeEnum[\"Elenco generico\"]) {\r\n        if (((this.field as ListValueField).Formula && (this.field as ListValueField).Formula != \"\") || ((this.field as ListValueField).ValueString && (this.field as ListValueField).ValueString != \"\")) {\r\n          (this.field as ListValueField).ValuePairs = null;\r\n        }\r\n      }\r\n      if (this.field.FieldType == FieldTypeEnum[\"Elenco immagini\"]) {\r\n        if (((this.field as ImageSelectorField).AttachmentList.length > 0)) {\r\n          (this.field as ImageSelectorField).AttachmentList.forEach((attachment) => {\r\n            attachment.ResizedImageHeightPx = (this.field as ImageSelectorField).ResizedImagesHeightPx;\r\n          });\r\n        }\r\n      }\r\n      if (this.field.FieldType == FieldTypeEnum.Immagine) {\r\n        if (((this.field as ImageField).DynAttachment != null)) {\r\n          (this.field as ImageField).DynAttachment.ResizedImageHeightPx = (this.field as ImageField).ResizedImagesHeightPx;\r\n        }\r\n      }\r\n      if (this.field.FieldType == FieldTypeEnum[\"Immagine con markers\"]) {\r\n        if (((this.field as ImageWithMarkersField).DynAttachment != null)) {\r\n          (this.field as ImageWithMarkersField).DynAttachment.ResizedImageHeightPx = (this.field as ImageWithMarkersField).ResizedImagesHeightPx;\r\n        }\r\n      }\r\n      if (this.field.FieldType == FieldTypeEnum[\"Bottone\"]) {\r\n        if (((this.field as ActionButtonField).formulasTemp != null)) {\r\n\r\n          (this.field as ActionButtonField).formulas = new Array<KeyTypeValue>();\r\n\r\n          var formulas = (this.field as ActionButtonField).formulasTemp;\r\n          var keys = Object.keys(formulas);\r\n\r\n          if (keys.length > 0) {\r\n            keys.forEach((key) => {\r\n              if (!this.isAnActionKey(key, this.field, formulas)) { return; }\r\n              var ktv: KeyTypeValue = new KeyTypeValue();\r\n              ktv.key = key;\r\n              ktv.tooltip = formulas[key].tooltip;\r\n              ktv.type = formulas[key].type;\r\n              ktv.value = formulas[key].value;\r\n              /** per campi con valori vincolati a una lista, porto dietro sia il valore selezionato che quelli ammissibili */\r\n              ktv.allowedValues = formulas[key].allowedValues;\r\n              ktv.selectedAllowedValue = formulas[key].selectedAllowedValue;\r\n\r\n              (this.field as ActionButtonField).formulas.push(ktv);\r\n            });\r\n          }\r\n\r\n\r\n\r\n        }\r\n      }\r\n\r\n      this.setCodeToExtraFields();\r\n\r\n      GlobalService.debugLog('add-form-field save', this.field)\r\n      let out = { field: this.field, reopen: nextRelativeIndex }\r\n      this.saveFieldEvent.emit(out);\r\n\r\n\r\n    } else {\r\n      let out = { field: null, reopen: nextRelativeIndex }\r\n      this.saveFieldEvent.emit(out);\r\n\r\n    }\r\n  }\r\n  //#endregion saveAndExitAddField\r\n\r\n  isAnActionKey(key, field: ActionButtonField, formulas: Array<any>) {\r\n    GlobalService.debugLog(\"isAnActionKey - key\", key);\r\n    GlobalService.debugLog(\"isAnActionKey - field\", field);\r\n    GlobalService.debugLog(\"isAnActionKey - formulas\", formulas);\r\n    return true;\r\n    /*var code = field.ButtonCode;\r\n    var els = formulas[code];\r\n    return (Object.keys(els).find(x => x == key) != null);*/\r\n  }\r\n\r\n  setCodeToExtraFields() {\r\n    if (this.form.FldExtraConfigValues != null && this.form.FldExtraConfigValues.length > 0) {\r\n      this.form.FldExtraConfigValues.filter(x => x.FieldConfigParentFieldCode === undefined).forEach((ufields) => {\r\n        ufields.FieldConfigParentFieldCode = this.field.Name;\r\n        if (typeof ufields.FieldConfigValue == \"boolean\") { ufields.FieldConfigValue = ufields.FieldConfigValue ? \"true\" : \"false\"; }\r\n      });\r\n    }\r\n    if (this.form.ObjectFldExtraConfigValues != null && this.form.ObjectFldExtraConfigValues.length > 0) {\r\n      this.form.ObjectFldExtraConfigValues.filter(x => x.FieldConfigParentFieldCode === undefined).forEach((ufields) => {\r\n        ufields.FieldConfigParentFieldCode = this.field.Name;\r\n        if (typeof ufields.FieldConfigValue == \"boolean\") { ufields.FieldConfigValue = ufields.FieldConfigValue ? \"true\" : \"false\"; }\r\n      });\r\n    }\r\n  }\r\n\r\n  //#region restoreBaseFieldProperties\r\n  /**\r\n   * Metodo per ripristinare l'oggetto field al cambio del tipo selezionato.\r\n   * Lascia valorizzate solo le proprietà dell'oggetto BaseField comune a tutti i tipi di campo.\r\n   */\r\n  private restoreBaseFieldProperties() {\r\n    if (this.field) {\r\n      const tmpBaseField = JSON.parse(JSON.stringify(this.field, (key, value) => key === 'FormFormGroup' ? undefined : value));\r\n      this.field = new BaseField();\r\n      this.field.Label = tmpBaseField.Label;\r\n      this.field.Description = tmpBaseField.Description;\r\n      this.field.Required = tmpBaseField.Required;\r\n      this.field.FieldType = tmpBaseField.FieldType;\r\n      this.field.Formula = tmpBaseField.Formula;\r\n      this.field.ColSpanSizes = tmpBaseField.ColSpanSizes;\r\n      this.field.InListView = tmpBaseField.InListView;\r\n      this.field.Invisibility = tmpBaseField.Invisibility;\r\n      this.field.Tooltip = tmpBaseField.Tooltip;\r\n      this.field.Readonly = tmpBaseField.Readonly;\r\n      this.field.FieldGroup = tmpBaseField.FieldGroup;\r\n      this.field.VisibleIf = tmpBaseField.VisibleIf;\r\n    }\r\n  }\r\n  //#region restoreBaseFieldProperties\r\n\r\n  countValuePairs(valuePairs): number {\r\n    if (valuePairs) {\r\n      return Object.keys(valuePairs).length;\r\n    } else {\r\n      return 0;\r\n    }\r\n  }\r\n\r\n  //#region ConfigureColumns\r\n  configureColumns() {\r\n\r\n    // Lista Generica di immagini\r\n    this.configColumnListImages = [];\r\n\r\n    this.configColumnListImages.push({\r\n      key: 'action', display: '', type: TypeColumn.MenuAction, buttonMenuIcon: 'dots-vertical', styles: { flex: '0 0 6%' },\r\n      actions: [\r\n        { name: 'Elimina', icon: 'trash', fn: (element, index, col) => this.deleteListImage(element, index, col) },\r\n        {\r\n          name: \"Sposta su\",\r\n          icon: \"arrow-up\",\r\n          fn: (element, index, col) =>\r\n            this.moveElement(element, true),\r\n          disabled: (element) => this.field.AttachmentList.indexOf(element) === 0,\r\n        },\r\n        {\r\n          name: \"Sposta giù\",\r\n          icon: \"arrow-down\",\r\n          fn: (element, index, col) =>\r\n            this.moveElement(element, false),\r\n          disabled: (element) =>\r\n            this.field.AttachmentList.indexOf(element) >= this.field.AttachmentList.length - 1,\r\n        },\r\n      ]\r\n    });\r\n\r\n    this.configColumnListImages.push({\r\n      key: \"FileDataBase64\",\r\n      display: \"Immagine\",\r\n      type: TypeColumn.ExternalTemplate,\r\n      externalTemplate: this.GenericListImagesImageTemplate,\r\n    });\r\n    this.configColumnListImages.push({\r\n      key: \"ButtonKey\",\r\n      display: \"Chiave*\",\r\n      type: TypeColumn.ExternalTemplate,\r\n      externalTemplate: this.GenericListImagesKeyTemplate,\r\n    });\r\n    this.configColumnListImages.push({\r\n      key: \"ButtonValue\",\r\n      display: \"Valore*\",\r\n      type: TypeColumn.ExternalTemplate,\r\n      externalTemplate: this.GenericListImagesValueTemplate,\r\n    });\r\n    this.configColumnListImages.push({\r\n      key: \"ImageWidthPx\",\r\n      display: \"Larghezza\"\r\n    });\r\n    this.configColumnListImages.push({\r\n      key: \"ImageHeightPx\",\r\n      display: \"Altezza\"\r\n    });\r\n\r\n  }\r\n  //#endregion ConfigureColumns\r\n\r\n  //#region moveElement\r\n  private moveElement(\r\n    element: DynAttachment,\r\n    moveUp: boolean\r\n  ) {\r\n    const startingIndex = this.field.AttachmentList.indexOf(element);\r\n    const endingIndex = startingIndex + (moveUp ? -1 : 1);\r\n\r\n    this.field.AttachmentList.splice(startingIndex, 1);\r\n    this.field.AttachmentList.splice(endingIndex, 0, element);\r\n\r\n    this.setFieldOrdinalPosition();\r\n    if (this.imageSelectorAttachments) { this.imageSelectorAttachments.reloadData(); }\r\n  }\r\n  //#endregion moveElement\r\n\r\n  //#region setFieldOrdinalPosition\r\n  private setFieldOrdinalPosition() {\r\n    if (this.field.AttachmentList) {\r\n      this.field.AttachmentList.forEach((field) => {\r\n        field.OrdinalPosition = this.field.AttachmentList.indexOf(field);\r\n      });\r\n    }\r\n  }\r\n  //#endregion setFieldOrdinalPosition\r\n\r\n  setResizedImagesHeightPx() {\r\n    this.resizedImagesHeightPx = this.field.ResizedImagesHeightPx;\r\n  }\r\n\r\n  deleteListImage(el: DynAttachment, i: number, col: ConfigColumn) {\r\n    EqpDynamicModuleDialogService.Confirm('Eliminare questa immagine?', () => {\r\n      this.field.AttachmentList.splice(el.originalIndex, 1);\r\n      if (this.imageSelectorAttachments) { this.imageSelectorAttachments.reloadData(); }\r\n\r\n    }, false, 'Richiesta conferma');\r\n  }\r\n\r\n  deleteImage(el: DynAttachment) {\r\n    this.field.DynAttachment = null;\r\n  }\r\n\r\n  //#region DB GETTER\r\n  openDBGetter() {\r\n    if (this.QueryEditorComponent != null && !this.QueryEditorComponent.inputParams.useDynamicModuleMock) {\r\n\r\n      this.QueryEditorComponent.inputParams.config.mode = QueryEditorModeEnum.COMPOSER;\r\n      this.QueryEditorComponent.inputParams.config.loadQueryStatuses = this.field.DataGetter.DataGetterValue;\r\n\r\n      this.dialogQERef = this.dialog.open(this.dialogQE, {\r\n        disableClose: true,\r\n        hasBackdrop: true,\r\n        panelClass: 'query-editor-modal',\r\n        width: '90%',\r\n        maxHeight: '90vh',\r\n        position: { top: '20px' },\r\n      });\r\n\r\n    } else {\r\n\r\n      this.httpClient.get('./assets/mockups/mockedFromQueryEditor_QUERY_WITH_QUESTION.txt', { responseType: 'text' })\r\n        .subscribe(mockedFromQueryEditor => {\r\n          this.treatDataFromQueryEditor(JSON.parse(mockedFromQueryEditor).Params);\r\n        });\r\n\r\n    }\r\n  }\r\n\r\n  closeQEModal() {\r\n    this.dialogQERef.close();\r\n  }\r\n\r\n  onExternalComponentOut(ev: eventOut) {\r\n    if (ev.Behaviours.indexOf(\"send-out\") != -1) { this.out.emit(ev); }\r\n    if (ev.Behaviours.indexOf(\"close-modal\") != -1) { this.closeQEModal(); }\r\n    if (ev.Behaviours.indexOf(\"save-query\") != -1) {\r\n\r\n      this.treatDataFromQueryEditor(ev.Params);\r\n\r\n    }\r\n  }\r\n\r\n  treatDataFromQueryEditor(data: any) {\r\n    this.field.DataGetter.DataGetterValue = data;\r\n    this.createColumnKeys(data);\r\n  }\r\n\r\n  createColumnKeys(data) {\r\n    if (data == null && this.field.DataGetter.DataGetterValue != null) { data = this.field.DataGetter.DataGetterValue; }\r\n    if (data == null || typeof data === \"undefined\") return;\r\n\r\n    // V2 (DataGetterCodeVersion === 2): selectedFields è dentro queryCommandDatabaseConfiguration\r\n    const isV2 = data.DataGetterCodeVersion === 2;\r\n    const selectedFields = isV2\r\n      ? data.queryCommandDatabaseConfiguration?.selectedFields\r\n      : data.selectedFields;\r\n\r\n    if (selectedFields != null && typeof selectedFields != \"undefined\") {\r\n      this.columnKeys = new Array<{ key: string; value: string }>();\r\n      selectedFields.forEach((key) => {\r\n        const label = key.CurrentTranslate || key.PropertyName;\r\n        this.columnKeys.push({ key: key.DatabaseTableName + \"_\" + key.PropertyName + \"__\" + label.replace(\" \", \"_\"), value: label });\r\n      });\r\n\r\n      // V2: se c'è una sola colonna disponibile, selezionala automaticamente\r\n      if (isV2 && this.columnKeys.length === 1) {\r\n        this.field.DataGetter.DataGetterColumnForce = this.columnKeys[0].key;\r\n      }\r\n\r\n      // V2: auto-seleziona la colonna suggerita dall'AI nel pannello di configurazione\r\n      if (isV2 && data.DataGetterColumnForce?.key) {\r\n        const match = this.columnKeys.find(k => k.key === data.DataGetterColumnForce.key);\r\n        if (match) {\r\n          this.field.DataGetter.DataGetterColumnForce = match.key;\r\n        }\r\n      }\r\n    }\r\n  }\r\n  //#endregion DB GETTER\r\n\r\n  getAllModules() {\r\n    const dynamicModuleParams: Array<EndPointDataParams> =\r\n      new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"orgaid\",\r\n      ParamValue: this.form.OrgaID,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetAllFormEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Array<Form>) => {\r\n        this.forms = res;\r\n        this.forms = this.forms.sort((uno, due) => uno.Name.localeCompare(due.Name));\r\n\r\n        this.DMField = null;\r\n        if (this.DMModule == null && this.field.DataGetter.DataGetterValue != null) {\r\n          this.DMModule = this.forms.find(x => x.Code == this.field.DataGetter.DataGetterValue);\r\n          this.DMModule.Fields = JSON.parse(this.DMModule.JsonFields);\r\n          this.DMFields = new Array<{ key: string }>();\r\n          this.DMModule.Fields.forEach(element => {\r\n            this.DMFields.push({ key: element.Value.Name });\r\n          });\r\n\r\n          this.DMFields = this.DMFields.sort((uno, due) => uno.key.localeCompare(due.key));\r\n\r\n          if (this.field.DataGetter.DataGetterColumnForce != null) {\r\n            this.DMField = this.DMFields.find(x => x.key == this.field.DataGetter.DataGetterColumnForce);\r\n          }\r\n        }\r\n\r\n      },\r\n      (err) => { }\r\n    );\r\n  }\r\n\r\n  onChangeDMModule() {\r\n    GlobalService.debugLog(\"this..field.DataGetter.DataGetterValue\", this.field.DataGetter.DataGetterValue);\r\n    GlobalService.debugLog(\"this.DMModule\", this.DMModule);\r\n    if (this.DMModule != null) {\r\n      this.DMModule.Fields = JSON.parse(this.DMModule.JsonFields);\r\n      this.DMFields = new Array<{ key: string }>();\r\n      this.DMModule.Fields.forEach(element => {\r\n        this.DMFields.push({ key: element.Value.Name });\r\n      });\r\n\r\n      this.field.DataGetter.DataGetterValue = this.DMModule.Code;\r\n    } else {\r\n      this.DMModule = null;\r\n      this.field.DataGetter.DataGetterValue = null;\r\n      this.DMField = null;\r\n      this.field.DataGetter.DataGetterColumnForce = null;\r\n    }\r\n  }\r\n\r\n  onChangeDMField() {\r\n    if (this.DMField != null) {\r\n      this.field.DataGetter.DataGetterColumnForce = this.DMField.key;\r\n    } else {\r\n      this.field.DataGetter.DataGetterColumnForce = null;\r\n    }\r\n  }\r\n\r\n  onChangeDMContestualization() {\r\n    GlobalService.debugLog(\"onChangeDMContestualization()\", this.field.DataGetter.DataGetterContestualization);\r\n  }\r\n\r\n  changedButtonField(field: ActionButtonField) {\r\n    this.field = field;\r\n  }\r\n\r\n  configureFieldsExtra() {\r\n\r\n    var thisFieldExtraConfigValues: Array<FieldExtraValues> = this.form.FldExtraConfigValues == null ? null : this.form.FldExtraConfigValues.filter(x => x.FieldConfigParentFieldCode == this.field.Name);\r\n\r\n    if (this.fieldsExtraConfig != null && this.fieldsExtraConfig.length > 0 && this.form.ObjectFldExtraConfigValues == null && (thisFieldExtraConfigValues == null || thisFieldExtraConfigValues.length == 0)) {\r\n      this.form.ObjectFldExtraConfigValues = new Array<any>();\r\n      thisFieldExtraConfigValues = new Array<FieldExtraValues>();\r\n      this.fieldsExtraConfig.forEach((fieldExtraConfig) => {\r\n\r\n        var newfield: FieldExtraValues = new FieldExtraValues();\r\n        newfield.FieldConfigCode = fieldExtraConfig.FieldConfigCode;\r\n        newfield.FieldConfigParentFieldCode = this.field.Name;\r\n\r\n        if (fieldExtraConfig.FieldConfigType == FieldTypeEnum['Booleano']) {\r\n          newfield.FieldConfigValue = false;\r\n        }\r\n        if (fieldExtraConfig.FieldConfigType == FieldTypeEnum['Campo di testo']) {\r\n          newfield.FieldConfigValue = \"\";\r\n        }\r\n\r\n        this.form.ObjectFldExtraConfigValues.push(newfield);\r\n        thisFieldExtraConfigValues.push(newfield);\r\n\r\n      });\r\n\r\n      if (this.form.FldExtraConfigValues == null) { this.form.FldExtraConfigValues = new Array<FieldExtraValues>(); }\r\n      thisFieldExtraConfigValues.forEach((ecv) => {\r\n        this.form.FldExtraConfigValues.push(ecv);\r\n      });\r\n\r\n    }\r\n    if (this.fieldsExtraConfig != null && this.fieldsExtraConfig.length > 0 && this.form.ObjectFldExtraConfigValues != null && (this.form.FldExtraConfigValues == null || this.form.FldExtraConfigValues.length == 0)) {\r\n      this.form.ObjectFldExtraConfigValues.forEach((extrafield) => {\r\n        this.form.FldExtraConfigValues.push(extrafield);\r\n      });\r\n    }\r\n\r\n    this.loadedFieldExtra = true;\r\n  }\r\n\r\n}\r\n","<mat-card class=\"add-form-field\">\r\n\r\n    <!--#region HEADER con sfondo -->\r\n    <mat-card-header class=\"add-field-header w-100\">\r\n        <mat-card-title class=\"w-100 d-flex justify-content-between align-items-center\">\r\n            <div class=\"d-flex gap-2\">\r\n                <ng-container *ngIf=\"indexField != null && indexField > 0\">\r\n                    <button class=\"btn btn-sm bg-danger text-white\" mat-raised-button type=\"button\"\r\n                        (click)=\"saveAndExitAddField(false, -1)\">← Annulla</button>\r\n                    <button class=\"btn btn-sm bg-success text-white\" mat-raised-button type=\"button\"\r\n                        (click)=\"saveAndExitAddField(true, -1)\">← Salva</button>\r\n                </ng-container>\r\n            </div>\r\n            <span class=\"header-title\" matTooltip=\"Index {{indexField}}\">\r\n                {{ indexField != null && indexField >= 0 ? \"Modifica\" : \"Aggiungi\" }} campo\r\n            </span>\r\n            <div class=\"d-flex gap-2\">\r\n                <ng-container *ngIf=\"indexField != null && indexField > 0\">\r\n                    <button class=\"btn btn-sm bg-danger text-white\" mat-raised-button type=\"button\"\r\n                        (click)=\"saveAndExitAddField(false, 1)\">\r\n                        {{ indexField == this.form.Fields.length - 1 ? \"Annulla e aggiungi\" : \"Annulla →\" }}\r\n                    </button>\r\n                    <button class=\"btn btn-sm bg-success text-white\" mat-raised-button type=\"button\"\r\n                        (click)=\"saveAndExitAddField(true, 1)\">\r\n                        {{ indexField == this.form.Fields.length - 1 ? \"Salva e aggiungi\" : \"Salva →\" }}\r\n                    </button>\r\n                </ng-container>\r\n            </div>\r\n        </mat-card-title>\r\n    </mat-card-header>\r\n    <!--#endregion HEADER -->\r\n\r\n    <div class=\"field-ai-actions-row\">\r\n        <button mat-raised-button type=\"button\" class=\"btn-ai-field\" (click)=\"onOpenAiEditForField()\">\r\n            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n            Modifica con AI\r\n        </button>\r\n    </div>\r\n\r\n    <mat-card-content>\r\n        <div class=\"container-fluid containerContent\">\r\n            <form [formGroup]=\"fieldFormGroup\" style=\"height: 100%;\">\r\n\r\n                <!--#region AREA PRINCIPALE (2 righe compatte) -->\r\n                <div class=\"row align-items-center eqp-dform-add-form-field-main\">\r\n\r\n                    <!--#region RIGA 1: Tipo, Codice, Descrizione, Sezione -->\r\n                    <div class=\"col-sm-12 col-md-3 mt-1 tipoCampo\">\r\n                        <mat-label [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldType'].status != 'VALID' && fieldFormGroup.controls['FieldType'].touched}\">\r\n                            Tipo campo *\r\n                        </mat-label>\r\n                        <tmw-select [enumData]=\"FieldTypeEnum\" [(ngModelInput)]=\"field.FieldType\"\r\n                            [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange()\"\r\n                            [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'FieldType'\"\r\n                            [enumDataToExclude]=\"fieldTypesToExclude\">\r\n                        </tmw-select>\r\n                    </div>\r\n\r\n                    <div class=\"col-sm-12 col-md-3 mt-1\">\r\n                        <mat-label [ngClass]=\"{'text-danger': fieldFormGroup.controls['Label'].status != 'VALID' && fieldFormGroup.controls['Label'].touched}\">\r\n                            Codice *\r\n                        </mat-label>\r\n                        <mat-form-field>\r\n                            <input formControlName=\"Label\" required matInput [(ngModel)]=\"field.Label\"\r\n                                (ngModelChange)=\"onLabelChangeForPreview($event)\"\r\n                                (keypress)=\"omit_special_char($event)\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                (focusout)=\"stringSanitizer(field.Label)\">\r\n                            <mat-error>\r\n                                <ul>\r\n                                    <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['required']\">Obbligatorio</li>\r\n                                    <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['pattern']\">Solo lettere a-z</li>\r\n                                    <li *ngIf=\"fieldFormGroup.controls['Label'].errors?.['Missing Parenthesis']\">Parentesi non chiuse</li>\r\n                                </ul>\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n                    </div>\r\n\r\n                    <div class=\"col-sm-12 col-md-3 mt-1\">\r\n                        <mat-label [ngClass]=\"{'text-danger': fieldFormGroup.controls['Description'].status != 'VALID' && fieldFormGroup.controls['Description'].touched}\">\r\n                            Descrizione *\r\n                        </mat-label>\r\n                        <mat-form-field>\r\n                            <input name=\"Description\" formControlName=\"Description\" required matInput\r\n                                [(ngModel)]=\"field.Description\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Description)\">\r\n                            <mat-error>\r\n                                <ul>\r\n                                    <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['required']\">Obbligatorio</li>\r\n                                    <li *ngIf=\"fieldFormGroup.controls['Description'].errors?.['Missing Parenthesis']\">Parentesi non chiuse</li>\r\n                                </ul>\r\n                            </mat-error>\r\n                        </mat-form-field>\r\n                    </div>\r\n\r\n                    <div class=\"col-sm-12 col-md-3 mt-1\" *ngIf=\"formFieldsGroups\">\r\n                        <mat-label [ngClass]=\"{'text-danger': fieldFormGroup.controls['FieldGroup'].status != 'VALID' && fieldFormGroup.controls['FieldGroup'].touched}\">\r\n                            Sezione *\r\n                        </mat-label>\r\n                        <tmw-select [arrayData]=\"formFieldsGroups\" [(ngModelInput)]=\"field.FieldGroup\"\r\n                            [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\" [formGroupInput]=\"fieldFormGroup\"\r\n                            [formControlNameInput]=\"'FieldGroup'\" required [includeFullObject]=\"false\">\r\n                        </tmw-select>\r\n                    </div>\r\n                    <!--#endregion RIGA 1 -->\r\n\r\n                    <!--#region RIGA 2: Toggle + ReadOnly If + Aggregazioni -->\r\n                    <div class=\"col-sm-12 col-md-3 mt-1 align-self-center\">\r\n                        <mat-slide-toggle [(ngModel)]=\"field.Required\" formControlName=\"Required\" color=\"primary\">\r\n                            Obbligatorio\r\n                        </mat-slide-toggle>\r\n                    </div>\r\n\r\n                    <div class=\"col-sm-12 col-md-3 mt-1 align-self-center\">\r\n                        <mat-slide-toggle [(ngModel)]=\"field.Readonly\" formControlName=\"Readonly\" color=\"primary\"\r\n                            (change)=\"styleVersion = styleVersion + 1\">\r\n                            ReadOnly\r\n                        </mat-slide-toggle>\r\n                    </div>\r\n\r\n                    <div class=\"col-sm-12 col-md-3 mt-1\">\r\n                        <mat-label>ReadOnly If</mat-label>\r\n                        <mat-form-field>\r\n                            <input formControlName=\"ReadonlyIf\" matInput [(ngModel)]=\"field.ReadonlyIf\"\r\n                                (click)=\"openReadOnlyIfDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.ReadonlyIf)\">\r\n                        </mat-form-field>\r\n                    </div>\r\n\r\n                    <div class=\"col-sm-12 col-md-3 mt-1 align-self-center\">\r\n                        <tmw-select *ngIf=\"aggregationFieldLoaded\" [placeholder]=\"'Aggregazioni'\" [isMultiSelect]=\"true\"\r\n                            [enumData]=\"aggregationFunctionEnum\" [(ngModelInput)]=\"field.Aggregations\">\r\n                        </tmw-select>\r\n                    </div>\r\n                    <!--#endregion RIGA 2 -->\r\n\r\n                </div>\r\n                <!--#endregion AREA PRINCIPALE -->\r\n\r\n                <!--#region AREA TABS -->\r\n                <mat-tab-group class=\"eqp-dform-add-form-field-tabs\" mat-stretch-tabs=\"false\" mat-align-tabs=\"start\">\r\n\r\n                    <!--#region STILE COMPILAZIONE -->\r\n                    <mat-tab label=\"Stile Compilazione\">\r\n\r\n                        <!-- Per tipi NON TextField, NON NumericField, NON TextareaField, NON BooleanField, NON AttachmentField, NON LabelField, NON DateField, NON ActionButtonField, NON ImageField, NON ImageWithMarkersField, NON ListValueField: sezione Generale -->\r\n                        <ng-container *ngIf=\"!isTextField && !isNumericField && !isTextareaField && !isBooleanField && !isAttachmentField && !isLabelField && !isDateField && !isActionButtonField && !isImageField && !isImageWithMarkersField && !isListValueField && !isImageSelectorField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\" [(ngModelInput)]=\"field.Invisibility\"\r\n                                        [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'Invisibility'\"\r\n                                        [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n                        </ng-container>\r\n\r\n                        <!-- Per TextField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isTextField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"textFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedTextFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedTextFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of textFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getStyleValue(elem.key + selectedTextFieldStyleState)\"\r\n                                                (ngModelChange)=\"setStyleValue(elem.key + selectedTextFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per NumericField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isNumericField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"numericFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedNumericFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedNumericFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of numericFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getNumericStyleValue(elem.key + selectedNumericFieldStyleState)\"\r\n                                                (ngModelChange)=\"setNumericStyleValue(elem.key + selectedNumericFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per TextareaField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isTextareaField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"textareaFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedTextareaFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedTextareaFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of textareaFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getTextareaStyleValue(elem.key + selectedTextareaFieldStyleState)\"\r\n                                                (ngModelChange)=\"setTextareaStyleValue(elem.key + selectedTextareaFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per BooleanField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isBooleanField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"booleanFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedBooleanFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedBooleanFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of booleanFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getBooleanStyleValue(elem.key + selectedBooleanFieldStyleState)\"\r\n                                                (ngModelChange)=\"setBooleanStyleValue(elem.key + selectedBooleanFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per DateField: sezione Generale + sezione Grafica (5 elementi, 5 stati) -->\r\n                        <ng-container *ngIf=\"isDateField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"dateFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedDateFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedDateFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of dateFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getDateStyleValue(elem.key + selectedDateFieldStyleState)\"\r\n                                                (ngModelChange)=\"setDateStyleValue(elem.key + selectedDateFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per LabelField: sezione Generale + sezione Grafica (1 elemento, 2 stati) -->\r\n                        <ng-container *ngIf=\"isLabelField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"labelFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedLabelFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedLabelFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of labelFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getLabelStyleValue(elem.key + selectedLabelFieldStyleState)\"\r\n                                                (ngModelChange)=\"setLabelStyleValue(elem.key + selectedLabelFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per AttachmentField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isAttachmentField\">\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"attachmentFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedAttachmentFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedAttachmentFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of attachmentFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getAttachmentStyleValue(elem.key + selectedAttachmentFieldStyleState)\"\r\n                                                (ngModelChange)=\"setAttachmentStyleValue(elem.key + selectedAttachmentFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per ActionButtonField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isActionButtonField\">\r\n\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"actionButtonFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedActionButtonFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedActionButtonFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of actionButtonFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getActionButtonStyleValue(elem.key + selectedActionButtonFieldStyleState)\"\r\n                                                (ngModelChange)=\"setActionButtonStyleValue(elem.key + selectedActionButtonFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per ImageField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isImageField\">\r\n\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"imageFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedImageFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedImageFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of imageFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getImageStyleValue(elem.key + selectedImageFieldStyleState)\"\r\n                                                (ngModelChange)=\"setImageStyleValue(elem.key + selectedImageFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per ImageWithMarkersField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isImageWithMarkersField\">\r\n\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"imageWithMarkersFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedImageWithMarkersFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedImageWithMarkersFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of imageWithMarkersFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getImageWithMarkersStyleValue(elem.key + selectedImageWithMarkersFieldStyleState)\"\r\n                                                (ngModelChange)=\"setImageWithMarkersStyleValue(elem.key + selectedImageWithMarkersFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per ListValueField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isListValueField\">\r\n\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"listValueFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedListValueFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedListValueFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of listValueStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getListValueStyleValue(elem.key + selectedListValueFieldStyleState)\"\r\n                                                (ngModelChange)=\"setListValueStyleValue(elem.key + selectedListValueFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                        <!-- Per ImageSelectorField: sezione Generale + sezione Grafica -->\r\n                        <ng-container *ngIf=\"isImageSelectorField\">\r\n\r\n                            <div class=\"generale-section-title\">Generale</div>\r\n                            <!-- LabelstyleCSS e FieldstyleCSS: nascosti, mantenuti per retrocompatibilità -->\r\n                            <input name=\"LabelstyleCSS\" formControlName=\"LabelstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.LabelstyleCSS\">\r\n                            <input name=\"FieldstyleCSS\" formControlName=\"FieldstyleCSS\" type=\"hidden\"\r\n                                [(ngModel)]=\"field.FieldstyleCSS\">\r\n                            <div class=\"row pt-1 align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Larghezza campo</mat-label>\r\n                                    <tmw-select [arrayData]=\"availableColSpanSizesCompilazione\"\r\n                                        [(ngModelInput)]=\"field.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                        [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                        [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'ColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf != null || field.VisibleIf != undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.InListView\" formControlName=\"InListView\"\r\n                                        color=\"primary\" [disabled]=\"fieldFormGroup.controls['InListView'].disabled\">\r\n                                        Visibile\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>VisibleIf</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"VisibleIf\" formControlName=\"VisibleIf\" matInput\r\n                                            [(ngModel)]=\"field.VisibleIf\" (click)=\"openVisibleIfDialog()\"\r\n                                            spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.VisibleIf)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                    <mat-label>Tooltip</mat-label>\r\n                                    <mat-form-field>\r\n                                        <input name=\"Tooltip\" formControlName=\"Tooltip\" matInput\r\n                                            [(ngModel)]=\"field.Tooltip\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                            (keypress)=\"omit_special_char($event)\"\r\n                                            (focusout)=\"stringSanitizer(field.Tooltip)\">\r\n                                    </mat-form-field>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"row align-items-center\">\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"field.InListView && (field.VisibleIf == null || field.VisibleIf == undefined)\">\r\n                                    Tipo di invisibilità\r\n                                    <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                        [(ngModelInput)]=\"field.Invisibility\" [formGroupInput]=\"fieldFormGroup\"\r\n                                        [formControlNameInput]=\"'Invisibility'\" [includeFullObject]=\"false\">\r\n                                    </tmw-select>\r\n                                </div>\r\n                                <div class=\"col-sm-12 col-md-6 mt-2 align-self-center\"\r\n                                    [hidden]=\"(field.VisibleIf == null || field.VisibleIf == undefined) && field.VisibleIf != ''\">\r\n                                    <mat-slide-toggle [(ngModel)]=\"field.Maintain_Value\"\r\n                                        formControlName=\"Maintain_Value\" color=\"primary\"\r\n                                        [disabled]=\"fieldFormGroup.controls['Maintain_Value'].disabled\">\r\n                                        Mantieni il valore\r\n                                    </mat-slide-toggle>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <!--#region GRAFICA -->\r\n                            <div class=\"grafica-section\">\r\n                                <div class=\"grafica-section-title\">Grafica</div>\r\n                                <div class=\"grafica-ai-row\">\r\n                                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest\"\r\n                                        [disabled]=\"aiFieldSuggestLoading\"\r\n                                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\">\r\n                                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"14\" style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n                                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" name=\"palette\"></tmw-icon>\r\n                                        {{ aiFieldSuggestLoading ? 'Elaborazione...' : 'Suggerisci grafica' }}\r\n                                    </button>\r\n                                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                                        </button>\r\n                                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                                            [ngModelOptions]=\"{standalone: true}\"\r\n                                            placeholder=\"es. toni di grigio, stile Super Mario...\" />\r\n                                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\" matTooltip=\"Applica suggerimento grafico\">\r\n                                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row align-items-end\">\r\n                                    <div class=\"col-sm-12 col-md-3 mt-2\">\r\n                                        <mat-label>Stato</mat-label>\r\n                                        <tmw-select [arrayData]=\"imageSelectorFieldStyleStates\"\r\n                                            [(ngModelInput)]=\"selectedImageSelectorFieldStyleState\"\r\n                                            [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'label'\"\r\n                                            [includeFullObject]=\"false\" [showCancelButton]=\"true\">\r\n                                        </tmw-select>\r\n                                    </div>\r\n                                </div>\r\n                                <div class=\"row\" *ngIf=\"selectedImageSelectorFieldStyleState\">\r\n                                    <div class=\"col-md-4 mt-2\" *ngFor=\"let elem of imageSelectorFieldStyleElements\">\r\n                                        <mat-label class=\"css-field-label\">{{ elem.label }}</mat-label>\r\n                                        <mat-form-field>\r\n                                            <input matInput [placeholder]=\"'es. color:red;font-size:14px'\"\r\n                                                [ngModel]=\"getImageSelectorStyleValue(elem.key + selectedImageSelectorFieldStyleState)\"\r\n                                                (ngModelChange)=\"setImageSelectorStyleValue(elem.key + selectedImageSelectorFieldStyleState, $event)\"\r\n                                                [ngModelOptions]=\"{standalone: true}\">\r\n                                        </mat-form-field>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                            <!--#endregion GRAFICA -->\r\n\r\n                        </ng-container>\r\n\r\n                    </mat-tab>\r\n                    <!--#endregion STILE COMPILAZIONE -->\r\n\r\n                    <!--#region STILE RISPOSTA -->\r\n                    <mat-tab label=\"Stile Risposta\">\r\n                        <div class=\"row\">\r\n                            <div class=\"col-sm-12 col-md-4 mt-2\">\r\n                                <mat-label>Larghezza campo</mat-label>\r\n                                <tmw-select [arrayData]=\"availableColSpanSizesRisposta\"\r\n                                    [(ngModelInput)]=\"field.AnswerStyle.ColSpanSizes\" [arrayKeyProperty]=\"'key'\"\r\n                                    [arrayValueProperty]=\"'value'\" (ngModelInputChange)=\"onColSpanSizeSelect()\"\r\n                                    [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\"\r\n                                    [formControlNameInput]=\"'AnswerStyleColSpanSizes'\" [includeFullObject]=\"false\">\r\n                                </tmw-select>\r\n                            </div>\r\n                            <div class=\"col-sm-12 col-md-4 mt-2\">\r\n                                <mat-label>Label css</mat-label>\r\n                                <mat-form-field>\r\n                                    <input name=\"AnswerStyleLabelstyleCSS\" formControlName=\"AnswerStyleLabelstyleCSS\"\r\n                                        matInput [(ngModel)]=\"field.AnswerStyle.LabelstyleCSS\" spellcheck=\"false\"\r\n                                        autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                                        (focusout)=\"stringSanitizer(field.AnswerStyle.LabelstyleCSS)\">\r\n                                </mat-form-field>\r\n                            </div>\r\n                            <div class=\"col-sm-12 col-md-4 mt-2\">\r\n                                <mat-label>Field css</mat-label>\r\n                                <mat-form-field>\r\n                                    <input name=\"AnswerStyleFieldstyleCSS\" formControlName=\"AnswerStyleFieldstyleCSS\"\r\n                                        matInput [(ngModel)]=\"field.AnswerStyle.FieldstyleCSS\" spellcheck=\"false\"\r\n                                        autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                                        (focusout)=\"stringSanitizer(field.AnswerStyle.FieldstyleCSS)\">\r\n                                </mat-form-field>\r\n                            </div>\r\n                            <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n                                [hidden]=\"(field.AnswerStyle.VisibleIf != null || field.AnswerStyle.VisibleIf != undefined) && field.AnswerStyle.VisibleIf != ''\">\r\n                                <mat-slide-toggle [(ngModel)]=\"field.AnswerStyle.InListView\"\r\n                                    formControlName=\"AnswerStyleInListView\" color=\"primary\"\r\n                                    [disabled]=\"fieldFormGroup.controls['AnswerStyleInListView'].disabled\">\r\n                                    Visibile\r\n                                </mat-slide-toggle>\r\n                            </div>\r\n                            <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\"\r\n                                [hidden]=\"field.AnswerStyle.InListView\">\r\n                                Tipo di invisibilità del campo\r\n                                <tmw-select [enumData]=\"fieldInvisibilityEnum\"\r\n                                    [(ngModelInput)]=\"field.AnswerStyle.Invisibility\"\r\n                                    [formGroupInput]=\"fieldFormGroup\"\r\n                                    [formControlNameInput]=\"'AnswerStyleInvisibility'\" [includeFullObject]=\"false\">\r\n                                </tmw-select>\r\n                            </div>\r\n                            <div class=\"col-sm-12 col-md-4 mt-2\">\r\n                                <mat-label>VisibleIf</mat-label>\r\n                                <mat-form-field>\r\n                                    <input name=\"AnswerStyleVisibleIf\" formControlName=\"AnswerStyleVisibleIf\" matInput\r\n                                        [(ngModel)]=\"field.AnswerStyle.VisibleIf\"\r\n                                        (click)=\"openAnswerStyleVisibleIfDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                        (keypress)=\"omit_special_char($event)\"\r\n                                        (focusout)=\"stringSanitizer(field.AnswerStyle.VisibleIf)\">\r\n                                </mat-form-field>\r\n                            </div>\r\n                        </div>\r\n                    </mat-tab>\r\n                    <!--#endregion STILE RISPOSTA -->\r\n\r\n                    <!--#region SPECIFICHE -->\r\n                    <mat-tab label=\"Specifiche\">\r\n                        <div class=\"row\">\r\n                            <ng-container *ngTemplateOutlet=\"fieldTypeFormTemplate\">\r\n                            </ng-container>\r\n                        </div>\r\n                    </mat-tab>\r\n                    <!--#endregion SPECIFICHE -->\r\n\r\n                    <!--#region MODALITA' RECUPERO DATI -->\r\n                    <mat-tab label=\"Modalità recupero dati\" *ngIf=\"field.FieldType != FieldTypeEnum['Bottone azione']\">\r\n                        <div class=\"row\">\r\n                            <tmw-select [enumData]=\"dataGetterTypeEnum\"\r\n                                [(ngModelInput)]=\"field.DataGetter.DataGetterType\" [showCancelButton]=\"false\"\r\n                                (ngModelInputChange)=\"onDataGetterTypeChange()\" [formGroupInput]=\"fieldFormGroup\"\r\n                                [formControlNameInput]=\"'DataGetterType'\">\r\n                            </tmw-select>\r\n\r\n                            <div class=\"col-md-4\"\r\n                                [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Manuale\">\r\n                                <mat-label>Valore di Default</mat-label>\r\n                                <mat-form-field>\r\n                                    <input formControlName=\"DataGetterValue\" matInput\r\n                                        [(ngModel)]=\"field.DataGetter.DataGetterValue\" spellcheck=\"false\"\r\n                                        autocomplete=\"off\">\r\n                                </mat-form-field>\r\n                            </div>\r\n\r\n                            <div class=\"col-md-4\"\r\n                                [hidden]=\"field.DataGetter.DataGetterType != dataGetterTypeEnum.Formula\">\r\n                                <mat-label>Formula (Javascript)</mat-label>\r\n                                <mat-form-field>\r\n                                    <input formControlName=\"Formula\" matInput [(ngModel)]=\"field.Formula\"\r\n                                        (click)=\"openFormulaDialog()\" spellcheck=\"false\" autocomplete=\"off\"\r\n                                        (keypress)=\"omit_special_char($event)\"\r\n                                        (focusout)=\"stringSanitizer(field.Formula)\">\r\n                                </mat-form-field>\r\n                            </div>\r\n\r\n                            <div class=\"col-md-4\"\r\n                                *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da database']\">\r\n                                <div class=\"col-12 mt-4 configuraQueryEditor\">\r\n                                    <div class=\"row\">\r\n                                        <div class=\"col-10\">Configura in Query Editor</div>\r\n                                        <div class=\"col-2\">\r\n                                            <button class=\"btn btn-primary\" (click)=\"openDBGetter()\"\r\n                                                *ngIf=\"field.DataGetter.DataGetterValue == null\">Procedi</button>\r\n                                            <button class=\"btn btn-success\" (click)=\"openDBGetter()\"\r\n                                                *ngIf=\"field.DataGetter.DataGetterValue != null\">Modifica</button>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n                                        <div class=\"col-6\">Seleziona colonna</div>\r\n                                        <div class=\"col-6\">\r\n                                            <tmw-select [arrayData]=\"columnKeys\"\r\n                                                [(ngModelInput)]=\"field.DataGetter.DataGetterColumnForce\"\r\n                                                [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n                                                [showCancelButton]=\"true\">\r\n                                            </tmw-select>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n                                        <div class=\"col-6\">Pulsante reset?</div>\r\n                                        <div class=\"col-6\">\r\n                                            <mat-slide-toggle [(ngModel)]=\"field.DataGetter.DataGetterHasResetButton\"\r\n                                                formControlName=\"DataGetterHasResetButton\" color=\"primary\">\r\n                                            </mat-slide-toggle>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n\r\n                            <div class=\"col-md-4\"\r\n                                *ngIf=\"field.DataGetter.DataGetterType == dataGetterTypeEnum['Da modulo dinamico']\">\r\n                                <div class=\"col-12 mt-4\" *ngIf=\"forms.length > 0\">\r\n                                    <div class=\"row\">\r\n                                        <div class=\"col-6\">Modulo</div>\r\n                                        <div class=\"col-6\">\r\n                                            <tmw-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\"\r\n                                                [(ngModelInput)]=\"DMModule\" [isSearchable]=\"true\"\r\n                                                [arrayKeyProperty]=\"'Code'\" [arrayValueProperty]=\"'Name'\"\r\n                                                [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMModule'\"\r\n                                                (ngModelInputChange)=\"onChangeDMModule()\">\r\n                                            </tmw-select>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div class=\"row\"\r\n                                        *ngIf=\"field.DataGetter.DataGetterValue != null && DMModule != null\">\r\n                                        <div class=\"col-6\">Campo</div>\r\n                                        <div class=\"col-6\">\r\n                                            <tmw-select [placeholder]=\"'Seleziona campo'\" [arrayData]=\"DMFields\"\r\n                                                [(ngModelInput)]=\"DMField\" [isSearchable]=\"true\"\r\n                                                [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\"\r\n                                                [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'DMField'\"\r\n                                                (ngModelInputChange)=\"onChangeDMField()\">\r\n                                            </tmw-select>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n                                        <div class=\"col-6\">Cardinalità</div>\r\n                                        <div class=\"col-6\">\r\n                                            <tmw-select [enumData]=\"DMGetterCardinalities\"\r\n                                                [(ngModelInput)]=\"field.DataGetter.DataGetterCardinality\"\r\n                                                [showCancelButton]=\"false\">\r\n                                            </tmw-select>\r\n                                        </div>\r\n                                    </div>\r\n                                    <div class=\"row\" *ngIf=\"field.DataGetter.DataGetterValue != null\">\r\n                                        <div class=\"col-6\">Contestualizzazione</div>\r\n                                        <div class=\"col-6\">\r\n                                            <tmw-select [arrayData]=\"contestualization\"\r\n                                                [arrayKeyProperty]=\"'entityTableName'\"\r\n                                                [arrayValueProperty]=\"'entityTableName'\"\r\n                                                [(ngModelInput)]=\"field.DataGetter.DataGetterContestualization\"\r\n                                                [showCancelButton]=\"true\"\r\n                                                (ngModelInputChange)=\"onChangeDMContestualization()\">\r\n                                            </tmw-select>\r\n                                        </div>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </mat-tab>\r\n                    <!--#endregion MODALITA' RECUPERO DATI -->\r\n\r\n                    <!--#region EXTRA -->\r\n                    <mat-tab label=\"Extra\"\r\n                        *ngIf=\"fieldsExtraConfig != null && fieldsExtraConfig.length > 0 && loadedFieldExtra\">\r\n                        <div class=\"row\">\r\n                            <div class=\"col-12 fieldExtraConfig\" *ngFor=\"let fieldExtraConfig of fieldsExtraConfig\">\r\n                                <dynamic-module-field-extra-fix #fieldExtraConfigTemplate\r\n                                    [fieldExtraConfig]=\"fieldExtraConfig\" [form]=\"form\" [field]=\"field\"\r\n                                    [endPointConfiguration]=\"endPointConfiguration\">\r\n                                </dynamic-module-field-extra-fix>\r\n                            </div>\r\n                        </div>\r\n                    </mat-tab>\r\n                    <!--#endregion EXTRA -->\r\n\r\n                </mat-tab-group>\r\n                <!--#endregion AREA TABS -->\r\n\r\n            </form>\r\n        </div>\r\n    </mat-card-content>\r\n\r\n    <mat-card-footer>\r\n        <div class=\"d-flex align-items-center justify-content-between px-3 py-2 footer-row\">\r\n            <!-- Anteprima live (TextField, NumericField, TextareaField, BooleanField, AttachmentField, LabelField, DateField, ActionButtonField, ListValueField) -->\r\n            <div class=\"preview-area\" *ngIf=\"(isTextField || isNumericField || isTextareaField || isBooleanField || isAttachmentField || isLabelField || isDateField || isActionButtonField || isListValueField || isImageSelectorField) && (isActionButtonField || (field?.FormFormGroup && previewRecord))\">\r\n                <div class=\"d-flex align-items-center gap-2 mb-1\">\r\n                    <span class=\"preview-label\">Anteprima:</span>\r\n                    <select [(ngModel)]=\"previewForceState\" [ngModelOptions]=\"{standalone: true}\"\r\n                        class=\"form-select form-select-sm preview-state-select\" style=\"width: 130px;\">\r\n                        <option [ngValue]=\"null\">Auto</option>\r\n                        <option value=\"Normale\">Normale</option>\r\n                        <option value=\"Mouseover\">Mouse Sopra</option>\r\n                        <option value=\"Focused\" *ngIf=\"!isAttachmentField && !isLabelField && !isActionButtonField && !isListValueField && !isImageSelectorField\">Selezionato</option>\r\n                        <option value=\"Selezionato\" *ngIf=\"isActionButtonField || isListValueField || isImageSelectorField\">Selezionato</option>\r\n                        <option value=\"NotValid\" *ngIf=\"!isBooleanField && !isLabelField && !isActionButtonField\">Non Valido</option>\r\n                        <option value=\"Readonly\" *ngIf=\"!isLabelField && !isActionButtonField\">Sola Lettura</option>\r\n                    </select>\r\n                    <button mat-stroked-button type=\"button\" class=\"btn-graphic-suggest-sm\"\r\n                        [disabled]=\"aiFieldSuggestLoading\"\r\n                        (click)=\"showGraphicSuggestInput = !showGraphicSuggestInput\"\r\n                        matTooltip=\"Suggerisci grafica con AI\">\r\n                        <mat-spinner *ngIf=\"aiFieldSuggestLoading\" diameter=\"12\" style=\"display:inline-block;vertical-align:middle\"></mat-spinner>\r\n                        <tmw-icon class=\"mat-icon\" *ngIf=\"!aiFieldSuggestLoading\" style=\"font-size:16px;width:16px;height:16px\" name=\"palette\"></tmw-icon>\r\n                        <span *ngIf=\"!aiFieldSuggestLoading\">Suggerisci</span>\r\n                    </button>\r\n                    <div class=\"hint-input-group\" *ngIf=\"showGraphicSuggestInput && !aiFieldSuggestLoading\">\r\n                        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeGraphicHint()\" matTooltip=\"Suggerimento casuale\">\r\n                            <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n                        </button>\r\n                        <input type=\"text\" class=\"graphic-hint-input\" [(ngModel)]=\"graphicSuggestHint\"\r\n                            [ngModelOptions]=\"{standalone: true}\"\r\n                            placeholder=\"es. toni di grigio...\" />\r\n                        <button type=\"button\" class=\"btn-graphic-send\" (click)=\"onGraphicSuggest()\">\r\n                            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n                <text-field-template *ngIf=\"isTextField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </text-field-template>\r\n                <numeric-field-template *ngIf=\"isNumericField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </numeric-field-template>\r\n                <textarea-field-template *ngIf=\"isTextareaField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </textarea-field-template>\r\n                <boolean-field-template *ngIf=\"isBooleanField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </boolean-field-template>\r\n                <attachment-field-template *ngIf=\"isAttachmentField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </attachment-field-template>\r\n                <label-field-template *ngIf=\"isLabelField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </label-field-template>\r\n                <date-field-template *ngIf=\"isDateField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </date-field-template>\r\n                <action-button-field-template *ngIf=\"isActionButtonField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"{}\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </action-button-field-template>\r\n                <list-value-field-template *ngIf=\"isListValueField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </list-value-field-template>\r\n                <image-field-selector-template *ngIf=\"isImageSelectorField\"\r\n                    [field]=\"field\"\r\n                    [record]=\"previewRecord\"\r\n                    [inConfig]=\"true\"\r\n                    [styleVersion]=\"styleVersion\"\r\n                    [forceState]=\"previewForceState\">\r\n                </image-field-selector-template>\r\n            </div>\r\n            <div *ngIf=\"(!isTextField && !isNumericField && !isTextareaField && !isBooleanField && !isAttachmentField && !isLabelField && !isDateField && !isActionButtonField && !isListValueField && !isImageSelectorField) || (!isActionButtonField && !field?.FormFormGroup)\"></div>\r\n\r\n            <!-- Pulsanti -->\r\n            <div class=\"d-flex gap-2\">\r\n                <button class=\"btn mat-raised-button bg-danger text-white cancel\" (click)=\"saveAndExitAddField(false)\"\r\n                    type=\"button\">\r\n                    ❌ Annulla\r\n                </button>\r\n                <button [class.bg-success]=\"!disableSaveField()\" [class.bg-danger]=\"disableSaveField()\"\r\n                    class=\"text-white save\" mat-raised-button\r\n                    (click)=\"onSaveClick()\" type=\"button\">\r\n                    <tmw-icon class=\"mat-icon\" *ngIf=\"disableSaveField()\" style=\"font-size:18px;width:18px;height:18px;vertical-align:middle;margin-right:2px\" name=\"lock\"></tmw-icon>\r\n                    💾 Salva\r\n                </button>\r\n            </div>\r\n        </div>\r\n    </mat-card-footer>\r\n\r\n</mat-card>\r\n\r\n\r\n\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DI TESTO -->\r\n<ng-template #textFieldFormTemplate>\r\n    <!--#region MASCHERA -->\r\n    <div class=\"col-sm-12 col-md-3\">\r\n        <mat-label>Maschera</mat-label>\r\n        <tmw-select [enumData]=\"TextMaskEnum\" [(ngModelInput)]=\"field.TextMask\" [formGroupInput]=\"fieldFormGroup\"\r\n            [formControlNameInput]=\"'TextMask'\">\r\n        </tmw-select>\r\n    </div>\r\n    <!--#endregion MASCHERA -->\r\n\r\n    <!--#region LUNGHEZZA MINIMA -->\r\n    <div class=\"col-sm-12 col-md-3\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label [ngClass]=\"{'text-danger': fieldFormGroup.controls['MinLenght'].status != 'VALID' && fieldFormGroup.controls['MinLenght'].touched}\">\r\n            Lunghezza minima\r\n        </mat-label>\r\n        <mat-form-field>\r\n            <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n                [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n                (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n            <mat-error>\r\n                <ul>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">Inserire un valore numerico.</li>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">Parentesi non chiuse.</li>\r\n                </ul>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n    <!--#endregion LUNGHEZZA MINIMA -->\r\n\r\n    <!--#region LUNGHEZZA MASSIMA -->\r\n    <div class=\"col-sm-12 col-md-3\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label [ngClass]=\"{'text-danger': fieldFormGroup.controls['MaxLenght'].status != 'VALID' && fieldFormGroup.controls['MaxLenght'].touched}\">\r\n            Lunghezza massima\r\n        </mat-label>\r\n        <mat-form-field>\r\n            <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n                [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n                (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n            <mat-error>\r\n                <ul>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">Inserire un valore numerico.</li>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">Parentesi non chiuse.</li>\r\n                </ul>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n    <!--#endregion LUNGHEZZA MASSIMA -->\r\n\r\n    <!--#region SPEECH TO TEXT -->\r\n    <div class=\"col-sm-12 col-md-3 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\"\r\n        [hidden]=\"field.Readonly || platform != 'web'\">\r\n        <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n            Speech-To-Text\r\n        </mat-slide-toggle>\r\n    </div>\r\n    <!--#endregion SPEECH TO TEXT -->\r\n\r\n    <!--#region ICONA -->\r\n    <div class=\"col-sm-12\">\r\n        <div class=\"row align-items-center\">\r\n            <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n                <mat-slide-toggle [(ngModel)]=\"showTextFieldIcon\" color=\"primary\"\r\n                    (change)=\"onTextFieldIconToggle($event.checked)\">\r\n                    Icona\r\n                </mat-slide-toggle>\r\n            </div>\r\n            <div class=\"col-sm-12 col-md-4\" *ngIf=\"showTextFieldIcon\" [formGroup]=\"fieldFormGroup\">\r\n                <mat-label>Icona (<a href='https://tabler.io/icons' target=\"_blank\">lista</a>)</mat-label>\r\n                <mat-form-field>\r\n                    <input formControlName=\"IconName\" type=\"text\" matInput [(ngModel)]=\"field.IconName\"\r\n                        spellcheck=\"false\" autocomplete=\"off\" placeholder=\"es. search, user, home\"\r\n                        (ngModelChange)=\"styleVersion = styleVersion + 1\">\r\n                </mat-form-field>\r\n            </div>\r\n            <div class=\"col-sm-12 col-md-4\" *ngIf=\"showTextFieldIcon\">\r\n                <mat-label>Posizionamento</mat-label>\r\n                <tmw-select [enumData]=\"TextFieldIconPositionEnum\" [(ngModelInput)]=\"field.IconPosition\"\r\n                    [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IconPosition'\"\r\n                    (ngModelInputChange)=\"styleVersion = styleVersion + 1\">\r\n                </tmw-select>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <!--#endregion ICONA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ ETICHETTA -->\r\n<ng-template #labelFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-6 mt-2  align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-form-field>\r\n            <textarea name=\"Etichetta\" placeholder=\"Etichetta\" matInput formControlName=\"Etichetta\"\r\n                [(ngModel)]=\"field.Etichetta\"></textarea>\r\n        </mat-form-field>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ ETICHETTA -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n<ng-template #textareaFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Righe</mat-label>\r\n        <mat-form-field class=\"righe\">\r\n            <input id=\"rows\" formControlName=\"Rows\" type=\"number\" [min]=\"0\" matInput [(ngModel)]=\"field.Rows\"\r\n                spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                (focusout)=\"stringSanitizer(field.Rows)\">\r\n            <mat-error>\r\n                <ul>\r\n                    <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['pattern']\">Inserire un valore numerico.</li>\r\n                    <li *ngIf=\"fieldFormGroup.controls['Rows'].errors?.['Missing Parenthesis']\">Parentesi non chiuse.</li>\r\n                </ul>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2  align-self-center\" [formGroup]=\"fieldFormGroup\"\r\n        [hidden]=\"field.Readonly || platform != 'web'\">\r\n        <mat-slide-toggle [(ngModel)]=\"field.Microphone\" formControlName=\"Microphone\" color=\"primary\">\r\n            Speech-To-Text\r\n        </mat-slide-toggle>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Lunghezza minima</mat-label>\r\n        <mat-form-field>\r\n            <input id=\"lengthMin\" formControlName=\"MinLenght\" type=\"number\" [min]=\"0\" matInput\r\n                [(ngModel)]=\"field.MinLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n                (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinLenght)\">\r\n            <mat-error>\r\n                <ul>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['pattern']\">Inserire un valore numerico.</li>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MinLenght'].errors?.['Missing Parenthesis']\">Parentesi non chiuse.</li>\r\n                </ul>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Lunghezza massima</mat-label>\r\n        <mat-form-field>\r\n            <input id=\"lengthMax\" formControlName=\"MaxLenght\" type=\"number\" [min]=\"0\" matInput\r\n                [(ngModel)]=\"field.MaxLenght\" spellcheck=\"false\" autocomplete=\"off\"\r\n                (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxLenght)\">\r\n            <mat-error>\r\n                <ul>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['pattern']\">Inserire un valore numerico.</li>\r\n                    <li *ngIf=\"fieldFormGroup.controls['MaxLenght'].errors?.['Missing Parenthesis']\">Parentesi non chiuse.</li>\r\n                </ul>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n\r\n    <!--#region ICONA -->\r\n    <div class=\"col-sm-12\">\r\n        <div class=\"row align-items-center\">\r\n            <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n                <mat-slide-toggle [(ngModel)]=\"showTextareaFieldIcon\" color=\"primary\"\r\n                    (change)=\"onTextareaFieldIconToggle($event.checked)\">\r\n                    Icona\r\n                </mat-slide-toggle>\r\n            </div>\r\n            <div class=\"col-sm-12 col-md-4\" *ngIf=\"showTextareaFieldIcon\" [formGroup]=\"fieldFormGroup\">\r\n                <mat-label>Icona (<a href='https://tabler.io/icons' target=\"_blank\">lista</a>)</mat-label>\r\n                <mat-form-field>\r\n                    <input formControlName=\"IconName\" type=\"text\" matInput [(ngModel)]=\"field.IconName\"\r\n                        spellcheck=\"false\" autocomplete=\"off\" placeholder=\"es. note, file-text, edit\"\r\n                        (ngModelChange)=\"styleVersion = styleVersion + 1\">\r\n                </mat-form-field>\r\n            </div>\r\n            <div class=\"col-sm-12 col-md-4\" *ngIf=\"showTextareaFieldIcon\">\r\n                <mat-label>Posizionamento</mat-label>\r\n                <tmw-select [enumData]=\"TextareaFieldIconPositionEnum\" [(ngModelInput)]=\"field.IconPosition\"\r\n                    [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IconPosition'\"\r\n                    (ngModelInputChange)=\"styleVersion = styleVersion + 1\">\r\n                </tmw-select>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <!--#endregion ICONA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI AREA DI TESTO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n<ng-template #booleadFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-6 mt-2  align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-slide-toggle [(ngModel)]=\"field.IsTristate\" formControlName=\"IsTristate\" color=\"primary\">\r\n            A tre stati\r\n        </mat-slide-toggle>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\">\r\n        <mat-label>Tipo di presentazione *</mat-label>\r\n        <tmw-select [enumData]=\"BoolPresentantioEnum\" [(ngModelInput)]=\"field.PresetationType\" required\r\n            [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresetationType'\">\r\n        </tmw-select>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI BOOLEANI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI DATA -->\r\n<ng-template #dateFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\">\r\n        <mat-label>Tipo di data</mat-label>\r\n        <tmw-select [enumData]=\"DateTimeTypeEnum\" [(ngModelInput)]=\"field.IsOnlyDate\" required\r\n            [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IsOnlyDate'\"\r\n            (ngModelInputChange)=\"onDateTypeChange()\">\r\n        </tmw-select>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Formato</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"DateFormat\" matInput [(ngModel)]=\"field.DateFormat\"\r\n                [matTooltip]=\"'Indicare il formato seguendo la guida del pacchetto momentjs.'\" spellcheck=\"false\"\r\n                autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.Formato)\"\r\n                (ngModelChange)=\"styleVersion = styleVersion + 1\">\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\">\r\n        <mat-label>Data minima</mat-label>\r\n        <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n            [(ngModel)]=\"field.MinDate\" [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'dd/MM/yyyy'\"\r\n            [showSeconds]=\"false\"></tmw-datetimepicker>\r\n        <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n            [(ngModel)]=\"field.MinDate\" [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'dd/MM/yyyy HH:mm'\"\r\n            [showSeconds]=\"false\"></tmw-datetimepicker>\r\n        <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n            [(ngModel)]=\"field.MinDate\" [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\"\r\n            [showSeconds]=\"false\"></tmw-datetimepicker>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\">\r\n        <mat-label>Data massima</mat-label>\r\n        <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo data']\" class=\"date\"\r\n            [(ngModel)]=\"field.MaxDate\" [pickerMode]=\"mode.DATEPICKER\" [outputFormat]=\"'dd/MM/yyyy'\"\r\n            [showSeconds]=\"false\"></tmw-datetimepicker>\r\n        <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Data e ora']\" class=\"date\"\r\n            [(ngModel)]=\"field.MaxDate\" [pickerMode]=\"mode.DATETIMEPICKER\" [outputFormat]=\"'dd/MM/yyyy HH:mm'\"\r\n            [showSeconds]=\"false\"></tmw-datetimepicker>\r\n        <tmw-datetimepicker *ngIf=\"field.IsOnlyDate == DateTimeTypeEnum['Solo orario']\" class=\"date\"\r\n            [(ngModel)]=\"field.MaxDate\" [pickerMode]=\"mode.TIMEPICKER\" [outputFormat]=\"'HH:mm'\"\r\n            [showSeconds]=\"false\"></tmw-datetimepicker>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-4 mt-2\">\r\n        <mat-label>Posizione icone (calendario / orologio)</mat-label>\r\n        <tmw-select [arrayData]=\"dateTimeIconPositionOptions\"\r\n            [arrayKeyProperty]=\"'value'\" [arrayValueProperty]=\"'label'\"\r\n            [includeFullObject]=\"false\" [showCancelButton]=\"true\"\r\n            [(ngModelInput)]=\"field.IconsPosition\"\r\n            [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IconsPosition'\"\r\n            (ngModelInputChange)=\"styleVersion = styleVersion + 1\">\r\n        </tmw-select>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-4 mt-2\">\r\n        <mat-label>Posizione bottone cancellazione</mat-label>\r\n        <tmw-select [arrayData]=\"dateTimeIconPositionOptions\"\r\n            [arrayKeyProperty]=\"'value'\" [arrayValueProperty]=\"'label'\"\r\n            [includeFullObject]=\"false\" [showCancelButton]=\"true\"\r\n            [(ngModelInput)]=\"field.CloseIconPosition\"\r\n            [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'CloseIconPosition'\"\r\n            (ngModelInputChange)=\"styleVersion = styleVersion + 1\">\r\n        </tmw-select>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-slide-toggle [(ngModel)]=\"field.UseTooltip\" formControlName=\"UseTooltip\" color=\"primary\"\r\n            (ngModelChange)=\"styleVersion = styleVersion + 1\">\r\n            Mostra tooltip\r\n        </mat-slide-toggle>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI DATA -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI NUMERICI -->\r\n<ng-template #numericFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-6 mt-2  align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-slide-toggle [(ngModel)]=\"field.IsInteger\" formControlName=\"IsInteger\" color=\"primary\">\r\n            Valore intero\r\n        </mat-slide-toggle>\r\n    </div>\r\n    <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Separatore decimali</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"DecimalSeparator\" matInput [(ngModel)]=\"field.DecimalSeparator\" spellcheck=\"false\"\r\n                autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                (focusout)=\"stringSanitizer(field.DecimalSeparator)\">\r\n            <mat-error>\r\n                <ul>\r\n                    <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['pattern']\">Non è possibile inserire dei numeri.</li>\r\n                    <li *ngIf=\"fieldFormGroup.controls['DecimalSeparator'].errors?.['Missing Parenthesis']\">Parentesi non chiuse.</li>\r\n                </ul>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n    <div *ngIf=\"!field.IsInteger\" class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Precisione decimali</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"DecimalPrecision\" type=\"number\" [min]=\"0\" matInput\r\n                [(ngModel)]=\"field.DecimalPrecision\" spellcheck=\"false\" autocomplete=\"off\"\r\n                (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.DecimalPrecision)\">\r\n            <mat-error>\r\n                <ul>\r\n                    <li *ngIf=\"fieldFormGroup.controls['DecimalPrecision'].errors?.['pattern']\">Inserire un valore numerico.</li>\r\n                </ul>\r\n            </mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Separatore migliaia</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"ThousandsSeparator\" matInput [(ngModel)]=\"field.ThousandsSeparator\"\r\n                spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                (focusout)=\"stringSanitizer(field.ThousandsSeparator)\">\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label matTooltip=\"Simbolo prima del valore\">Simbolo valuta</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"CurrencySymbol\" matInput [(ngModel)]=\"field.CurrencySymbol\" spellcheck=\"false\"\r\n                autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                (focusout)=\"stringSanitizer(field.CurrencySymbol)\">\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label matTooltip=\"Simbolo dopo il valore\">Unità di misura</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"MeasureUnit\" matInput [(ngModel)]=\"field.MeasureUnit\" spellcheck=\"false\"\r\n                autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                (focusout)=\"stringSanitizer(field.MeasureUnit)\">\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Valore minimo</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"MinValue\" type=\"number\" matInput [(ngModel)]=\"field.MinValue\" spellcheck=\"false\"\r\n                autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MinValue)\"\r\n                (change)=\"onNumericMinMaxChange()\"\r\n                pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-6 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Valore massimo</mat-label>\r\n        <mat-form-field>\r\n            <input formControlName=\"MaxValue\" type=\"number\" matInput [(ngModel)]=\"field.MaxValue\" spellcheck=\"false\"\r\n                autocomplete=\"off\" (keypress)=\"omit_special_char($event)\" (focusout)=\"stringSanitizer(field.MaxValue)\"\r\n                (change)=\"onNumericMinMaxChange()\"\r\n                pattern=\"^-?[0-9]+(,[0-9]+|\\.[0-9]+)?$\">\r\n        </mat-form-field>\r\n    </div>\r\n\r\n    <!--#region ICONA -->\r\n    <div class=\"col-sm-12\">\r\n        <div class=\"row align-items-center\">\r\n            <div class=\"col-sm-12 col-md-4 mt-2 align-self-center\">\r\n                <mat-slide-toggle [(ngModel)]=\"showNumericFieldIcon\" color=\"primary\"\r\n                    (change)=\"onNumericFieldIconToggle($event.checked)\">\r\n                    Icona\r\n                </mat-slide-toggle>\r\n            </div>\r\n            <div class=\"col-sm-12 col-md-4\" *ngIf=\"showNumericFieldIcon\" [formGroup]=\"fieldFormGroup\">\r\n                <mat-label>Icona (<a href='https://tabler.io/icons' target=\"_blank\">lista</a>)</mat-label>\r\n                <mat-form-field>\r\n                    <input formControlName=\"IconName\" type=\"text\" matInput [(ngModel)]=\"field.IconName\"\r\n                        spellcheck=\"false\" autocomplete=\"off\" placeholder=\"es. currency-euro, heart, star\"\r\n                        (ngModelChange)=\"styleVersion = styleVersion + 1\">\r\n                </mat-form-field>\r\n            </div>\r\n            <div class=\"col-sm-12 col-md-4\" *ngIf=\"showNumericFieldIcon\">\r\n                <mat-label>Posizionamento</mat-label>\r\n                <tmw-select [enumData]=\"NumericFieldIconPositionEnum\" [(ngModelInput)]=\"field.IconPosition\"\r\n                    [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'IconPosition'\"\r\n                    (ngModelInputChange)=\"styleVersion = styleVersion + 1\">\r\n                </tmw-select>\r\n            </div>\r\n        </div>\r\n    </div>\r\n    <!--#endregion ICONA -->\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI NUMERICI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n<ng-template #attachmentFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-4 mt-2  align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-slide-toggle [(ngModel)]=\"field.isMultiAttach\" formControlName=\"isMultiAttach\" color=\"primary\">\r\n            Allegati multipli\r\n        </mat-slide-toggle>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-4 mt-2\">\r\n        <mat-label>Estensioni accettate</mat-label>\r\n        <tmw-select [arrayData]=\"AvailableFileExtensions.concat(AvailableImageExtensions)\"\r\n            [(ngModelInput)]=\"field.AllowedMimeTypes\" [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'value'\"\r\n            [isMultiSelect]=\"true\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'AllowedMimeTypes'\"\r\n            [includeFullObject]=\"false\">\r\n        </tmw-select>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI ALLEGATO -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n<ng-template #listValueFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-4 mt-2  align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-slide-toggle [hidden]=\"field.PresentationMode == ListPresentationEnum['Radio button']\"\r\n            [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\"\r\n            (change)=\"onIsMultiChoicheChange()\">\r\n            Scelta multipla\r\n        </mat-slide-toggle>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-4 mt-2\">\r\n        <mat-label>Tipo di presentazione*</mat-label>\r\n        <tmw-select [enumData]=\"ListPresentationEnum\" [(ngModelInput)]=\"field.PresentationMode\" required\r\n            [showCancelButton]=\"false\" [formGroupInput]=\"fieldFormGroup\" [formControlNameInput]=\"'PresentationMode'\"\r\n            (ngModelInputChange)=\"onPresentationModeChange()\">\r\n        </tmw-select>\r\n    </div>\r\n    <div class=\"col-sm-12 mt-2\">\r\n        <mat-label>Area dei valori da inserire</mat-label>\r\n        <mat-form-field>\r\n            <textarea matInput placeholder=\"key1|value1;key2|value2\" [(ngModel)]=\"field.ValueString\" spellcheck=\"false\"\r\n                autocomplete=\"off\" (ngModelChange)=\"styleVersion = styleVersion + 1\"></textarea>\r\n        </mat-form-field>\r\n        <div class=\"row\" *ngIf=\"countValuePairs(field.ValuePairs) > 0\">\r\n            <h4 class=\"key-value-list-section-title\"> </h4>\r\n            <div class=\"col-md-4\">\r\n                <mat-label>Label opzione (invio per confermare)</mat-label>\r\n                <mat-form-field>\r\n                    <input matInput [(ngModel)]=\"keyValueObject.key\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n                        spellcheck=\"false\" autocomplete=\"off\">\r\n                </mat-form-field>\r\n            </div>\r\n            <div class=\"col-md-4\">\r\n                <mat-label>Valore opzione (invio per confermare)</mat-label>\r\n                <mat-form-field>\r\n                    <input matInput [(ngModel)]=\"keyValueObject.value\" (keyup)=\"onMultiSelectInputKeyup($event, null)\"\r\n                        spellcheck=\"false\" autocomplete=\"off\">\r\n                </mat-form-field>\r\n            </div>\r\n            <div class=\"col-md-4  align-self-center\">\r\n                <span class=\"mr-3\">Opzioni inserite:</span>\r\n                <ul class=\"value-pairs-list\">\r\n                    <li *ngFor=\"let keyValuePair of getDictionaryKeyValue()\">\r\n                        <tmw-icon class=\"mat-icon mr-1\" (click)=\"deleteKeyFromDictionary(keyValuePair.key)\" name=\"x\"></tmw-icon>\r\n                        <span><b>Label: </b>{{keyValuePair.key}} - <b>Valore: </b>{{keyValuePair.value}}</span>\r\n                    </li>\r\n                </ul>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LISTA DI VALORI -->\r\n\r\n<!--#region BOTTONE AZIONE -->\r\n<ng-template #buttonFieldFormTemplate>\r\n    <action-button-creator [InField]=\"true\" [endPointConfiguration]=\"endPointConfiguration\" [form]=\"form\"\r\n        [formulas]=\"actionButtons\" [formulaObject]=\"formulaObject\" [actionButtonField]=\"field\"\r\n        (onChangeSomething)=\"changedButtonField($event)\">\r\n    </action-button-creator>\r\n</ng-template>\r\n<!--#endregion BOTTONE AZIONE -->\r\n\r\n<!--#region FORM LISTA IMMAGINI -->\r\n<ng-template #imageFieldSelectorFormTemplate>\r\n    <div class=\"row\">\r\n        <div class=\"col-3 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n            <mat-label>Altezza in Pixel delle immagini scalate*</mat-label>\r\n            <mat-form-field>\r\n                <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\"\r\n                    required spellcheck=\"false\" autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n                <mat-error>{{ getFormValidationErrors('ResizedImagesHeightPx') }}</mat-error>\r\n            </mat-form-field>\r\n        </div>\r\n        <div class=\"col-3 col-xs-12 col-middle\" [formGroup]=\"fieldFormGroup\">\r\n            <mat-slide-toggle [(ngModel)]=\"field.IsMultiChoiche\" formControlName=\"IsMultiChoiche\" color=\"primary\">\r\n                Scelta multipla\r\n            </mat-slide-toggle>\r\n        </div>\r\n    </div>\r\n    <tmw-attachments #imageSelectorAttachments [attachmentsList]=\"field.AttachmentList\" [showMatCard]=\"false\"\r\n        [allowOnlyImages]=\"true\" [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"true\"\r\n        [showHeader]=\"false\" [allowedTypes]=\"[AttachmentType.FILE]\"\r\n        (localEditedAttachments)=\"catchButtonImagesChange($event)\" [attachmentsColumns]=\"configColumnListImages\">\r\n    </tmw-attachments>\r\n</ng-template>\r\n<!--#endregion FORM LISTA IMMAGINI -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n<ng-template #imageFieldFormTemplate>\r\n    <div class=\"row\">\r\n        <div class=\"col-12\" [formGroup]=\"fieldFormGroup\">\r\n            <mat-slide-toggle [(ngModel)]=\"field.EnableDrawing\" formControlName=\"EnableDrawing\" color=\"primary\">\r\n                Immagine disegnabile?\r\n            </mat-slide-toggle>\r\n        </div>\r\n    </div>\r\n    <div class=\"row\">\r\n        <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n            <mat-label>Altezza in Pixel delle immagini scalate*</mat-label>\r\n            <mat-form-field>\r\n                <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\"\r\n                    required spellcheck=\"false\" autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n                <mat-error>{{ getFormValidationErrors('ResizedImagesHeightPx') }}</mat-error>\r\n            </mat-form-field>\r\n        </div>\r\n        <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n            <mat-label>Etichetta</mat-label>\r\n            <mat-form-field>\r\n                <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\" autocomplete=\"off\">\r\n            </mat-form-field>\r\n        </div>\r\n        <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n            <mat-label>Valore</mat-label>\r\n            <mat-form-field>\r\n                <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\" autocomplete=\"off\">\r\n            </mat-form-field>\r\n        </div>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <tmw-attachments [attachmentsList]=\"field.DynAttachment ? [field.DynAttachment] : []\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n            [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n            [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImageChange($event)\"\r\n            (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n        </tmw-attachments>\r\n        <ng-template #readonlyProfileImage>\r\n            <img *ngIf=\"field.DynAttachment\"\r\n                src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\" alt=\"\">\r\n        </ng-template>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI IMMAGINE -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI IMMAGINE CON MARKERS -->\r\n<ng-template #imageWithMarkersFieldFormTemplate>\r\n    <div class=\"row\">\r\n        <div class=\"col-4 col-xs-12\" [formGroup]=\"fieldFormGroup\">\r\n            <mat-label>Altezza in Pixel delle immagini scalate*</mat-label>\r\n            <mat-form-field>\r\n                <input formControlName=\"ResizedImagesHeightPx\" matInput [(ngModel)]=\"field.ResizedImagesHeightPx\"\r\n                    required spellcheck=\"false\" autocomplete=\"off\" (change)=\"setResizedImagesHeightPx()\">\r\n                <mat-error>{{ getFormValidationErrors('ResizedImagesHeightPx') }}</mat-error>\r\n            </mat-form-field>\r\n        </div>\r\n        <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n            <mat-label>Etichetta</mat-label>\r\n            <mat-form-field>\r\n                <input matInput [(ngModel)]=\"field.DynAttachment.ButtonKey\" spellcheck=\"false\" autocomplete=\"off\">\r\n            </mat-form-field>\r\n        </div>\r\n        <div class=\"col-4 col-xs-12\" *ngIf=\"field.DynAttachment != null\">\r\n            <mat-label>Valore</mat-label>\r\n            <mat-form-field>\r\n                <input matInput [(ngModel)]=\"field.DynAttachment.ButtonValue\" spellcheck=\"false\" autocomplete=\"off\">\r\n            </mat-form-field>\r\n        </div>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-8 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <tmw-attachments [attachmentsList]=\"field.DynAttachment ? [field.DynAttachment] : []\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n            [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n            [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"catchButtonImageWithMarkersChange($event)\"\r\n            (onDeleteAttachment)=\"deleteImage($event)\" #imageAttachment>\r\n        </tmw-attachments>\r\n        <ng-template #readonlyProfileImage>\r\n            <img *ngIf=\"field.DynAttachment\"\r\n                src=\"data:{{field.DynAttachment.FileContentType}};base64,{{field.DynAttachment.FileDataBase64}}\" alt=\"\">\r\n        </ng-template>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI IMMAGINE CON MARKERS -->\r\n\r\n<!--#region FORM PROPRIETÀ CAMPI LOOKUP -->\r\n<ng-template #lookupFieldFormTemplate>\r\n    <div class=\"col-sm-12 col-md-4 mt-2  align-self-center\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-slide-toggle [(ngModel)]=\"field.UseAsGetOrDiscard\" formControlName=\"UseAsGetOrDiscard\" color=\"primary\"\r\n            matTooltip=\"Se true la lookup viene visualizzata in una modale per lo scegli scarta\">\r\n            Usa per scegli o scarta\r\n        </mat-slide-toggle>\r\n    </div>\r\n    <div class=\"col-sm-12 col-md-4 mt-2\" [formGroup]=\"fieldFormGroup\">\r\n        <mat-label>Nome entità</mat-label>\r\n        <mat-form-field matTooltip=\"Nome dell'entità relazionata\">\r\n            <input formControlName=\"EntitySourceName\" required matInput [(ngModel)]=\"field.EntitySourceName\"\r\n                spellcheck=\"false\" autocomplete=\"off\" (keypress)=\"omit_special_char($event)\"\r\n                (focusout)=\"stringSanitizer(field.EntitySourceName)\">\r\n            <mat-error>{{ getFormValidationErrors('EntitySourceName') }}</mat-error>\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-sm-12 mt-2\">\r\n        <div class=\"row\">\r\n            <div class=\"col-md-4\">\r\n                <mat-label>Nomi dei campi (invio per confermare)</mat-label>\r\n                <mat-form-field matTooltip=\"Elenco di campi ordinato che verrà visualizzato nella lookup\">\r\n                    <input matInput (keyup)=\"onMultiSelectInputKeyup($event, 'FieldNames')\" spellcheck=\"false\"\r\n                        autocomplete=\"off\">\r\n                </mat-form-field>\r\n            </div>\r\n            <div class=\"col-md-8  align-self-center\">\r\n                <span class=\"mr-3\">Nomi selezionati:</span>\r\n                <div class=\"extension-container\" *ngFor=\"let extension of field.FieldNames; let i = index\">\r\n                    <span>{{extension}}</span>\r\n                    <tmw-icon class=\"mat-icon ml-1\" (click)=\"field.FieldNames.splice(i,1)\" name=\"x\"></tmw-icon>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</ng-template>\r\n<!--#endregion FORM PROPRIETÀ CAMPI LOOKUP -->\r\n\r\n<ng-template #buttonImagesKeyValueInputColumn let-row=\"row\" let-col=\"col\">\r\n    <mat-form-field>\r\n        <mat-label>{{col.display}}</mat-label>\r\n        <input matInput [(ngModel)]=\"row[col.key]\" required spellcheck=\"false\" autocomplete=\"off\">\r\n    </mat-form-field>\r\n</ng-template>\r\n\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n    <eqp-dynamic-module-add-formula-component>\r\n    </eqp-dynamic-module-add-formula-component>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesImageTemplate let-row=\"row\" let-col=\"col\">\r\n    <img src=\"data:image/jpeg;base64, {{row[col.key]}}\" class=\"GenericListImagesImageTemplate\">\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesKeyTemplate let-row=\"row\" let-col=\"col\">\r\n    <mat-form-field>\r\n        <mat-label>Chiave</mat-label>\r\n        <input matInput [(ngModel)]=\"row[col.key]\">\r\n    </mat-form-field>\r\n</ng-template>\r\n\r\n<ng-template #GenericListImagesValueTemplate let-row=\"row\" let-col=\"col\">\r\n    <mat-form-field>\r\n        <mat-label>Valore</mat-label>\r\n        <input matInput [(ngModel)]=\"row[col.key]\">\r\n    </mat-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER QUERY EDITOR -->\r\n<ng-template #dialogQE>\r\n    <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onExternalComponentOut($event);\">\r\n    </ng-template>\r\n</ng-template>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { BooleanLogicOperatorType, Condition, TriggerCondition } from '../../../../../models/trigger.model';\r\nimport { Capacitor } from '@capacitor/core';\r\n\r\n@Component({\r\n  selector: 'text-trigger-template',\r\n  templateUrl: './text-trigger-template.component.html',\r\n  styleUrls: ['./text-trigger-template.component.scss']\r\n})\r\nexport class TextTriggerTemplateComponent {\r\n\r\n    //variabili esterne per l'input dei campi\r\n    @Input() condition: TriggerCondition;\r\n\r\n    @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n    @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  //Variabili per l'input vocale\r\n  isStillRecoginze = false;\r\n  source = interval(200);\r\n  newtext: string;\r\n  subscription: Subscription;\r\n\r\n  STT:boolean =true;\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  InputMaskEnum = TextMaskEnum;\r\n\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText = LogicOperatorText['='];\r\n  activeCondition: boolean = false;\r\n\r\n  booleanLogicOperatorType = BooleanLogicOperatorType;\r\n  selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n  field: TextField;\r\n\r\n  platform: string = Capacitor.getPlatform();\r\n\r\n  constructor() {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.field = this.condition.Field as TextField;\r\n    this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n    this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorText;\r\n    this.initStyles();\r\n  }\r\n\r\n  initStyles() {\r\n      //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n      this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)   \r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n  getInputType() {\r\n    switch (Number(this.field.TextMask)) {\r\n      case TextMaskEnum.Email:\r\n        return 'email';\r\n      case TextMaskEnum.Password:\r\n        return 'password';\r\n      case TextMaskEnum.Telefono:\r\n        return 'tel';\r\n      case TextMaskEnum.Url:\r\n        return 'url';\r\n      default:\r\n        return 'text';\r\n    }\r\n  }\r\n\r\n  /**\r\n  * Metodo per emettere l'evento che il valore del record è cambiato.\r\n  */\r\n \r\n  onTriggerChange() {\r\n\r\n    let output:Condition = new Condition();\r\n    output = {\r\n      key: this.field.Name || this.field.Label,\r\n      value: this.condition.record[this.field.Name || this.field.Label],\r\n      logicoperator: this.selectedLogicOperator,\r\n      fieldType: this.field.FieldType,\r\n      booleanlogicoperator: this.selectedBooleanLogicOperator\r\n    };\r\n\r\n    this.triggerChange.emit(output);\r\n  }\r\n\r\n}\r\n","<div class=\"row\">\r\n  <div class=\"col-md-3 operatorCol\">\r\n    <tmw-select\r\n      [enumData]=\"logicOperatorText\"\r\n      [(ngModelInput)]=\"selectedLogicOperator\"\r\n      (ngModelInputChange)=\"onTriggerChange()\"\r\n    ></tmw-select>\r\n  </div>\r\n  <div class=\"col-md-6 valueCol\">\r\n    <mat-form-field>\r\n      <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n        {{ field.Description }}\r\n      </mat-label>\r\n      <input\r\n        [ngStyle]=\"FieldstyleObj\"\r\n        matInput\r\n        [type]=\"getInputType()\"\r\n        [readonly]=\"false\"\r\n        [required]=\"false\"\r\n        [(ngModel)]=\"this.condition.record[field.Name || field.Label]\"\r\n        (ngModelChange)=\"onTriggerChange()\"\r\n      />\r\n      <tmw-icon class=\"mat-icon\"\r\n        [hidden]=\"!field.Microphone || platform != 'web'\"\r\n        matSuffix\r\n        SpeechToText\r\n        [(bindedText)]=\"this.condition.record[field.Name || field.Label]\"\r\n        style=\"cursor: pointer\"\r\n        name=\"microphone\"></tmw-icon>\r\n    </mat-form-field>\r\n  </div>\r\n  <div class=\"col-md-3 operatorCol\">\r\n    <tmw-select\r\n      [enumData]=\"booleanLogicOperatorType\"\r\n      [(ngModelInput)]=\"selectedBooleanLogicOperator\"\r\n      (ngModelInputChange)=\"onTriggerChange()\"\r\n    ></tmw-select>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\r\nimport { Validators } from '@angular/forms';\r\nimport { TmwNumericInputMode, TmwNumericOptions } from 'tmw-numeric';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { NumericField } from '../../../../../models/fields/numericField.model';\r\nimport { LogicOperatorNumeric } from '../../../../../models/logicOperator.model';\r\nimport { TriggerCondition, BooleanLogicOperatorType, Condition } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n  selector: 'numeric-trigger-template',\r\n  templateUrl: './numeric-trigger-template.component.html',\r\n  styleUrls: ['./numeric-trigger-template.component.scss']\r\n})\r\nexport class NumericTriggerTemplateComponent implements OnInit {\r\n\r\n  @Input() condition: TriggerCondition;\r\n  @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n  validatorsArray: any[] = [];\r\n  eqpNumericOptions: Partial<TmwNumericOptions> = {};\r\n  logicOperatorNumeric = LogicOperatorNumeric;\r\n  selectedLogicOperator: LogicOperatorNumeric = LogicOperatorNumeric['='];\r\n  activeCondition: boolean = false;\r\n\r\n  booleanLogicOperatorType = BooleanLogicOperatorType;\r\n  selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n  field: NumericField;\r\n\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n  this.field = this.condition.Field as NumericField;\r\n  this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n  this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorNumeric;\r\n\r\n  this.configureEqpNumericOptions();\r\n  this.configureControllers();\r\n  this.initStyles();\r\n}\r\n\r\n  //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n  initStyles() {\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n    this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)   \r\n    this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n  let output:Condition = new Condition();\r\n  output = {\r\n    key: this.field.Name || this.field.Label,\r\n    value: this.condition.record[this.field.Name || this.field.Label],\r\n    logicoperator: this.selectedLogicOperator,\r\n    fieldType: this.field.FieldType,\r\n    booleanlogicoperator: this.selectedBooleanLogicOperator\r\n  };\r\n\r\n  this.triggerChange.emit(output);\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\nprivate configureEqpNumericOptions() {\r\n\r\n  // align/nullable/min/max: replicano i default globali del vecchio EqpNumericModule.forRoot(),\r\n  // che tmw-numeric non ha (nessun forRoot) — vanno impostati esplicitamente per non cambiare\r\n  // comportamento silenziosamente.\r\n  this.eqpNumericOptions.align = \"left\";\r\n  this.eqpNumericOptions.nullable = true;\r\n  this.eqpNumericOptions.min = null;\r\n  this.eqpNumericOptions.max = null;\r\n  this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \"  \"+this.field.MeasureUnit+\"  \" : \"\";\r\n  this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n  this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? TmwNumericInputMode.FINANCIAL : TmwNumericInputMode.NATURAL;\r\n  this.eqpNumericOptions.allowNegative=true;\r\n  if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n  this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n  else\r\n  this.eqpNumericOptions.decimal=\".\";\r\n  if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n  this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n  if(this.field.IsInteger== false){\r\n    if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n    else { this.eqpNumericOptions.precision = 2; }\r\n  }else{\r\n    this.eqpNumericOptions.precision = 0;\r\n  }\r\n}\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n  this.validatorsArray = [];\r\n  if (this.field.MinValue != null && this.field.MinValue != undefined)\r\n  this.validatorsArray.push(Validators.min(this.field.MinValue));\r\n  if (this.field.MaxValue != null && this.field.MaxValue != undefined)\r\n  this.validatorsArray.push(Validators.max(this.field.MaxValue));\r\n  this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"logicOperatorNumeric\" [(ngModelInput)]=\"selectedLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>\r\n    <div class=\"col-md-6 valueCol\">\r\n        <mat-form-field>\r\n            <mat-label  class=\"pt-1\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n                    <input [ngStyle]=\"FieldstyleObj\" matInput tmwNumericMask [readonly]=\"false\"\r\n                    [required]=\"false\" [(ngModel)]=\"this.condition.record[field.Name || field.Label]\" [options]=\"eqpNumericOptions\"\r\n                    [step]=\"field.IsInteger ? 1 : null\" (ngModelChange)=\"onTriggerChange()\" />\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>         \r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorBoolean } from '../../../../../models/logicOperator.model';\r\nimport { BooleanField } from '../../../../../models/fields/booleanField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { TriggerCondition, Condition, BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\n@Component({\r\n  selector: 'boolean-trigger-template',\r\n  templateUrl: './boolean-trigger-template.component.html',\r\n  styleUrls: ['./boolean-trigger-template.component.scss']\r\n})\r\nexport class BooleanTriggerTemplateComponent {\r\n\r\n  @Input() condition: TriggerCondition;\r\n  @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  field: BooleanField;\r\n\r\n  validatorsArray: any[] = [];\r\n  logicOperatorBoolean = LogicOperatorBoolean;\r\n  selectedLogicOperator: LogicOperatorBoolean = LogicOperatorBoolean.Si;\r\n  activeCondition: boolean = false;\r\n  \r\n  booleanLogicOperatorType = BooleanLogicOperatorType;\r\n  selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n//variabili per gestire il css della label e del field\r\nFieldstyleObj: any;\r\nLabelstyleObj: any;\r\n\r\nconstructor() {\r\n}\r\n\r\nngOnInit(): void {\r\n  this.field = this.condition.Field as BooleanField;\r\n  this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n  this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorBoolean;\r\n  this.configureControllers();\r\n  this.initStyles();\r\n\r\n\r\n}\r\n\r\n  //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n  initStyles() {\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n    this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n}\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n  let output:Condition = new Condition();\r\n  output = {\r\n    key: this.field.Name || this.field.Label,\r\n    value: this.condition.record[this.field.Name || this.field.Label],\r\n    logicoperator: this.selectedLogicOperator,\r\n    fieldType: this.field.FieldType,\r\n    booleanlogicoperator: this.selectedBooleanLogicOperator\r\n  };\r\n\r\n  this.triggerChange.emit(output);\r\n}\r\n\r\n/**\r\n* Metodo per configurare eqp-numeric\r\n*/\r\n// private configureEqpNumericOptions() {\r\n\r\n//   this.eqpNumericOptions.suffix = this.field.MeasureUnit ? \"  \"+this.field.MeasureUnit+\"  \" : \"\";\r\n//   this.eqpNumericOptions.prefix = this.field.CurrencySymbol ? this.field.CurrencySymbol+\" \" : \"\";\r\n//   this.eqpNumericOptions.inputMode = this.field.CurrencySymbol ? EqpNumericInputMode.FINANCIAL : EqpNumericInputMode.NATURAL;\r\n//   this.eqpNumericOptions.allowNegative=true;\r\n//   if (this.field.DecimalSeparator != null && this.field.DecimalSeparator != undefined)\r\n//   this.eqpNumericOptions.decimal = this.field.DecimalSeparator;\r\n//   else\r\n//   this.eqpNumericOptions.decimal=\".\";\r\n//   if (this.field.ThousandsSeparator != null && this.field.ThousandsSeparator != undefined)\r\n//   this.eqpNumericOptions.thousands = this.field.ThousandsSeparator;\r\n//   if(this.field.IsInteger== false){\r\n//     if (this.field.DecimalPrecision != null && this.field.DecimalPrecision != undefined) { this.eqpNumericOptions.precision = this.field.DecimalPrecision; }\r\n//     else { this.eqpNumericOptions.precision = 2; }\r\n//   }else{\r\n//     this.eqpNumericOptions.precision = 0;\r\n//   }\r\n// }\r\n\r\n/**\r\n* Metodo di aggiunta dei validator dell'input\r\n*/\r\nprivate configureControllers() {\r\n  this.validatorsArray = [];\r\n  this.field.FormFormGroup.get([this.field.Name]).setValidators(this.validatorsArray);\r\n}\r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"logicOperatorBoolean\" [(ngModelInput)]=\"selectedLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>\r\n    <div class=\"col-md-6 valueCol\">\r\n        <mat-form-field [formGroup]=\"field.FormFormGroup\">\r\n            <mat-label  class=\"pt-1 ps-3\" [ngStyle]=\"LabelstyleObj\"> {{field.Description}} </mat-label>\r\n                    <input [ngStyle]=\"FieldstyleObj\" matInput [formControlName]=\"field.Name\" [disabled] [readonly]=\"true\"\r\n                            [required]=\"false\" [(ngModel)]=\"this.condition.record[field.Name || field.Label]\"  \r\n                    />\r\n        </mat-form-field>\r\n    </div>\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>       \r\n</div>\r\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DateField, DateTimeTypeEnum } from '../../../../../models/fields/dateField.model';\r\nimport { LogicOperatorDate } from '../../../../../models/logicOperator.model';\r\nimport { ModeEnum, TimeTypeEnum } from 'tmw-picker';\r\nimport { TriggerCondition, Condition, BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n  selector: 'date-trigger-template',\r\n  templateUrl: './date-trigger-template.component.html',\r\n  styleUrls: ['./date-trigger-template.component.scss']\r\n})\r\nexport class DateTriggerTemplateComponent {\r\n\r\n  @Input() condition: TriggerCondition;\r\n  @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n  field: DateField;\r\n\r\n  logicOperatorDate = LogicOperatorDate;\r\n  selectedLogicOperator: LogicOperatorDate = LogicOperatorDate['='];\r\n  activeCondition: boolean = false;  \r\n\r\n  modes = ModeEnum;\r\n  timeType = TimeTypeEnum;\r\n  mode: ModeEnum;\r\n\r\n  booleanLogicOperatorType = BooleanLogicOperatorType;\r\n  selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n  outputFormat: string = null;\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n    this.field = this.condition.Field as DateField;\r\n    this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n    this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorDate;\r\n    this.setTimeType();\r\n    this.setOutputFormat();\r\n  }\r\n\r\n  /**\r\n   * In base al formato della data richiesta nel DateField (solo data, solo orario o data e ora)\r\n   * imposta la visualizzazione corretta del componente tmw-datetimepicker.\r\n   */\r\n  private setTimeType() {\r\n    switch (this.field.IsOnlyDate) {\r\n      case DateTimeTypeEnum[\"Solo data\"]:\r\n        this.mode = ModeEnum.DATEPICKER;\r\n        break;\r\n      case DateTimeTypeEnum[\"Solo orario\"]:\r\n        this.mode = ModeEnum.TIMEPICKER;\r\n        break;\r\n      case DateTimeTypeEnum[\"Data e ora\"]:\r\n        this.mode = ModeEnum.DATETIMEPICKER;\r\n        break;\r\n    }\r\n  }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n  let output:Condition = new Condition();\r\n  output = {\r\n    key: this.field.Name || this.field.Label,\r\n    value: this.condition.record[this.field.Name || this.field.Label],\r\n    logicoperator: this.selectedLogicOperator,\r\n    fieldType: this.field.FieldType,\r\n    booleanlogicoperator: this.selectedBooleanLogicOperator\r\n  };\r\n\r\n  this.triggerChange.emit(output);\r\n}\r\n\r\nsetOutputFormat(){\r\n  if (this.outputFormat != null){\r\n    this.outputFormat = this.field.DateFormat;  \r\n  } else {\r\n    if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo data']){\r\n      this.outputFormat = 'dd/MM/yyyy';\r\n    }\r\n    if (this.field.IsOnlyDate == DateTimeTypeEnum['Data e ora']){\r\n      this.outputFormat = 'dd/MM/yyyy HH:mm';\r\n    }      \r\n    if (this.field.IsOnlyDate == DateTimeTypeEnum['Solo orario']){\r\n      this.outputFormat = 'HH:mm';\r\n    }          \r\n  }\r\n  \r\n}\r\n\r\n}\r\n","<div class=\"row\">\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"logicOperatorDate\" [(ngModelInput)]=\"selectedLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>\r\n    <div class=\"col-md-6 valueCol\">\r\n        <tmw-datetimepicker  [placeholder]=\"field.Description\" [label]=\"field.Description\" [pickerMode]=\"mode\"\r\n        [minDate]=\"field.MinDate ? field.MinDate : null\" [maxDate]=\"field.MaxDate ? field.MaxDate : null\"\r\n        [(ngModel)]=\"this.condition.record[field.Name || field.Label]\" (dateChange)=\"onTriggerChange()\" [outputFormat]=\"outputFormat\" >\r\n        </tmw-datetimepicker>\r\n    </div>\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>    \r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { BooleanLogicOperatorType, Condition, TriggerCondition } from '../../../../../models/trigger.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { ListPresentationEnum, ListValueField } from '../../../../../models/fields/listValueField.model';\r\nimport { LogicOperatorListValue} from '../../../../../models/logicOperator.model';\r\nimport { GlobalService } from '../../../../../services/global.service';\r\n\r\n@Component({\r\n  selector: 'list-value-trigger-template',\r\n  templateUrl: './list-value-trigger-template.component.html',\r\n  styleUrls: ['./list-value-trigger-template.component.scss']\r\n})\r\nexport class ListValueTriggerTemplateComponent {\r\n\r\n    //variabili esterne per l'input dei campi\r\n    @Input() condition: TriggerCondition;\r\n\r\n    @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n    @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    logicOperatorListValue = LogicOperatorListValue;\r\n    selectedLogicOperatorListValue: LogicOperatorListValue = LogicOperatorListValue['CONTIENE ALMENO UNO'];\r\n    \r\n    FieldstyleObj: any;\r\n    LabelstyleObj: any;\r\n\r\n    booleanLogicOperatorType = BooleanLogicOperatorType;\r\n    selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;    \r\n    field: ListValueField;\r\n    ListPresentationEnum = ListPresentationEnum;\r\n\r\n    arrayData: { Key: string, Value: any, Selected?: boolean, ImgUrl?: string }[] = [];\r\n\r\n    ngOnInit(): void {\r\n      this.field = this.condition.Field as ListValueField;\r\n      this.initStyles();\r\n      this.setArrayData();\r\n    }\r\n\r\n    initStyles() {\r\n        //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n      if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n        this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n      if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)   \r\n        this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n    }\r\n\r\n    /**\r\n    * Metodo per emettere l'evento che il valore del record è cambiato.\r\n    */\r\n  \r\n    onTriggerChange() {\r\n\r\n      let output:Condition = new Condition();\r\n      output = {\r\n        key: this.field.Name || this.field.Label,\r\n        value: this.condition.record[this.field.Name || this.field.Label],\r\n        logicoperator: this.selectedLogicOperatorListValue,\r\n        fieldType: this.field.FieldType,\r\n        booleanlogicoperator: this.selectedBooleanLogicOperator\r\n      };\r\n\r\n      this.triggerChange.emit(output);\r\n    }    \r\n\r\n    private setArrayData() {\r\n      this.field.ValuePairs = GlobalService.stringToValuePairs(this.field.ValueString);\r\n\r\n      Object.keys(this.field.ValuePairs).forEach((k) => {\r\n        this.arrayData.push({Key: k, Value: this.field.ValuePairs[k], Selected: false});\r\n      });\r\n    }\r\n \r\n\r\n}","<div class=\"row\">\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"logicOperatorListValue\" [(ngModelInput)]=\"selectedLogicOperatorListValue\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>\r\n    <div class=\"col-md-6 valueCol\">\r\n\r\n            <tmw-select [ngStyle]=\"FieldstyleObj\" *ngIf=\"field.PresentationMode == ListPresentationEnum['Combo box']\" [arrayData]=\"arrayData\"\r\n            [arrayKeyProperty]=\"'Value'\" [showCancelButton]=\"!field.Required\" [arrayValueProperty]=\"'Key'\"\r\n            [includeFullObject]=\"false\" [isRequired]=\"true\"\r\n            [(ngModelInput)]=\"condition.record[field.Name || field.Label]\" [isMultiSelect]=\"field.IsMultiChoiche\">\r\n            </tmw-select>\r\n\r\n    </div>\r\n    <div class=\"col-md-3 operatorCol\">\r\n        <tmw-select [enumData]=\"booleanLogicOperatorType\" [(ngModelInput)]=\"selectedBooleanLogicOperator\" (ngModelInputChange)=\"onTriggerChange()\"></tmw-select>\r\n    </div>         \r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { TextMaskEnum, TextField } from '../../../../../models/fields/textField.model';\r\nimport { UtilityHelperService } from '../../../../../services/utilityHelper.services';\r\nimport { interval, Subscription } from 'rxjs';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { TriggerCondition, Condition, BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\nimport { Capacitor } from '@capacitor/core';\r\n\r\n@Component({\r\n  selector: 'textarea-trigger-template',\r\n  templateUrl: './textarea-trigger-template.component.html',\r\n  styleUrls: ['./textarea-trigger-template.component.scss']\r\n})\r\nexport class TextareaTriggerTemplateComponent {\r\n\r\n    //variabili esterne per l'input dei campi\r\n    @Input() condition: TriggerCondition;\r\n\r\n    @Output() recordChange: EventEmitter<Record> = new EventEmitter<Record>();\r\n    @Output() triggerChange: EventEmitter<any> = new EventEmitter<any>();\r\n\r\n    field: TextField;\r\n\r\n  //Variabili per l'input vocale\r\n  isStillRecoginze = false;\r\n  source = interval(200);\r\n  newtext: string;\r\n  subscription: Subscription;\r\n\r\n  STT:boolean =true;\r\n  //variabili per gestire il css della label e del field\r\n  FieldstyleObj: any;\r\n  LabelstyleObj: any;\r\n\r\n  \r\n  InputMaskEnum = TextMaskEnum;\r\n\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText = LogicOperatorText['='];\r\n  activeCondition: boolean = false;\r\n\r\n  booleanLogicOperatorType = BooleanLogicOperatorType;\r\n  selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n  platform: string = Capacitor.getPlatform();\r\n\r\n  constructor() {\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    this.field = this.condition.Field as TextField;\r\n    this.selectedBooleanLogicOperator = this.condition.booleanlogicoperator;\r\n    this.selectedLogicOperator = this.condition.logicoperator as LogicOperatorText;\r\n    this.initStyles();\r\n  }\r\n  initStyles() {\r\n      //Funzione per parsare il campo stylecss dell'oggetto field ed applicarlo all'html\r\n    if(this.field.FieldstyleCSS != null || this.field.FieldstyleCSS != undefined)   \r\n      this.FieldstyleObj= UtilityHelperService.initStyles(this.field.FieldstyleCSS);\r\n    if(this.field.LabelstyleCSS != null || this.field.LabelstyleCSS != undefined)   \r\n      this.LabelstyleObj = UtilityHelperService.initStyles(this.field.LabelstyleCSS);\r\n }\r\n\r\n  getInputType() {\r\n    switch (this.field.TextMask) {\r\n      case TextMaskEnum.Email:\r\n        return 'email';\r\n      case TextMaskEnum.Password:\r\n        return 'password';\r\n      case TextMaskEnum.Telefono:\r\n        return 'tel';\r\n      case TextMaskEnum.Url:\r\n        return 'url'\r\n      default:\r\n        return 'text';\r\n    }\r\n  }\r\n\r\n/**\r\n* Metodo per emettere l'evento che il valore del record è cambiato.\r\n*/\r\nonTriggerChange() {\r\n\r\n  let output:Condition = new Condition();\r\n  output = {\r\n    key: this.field.Name || this.field.Label,\r\n    value: this.condition.record[this.field.Name || this.field.Label],\r\n    logicoperator: this.selectedLogicOperator,\r\n    fieldType: this.field.FieldType,\r\n    booleanlogicoperator: this.selectedBooleanLogicOperator\r\n  };\r\n\r\n  this.triggerChange.emit(output);\r\n}\r\n\r\n}\r\n","<div class=\"row textareaFilterTemplate\">\r\n  <div class=\"col-md-3 operatorCol\">\r\n    <tmw-select\r\n      [enumData]=\"logicOperatorText\"\r\n      [(ngModelInput)]=\"selectedLogicOperator\"\r\n      (ngModelInputChange)=\"onTriggerChange()\"\r\n    ></tmw-select>\r\n  </div>\r\n  <div class=\"col-md-6 valueCol\">\r\n    <mat-form-field>\r\n      <mat-label class=\"pt-1\" [ngStyle]=\"LabelstyleObj\">\r\n        {{ field.Description }}\r\n      </mat-label>\r\n      <textarea\r\n        [ngStyle]=\"FieldstyleObj\"\r\n        matInput\r\n        [type]=\"getInputType()\"\r\n        [readonly]=\"false\"\r\n        [required]=\"false\"\r\n        [(ngModel)]=\"this.condition.record[field.Name || field.Label]\"\r\n        (ngModelChange)=\"onTriggerChange()\"\r\n      ></textarea>\r\n      <tmw-icon class=\"mat-icon\"\r\n        [hidden]=\"!field.Microphone || platform != 'web'\"\r\n        matSuffix\r\n        SpeechToText\r\n        [(bindedText)]=\"this.condition.record[field.Name || field.Label]\"\r\n        style=\"cursor: pointer\"\r\n        name=\"microphone\"></tmw-icon>\r\n    </mat-form-field>\r\n  </div>\r\n  <div class=\"col-md-3 operatorCol\">\r\n    <tmw-select\r\n      [enumData]=\"booleanLogicOperatorType\"\r\n      [(ngModelInput)]=\"selectedBooleanLogicOperator\"\r\n      (ngModelInputChange)=\"onTriggerChange()\"\r\n    ></tmw-select>\r\n  </div>\r\n</div>\r\n","import { Component, EventEmitter, Input, OnInit, Output, QueryList, TemplateRef, ViewChild, ViewChildren } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { BaseField, FieldTypeEnum } from '../../../../models/baseField.model';\r\nimport { DynamicModuleListConfig } from '../../../../models/dynamicModuleListConfig.model';\r\nimport { Form } from '../../../../models/form.model';\r\nimport { DynamicModuleListFormRecordActionsDefault } from '../../../../models/dynamicModuleListFormRecordActionsDefault';\r\nimport { Record } from '../../../../models/record.model';\r\nimport { ListFormRecordComponent } from '../../form-records/list-form-record/list-form-record.component';\r\nimport { DynamicModuleFieldFixComponent } from '../../dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { Statistic } from '../../../../models/statistic.model';\r\nimport { TriggerCondition } from '../../../../models/trigger.model';\r\n\r\n@Component({\r\n  selector: 'dynamic-module-trigger-fix',\r\n  templateUrl: './dynamic-module-trigger-fix.component.html',\r\n  styleUrls: ['./dynamic-module-trigger-fix.component.scss']\r\n})\r\nexport class DynamicModuleTriggerFixComponent {\r\n\r\n  @Input() condition: TriggerCondition;\r\n  @Input() form: Form;\r\n  @Output() triggerChange: EventEmitter<Statistic> = new EventEmitter<Statistic>();\r\n\r\n  configList: DynamicModuleListConfig = new DynamicModuleListConfig();\r\n  FieldTypeEnum = FieldTypeEnum;\r\n\r\n  //#region Proprietà per aggiungere/modificare i record di una form di dettaglio\r\n  selectedInnerForm: Form;\r\n  selectedInnerFormRecord: Record;\r\n  indexInnerFormRecord: number;\r\n  onlyViewInnerFormRecord: boolean = false;\r\n  dialogInnerFormRecordRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild('dialogInnerFormRecord', { static: true }) dialogInnerFormRecord: TemplateRef<any>;\r\n  //#endregion\r\n\r\n  @ViewChildren(\"fieldTemplate\") fieldTemplate: QueryList<DynamicModuleFieldFixComponent>;\r\n  @ViewChildren('listInnerFormRecords') listInnerFormRecords: QueryList<ListFormRecordComponent>;\r\n\r\n  constructor(\r\n    private dialog: MatDialog\r\n  ) { }\r\n\r\n  ngOnInit(): void {\r\n\r\n    this.configList.values = this.condition.record[this.condition.Field.Name]\r\n    this.configList.showTitle = true;\r\n    this.configList.defaultListActions = new DynamicModuleListFormRecordActionsDefault()\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato al cambio del valore di ogni proprietà dell'oggetto record.\r\n   * Serve ad aggiornare il valore di tutti i campi che hanno una formula.\r\n   */\r\n  onTriggerChange(ev) {\r\n    this.triggerChange.emit(ev);\r\n  }\r\n\r\n  /**\r\n   * Metodo per recuperare una InnerForm a partire dal Field che la rappresenta.\r\n   * @param field Campo a partire dal quale si vuole recuperare la InnerForm.\r\n   * @returns Restituisce un oggetto di tipo Form.\r\n   */\r\n  getInnerFormFromField(field: BaseField): Form {\r\n    if (this.form.InnerForms && this.form.InnerForms.find(f => f.Name == field.Label)) {\r\n      return this.form.InnerForms.find(f => f.Name == field.Label);\r\n    } else {\r\n      return null;\r\n    }\r\n  }\r\n\r\n}\r\n","\r\n<text-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Campo di testo']\"\r\n    [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</text-trigger-template>\r\n\r\n<numeric-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Campo numerico']\"\r\n    [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</numeric-trigger-template>\r\n\r\n<textarea-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Area di testo']\"\r\n    [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</textarea-trigger-template>\r\n\r\n<boolean-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Booleano']\"\r\n    [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</boolean-trigger-template>\r\n\r\n<date-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Data e/o ora']\"\r\n    [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</date-trigger-template>\r\n\r\n<list-value-trigger-template #fieldTemplate *ngIf=\"condition.Field.FieldType == FieldTypeEnum['Elenco generico']\"\r\n    [condition]=\"condition\" (triggerChange)=\"onTriggerChange($event)\">\r\n</list-value-trigger-template>","import { Component, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';\r\nimport { Form } from '../../../models/form.model';\r\nimport { BooleanLogicOperatorType, Condition, KeyValue, Trigger, TriggerCondition, TriggerPropertyTypeEnum } from '../../../models/trigger.model';\r\nimport { BaseField, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { Record } from '../../../models/record.model';\r\nimport { GlobalService } from '../../../services/global.service';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { EndPointDataParams, ParamTypeEnum, EndPointConfiguration } from '../../../models/endPointConfiguration.model';\r\nimport { UtilityHelperService } from '../../../services/utilityHelper.services';\r\n\r\n\r\n@Component({\r\n  selector: 'trigger-creator',\r\n  templateUrl: './trigger-creator.component.html',\r\n  styleUrls: ['./trigger-creator.component.scss']\r\n})\r\nexport class TriggerCreatorComponent {\r\n\r\n  @Input(\"form\") form: Form;\r\n  @Input(\"trigger\") trigger: Trigger = null;\r\n  @Input(\"formulas\") formulas: any = null;\r\n  @Input(\"endPointConfiguration\") endPointConfiguration: EndPointConfiguration;\r\n\r\n  @Output() onSaveRecord: EventEmitter<Trigger> = new EventEmitter<Trigger>();\r\n\r\n  FieldTypeEnum = FieldTypeEnum;\r\n  isSaving: boolean = false;\r\n  selectedFormula: any;\r\n  formulaKeys: Array<any> = new Array<any>();\r\n  formulaFieldsStructure: Array<any> = new Array<any>();\r\n  triggerPropertyType = TriggerPropertyTypeEnum;\r\n\r\n  dialogFormulaRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogFormula\", { static: true }) dialogFormula: TemplateRef<any>;\r\n\r\n  forms: Array<Form>;\r\n  private modulesLoaded: boolean = false;\r\n\r\n  constructor(private dialog: MatDialog, private utilityHelperService: UtilityHelperService){}\r\n  \r\n  ngOnInit(){\r\n\r\n\r\n    if (this.trigger == null){\r\n      this.trigger = new Trigger();\r\n      this.trigger.conditions = new Array<TriggerCondition>();\r\n    } else {\r\n      this.selectedFormula = {};\r\n      this.selectedFormula.key = this.trigger.execution;\r\n\r\n      const formulaDefinition = this.formulas ? this.formulas[this.selectedFormula.key] : undefined;\r\n\r\n      if (formulaDefinition == null) {\r\n        // Il tipo di trigger salvato in precedenza non è (più) presente nel catalogo attuale\r\n        // (es. rimosso/rinominato dopo il salvataggio): non blocchiamo ngOnInit, altrimenti\r\n        // \"formulaKeys\" sotto non verrebbe mai popolato e la select \"Tipo Trigger\" resterebbe vuota.\r\n        GlobalService.debugLog(\"@@ trigger-creator: tipo trigger salvato non più disponibile nel catalogo\", this.selectedFormula.key);\r\n        this.selectedFormula = null;\r\n        this.formulaFieldsStructure = new Array<any>();\r\n      } else {\r\n        this.formulaFieldsStructure = new Array<any>();\r\n        Object.keys(formulaDefinition).forEach((res) => {\r\n          this.formulaFieldsStructure.push({\r\n            \"key\": res,\r\n            \"type\": formulaDefinition[res].type,\r\n            \"tooltip\": formulaDefinition[res].tooltip,\r\n            \"value\" : formulaDefinition[res].value,\r\n            \"selectedAllowedValue\" : formulaDefinition[res].selectedAllowedValue,\r\n            \"allowedValues\" : formulaDefinition[res].allowedValues\r\n          });\r\n        });\r\n\r\n        Object.keys(this.trigger.formulas).forEach((res) => {\r\n\r\n          /**qui devono essere messi i campi con valori da visualizzare nei campi dentro il popup\r\n           * (?) altrimenti se si entra in modifica non si vedono anche se presenti */\r\n\r\n          const myFormula = this.formulaFieldsStructure.find((x) => x.key == res);\r\n          myFormula.value = this.trigger.formulas[res].value; // inizializzo valore allo stesso modo per tutti i trigger\r\n\r\n          if (myFormula.type == this.triggerPropertyType.DROPDOWN_LIST) {\r\n\r\n          this.stringToDropDownHandler(myFormula,this.trigger.formulas[res]);\r\n          // se si toglie l'handler aggiungere\r\n          // myFormula.selectedAllowedValue = this.trigger.formulas[res].selectedAllowedValue;\r\n\r\n        }\r\n\r\n      }\r\n\r\n\r\n      );\r\n      }\r\n    }\r\n\r\n    Object.keys(this.formulas).forEach((res) => {\r\n      this.formulaKeys.push({\"key\": res});\r\n    });\r\n\r\n    this.ensureModulesLoaded();\r\n\r\n    GlobalService.debugLog(\"@@ formulaFieldsStructure\",this.formulaFieldsStructure)\r\n\r\n  }\r\n\r\n  onTriggerChange(outputCondition: Condition, TriggerCondition: TriggerCondition){\r\n    this.trigger.conditions.find(x => x.CID == TriggerCondition.CID).booleanlogicoperator = outputCondition.booleanlogicoperator;\r\n    this.trigger.conditions.find(x => x.CID == TriggerCondition.CID).logicoperator = outputCondition.logicoperator;\r\n\r\n    var changeInOr = false;\r\n    this.trigger.conditions.forEach((condition) => {\r\n      if (condition.booleanlogicoperator == BooleanLogicOperatorType.OR){ changeInOr = true; }\r\n      if (changeInOr){ condition.booleanlogicoperator = BooleanLogicOperatorType.OR; }\r\n    });\r\n  }\r\n\r\n  addCondition(){\r\n    var triggerCondition = new TriggerCondition();\r\n    triggerCondition.Field = new BaseField();\r\n    triggerCondition.record = new Record();\r\n    triggerCondition.logicoperator = null;\r\n    triggerCondition.booleanlogicoperator = null;\r\n    this.trigger.conditions.push(triggerCondition);\r\n  }\r\n\r\n  deleteCondition(element: TriggerCondition){\r\n    var index = this.trigger.conditions.findIndex(x => x.CID == element.CID);\r\n    this.trigger.conditions.splice(index,1);\r\n  }\r\n\r\n  onFieldTypeChange(ev: BaseField, condition: TriggerCondition){\r\n    condition.Field = ev;\r\n    condition.record[ev.Name] = \"\";\r\n  }\r\n\r\n  isValid(): boolean {\r\n    return !!(this.trigger?.description && this.trigger.description.trim().length > 0\r\n      && this.selectedFormula && this.selectedFormula.key);\r\n  }\r\n\r\n  saveOrExitForm(exit: boolean) {\r\n    GlobalService.debugLog('add-form-record saveRecordEvent')\r\n    if (exit) {\r\n      this.onSaveRecord.emit(null);\r\n    } else {\r\n      if (!this.isValid()) { return; }\r\n\r\n      this.formulaFieldsStructure.forEach((formulaField) => {\r\n        if (typeof this.trigger.formulas == \"undefined\"){ this.trigger.formulas = {}; }\r\n        this.trigger.formulas[formulaField.key] = formulaField;\r\n      });\r\n      this.trigger.execution = this.selectedFormula.key;\r\n      this.isSaving = true;\r\n\r\n      this.onSaveRecord.emit(this.trigger);\r\n    }\r\n  }\r\n\r\n  onChangeFormula(formula: any){\r\n    \r\n    GlobalService.debugLog('@@trigger-creator:onChangeFormula selected formula',formula)\r\n    GlobalService.debugLog('@@trigger-creator:onChangeFormula formulas',this.formulas)\r\n\r\n    this.formulaFieldsStructure = new Array<any>();\r\n    //------------\r\n    Object.keys(this.formulas[formula.key]).forEach((res) => {\r\n      this.formulaFieldsStructure.push({\r\n        \"key\": res, \r\n        \"type\": this.formulas[formula.key][res].type, \r\n        \"tooltip\": this.formulas[formula.key][res].tooltip,\r\n        \"value\" : this.formulas[formula.key][res].value,\r\n        /** per valori vincolati a liste */\r\n        \"selectedAllowedValue\" : this.formulas[formula.key][res].selectedAllowedValue,\r\n        \"allowedValues\" : this.formulas[formula.key][res].allowedValues\r\n      });\r\n    });  \r\n    //------------\r\n    /* *** originale ***\r\n    Object.keys(this.formulas[formula.key]).forEach((res) => {\r\n      this.formulaFieldsStructure.push({\"key\": res, \"type\": this.formulas[formula.key][res].type\r\n      });\r\n    });\r\n    *** */\r\n    GlobalService.debugLog('@@trigger-creator:onChangeFormula formulaFieldsStructure',this.formulaFieldsStructure)\r\n\r\n    this.ensureModulesLoaded();\r\n\r\n  }\r\n\r\n  onFormulaFieldChange(formulaField: any){\r\n  }\r\n\r\n\r\n  /** azioni sulla selezione nel caso di DROPDOWN_LIST*/\r\n  onDropDownSelection(selectedAllowedValue,formulaField){\r\n    \r\n    //console.log(\"@@ onDropDownSelection formulas\",this.formulas); // lista di tutti i trigger\r\n    //console.log(\"@@ onDropDownSelection formulaField\",formulaField);\r\n    //console.log(\"@@ onDropDownSelection selectedAllowedValue\",selectedAllowedValue); \r\n    //console.log(\"@@ end this.this.formulaFieldsStructure \",this.formulaFieldsStructure );\r\n\r\n  }\r\n\r\n\r\n  openFormulaDialog(formulaField: any) {\r\n    this.dialogFormulaRef = this.dialog.open(this.dialogFormula, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n      data: {\r\n        formula: this.formulaFieldsStructure.find(x => x.key == formulaField.key).value,\r\n        fields: this.form.Fields\r\n      },\r\n    });\r\n    this.dialogFormulaRef.afterClosed().subscribe((result) => {\r\n      var formulaToChange = this.formulaFieldsStructure.find(x => x.key == formulaField.key);\r\n      formulaToChange.value = result.formula.toString() == \"\" ? null : result.formula.toString();\r\n      this.onFormulaFieldChange(formulaToChange);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Chiama l'endpoint \"tutti i form\" solo se il tipo di trigger attualmente selezionato\r\n   * ha almeno un campo DMMODULE, e solo la prima volta per apertura di modale: le chiamate\r\n   * successive (anche cambiando Tipo Trigger più volte) riusano \"this.forms\" già scaricato.\r\n   */\r\n  private ensureModulesLoaded(){\r\n    const needsModules = this.formulaFieldsStructure.some((f) => f.type == TriggerPropertyTypeEnum.DMMODULE);\r\n    if (!needsModules) { return; }\r\n\r\n    if (this.modulesLoaded) {\r\n      this.applyModulesToStructure();\r\n      return;\r\n    }\r\n\r\n    this.getAllModules();\r\n  }\r\n\r\n  private getAllModules(){\r\n\r\n    const dynamicModuleParams: Array<EndPointDataParams> =\r\n      new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"orgaid\",\r\n      ParamValue: this.form.OrgaID,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.GetAllFormEndPoint,\r\n      dynamicModuleParams,\r\n      (res: Array<Form>) => {\r\n        this.forms = res;\r\n        this.forms = this.forms.sort((uno, due) => uno.Name.localeCompare(due.Name));\r\n        this.modulesLoaded = true;\r\n\r\n        this.applyModulesToStructure();\r\n      },\r\n      (err) => { }\r\n    );\r\n  }\r\n\r\n  private applyModulesToStructure(){\r\n    this.formulaFieldsStructure.forEach((res) => {\r\n      if (res.type == TriggerPropertyTypeEnum.DMMODULE){\r\n        res.object = this.forms.find(x => x.ID == res.value);\r\n      }\r\n    });\r\n  }\r\n  \r\n  onEqpSelectModule(ev, formulaField){\r\n    if (ev != null){\r\n      formulaField.value = ev.ID;    \r\n    } else {\r\n      formulaField.value = \"\";\r\n    }\r\n  }\r\n\r\n\r\n  /**\r\n * adatta la compatibilità di proprietà di tipo dropdown dichiarate nel configurator ma create in precedenza come string\r\n * nel caso di myFormula.value non presenti negli allowedValues queste saranno aggiunte come selezioni temporanee fino a quando modificate con una scelta ammissibile\r\n * @param myFormula         elem of formulaFieldsStructure\r\n * @param triggerFormula    this.trigger.formulas[res] \r\n */\r\n  stringToDropDownHandler(myFormula:any,triggerFormula:any){\r\n\r\n    // 1. se è una dropdown partono i controlli di compatibilità\r\n    if (myFormula.type == TriggerPropertyTypeEnum.DROPDOWN_LIST) {\r\n      \r\n      // inizializzo gli allowedValues se non esistono\r\n      if (!myFormula.allowedValues) {\r\n        myFormula.allowedValues = new Array<KeyValue>();\r\n      }\r\n      \r\n      \r\n      // per il controllo sui valori dichiarati in precedenza come string devo escludere gli apici\r\n      const selectedCleanValue =  new KeyValue();\r\n      if (\r\n        myFormula.value != null &&\r\n        ((myFormula.value.startsWith(\"'\") &&\r\n          myFormula.value.endsWith(\"'\")) ||\r\n          (myFormula.value.startsWith('\"') &&\r\n            myFormula.value.endsWith('\"')))\r\n      ) {\r\n        selectedCleanValue.key = selectedCleanValue.value = myFormula.value.slice(1, -1);\r\n      } else if(myFormula.value != null){\r\n        selectedCleanValue.key = selectedCleanValue.value = myFormula.value;\r\n      }\r\n  \r\n      // true se esiste una corrispondenza di value in allowedValues\r\n      const isValueInAllowed = selectedCleanValue != null && myFormula.allowedValues.some(item => item.key === selectedCleanValue.key);\r\n  \r\n      /*if (myFormula.key == \"destinatario_trigger\") {\r\n        GlobalService.debugLog(\"@@ -out cycle- myFormula.value\",myFormula);\r\n        GlobalService.debugLog(\"@@ -out cycle-  myFormula?.selectedAllowedValue?.key != myFormula.value\",myFormula?.selectedAllowedValue?.key != selectedCleanValue);\r\n        GlobalService.debugLog(\"@@ -out cycle-  isSelected\",selectedCleanValue);\r\n        GlobalService.debugLog(\"@@ -out cycle-  isValueInAllowed\",isValueInAllowed);\r\n      }*/\r\n  \r\n      // nelle dropdown value è nullo, se non lo è significa che la proprietà in precedenza è stata dichiarata diversa da dropdown\r\n      if (myFormula.value !=null) {\r\n  \r\n        // se value è presente nella lista dei valori ammessi imposto il corrispondente come selezionato e svuoto value perché gestito da selectedAllowedValue\r\n        if (isValueInAllowed) {\r\n  \r\n          myFormula.selectedAllowedValue = selectedCleanValue;\r\n          myFormula.value = null; \r\n        } else {\r\n          // se non è stato trovato un elemento compatibile con value negli allowed, creo un nuovo elemento nella lista e lo seleziono\r\n  \r\n          myFormula.allowedValues.push(selectedCleanValue);\r\n          myFormula.selectedAllowedValue = selectedCleanValue;\r\n          myFormula.value = null;\r\n  \r\n          /*if (myFormula.key == \"destinatario_trigger\") {\r\n          GlobalService.debugLog(\"@@ il selected non è disponibile nei predisposti allowedValues\",myFormula.allowedValues);\r\n          GlobalService.debugLog(\"@@ il selected non è disponibile nei predisposti selectedAllowedValue\",myFormula.selectedAllowedValue);\r\n          }*/\r\n  \r\n        }\r\n      } \r\n      else { \r\n        \r\n        /*\r\n        if (myFormula.key == \"destinatario_trigger\") {\r\n        GlobalService.debugLog(\"@@ default: my formula\",myFormula);\r\n        GlobalService.debugLog(\"@@ default: this.trigger.formulas[res]\",this.trigger.formulas[res]);\r\n        GlobalService.debugLog(\"@@ default: è resente? in allowedValues?\", myFormula.allowedValues.some(item => item.key == myFormula.selectedAllowedValue.key));\r\n        }\r\n        */\r\n  \r\n        // Comportamento di default: se myFormula.value ==null verifico che il selected è presente nella lista degli allowed; in caso negativo lo aggiungo\r\n        myFormula.selectedAllowedValue = triggerFormula.selectedAllowedValue; // aggiorno la selezione corrente\r\n  \r\n        if(!myFormula.allowedValues.some(item => item.key == myFormula.selectedAllowedValue.key)){\r\n          //GlobalService.debugLog(\"@@ default: my formula\",myFormula);\r\n          myFormula.allowedValues.push(myFormula.selectedAllowedValue);\r\n  \r\n        }\r\n      }\r\n  \r\n  \r\n    } \r\n  \r\n  \r\n  \r\n    }\r\n\r\n}\r\n","\r\n<mat-card class=\"add-form-field\">\r\n    <mat-card-header>\r\n        <mat-card-title>\r\n            {{trigger != null ? \"Modifica\" : \"Aggiungi\"}} trigger\r\n        </mat-card-title>\r\n    </mat-card-header>\r\n\r\n    <mat-card-content>\r\n\r\n    <div class=\"container-fluid containerContent padder\" *ngIf=\"trigger.conditions != null\">\r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-3\">Descrizione Trigger</div>\r\n            <div class=\"col-9\">\r\n                <mat-form-field>\r\n                    <mat-label  class=\"pt-1\"> Descrizione </mat-label>\r\n                    <input matInput [(ngModel)]=\"trigger.description\" [readonly]=\"false\" [required]=\"true\">\r\n                </mat-form-field>\r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"row\">\r\n            <div class=\"col-3\">Tipo Trigger</div>\r\n            <div class=\"col-9\">\r\n                <tmw-select [arrayData]=\"formulaKeys\" [(ngModelInput)]=\"selectedFormula\"\r\n                [arrayKeyProperty]=\"'key'\" [arrayValueProperty]=\"'key'\" [showCancelButton]=\"false\" (ngModelInputChange)=\"onChangeFormula($event)\">\r\n                </tmw-select>            \r\n            </div>\r\n        </div>\r\n\r\n        <div class=\"row\" *ngFor=\"let formulaField of formulaFieldsStructure\">\r\n            <div class=\"col-3\">{{formulaField.key}}</div>\r\n            <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.STRING\">\r\n                <mat-form-field>\r\n                    <mat-label  class=\"pt-1\"> {{formulaField.key}}</mat-label>\r\n                    <input matInput [readonly]=\"false\" [required]=\"false\" [matTooltip]=\"formulaField.tooltip\" (click)=\"openFormulaDialog(formulaField)\" [(ngModel)]=\"formulaField.value\" (ngModelChange)=\"onFormulaFieldChange(formulaField)\">\r\n                </mat-form-field>\r\n            </div>\r\n            <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DMMODULE\">\r\n                <tmw-select [placeholder]=\"'Seleziona modulo'\" [arrayData]=\"forms\" [(ngModelInput)]=\"formulaField.object\" [isSearchable]=\"true\"\r\n                [arrayKeyProperty]=\"'ID'\" [arrayValueProperty]=\"'Name'\" [ngModelOptions]=\"{ standalone: true }\" (ngModelInputChange)=\"onEqpSelectModule($event, formulaField)\">\r\n                </tmw-select>\r\n            </div>\r\n\r\n            <!-- campi con valori vincolati li mostro in una select-->\r\n            <div class=\"col-9\" *ngIf=\"formulaField.type == triggerPropertyType.DROPDOWN_LIST\">\r\n                <tmw-select\r\n                    [placeholder]=\"'Seleziona valore'\"\r\n                    [arrayData]=\"formulaField.allowedValues\"\r\n                    (ngModelInputChange)=\"onDropDownSelection($event,formulaField)\"\r\n                    [(ngModelInput)]=\"formulaField.selectedAllowedValue\"\r\n                    [arrayKeyProperty]=\"'key'\"\r\n                    [arrayValueProperty]=\"'value'\"\r\n                    [isRequired]=\"false\"\r\n                    class=\"eqp-form-field eqp-coloured\">\r\n                </tmw-select>\r\n            </div>\r\n\r\n        </div>\r\n\r\n        <button class=\"btn btn-primary\" (click)=\"addCondition()\">Aggiungi condizione</button>\r\n\r\n        <div class=\"padder\" *ngFor=\"let condition of trigger.conditions\">\r\n            <div class=\"row\" *ngIf=\"condition.Field != null\">\r\n                <div class=\"col-1\"><button class=\"btn btn-danger\"><tmw-icon class=\"mat-icon\" (click)=\"deleteCondition(condition)\" name=\"trash\"></tmw-icon></button></div>\r\n                <div class=\"col-2\">\r\n                    <tmw-select [arrayData]=\"form.Fields\" [(ngModelInput)]=\"condition.Field\"\r\n                    [arrayKeyProperty]=\"'Name'\" [arrayValueProperty]=\"'Name'\"\r\n                    [showCancelButton]=\"false\" (ngModelInputChange)=\"onFieldTypeChange($event, condition)\"\r\n                    [includeFullObject]=\"true\">\r\n                    </tmw-select>\r\n                </div>            \r\n                <div class=\"col-9\" *ngIf=\"condition.Field != null\">\r\n                    <dynamic-module-trigger-fix #fieldTemplate [condition]=\"condition\" [form]=\"form\" (triggerChange)=\"onTriggerChange($event, condition)\"></dynamic-module-trigger-fix>\r\n                </div>\r\n            </div>\r\n\r\n        </div>\r\n\r\n    </div>\r\n\r\n    </mat-card-content>\r\n    <mat-card-footer>\r\n        <div class=\"d-flex justify-content-end align-items-center mt-2 mb-1 me-3\">\r\n            <span class=\"text-danger me-2\" *ngIf=\"!isValid()\">Descrizione e Tipo Trigger sono obbligatori</span>\r\n            <button class=\"mr-2\" mat-raised-button type=\"button\" (click)=\"saveOrExitForm(true)\">\r\n                Annulla\r\n            </button>\r\n            <button class=\"mr-2\" mat-raised-button color=\"primary\" type=\"button\"\r\n                (click)=\"saveOrExitForm(false)\" [disabled]=\"isSaving || !isValid()\">\r\n                <span *ngIf=\"!isSaving\">Salva</span>\r\n                <span *ngIf=\"isSaving\">Salvataggio in Corso...</span>\r\n            </button>\r\n        </div>\r\n    </mat-card-footer>\r\n\r\n</mat-card>\r\n\r\n<!--DIALOG PER SEMPLIFICARE LA SCRITTURA DEL CAMPO FORMULA-->\r\n<ng-template #dialogFormula>\r\n    <eqp-dynamic-module-add-formula-component>\r\n    </eqp-dynamic-module-add-formula-component>\r\n</ng-template>","// import { ThrowStmt } from '@angular/compiler';\r\nimport {\r\n  AfterViewInit,\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ElementRef,\r\n  EventEmitter,\r\n  Input,\r\n  OnChanges,\r\n  OnDestroy,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n  ViewChild,\r\n} from \"@angular/core\";\r\nimport {\r\n  UntypedFormBuilder,\r\n  UntypedFormControl,\r\n  UntypedFormGroup,\r\n  Validators,\r\n} from \"@angular/forms\";\r\nimport { MatDialog, MatDialogRef } from \"@angular/material/dialog\";\r\nimport {\r\n  CellAlignmentEnum,\r\n  ConfigColumn,\r\n  TmwTableComponent,\r\n  TypeColumn,\r\n} from \"tmw-table\";\r\nimport { NumericField } from \"../../../models/fields/numericField.model\";\r\nimport { BaseField, DataGetter, DataGetterTypeEnum, FieldInvisibilityEnum, FieldTypeEnum } from '../../../models/baseField.model';\r\nimport { Context } from \"../../../models/context.model\";\r\nimport {\r\n  EndPointConfiguration,\r\n  EndPointDataParams,\r\n  ParamTypeEnum,\r\n} from \"../../../models/endPointConfiguration.model\";\r\nimport {\r\n  ActionOnRecord,\r\n  Form,\r\n  FormFieldGroup,\r\n  FormScalarTypeEnum,\r\n  FormTypeEnum,\r\n} from \"../../../models/form.model\";\r\nimport { ArrayValidators } from \"../../../services/custom-form-validators.service\";\r\nimport { EqpDynamicModuleDialogService } from \"../../../services/eqp-dynamic-module-dialog.service\";\r\nimport { UtilityHelperService } from \"../../../services/utilityHelper.services\";\r\nimport { DynamicModuleCompileConfig } from \"../../../models/dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleConfiguratorConfig } from \"../../../models/dynamicModuleConfiguratorConfig.model\";\r\nimport { DomSanitizer, SafeStyle } from \"@angular/platform-browser\";\r\nimport { GlobalService } from \"../../../services/global.service\";\r\nimport { DynamicLoaderDirectiveData, eventOut } from \"../../../directives/dynamic-loader/dynamic-loader.directive\";\r\nimport { Trigger, ActionButton, ActionFlagEnum, FireTrigger } from '../../../models/trigger.model';\r\nimport { Contestualization } from \"../../../models/getter.model\";\r\nimport { ImageSelectorField } from \"../../../models/fields/imageSelectorField.model\";\r\nimport { FieldExtraConfig } from \"../../../models/fieldExtraConfig.model\";\r\nimport { AttachmentType, TmwAttachmentDTO } from \"tmw-attachments\";\r\nimport { DynAttachment } from \"../../../models/dynAttachment\";\r\nimport { CdkDragDrop, moveItemInArray } from '@angular/cdk/drag-drop';\r\nimport { injectGoogleFontsFromForm } from '../../../utils/google-fonts-injector';\r\nimport { QueryEditorModeEnum } from \"../../private/dbgetter/dbgetter.component\";\r\n\r\n@Component({\r\n  selector: \"eqp-dynamic-module-configurator\",\r\n  templateUrl: \"./eqp-dynamic-module-configurator.component.html\",\r\n  styleUrls: [\"./eqp-dynamic-module-configurator.component.scss\"],\r\n})\r\nexport class EqpDynamicModuleConfiguratorComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\r\n\r\n  @Input() debugMode: boolean = false;\r\n\r\n  @Input() fieldsExtraConfig: Array<FieldExtraConfig>;\r\n  @Input() configurations: DynamicModuleConfiguratorConfig =\r\n    new DynamicModuleConfiguratorConfig();\r\n  @Input() formID: string = null;\r\n  @Input() viewMode: string = \"addOrEdit\"; // Export\r\n  @Input() QueryEditorComponent: DynamicLoaderDirectiveData; // L'intero componente query Editor\r\n  @Input() triggers: any;\r\n  @Input() actionButtons: any;\r\n  @Input() contestualization: Array<Contestualization>;\r\n  @Input() formulaObject: any; // Esempio: {currole: role, user: user, medical: medicalexamination}\r\n  @Input() configuratorTheme: Record<string, string> | null = null;\r\n  @Input() configuratorThemeCss: string | null = null;\r\n\r\n  @Output() fireTrigger: EventEmitter<FireTrigger> = new EventEmitter<FireTrigger>();\r\n\r\n  loader: boolean = false;\r\n  /**\r\n   * Token da usare negli endpoint da chiamare per recuperare o salvare i record.\r\n   * Usato solo se viene popolata la proprietà \"baseServerUrl\".\r\n   */\r\n  userToken: string = null;\r\n  /**\r\n   * Configurazione degli endpoint da chiamare per recuperare o salvare i dati.\r\n   * Può essere definita dall'utente oppure lasciata null, viene popolata con dei\r\n   * valori di default se viene valorizzata la proprietà \"baseServerUrl\" altrimenti\r\n   * viene lasciata null e non viene eseguita nessuna chiamata al server.\r\n   */\r\n  endPointConfiguration: EndPointConfiguration = null;\r\n  /**\r\n   * Url del server da chiamare per recuerare, salvare o eliminare i record.\r\n   * Usato per creare la configurazione di default degli endpoint da chiamare.\r\n   */\r\n  baseServerUrl: string = null;\r\n  context: Context = new Context();\r\n\r\n  /* export variables */\r\n  downloadName: string;\r\n  downloadJsonHref: any;\r\n  stringifiedForm: string;\r\n\r\n  /* import variables */\r\n  importedModule: string = null; // json object\r\n  dialogImportRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogImport\", { static: true }) dialogImport: TemplateRef<any>;\r\n\r\n  form: Form = new Form();\r\n  backupForm: Form = null;\r\n  saved: boolean = false;\r\n  orgaID: string = null;\r\n  UserID: number = 36;\r\n  innerFormManagment: boolean = false;\r\n  innerFormRef: MatDialogRef<TemplateRef<any>>;\r\n\r\n  /* CONFIGURAZIONE PER VISUALIZZAZIONE FORM CREATA */\r\n  viewConfig: DynamicModuleCompileConfig = new DynamicModuleCompileConfig(\r\n    true,\r\n    false,\r\n    false,\r\n    \"0\"\r\n  );\r\n\r\n  formFormGroup: UntypedFormGroup = null;\r\n  formCompleted = false;\r\n  previewForm: Form;\r\n  formFieldGroupName: string;\r\n\r\n  actionAutocompleteOptions: Array<{ label: string; value: string }>;\r\n\r\n  //#region Enumeratori usati nell'html\r\n  FormTypeEnum = FormTypeEnum;\r\n  FormScalarTypeEnum = FormScalarTypeEnum;\r\n  AttachmentType = AttachmentType;\r\n  //#endregion\r\n\r\n  //#region Gestione sfondo form\r\n  get previewBgStyle(): SafeStyle | null {\r\n    if (!this.form?.BgImageBase64) return null;\r\n    return this.sanitizer.bypassSecurityTrustStyle([\r\n      `background-image: url('data:image/png;base64,${this.form.BgImageBase64}')`,\r\n      'background-size: cover',\r\n      'background-position: center',\r\n      'background-repeat: no-repeat',\r\n    ].join('; '));\r\n  }\r\n\r\n  get previewThemeStyle(): SafeStyle | null {\r\n    if (!this.form?.ThemeCSS) return null;\r\n    return this.sanitizer.bypassSecurityTrustStyle(this.form.ThemeCSS.trim().replace(/;$/, ''));\r\n  }\r\n\r\n  get bgAttachmentList(): TmwAttachmentDTO[] {\r\n    if (!this.form?.BgImageBase64) return [];\r\n    const att = new DynAttachment();\r\n    att.ID = 0;\r\n    att.FileDataBase64 = this.form.BgImageBase64;\r\n    att.IsImage = true;\r\n    att.FileContentType = 'image/png';\r\n    return [att];\r\n  }\r\n\r\n  onBgImageChange(attachments: TmwAttachmentDTO[]): void {\r\n    const value = attachments?.length > 0 ? attachments[0].FileDataBase64 : null;\r\n    this.form.BgImageBase64 = value;\r\n    if (this.previewForm) this.previewForm.BgImageBase64 = value;\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  onBgImageDelete(): void {\r\n    this.form.BgImageBase64 = null;\r\n    if (this.previewForm) this.previewForm.BgImageBase64 = null;\r\n    this.cdr.detectChanges();\r\n  }\r\n\r\n  private static readonly FIELD_TYPE_LABELS: Record<number, string> = {\r\n    1: 'Campo di testo',\r\n    2: 'Testo lungo',\r\n    3: 'Booleano',\r\n    4: 'Data',\r\n    5: 'Numerico',\r\n    6: 'Allegato',\r\n    7: 'Immagine',\r\n    8: 'Elenco',\r\n    11: 'Selettore immagini',\r\n    12: 'Etichetta',\r\n    13: 'Immagine con marcatori',\r\n    14: 'Bottone azione',\r\n  };\r\n\r\n  private static readonly FIELD_TYPE_CSS_CLASS: Record<number, string> = {\r\n    1: 'TextFieldStyleCSS',\r\n    2: 'TextareaFieldStyleCSS',\r\n    3: 'BooleanFieldStyleCSS',\r\n    4: 'DateFieldStyleCSS',\r\n    5: 'NumericFieldStyleCSS',\r\n    6: 'AttachmentFieldStyleCSS',\r\n    7: 'ImageFieldStyleCSS',\r\n    8: 'ListValueFieldStyleCSS',\r\n    11: 'ImageSelectorFieldStyleCSS',\r\n    12: 'LabelFieldStyleCSS',\r\n    13: 'ImageWithMarkersFieldStyleCSS',\r\n    14: 'ActionButtonFieldStyleCSS',\r\n  };\r\n\r\n  // Mappa alias modello → ID Claude più recente; l'ordine di check è rilevante (Fable e Opus prima di Sonnet/Haiku)\r\n  private static readonly MODEL_MAP: Array<{ pattern: RegExp; id: string }> = [\r\n    { pattern: /\\b(?:(?:usa|use|con|using)\\s+)?fable\\b/gi, id: 'claude-fable-5' },\r\n    { pattern: /\\b(?:(?:usa|use|con|using)\\s+)?opus\\b/gi, id: 'claude-opus-4-7' },\r\n    { pattern: /\\b(?:(?:usa|use|con|using)\\s+)?sonnet\\b/gi, id: 'claude-sonnet-4-6' },\r\n    { pattern: /\\b(?:(?:usa|use|con|using)\\s+)?haiku\\b/gi, id: 'claude-haiku-4-5-20251001' },\r\n  ];\r\n\r\n  // Prezzi ufficiali Anthropic USD/MTok per modello (pagina \"Prezzi dei modelli\", verificata 2026-07).\r\n  // cacheWrite è il prezzo di scrittura cache a 1 ORA: è il CacheTtl configurato su quasi tutti gli\r\n  // ambienti reali (Takecare, Mosaico, Telemedware, ecc. — solo Development usa \"none\", Test usa \"1h\"\r\n  // anch'esso), quindi è la stima realistica anche se leggermente più alta dei 5 minuti. Tenere\r\n  // allineati a DynamicModule.Api\\Skills\\DMAI_SKILLFORK.md e ai servizi Claude*Service.cs lato server.\r\n  private static readonly AI_MODEL_PRICING: Record<string, { input: number; output: number; cacheWrite: number; cacheRead: number; label: string }> = {\r\n    'claude-haiku-4-5-20251001': { input: 1.00, output: 5.00, cacheWrite: 2.00, cacheRead: 0.10, label: 'Haiku' },\r\n    'claude-sonnet-4-6': { input: 3.00, output: 15.00, cacheWrite: 6.00, cacheRead: 0.30, label: 'Sonnet' },\r\n    'claude-opus-4-7': { input: 5.00, output: 25.00, cacheWrite: 10.00, cacheRead: 0.50, label: 'Opus' },\r\n    'claude-fable-5': { input: 10.00, output: 50.00, cacheWrite: 20.00, cacheRead: 1.00, label: 'Fable' },\r\n  };\r\n\r\n  private extractModelFromText(text: string): { cleanText: string; modelId: string | null } {\r\n    for (const entry of EqpDynamicModuleConfiguratorComponent.MODEL_MAP) {\r\n      entry.pattern.lastIndex = 0;\r\n      if (entry.pattern.test(text)) {\r\n        entry.pattern.lastIndex = 0;\r\n        const cleanText = text\r\n          .replace(entry.pattern, '')\r\n          .replace(/[ \\t]+/g, ' ')\r\n          .replace(/\\s*[.,;]\\s*$/, '')\r\n          .trim();\r\n        entry.pattern.lastIndex = 0;\r\n        return { cleanText, modelId: entry.id };\r\n      }\r\n      entry.pattern.lastIndex = 0;\r\n    }\r\n    return { cleanText: text, modelId: null };\r\n  }\r\n\r\n  onFormGraphicSuggest(): void {\r\n    const rawHint = this.formGraphicSuggestHint?.trim();\r\n    if (!this.form || !this.endPointConfiguration?.Forms?.SpeechToGraphicsEndPoint) return;\r\n    const { cleanText: hint, modelId: aiModelId } = this.extractModelFromText(rawHint);\r\n    const scope = this.formGraphicScope;\r\n\r\n    // Scope tipo specifico: valida esistenza del campo prima di partire\r\n    let scopeFieldType: number | null = null;\r\n    if (scope.startsWith('type_')) {\r\n      scopeFieldType = parseInt(scope.replace('type_', ''), 10);\r\n      const exists = (this.form.Fields ?? []).some(f => f.FieldType === scopeFieldType);\r\n      if (!exists) {\r\n        EqpDynamicModuleDialogService.Error('Nessun campo di questo tipo presente nel form.');\r\n        return;\r\n      }\r\n    }\r\n\r\n    this.formGraphicSuggestLoading = true;\r\n\r\n    // Campi da inviare: un rappresentante per tipo (all/main) oppure solo il primo del tipo scelto (tipo specifico)\r\n    const seenTypes = new Set<number>();\r\n    const fieldsToSend = scopeFieldType != null\r\n      ? (this.form.Fields ?? []).filter(f => f.FieldType === scopeFieldType).slice(0, 1).map(f => ({ Label: f.Label, FieldType: f.FieldType }))\r\n      : (this.form.Fields ?? []).filter(f => { if (seenTypes.has(f.FieldType)) return false; seenTypes.add(f.FieldType); return true; }).map(f => ({ Label: f.Label, FieldType: f.FieldType }));\r\n\r\n    const graphicsParams: EndPointDataParams[] = [\r\n      { ParamName: 'Name', ParamValue: this.form.Name, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'Description', ParamValue: this.form.Description ?? null, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'ThemeCSS', ParamValue: this.form.ThemeCSS ?? null, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'TitleCSS', ParamValue: this.form.TitleCSS ?? null, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'Fields', ParamValue: fieldsToSend, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'Hint', ParamValue: hint || this.buildRandomGraphicHint(), ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'ModelId', ParamValue: aiModelId, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'GenerateBackground', ParamValue: this.generateBackground && scope === 'all', ParamType: ParamTypeEnum['In Body'] },\r\n      ...(scope === 'main' ? [{ ParamName: 'MainOnly', ParamValue: true, ParamType: ParamTypeEnum['In Body'] }] : []),\r\n      ...(scopeFieldType != null ? [{ ParamName: 'SingleFieldMode', ParamValue: true, ParamType: ParamTypeEnum['In Body'] }] : []),\r\n    ];\r\n\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.SpeechToGraphicsEndPoint,\r\n      graphicsParams,\r\n      (res: any) => {\r\n        const r = res as { ThemeCSS?: string; TitleCSS?: string; BgImageBase64?: string; FieldStyles?: { [cssClassName: string]: { [prop: string]: string } }; Warnings?: string[]; DallEElapsedSec?: number };\r\n        this.formGraphicSuggestLoading = false;\r\n        this.showFormGraphicSuggestInput = false;\r\n\r\n        if (scope === 'main') {\r\n          // Solo ThemeCSS e TitleCSS\r\n          if (r.ThemeCSS !== undefined) this.form.ThemeCSS = r.ThemeCSS ?? null;\r\n          if (r.TitleCSS !== undefined) this.form.TitleCSS = r.TitleCSS ?? null;\r\n        } else if (scopeFieldType != null) {\r\n          // FieldStyles del tipo scelto applicati a TUTTI i campi di quel tipo nel form.\r\n          // Ogni campo riceve una copia distinta: safeClone usa WeakSet e salta oggetti già visti.\r\n          if (r.FieldStyles) {\r\n            const cssClassName = (EqpDynamicModuleConfiguratorComponent.FIELD_TYPE_CSS_CLASS as any)[scopeFieldType];\r\n            if (cssClassName && r.FieldStyles[cssClassName]) {\r\n              (this.form.Fields ?? []).filter(f => f.FieldType === scopeFieldType).forEach(f => {\r\n                (f as any)[cssClassName] = { ...r.FieldStyles![cssClassName] };\r\n              });\r\n            }\r\n          }\r\n        } else {\r\n          // Tutto\r\n          if (r.ThemeCSS !== undefined) this.form.ThemeCSS = r.ThemeCSS ?? null;\r\n          if (r.TitleCSS !== undefined) this.form.TitleCSS = r.TitleCSS ?? null;\r\n          if (r.BgImageBase64 !== undefined) this.form.BgImageBase64 = r.BgImageBase64 ?? null;\r\n          if (r.FieldStyles) {\r\n            (this.form.Fields ?? []).forEach(f => {\r\n              const cssClassName = (EqpDynamicModuleConfiguratorComponent.FIELD_TYPE_CSS_CLASS as any)[f.FieldType];\r\n              if (!cssClassName) return;\r\n              const cssObj = r.FieldStyles![cssClassName];\r\n              if (cssObj && typeof cssObj === 'object') (f as any)[cssClassName] = { ...cssObj };\r\n            });\r\n          }\r\n        }\r\n\r\n        if (this.formCompleted) {\r\n          this.formCompleted = false;\r\n          this.previewForm = null;\r\n          setTimeout(() => this.setFormStatus(true), 50);\r\n        }\r\n        this.cdr.detectChanges();\r\n\r\n        const bgTimePart = r.DallEElapsedSec != null ? ` (sfondo generato in ${r.DallEElapsedSec.toFixed(1)}s)` : '';\r\n        const successMsg = scope === 'main'\r\n          ? `Grafica principale applicata!${bgTimePart}`\r\n          : scopeFieldType != null\r\n            ? `Grafica applicata a tutti i campi del tipo selezionato!${bgTimePart}`\r\n            : `Grafica applicata al form!${bgTimePart}`;\r\n        EqpDynamicModuleDialogService.Success(successMsg);\r\n        if (r.Warnings?.length > 0) EqpDynamicModuleDialogService.Warning(r.Warnings);\r\n      },\r\n      (error) => {\r\n        this.formGraphicSuggestLoading = false;\r\n        const msg = (error as any)?.error;\r\n        EqpDynamicModuleDialogService.Error(typeof msg === 'string' && msg.trim() ? msg : 'Errore nella generazione della grafica');\r\n      }\r\n    );\r\n  }\r\n  //#endregion\r\n\r\n  //#region Proprietà per creazione/modifica campo\r\n  fieldsColumns: Array<ConfigColumn>;\r\n  @ViewChild(\"fieldsTable\", { static: false }) fieldsTable: TmwTableComponent;\r\n  selectedField: BaseField;\r\n  indexSelectedField: number;\r\n  actionOnRecordFormGroup: UntypedFormGroup;\r\n  dialogFieldRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogField\", { static: true }) dialogField: TemplateRef<any>;\r\n  @ViewChild(\"fieldSectionColumnTemplate\", { static: true })\r\n  fieldSectionColumnTemplate: TemplateRef<any>;\r\n  //#endregion\r\n\r\n  //#region Proprietà per creare/modificare una Form di dettaglio\r\n  selectedInnerForm: Form;\r\n  indexSelectedInnerForm: number;\r\n  dialogInnerFormRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogInnerForm\", { static: true })\r\n  dialogInnerForm: TemplateRef<any>;\r\n  innerFormConfig: DynamicModuleConfiguratorConfig;\r\n  //#endregion\r\n\r\n  //#region Proprietà per creare/modificare una action sui record di una Form\r\n  actionsOnRecordColumns: Array<ConfigColumn>;\r\n  @ViewChild(\"actionsOnRecordTable\", { static: false })\r\n  actionsOnRecordTable: TmwTableComponent;\r\n  selectedAction: ActionOnRecord;\r\n  indexSelectedAction: number;\r\n  dialogActionOnRecordRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogActionOnRecord\", { static: true })\r\n  dialogActionOnRecord: TemplateRef<any>;\r\n  //#endregion\r\n\r\n  //#region Proprietà per creare/modificare dei bottoni azione\r\n  actionButtonsColumns: Array<ConfigColumn>;\r\n  @ViewChild(\"actionButtonsTable\", { static: false })\r\n  actionButtonsTable: TmwTableComponent;\r\n  selectedActionButton: ActionButton;\r\n  indexSelectedActionButton: number;\r\n  dialogActionButtonRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogActionButton\", { static: true })\r\n  dialogActionButton: TemplateRef<any>;\r\n\r\n  actionButtonsFormGroup: UntypedFormGroup;\r\n  actionsFlag = ActionFlagEnum;\r\n  //#endregion\r\n\r\n  /**\r\n   * Evento emesso quando si salva una form e non è stato specificato un endpoint da chiamare.\r\n   */\r\n  @Output() saveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n  /**\r\n   * Evento emesso DOPO aver eseguito una chiamata al server per il salvataggiodi una form all'endpoint specificato.\r\n   */\r\n  @Output() afterSaveFormEvent: EventEmitter<Form> = new EventEmitter<Form>();\r\n\r\n  // Out componente esterno\r\n  @Output() out: EventEmitter<eventOut> = new EventEmitter<eventOut>();\r\n\r\n  // Triggers\r\n  dialogTriggersRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogTriggers\", { static: true }) dialogTriggers: TemplateRef<any>;\r\n  selectedTrigger: Trigger;\r\n  triggersColumns: Array<ConfigColumn>;\r\n  @ViewChild(\"triggersTable\", { static: false }) triggersTable: TmwTableComponent;\r\n\r\n  showAllFields: boolean = false;\r\n  showGraficaPanel: boolean = false;\r\n\r\n  // Contestualization\r\n  selectedContestualization: string = null;\r\n  selectedContestualizationValue: number = null;\r\n\r\n  showDeleteButton: boolean = false;\r\n  selectedFields: Array<BaseField> = new Array<BaseField>();\r\n\r\n  // AI Edit dialog\r\n  dialogAiEditRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogAiEdit\", { static: true }) dialogAiEdit: TemplateRef<any>;\r\n  dialogAiHistoryRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogAiHistory\", { static: true }) dialogAiHistory: TemplateRef<any>;\r\n\r\n  // Contestualizzazione dialog\r\n  dialogContestualizationRef: MatDialogRef<TemplateRef<any>>;\r\n  @ViewChild(\"dialogContestualization\", { static: true }) dialogContestualization: TemplateRef<any>;\r\n\r\n  // Visual Editor\r\n  @ViewChild(\"dialogVeTooltip\", { static: true }) dialogVeTooltip: TemplateRef<any>;\r\n  @ViewChild(\"dialogVeReorder\", { static: true }) dialogVeReorder: TemplateRef<any>;\r\n  visualEditorActive: boolean = false;\r\n  veSelectedField: BaseField | null = null;\r\n  veSwapField: BaseField | null = null;\r\n  dialogVeTooltipRef: MatDialogRef<TemplateRef<any>>;\r\n  dialogVeReorderRef: MatDialogRef<TemplateRef<any>>;\r\n  veShowGraphicInput: boolean = false;\r\n  veGraphicHint: string = '';\r\n  veApplyToAllOfType: boolean = false;\r\n  veReorderFields: BaseField[] = [];\r\n  private veGraphicSuggestActive: boolean = false;\r\n\r\n  get veSelectedFieldTypeName(): string {\r\n    const ft = this.veSelectedField?.FieldType;\r\n    if (ft == null) return '';\r\n    return (EqpDynamicModuleConfiguratorComponent.FIELD_TYPE_LABELS as any)[ft] ?? `Tipo ${ft}`;\r\n  }\r\n\r\n  aiEditPrompt: string = \"\";\r\n  aiEditAttachments: Array<{ fileName: string; base64Content: string; mediaType: string }> = [];\r\n  aiEditAutosave: boolean = false;\r\n  aiEditLoading: boolean = false;\r\n  aiEditCountdown: number = 0;\r\n  aiEditEstimatedSec: number = 0;\r\n  private _aiCountdownRef: any = null;\r\n  private _aiEditCancelled: boolean = false;\r\n  aiEditIsOvertime: boolean = false;\r\n  showAiPromptHistory: boolean = true;\r\n  aiEditFieldContext: { code: string } | null = null;\r\n  // Sezioni in cui è stato suddiviso l'ultimo prompt di creazione (generazione parallela);\r\n  // vuoto quando l'ultima chiamata AI non ha richiesto split.\r\n  lastPromptSplits: string[] = [];\r\n\r\n  // Numero di split ipotizzati dall'utente per la stima costo live (1 = nessuno split).\r\n  // Con split > 1 le chiamate partono tutte in parallelo: nessuna beneficia della cache\r\n  // del system prompt (skill), quindi ognuna paga per intero i token skill + prompt.\r\n  // Range reale lato server (DMAI_SKILLFORK.md, floor 2026-07): 1 (nessuno split) oppure 3-12 —\r\n  // 2 non è più un valore possibile (sotto le 3 sezioni il warm-up cache non conviene mai, vedi\r\n  // ShouldWarmUpCache), quindi qui lo saltiamo per non far stimare un costo per uno scenario che\r\n  // il server non produce mai.\r\n  private static readonly AI_MIN_SPLIT_COUNT = 3;\r\n  private static readonly AI_MAX_SPLIT_COUNT = 12;\r\n  private _aiEditSplitCount = 1;\r\n  get aiEditSplitCount(): number {\r\n    return this._aiEditSplitCount;\r\n  }\r\n  set aiEditSplitCount(value: number) {\r\n    const n = Math.round(Number(value));\r\n    if (!Number.isFinite(n) || n <= 1) {\r\n      this._aiEditSplitCount = 1;\r\n      return;\r\n    }\r\n    const clamped = Math.min(EqpDynamicModuleConfiguratorComponent.AI_MAX_SPLIT_COUNT, n);\r\n    this._aiEditSplitCount = clamped < EqpDynamicModuleConfiguratorComponent.AI_MIN_SPLIT_COUNT\r\n      ? EqpDynamicModuleConfiguratorComponent.AI_MIN_SPLIT_COUNT\r\n      : clamped;\r\n  }\r\n\r\n  incrementAiEditSplitCount(): void {\r\n    this.aiEditSplitCount = this.aiEditSplitCount === 1\r\n      ? EqpDynamicModuleConfiguratorComponent.AI_MIN_SPLIT_COUNT\r\n      : this.aiEditSplitCount + 1;\r\n  }\r\n\r\n  decrementAiEditSplitCount(): void {\r\n    this.aiEditSplitCount = this.aiEditSplitCount <= EqpDynamicModuleConfiguratorComponent.AI_MIN_SPLIT_COUNT\r\n      ? 1\r\n      : this.aiEditSplitCount - 1;\r\n  }\r\n  aiFieldSuggestLoading: boolean = false;\r\n  formGraphicSuggestLoading: boolean = false;\r\n  formGraphicSuggestHint: string = '';\r\n  showFormGraphicSuggestInput: boolean = false;\r\n  formGraphicScope: string = 'all';\r\n  generateBackground: boolean = false;\r\n  aiGenerateBackground: boolean = false;\r\n  presentFieldTypeOptions: { value: string; label: string }[] = [];\r\n\r\n  // AI DataGetter silent loading\r\n  pendingAiDataGetterFields: BaseField[] = [];\r\n  currentAiDataGetterField: BaseField | null = null;\r\n  aiDataGetterLoading: boolean = false;\r\n\r\n  get aiPromptHistory(): string[] {\r\n    if (!this.form?.AIPrompts) return [];\r\n    try { return JSON.parse(this.form.AIPrompts); } catch { return []; }\r\n  }\r\n\r\n  // Costanti per la stima del costo AI (token stimati per un prompt di media complessità / output medio;\r\n  // il prezzo per token varia invece in base al modello rilevato nel prompt, vedi AI_MODEL_PRICING)\r\n  // Token fissi dei moduli skill (CORE + CAMPO*/GRAFICA* caricati via SKILLFORK) inviati come system\r\n  // prompt ad OGNI chiamata (una per split). Stima \"al massimo\": somma di tutti i 26 file\r\n  // DMAI_FldJson_*.md (~42K token, bytes/4, dopo la compressione di CORE/MODIFICA/GRAFICA_CORE del\r\n  // 2026-07) — SKILLFORK non li carica mai tutti insieme, ma è il limite superiore realistico visto\r\n  // che il client non sa quale sottoinsieme verrà selezionato.\r\n  // NB: 132.000 (valore ancora precedente) era in realtà MainInputTokens sommato su 5 chiamate\r\n  // parallele (~26K/chiamata) e non andava usato come costante per singola chiamata.\r\n  private readonly AI_SKILL_TOKENS = 42_000;\r\n  private readonly AI_TOKENS_PER_FIELD = 100;    // stima token per campo del form serializzato\r\n  private readonly AI_OUTPUT_TOKENS = 3_500;  // stima conservativa output JSON modificato\r\n  private readonly AI_PDF_CHARS = 15_060; // finestra max estratta per allegato PDF\r\n  private readonly AI_CHARS_PER_TOKEN = 4;      // char/token medi per testo italiano\r\n  private readonly AI_EUR_USD_RATE = 1.10;   // tasso EUR/USD approssimato\r\n\r\n  // Modello rilevato in tempo reale dal testo del prompt AI (\"Haiku\"/\"Sonnet\"/\"Opus\"/\"Fable\");\r\n  // Haiku è il default quando nel prompt non è citato esplicitamente alcun modello\r\n  get aiEditDetectedModelId(): string {\r\n    return this.extractModelFromText(this.aiEditPrompt ?? '').modelId ?? 'claude-haiku-4-5-20251001';\r\n  }\r\n\r\n  get aiEditDetectedModelLabel(): string {\r\n    return EqpDynamicModuleConfiguratorComponent.AI_MODEL_PRICING[this.aiEditDetectedModelId]?.label ?? 'Haiku';\r\n  }\r\n\r\n  private get aiEditPricing() {\r\n    return EqpDynamicModuleConfiguratorComponent.AI_MODEL_PRICING[this.aiEditDetectedModelId]\r\n      ?? EqpDynamicModuleConfiguratorComponent.AI_MODEL_PRICING['claude-haiku-4-5-20251001'];\r\n  }\r\n\r\n  // Con split > 1 il server valuta se conviene \"scaldare\" la cache con una chiamata a vuoto\r\n  // prima di lanciare le N chiamate parallele (vedi ShouldWarmUpCache in\r\n  // ClaudeFormGeneratorService.cs): conviene solo se cacheWrite + N×cacheRead < N×input — cioè\r\n  // se il risparmio sulle N letture supera il sovrapprezzo della scrittura iniziale. Qui\r\n  // replichiamo la stessa disuguaglianza e usiamo il minore dei due costi, esattamente come fa\r\n  // il server (che quindi non sceglie mai l'opzione peggiore). Il prompt/form (a differenza dei\r\n  // token skill) non beneficia mai della cache: viene rifatturato per intero ad ogni split.\r\n  private computeAiEditSplitCosts(): { noWarmupCost: number; warmUpCost: number; outputCost: number } {\r\n    const pricing = this.aiEditPricing;\r\n    const formTokens = (this.form?.Fields?.length ?? 0) * this.AI_TOKENS_PER_FIELD;\r\n    const varInput = (this.aiEditPrompt?.length ?? 0) / this.AI_CHARS_PER_TOKEN\r\n      + this.aiEditAttachments.length * (this.AI_PDF_CHARS / this.AI_CHARS_PER_TOKEN);\r\n    const n = this.aiEditSplitCount;\r\n    const promptTokensPerCall = formTokens + varInput;\r\n\r\n    const noWarmupCost = n * (this.AI_SKILL_TOKENS + promptTokensPerCall) * pricing.input;\r\n    const warmUpCost = this.AI_SKILL_TOKENS * pricing.cacheWrite\r\n      + n * (this.AI_SKILL_TOKENS * pricing.cacheRead + promptTokensPerCall * pricing.input);\r\n\r\n    return { noWarmupCost, warmUpCost, outputCost: this.AI_OUTPUT_TOKENS * pricing.output };\r\n  }\r\n\r\n  // true quando, per lo split ipotizzato, il warm-up costerebbe meno del prezzo pieno — cioè\r\n  // quando il server (ShouldWarmUpCache) farebbe davvero partire la chiamata a vuoto.\r\n  get aiEditSplitWarmUpApplies(): boolean {\r\n    if (this.aiEditSplitCount <= 1) return false;\r\n    const { noWarmupCost, warmUpCost } = this.computeAiEditSplitCosts();\r\n    return warmUpCost < noWarmupCost;\r\n  }\r\n\r\n  // Calcola il costo (USD) della chiamata principale dato il prezzo da applicare ai token skill\r\n  // in assenza di split (cacheWrite per il primo uso, cacheRead per gli usi successivi). Con\r\n  // split > 1 usa il minore tra costo-con-warmup e costo-senza (vedi computeAiEditSplitCosts).\r\n  private computeAiEditCostUsd(skillTokenPrice: number): number {\r\n    const n = this.aiEditSplitCount;\r\n\r\n    if (n <= 1) {\r\n      const pricing = this.aiEditPricing;\r\n      const formTokens = (this.form?.Fields?.length ?? 0) * this.AI_TOKENS_PER_FIELD;\r\n      const varInput = (this.aiEditPrompt?.length ?? 0) / this.AI_CHARS_PER_TOKEN\r\n        + this.aiEditAttachments.length * (this.AI_PDF_CHARS / this.AI_CHARS_PER_TOKEN);\r\n      return (this.AI_SKILL_TOKENS * skillTokenPrice + (formTokens + varInput) * pricing.input + this.AI_OUTPUT_TOKENS * pricing.output) / 1_000_000;\r\n    }\r\n\r\n    const { noWarmupCost, warmUpCost, outputCost } = this.computeAiEditSplitCosts();\r\n    return (Math.min(noWarmupCost, warmUpCost) + outputCost) / 1_000_000;\r\n  }\r\n\r\n  get aiEditCostFirstEur(): number {\r\n    return this.computeAiEditCostUsd(this.aiEditPricing.cacheWrite) / this.AI_EUR_USD_RATE;\r\n  }\r\n\r\n  get aiEditCostSubsequentEur(): number {\r\n    return this.computeAiEditCostUsd(this.aiEditPricing.cacheRead) / this.AI_EUR_USD_RATE;\r\n  }\r\n\r\n  formatAiEditCost(eur: number): string {\r\n    return eur.toFixed(6);\r\n  }\r\n\r\n  get isNewForm(): boolean {\r\n    return !this.form?.ID;\r\n  }\r\n\r\n  constructor(\r\n    private formBuilder: UntypedFormBuilder,\r\n    private dialog: MatDialog,\r\n    private utilityHelperService: UtilityHelperService,\r\n    private sanitizer: DomSanitizer,\r\n    private cdr: ChangeDetectorRef,\r\n    private elementRef: ElementRef\r\n  ) { }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    if (changes['configuratorTheme'] || changes['configuratorThemeCss']) {\r\n      this.applyTheme();\r\n    }\r\n  }\r\n\r\n  private applyTheme(): void {\r\n    const el = this.elementRef.nativeElement as HTMLElement;\r\n    const root = document.documentElement;\r\n\r\n    // Rimuove vars precedenti dal host e da :root\r\n    Array.from(el.style).filter(p => p.startsWith('--conf-')).forEach(p => el.style.removeProperty(p));\r\n    Array.from(root.style).filter(p => p.startsWith('--conf-')).forEach(p => root.style.removeProperty(p));\r\n\r\n    const parsedFromCss = this.configuratorThemeCss ? this.parseCssTheme(this.configuratorThemeCss) : null;\r\n    const merged: Record<string, string> | null = (parsedFromCss || this.configuratorTheme)\r\n      ? { ...(parsedFromCss ?? {}), ...(this.configuratorTheme ?? {}) }\r\n      : null;\r\n\r\n    if (merged) {\r\n      Object.entries(merged).forEach(([k, v]) => el.style.setProperty(k, v, 'important'));\r\n    }\r\n\r\n    // Propaga i valori effettivi (SCSS default + override tema) su :root perché i dialogs\r\n    // Material renderizzano nel cdk-overlay fuori dall'host e non ereditano le var di :host\r\n    const computed = getComputedStyle(el);\r\n    ['--conf-gradient', '--conf-bg-page', '--conf-radius', '--conf-modal-radius',\r\n      '--conf-accent', '--conf-accent-rgb', '--conf-primary', '--conf-primary-rgb',\r\n      '--conf-step-selected', '--conf-step-edit', '--conf-table-header-bg',\r\n      '--conf-search-bg', '--conf-table-bg', '--conf-card-bg', '--conf-font-family',\r\n      '--conf-stepper-header-bg', '--conf-stepper-content-bg', '--conf-step-icon-edit-bg',\r\n      '--conf-hint-btn-bg', '--conf-hint-btn-hover-bg', '--conf-btn-color'\r\n    ].forEach(varName => {\r\n      const value = computed.getPropertyValue(varName).trim();\r\n      if (value) root.style.setProperty(varName, value);\r\n    });\r\n  }\r\n\r\n  private parseCssTheme(css: string): Record<string, string> {\r\n    const result: Record<string, string> = {};\r\n    const regex = /(--conf-[^:\\s]+)\\s*:\\s*([^;}]+)/g;\r\n    let match: RegExpExecArray | null;\r\n    while ((match = regex.exec(css)) !== null) {\r\n      result[match[1].trim()] = match[2].trim();\r\n    }\r\n    return result;\r\n  }\r\n\r\n  ngAfterViewInit(): void {\r\n    // Garantisce che le variabili CSS di default (definite in :host SCSS) vengano\r\n    // propagate su :root anche quando configuratorTheme non è fornito\r\n    this.applyTheme();\r\n  }\r\n\r\n  ngOnDestroy(): void {\r\n    const root = document.documentElement;\r\n    Array.from(root.style).filter(p => p.startsWith('--conf-')).forEach(p => root.style.removeProperty(p));\r\n  }\r\n\r\n  ngOnInit(): void {\r\n    GlobalService.debugMode = this.debugMode;\r\n    GlobalService.debugLog('ngOnInit - configurations', this.configurations);\r\n    GlobalService.debugLog('ngOnInit - formID', this.formID);\r\n\r\n    this.baseServerUrl =\r\n      this.configurations.dynamicModuleGeneralConfig.baseServerUrl;\r\n    this.context = this.configurations.dynamicModuleGeneralConfig.context;\r\n    this.endPointConfiguration =\r\n      this.configurations.dynamicModuleGeneralConfig.endPointConfiguration;\r\n    // this.formID = this.configurations.dynamicModuleGeneralConfig.formID;\r\n    this.userToken = this.configurations.dynamicModuleGeneralConfig.userToken;\r\n\r\n    this.form =\r\n      this.configurations.dynamicModuleConfiguratorSpecificConfig.form;\r\n    this.orgaID =\r\n      this.configurations.dynamicModuleConfiguratorSpecificConfig.orgaID;\r\n    this.UserID =\r\n      this.configurations.dynamicModuleConfiguratorSpecificConfig.UserID;\r\n    this.innerFormManagment =\r\n      this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormManagment;\r\n    this.innerFormRef =\r\n      this.configurations.dynamicModuleConfiguratorSpecificConfig.innerFormRef;\r\n\r\n    this.form.OrgaID = this.orgaID;\r\n\r\n    this.configureDefaultEndPoints();\r\n    this.getFormByID();\r\n    if (this.context) {\r\n      UtilityHelperService.SetContext(this.context);\r\n    }\r\n    this.loader = true;\r\n  }\r\n\r\n  /**\r\n   * Metodo per configurare gli endpoint da usare di default a partire dall'url base del server\r\n   * a cui si deve connettere e al token da passare per autenticarsi.\r\n   * Se la proprietà baseServerUrl è null e non sono stati configurati i vari endpoint allora\r\n   * non viene eseguita nessuna chiamata http per recuperare/salvare i dati.\r\n   */\r\n  configureDefaultEndPoints() {\r\n    if (!this.endPointConfiguration && this.baseServerUrl) {\r\n      this.endPointConfiguration =\r\n        this.utilityHelperService.ConfigureDefaultEndPoints(\r\n          this.baseServerUrl,\r\n          this.userToken\r\n        );\r\n      if (this.formID) {\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint.Params = [\r\n          {\r\n            ParamName: \"id\",\r\n            ParamValue: this.formID,\r\n            ParamType: ParamTypeEnum[\"Query param\"],\r\n          },\r\n        ];\r\n      }\r\n    }\r\n  }\r\n  stringSanitizer(value) {\r\n    if (!UtilityHelperService.stringCheckParentesis(value)) {\r\n      alert(\"errore! erano presenti delle parentesi.\");\r\n      return false\r\n    } else {\r\n      return true\r\n    }\r\n  }\r\n  setName(Name: string) {\r\n    if (!this.stringSanitizer(Name)) {\r\n      const RegExpParetesis = /[\\(\\)\\[\\]\\{\\}]/g;\r\n      // Rimuovi tutte le parentesi non bilanciate\r\n      this.form.Name = Name.replace(RegExpParetesis, '');\r\n    }\r\n    if (this.form.ID == null) { // this.form.Code == null || this.form.Code == undefined || this.form.Code == \"\" ){\r\n      this.setCode(this.form.Name);\r\n    }\r\n  }\r\n  setCode(Code: string) {\r\n    this.stringSanitizer(Code);\r\n\r\n    const RegExpPlain = /[^\\w]/g;\r\n    this.form.Code = Code.toUpperCase().replace(RegExpPlain, \"\");\r\n  }\r\n  omit_special_char(event) {\r\n    var k;\r\n    k = event.keyCode; //         k = event.keyCode;  (Both can be used)\r\n    if (k == 34) {\r\n      event.keyCode = 0;\r\n      return false;\r\n    }\r\n  }\r\n\r\n  /* IMPORT FUNCTION */\r\n  onImport(event) {\r\n    const selectedFile = event.target.files[0];\r\n    const fileReader = new FileReader();\r\n    fileReader.readAsText(selectedFile, \"UTF-8\");\r\n    fileReader.onload = () => {\r\n      GlobalService.debugLog('onImport - fileReader.result.toString()', fileReader.result.toString());\r\n      this.importedModule = fileReader.result.toString();\r\n\r\n      if (this.importedModule != null) {\r\n        if (confirm(\"stai per sovrascrivere il modulo\")) {\r\n          // chiamo il parse così da non creare un referenceBinding\r\n          var importedForm: Form = JSON.parse(this.importedModule);\r\n          importedForm.ID = \"\";\r\n          importedForm.Name = importedForm.Name + \" (Importato)\";\r\n\r\n          importedForm = this.setImportedForm(importedForm);\r\n          this.setFormAndConfigure(importedForm);\r\n          this.setName(importedForm.Name);\r\n\r\n          this.closeImport();\r\n        }\r\n      } else {\r\n        alert(\"seleziona un file\");\r\n      }\r\n    };\r\n    fileReader.onerror = (error) => {\r\n      alert(\"seleziona un file valido o controlla che non sia corrotto\");\r\n      console.error(error);\r\n    };\r\n  }\r\n\r\n  setImportedForm(form: Form) {\r\n\r\n    // Modifica del creation user su Import\r\n    form.CreationUser = this.UserID;\r\n\r\n    // Modifica dei Field su Import\r\n    form.Fields.forEach((field) => {\r\n      if (field.FieldType == FieldTypeEnum[\"Elenco immagini\"]) {\r\n        (field as ImageSelectorField).AttachmentList.forEach((attachment) => {\r\n          attachment.ID = 0;\r\n        })\r\n      }\r\n    });\r\n    return form;\r\n  }\r\n\r\n  importModule() {\r\n    this.dialogImportRef = this.dialog.open(this.dialogImport, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      // width: \"75%\",\r\n      // maxHeight: \"80%\",\r\n      // height: \"80%\",\r\n    });\r\n  }\r\n\r\n  closeImport() {\r\n    this.dialogImportRef.close();\r\n  }\r\n  /* END IMPORT FUNCTION */\r\n\r\n\r\n  /**\r\n   * Funzione di esportazione modulo\r\n   */\r\n\r\n  export() {\r\n\r\n    const dynamicModuleParams: Array<EndPointDataParams> =\r\n      new Array<EndPointDataParams>();\r\n    dynamicModuleParams.push({\r\n      ParamName: \"id\",\r\n      ParamValue: this.formID,\r\n      ParamType: ParamTypeEnum[\"Query param\"],\r\n    });\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.ExportByIDEndPoint,\r\n      dynamicModuleParams,\r\n      (base64res: string) => {\r\n\r\n        const newBlob = new Blob([base64res], { type: \"text/plain\" });\r\n        const data = window.URL.createObjectURL(newBlob);\r\n        const link = document.createElement(\"a\");\r\n        link.href = data;\r\n        link.download = \"export_\" + this.formID + \"_form.txt\"; // set a name for the file\r\n        link.click();\r\n\r\n      },\r\n      (err) => {\r\n        this.setFormAndConfigure(new Form());\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n  /**\r\n   * Metodo per recuperare tutti i record salvati per una particolare Form.\r\n   * La chiamata viene effettuata solo se è stato configurato l'endPoint da usare.\r\n   */\r\n  getFormByID() {\r\n    if (\r\n      this.formID &&\r\n      this.endPointConfiguration &&\r\n      this.endPointConfiguration.Forms &&\r\n      this.endPointConfiguration.Forms.GetByIDEndPoint\r\n    ) {\r\n      const dynamicModuleParams: Array<EndPointDataParams> =\r\n        new Array<EndPointDataParams>();\r\n      dynamicModuleParams.push({\r\n        ParamName: \"id\",\r\n        ParamValue: this.formID,\r\n        ParamType: ParamTypeEnum[\"Query param\"],\r\n      });\r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.GetByIDEndPoint,\r\n        dynamicModuleParams,\r\n        (res: Form) => {\r\n          this.setFormAndConfigure(res);\r\n        },\r\n        (err) => {\r\n          this.setFormAndConfigure(new Form());\r\n        }\r\n      );\r\n    } else {\r\n      this.setFormAndConfigure();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Configuro l'export del form\r\n   */\r\n\r\n  configureExport(res: Form) {\r\n\r\n    /* getting ready for export */\r\n    let clone = new Form();\r\n    clone.Code = \"IMPORT_\" + res.Code;\r\n    clone.Name = \"import_\" + res.Name;\r\n    clone.Description = res.Description;\r\n    clone.FormScalarType = res.FormScalarType;\r\n    clone.FormFieldsGroups = res.FormFieldsGroups;\r\n    clone.ActionsOnRecord = res.ActionsOnRecord;\r\n    clone.Fields = res.Fields;\r\n    clone.ObjectFields = res.ObjectFields;\r\n    clone.InnerForms = res.InnerForms;\r\n    clone.RootEntityID = res.RootEntityID;\r\n    clone.OrgaID = res.OrgaID;\r\n\r\n    this.downloadName = \"export_\" + res.Name;\r\n    this.stringifiedForm = JSON.stringify(clone);\r\n    this.downloadJsonHref = this.sanitizer.bypassSecurityTrustUrl(\r\n      \"data:text/json;charset=UTF-8,\" +\r\n      encodeURIComponent(this.stringifiedForm)\r\n    );\r\n\r\n    /* end export */\r\n\r\n  }\r\n\r\n  /**\r\n   * Metodo invocato al cambio del tipo di visualizzazione della form.\r\n   * Se l'utente sceglie una visualizzazione raggruppata il metodo aggiunge al FormGroup un nuovo\r\n   * controllo per l'array dei nomi delle sezioni da creare.\r\n   */\r\n  onChangeFormScalarType() {\r\n    if (this.form.FormScalarType != FormScalarTypeEnum.Semplice) {\r\n      if (!this.formFormGroup.contains(\"FormFieldsGroups\")) {\r\n        this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n        this.formFormGroup.addControl(\r\n          \"FormFieldsGroups\",\r\n          new UntypedFormControl(this.form.FormFieldsGroups, [\r\n            Validators.required,\r\n            ArrayValidators.minLenght(1),\r\n          ])\r\n        );\r\n      }\r\n    } else {\r\n      this.form.FormFieldsGroups = null;\r\n      if (this.formFormGroup.contains(\"FormFieldsGroups\"))\r\n        this.formFormGroup.removeControl(\"FormFieldsGroups\");\r\n    }\r\n    this.formFormGroup.updateValueAndValidity();\r\n    this.configureColumns();\r\n  }\r\n\r\n  /**\r\n   * Evento invocato al keyup nell'input per inserire i nomi delle sezioni per la visualizzazione\r\n   * raggruppata della form. Quanto l'utente preme il tasto invio viene aggiunto il nuovo nome alle\r\n   * sezioni dispobili se non ne esiste una con lo stesso nome.\r\n   * @param event Evento che rappresenta il keyup sulla tastiera.\r\n   */\r\n  onFormFieldGroupNameKeyUp(event) {\r\n    if (event.code === \"Enter\" || event.code === \"NumpadEnter\") {\r\n      if (!this.form.FormFieldsGroups) {\r\n        this.form.FormFieldsGroups = new Array<FormFieldGroup>();\r\n      }\r\n      if (\r\n        !this.form.FormFieldsGroups.find(\r\n          (n) => n.Name == this.formFieldGroupName\r\n        )\r\n      ) {\r\n        this.form.FormFieldsGroups.push({ Name: this.formFieldGroupName });\r\n      }\r\n      // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n      this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n        this.form.FormFieldsGroups\r\n      );\r\n      this.formFieldGroupName = null;\r\n      this.setFormFieldGroupOrdinalPosition();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per rimuovere la sezione selezionata da quelle disponibili per la form.\r\n   * @param groupName Nome della sezione da eliminare.\r\n   */\r\n  onDeleteFormFieldGroupName(groupName: string) {\r\n    this.form.FormFieldsGroups.splice(\r\n      this.form.FormFieldsGroups.findIndex((g) => g.Name === groupName),\r\n      1\r\n    );\r\n    // Imposto il nuovo valore del FormControl per aggiornare lo stato della form.\r\n    this.formFormGroup.controls[\"FormFieldsGroups\"].setValue(\r\n      this.form.FormFieldsGroups\r\n    );\r\n    // Se esistono Field legati alla sezione che si vuole eliminare allora rompo il legame.\r\n    if (this.form.Fields.find((f) => f.FieldGroup == groupName)) {\r\n      this.form.Fields.filter((f) => f.FieldGroup == groupName).forEach(\r\n        (f) => (f.FieldGroup = null)\r\n      );\r\n    }\r\n    this.setFormFieldGroupOrdinalPosition();\r\n  }\r\n\r\n\r\n  onEditFormFieldGroupName(formFieldGroup: FormFieldGroup) {\r\n\r\n    EqpDynamicModuleDialogService.Prompt(\r\n      \"Modifica il nome\",\r\n      (name) => {\r\n        formFieldGroup.Name = name;\r\n      }\r\n    );\r\n\r\n  }\r\n\r\n  /** Clona un oggetto escludendo riferimenti circolari e FormFormGroup */\r\n  private safeClone<T>(obj: T): T {\r\n    const seen = new WeakSet();\r\n    return JSON.parse(JSON.stringify(obj, (key, value) => {\r\n      if (key === 'FormFormGroup') return undefined;\r\n      if (typeof value === 'object' && value !== null) {\r\n        if (seen.has(value)) return undefined;\r\n        seen.add(value);\r\n      }\r\n      return value;\r\n    }));\r\n  }\r\n\r\n  /**\r\n   * Metodo chiamato quando si vuole aggiungere un nuovo campo o si vuole modificare uno esistente.\r\n   * Memorizza l'eventuale Field scelto one crea uno nuovo prima di aprire il dialog per modificarlo/aggiungerlo.\r\n   * @param field Oggetto BaseField da modificare. Se null ne viene creata una nuova istanza per l'aggiunta.\r\n   */\r\n  openFieldDialog(field: BaseField = null) {\r\n\r\n    GlobalService.debugLog(\"openFieldDialog\", field);\r\n\r\n    if (field) {\r\n      this.indexSelectedField = this.form.Fields.indexOf(field);\r\n      this.selectedField = this.safeClone(field);\r\n\r\n      // Dato che con il JSON.parse si perde per strada la formula, la rimetto dopo.\r\n      // Tanto oramai il riferimento con \"field\" è stato perso e stiamo passando una stringa\r\n      this.selectedField.Formula = field.Formula;\r\n\r\n      if (this.selectedField.AnswerStyle == null) {\r\n        this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: \"\", LabelstyleCSS: \"\", ColSpanSizes: [], Invisibility: FieldInvisibilityEnum.NASCOSTO };\r\n      }\r\n    } else {\r\n      this.selectedField = new BaseField();\r\n      this.indexSelectedField = null;\r\n\r\n    }\r\n\r\n    this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n      height: \"80%\",\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Metodo che salva il campo appena creato o modificato.\r\n   * Prima del salvataggio controlla se esiste un altro campo con la stessa label, in questo\r\n   * case genere un errore (i campi devono avere nomi, e quindi label, univoche - i nomi vengono\r\n   * ricavati unendo le parole che formano la label tramite \"_\").\r\n   * @param field Campo da salvare\r\n   * @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]\r\n   */\r\n  onSaveField(ev: { field: BaseField, reopen: number }) {\r\n    let field = ev.field;\r\n    let reopen = ev.reopen;\r\n\r\n    // se c'è il campo\r\n    if (field) {\r\n      // controllo che non ci sia un altro campo con lo stesso code (label) e non sia esso stesso\r\n      if (\r\n        this.form.Fields &&\r\n        this.form.Fields.find(\r\n          (f, i) =>\r\n            f.Label === field.Label &&\r\n            (this.indexSelectedField == null\r\n              ? true\r\n              : this.indexSelectedField !== i)\r\n        )\r\n      ) {\r\n        EqpDynamicModuleDialogService.Warning(\r\n          \"Impossibile inserire due campi con lo stesso Codice.\"\r\n        );\r\n        throw new Error(\"Impossibile inserire due campi con lo stesso Codice.\");\r\n      }\r\n\r\n      // se ho un indice in cui inserire il campo (verosimilmente sono in modifica)\r\n      if (this.indexSelectedField != null && this.indexSelectedField >= 0) {\r\n        this.form.Fields[this.indexSelectedField] = field;\r\n      } else {\r\n        // è un campo nuovo\r\n        if (!this.form.Fields) {\r\n          // se è il primo campo che sto inserendo preparo un array\r\n          this.form.Fields = new Array<BaseField>();\r\n        }\r\n        this.form.Fields.push(field);\r\n      }\r\n    }\r\n\r\n    GlobalService.debugLog(\"onSaveField\", this.form)\r\n    this.closeFieldDialog();\r\n    this.setFieldOrdinalPosition();\r\n    this.reloadFieldsTable();\r\n    this.refreshFieldTypeOptions();\r\n\r\n    if (reopen != 0) {\r\n      let newField = this.form.Fields[this.indexSelectedField + reopen];\r\n      this.openFieldDialog(newField)\r\n    }\r\n\r\n    if (this.visualEditorActive) {\r\n      this.refreshPreview();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo che controlla se lo step per l'aggiunta dei campi nella form è concluso.\r\n   * @returns Se TRUE lo step viene considerato completato ed è possbile passare al successivo.\r\n   */\r\n  isFieldStepCompleted(): boolean {\r\n    if (!this.form.Fields) {\r\n      return false;\r\n    }\r\n    if (\r\n      this.form.FormScalarType != FormScalarTypeEnum.Semplice &&\r\n      this.form.Fields.find((f) => !f.FieldGroup)\r\n    ) {\r\n      return false;\r\n    }\r\n    return this.form.Fields.length > 0;\r\n  }\r\n\r\n  /**\r\n   * Metodo per aprire il dialog di creazione/modifica delle form di dettaglio.\r\n   * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n   * @param innenrForm Form di dettaglio da modificare (se null allora vado in add).\r\n   */\r\n  openInnerFormDialog(innenrForm: Form = null) {\r\n    this.innerFormConfig = new DynamicModuleConfiguratorConfig();\r\n    this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormManagment =\r\n      true;\r\n    // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form\r\n    // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName\r\n    // this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef\r\n    // [form]=\"selectedInnerForm\"\r\n    // [innerFormManagment]=\"true\"\r\n    // [innerFormRef]=\"dialogInnerFormRef\"\r\n\r\n    if (innenrForm) {\r\n      this.indexSelectedInnerForm = this.form.InnerForms.indexOf(innenrForm);\r\n\r\n      // this.selectedInnerForm = JSON.parse(JSON.stringify(innenrForm));\r\n      // this.selectedInnerForm.OldName = innenrForm.Name;\r\n      this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n        JSON.parse(JSON.stringify(innenrForm));\r\n      this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form.OldName =\r\n        innenrForm.Name;\r\n\r\n      this.indexSelectedField = this.form.Fields.findIndex(\r\n        (f) => f.Label === innenrForm.Name\r\n      );\r\n    } else {\r\n      // this.selectedInnerForm = new Form();\r\n      this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.form =\r\n        new Form();\r\n      this.indexSelectedInnerForm = null;\r\n      this.indexSelectedField = null;\r\n    }\r\n    // this.dialogInnerFormRef = this.dialog.open(this.dialogInnerForm, {\r\n\r\n    this.innerFormConfig.dynamicModuleConfiguratorSpecificConfig.innerFormRef =\r\n      this.dialog.open(this.dialogInnerForm, {\r\n        disableClose: true,\r\n        hasBackdrop: true,\r\n        width: \"85%\",\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Metodo scatenato al salvataggio di una form di dettaglio.\r\n   * @param event Form creata/modificata dall'utente. Se è null allora l'utente ha abbandonato la configurazione.\r\n   */\r\n  onSaveOrExitInnerForm(event: Form) {\r\n    if (event != null) {\r\n      if (\r\n        this.form.Name === event.Name ||\r\n        (this.form.InnerForms &&\r\n          this.form.InnerForms.find(\r\n            (a, i) =>\r\n              a.Name === event.Name &&\r\n              (this.indexSelectedInnerForm == null\r\n                ? true\r\n                : this.indexSelectedInnerForm !== i)\r\n          )) ||\r\n        (this.form.Fields &&\r\n          this.indexSelectedInnerForm == null &&\r\n          this.form.Fields.find(\r\n            (f, i) =>\r\n              f.Label === event.Name &&\r\n              (this.indexSelectedField == null\r\n                ? true\r\n                : this.indexSelectedField !== i)\r\n          ))\r\n      ) {\r\n        EqpDynamicModuleDialogService.Warning(\r\n          \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n        );\r\n        throw new Error(\r\n          \"Impossibile inserire due form di dettaglio con lo stesso nome.\"\r\n        );\r\n      }\r\n\r\n      const innerFormField: BaseField = new BaseField();\r\n      innerFormField.Name = event.Name.split(\" \").join(\"_\");\r\n      innerFormField.Label = event.Name;\r\n      innerFormField.FieldType = FieldTypeEnum[\"Form di dettaglio\"];\r\n      innerFormField.FieldGroup =\r\n        this.indexSelectedField != null\r\n          ? this.form.Fields[this.indexSelectedField].FieldGroup\r\n          : null;\r\n\r\n      if (\r\n        this.indexSelectedInnerForm != null &&\r\n        this.indexSelectedInnerForm >= 0\r\n      ) {\r\n        this.form.InnerForms[this.indexSelectedInnerForm] = event;\r\n        this.form.Fields[this.indexSelectedField] = innerFormField;\r\n      } else {\r\n        if (!this.form.InnerForms) {\r\n          this.form.InnerForms = new Array<Form>();\r\n        }\r\n        this.form.InnerForms.push(event);\r\n        this.form.Fields.push(innerFormField);\r\n      }\r\n      this.reloadFieldsTable();\r\n    }\r\n    this.dialogInnerFormRef.close();\r\n  }\r\n\r\n  /**\r\n   * Metodo per aprire il dialog di creazione/modifica delle action.\r\n   * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n   * @param action ActionOnRecord da modificare (se null allora vado in add).\r\n   */\r\n  openActionOnRecordDialog(action: ActionOnRecord = null) {\r\n    if (action) {\r\n      this.indexSelectedAction = this.form.ActionsOnRecord.indexOf(action);\r\n      this.selectedAction = JSON.parse(JSON.stringify(action));\r\n    } else {\r\n      this.selectedAction = new ActionOnRecord();\r\n      this.indexSelectedAction = null;\r\n    }\r\n    this.createActionOnRecordForm();\r\n    this.dialogActionOnRecordRef = this.dialog.open(this.dialogActionOnRecord, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Metodo per aprire il dialog di creazione/modifica dei bottoni azione.\r\n   * Se il parametro passato è null sono in aggiunta altrimenti sono in modifica.\r\n   * @param action ActionButton da modificare (se null allora vado in add).\r\n   */\r\n  openActionButtonDialog(ev: ActionButton = null) {\r\n\r\n    if (ev != null) {\r\n      this.selectedActionButton = ev;\r\n    } else {\r\n      this.selectedActionButton = null;\r\n    }\r\n\r\n    this.dialogActionButtonRef = this.dialog.open(this.dialogActionButton, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Metodo per impostare i valori da suggerire nell'autocomplete del campo Formula.\r\n   * Viene scatenato al focus (in questo caso viene passato il parametro a null per differenziarlo\r\n   * dall'evento di click sulla tastiera) e al keyup sull'input (il parametro è diverso da null).\r\n   * @param keyboardEvent Evento scatenato al keyup sulla tastiera. Se null allora il metodo è stato invocato dal focus sull'input.\r\n   * @summary Aggiorna l'elenco dei suggerimenti per l'autocomplete se l'utente esegue il focus sull'input\r\n   * oppure al keyup sulla tastiera di un tasto diverso dalle frecce.\r\n   */\r\n  setActionAutocompleteOptions(keyboardEvent: KeyboardEvent) {\r\n    // Creo l'array per l'autocomplete solo se sto facendo il focus sull'input o se sto premendo un tasto\r\n    // sulla tastiera diverso dalle frecce (in quest'ultimo caso, se non viene eseguito il filtro sull'evento,\r\n    // non si può selezionare un suggerimento dell'autocomplete perchè al click verrebbe ricaricato l'array e\r\n    // si prederebbe la selezione appena fatta).\r\n    if (!keyboardEvent || !keyboardEvent.code.includes(\"Arrow\")) {\r\n      this.actionAutocompleteOptions =\r\n        UtilityHelperService.GetAutocompleteOptions(\r\n          this.form.Fields,\r\n          this.selectedAction.Action\r\n        );\r\n    }\r\n  }\r\n  /**\r\n   * Metodo per salvare l'azione creata/modificate.\r\n   */\r\n  saveActionOnRecord() {\r\n    if (\r\n      this.form.ActionsOnRecord &&\r\n      this.form.ActionsOnRecord.find(\r\n        (a, i) =>\r\n          a.Name === this.selectedAction.Name &&\r\n          (this.indexSelectedAction == null\r\n            ? true\r\n            : this.indexSelectedAction !== i)\r\n      )\r\n    ) {\r\n      EqpDynamicModuleDialogService.Warning(\r\n        \"Impossibile inserire due action con lo stesso nome.\"\r\n      );\r\n      throw new Error(\"Impossibile inserire due action con lo stesso nome.\");\r\n    }\r\n\r\n    if (this.indexSelectedAction != null && this.indexSelectedAction >= 0) {\r\n      this.form.ActionsOnRecord[this.indexSelectedAction] = this.selectedAction;\r\n    } else {\r\n      if (!this.form.ActionsOnRecord) {\r\n        this.form.ActionsOnRecord = new Array<ActionOnRecord>();\r\n      }\r\n      this.form.ActionsOnRecord.push(this.selectedAction);\r\n    }\r\n    this.closeDialogActionOnRecord();\r\n    this.setActionOrdinalPosition();\r\n    this.reloadActionsOnRecordTable();\r\n  }\r\n\r\n  /**\r\n   * Metodo per salvare l'azione creata/modificate.\r\n   */\r\n  saveActionButtons(element: ActionButton) {\r\n\r\n    if (element != null) {\r\n      if (this.form.ActionButtons != null) {\r\n        var existsActionButtonsIndex = this.form.ActionButtons.findIndex(x => x.ButtonUniqueId == element.ButtonUniqueId);\r\n        if (existsActionButtonsIndex == -1) {\r\n          // Nuovo trigger\r\n          this.form.ActionButtons.push(element);\r\n        } else {\r\n          this.form.ActionButtons[existsActionButtonsIndex] = element;\r\n        }\r\n      } else {\r\n        this.form.ActionButtons = new Array<ActionButton>();\r\n        this.form.ActionButtons.push(element);\r\n      }\r\n      this.actionButtonsTable.reloadDatatable();\r\n    }\r\n\r\n    this.dialogActionButtonRef.close();\r\n  }\r\n\r\n  /**\r\n   * Metodo per chiudere il dialog della inner form.\r\n   */\r\n  closeDialogInnerForm() {\r\n    this.innerFormRef.close();\r\n  }\r\n\r\n  /**\r\n   * Metodo per chiudere il dialog di gestione delle action.\r\n   */\r\n  closeDialogActionOnRecord() {\r\n    this.dialogActionOnRecordRef.close();\r\n  }\r\n\r\n  /**\r\n   * Metodo per chiudere il dialog di gestione delle action buttons.\r\n   */\r\n  closeDialogActionButtons() {\r\n    this.dialogActionButtonRef.close();\r\n  }\r\n\r\n  /**\r\n   * Metodo per segnare come conclusa la creazione della form e per crearne una copia\r\n   * da visalizzare come anteprima.\r\n   * @param completed Se TRUE segna la form come conclusa e ne crea una copia da visualizzare\r\n   */\r\n  setFormStatus(completed: boolean) {\r\n    if (completed) {\r\n      this.formCompleted = true;\r\n      this.previewForm = this.safeClone(this.form);\r\n      GlobalService.debugLog(\"previewForm\", this.previewForm)\r\n\r\n      // Per visualizzare correttamente l'oanteprima della form appena creata\r\n      // bisogna valorizzare la proprietà Name dei campi della form e delle InnerForms.\r\n      this.previewForm.Fields.forEach((field) => {\r\n        field.Name = field.Label.split(\" \").join(\"_\");\r\n      });\r\n      if (\r\n        this.previewForm.InnerForms &&\r\n        this.previewForm.InnerForms.length > 0\r\n      ) {\r\n        this.previewForm.InnerForms.forEach((form) => {\r\n          form.Fields.forEach((field) => {\r\n            field.Name = field.Label.split(\" \").join(\"_\");\r\n          });\r\n        });\r\n      }\r\n    } else {\r\n      this.formCompleted = false;\r\n      this.previewForm = null;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per salvare la form creata alla fine del wizard.\r\n   * Se è stato configurato un endPoint per il salvataggio viene effettuata una chiamata al server passando l'oggeto da salvare\r\n   * nel body della chiamata, altrimenti scatena l'evento \"saveFormEvent\".\r\n   */\r\n  saveForm() {\r\n\r\n    if (\r\n      this.endPointConfiguration != null &&\r\n      this.endPointConfiguration.Forms.SaveEndPoint\r\n    ) {\r\n\r\n      if (!this.saved) {\r\n        this.backupForm = this.safeClone(this.form);\r\n      } else {\r\n        this.form = this.safeClone(this.backupForm);\r\n      }\r\n\r\n\r\n      // Per far arrivare al server l'array di Field bisogna passarli su Any\r\n      this.form.ObjectFields = [];\r\n      this.form.ObjectFldExtraConfigValues = [];\r\n\r\n      if (this.form.FldExtraConfigValues != null) {\r\n        this.form.ObjectFldExtraConfigValues = JSON.parse(JSON.stringify(this.form.FldExtraConfigValues));\r\n      }\r\n\r\n      this.form.Fields.forEach((field) => {\r\n\r\n        // Rimuovo il FormGroup di preview (proprietà client-only, crea riferimento circolare in JSON.stringify)\r\n        field.FormFormGroup = null;\r\n\r\n        // Trasformo il datagetter in Base64\r\n        field.DataGetterValueBase64String = btoa(JSON.stringify(field.DataGetter));\r\n        field.DataGetter = null;\r\n\r\n        if (field.FieldType == FieldTypeEnum.Allegato) {\r\n          const fldA: any = field;\r\n          fldA.MetadataObjectFields = fldA.MetadataFields;\r\n          fldA.MetadataFields = [];\r\n          this.form.ObjectFields.push(fldA);\r\n        } else {\r\n          if (field.FieldType == FieldTypeEnum[\"Campo numerico\"]) {\r\n            if (\r\n              (<NumericField>field).MaxValue == undefined ||\r\n              (<NumericField>field).MaxValue == null\r\n            ) {\r\n              (<NumericField>field).MaxValue = Number.MAX_SAFE_INTEGER;\r\n            }\r\n            if (\r\n              (<NumericField>field).MinValue == undefined ||\r\n              (<NumericField>field).MinValue == null\r\n            ) {\r\n              (<NumericField>field).MinValue = 0;\r\n            }\r\n          }\r\n          this.form.ObjectFields.push(field);\r\n        }\r\n      });\r\n      this.form.Fields = null;\r\n      this.form.OrgaID = this.orgaID;\r\n      if (this.form.CreationDate == null) {\r\n        this.form.CreationDate = new Date();\r\n        this.form.CreationUser = this.UserID;\r\n      }\r\n      this.form.ModifyUser = this.UserID;\r\n\r\n      this.form.ObjectTriggers = JSON.stringify(this.form.Triggers);\r\n      this.form.Triggers = null;\r\n\r\n      this.form.ObjectActionButtons = JSON.stringify(this.form.ActionButtons);\r\n      this.form.ActionButtons = null;\r\n\r\n      if (this.form.Code == null) {\r\n        this.setCode(this.form.Name);\r\n      }\r\n\r\n\r\n      // chiamata effettiva\r\n      const dynamicModuleParams = [\r\n        {\r\n          ParamName: \"Form\",\r\n          ParamValue: this.form,\r\n          ParamType: ParamTypeEnum[\"In Body\"],\r\n        },\r\n      ];\r\n\r\n      this.saved = true;\r\n\r\n\r\n\r\n      this.utilityHelperService.RunEndPointCall(\r\n        this.endPointConfiguration.Forms.SaveEndPoint,\r\n        dynamicModuleParams,\r\n        (res) => {\r\n          EqpDynamicModuleDialogService.Success(\"Form salvata con successo!\");\r\n          this.afterSaveFormEvent.emit(this.form);\r\n        },\r\n        (error) => {\r\n          EqpDynamicModuleDialogService.Error(\"Errore nel salvataggio della form\");\r\n          console.error(\"Errore nel salvataggio della form\", error);\r\n        }\r\n      );\r\n    } else {\r\n      this.saveFormEvent.emit(this.form);\r\n    }\r\n  }\r\n\r\n  //#region FUNZIONI PRIVATE\r\n\r\n  /**\r\n   * Metodo per impostare la form e configurare colonne/FormGourp.\r\n   * @param form Form da utilizzare.\r\n   */\r\n  private setFormAndConfigure(form: Form = null) {\r\n\r\n    if (form != null) {\r\n      this.form = form;\r\n      this.form.OrgaID = this.orgaID;\r\n      if (this.form.ObjectTriggers != null && this.form.ObjectTriggers != \"\") {\r\n        this.form.Triggers = JSON.parse(this.form.ObjectTriggers);\r\n      } else {\r\n        this.form.Triggers = new Array<Trigger>();\r\n      }\r\n\r\n      if (this.form.ObjectActionButtons != null && this.form.ObjectActionButtons != \"\") {\r\n        this.form.ActionButtons = JSON.parse(this.form.ObjectActionButtons);\r\n      } else {\r\n        this.form.ActionButtons = new Array<ActionButton>();\r\n      }\r\n\r\n      if (typeof this.form.Fields != \"undefined\") {\r\n        this.form.Fields.forEach((field) => {\r\n\r\n          // Trasformo il Base64String del Datagetter nel Datagetter vero e proprio\r\n          if (field.DataGetterValueBase64String != null) {\r\n            field.DataGetter = JSON.parse(atob(field.DataGetterValueBase64String));\r\n            if (field.DataGetter == null) { field.DataGetter = new DataGetter(); }\r\n            field.DataGetter.DataGetterType = field.DataGetter.DataGetterType == null ? DataGetterTypeEnum.Manuale : field.DataGetter.DataGetterType;\r\n          } else {\r\n            field.DataGetter = new DataGetter();\r\n          }\r\n\r\n          field.DataGetterValueBase64String = null;\r\n\r\n        });\r\n\r\n        // Campi con DataGetterSpeechText: caricare il QueryEditor in silent per popolare il DataGetterValue via AI\r\n        this.pendingAiDataGetterFields = this.form.Fields.filter(f =>\r\n          f.DataGetter.DataGetterType === DataGetterTypeEnum['Da database'] &&\r\n          !!f.DataGetter.DataGetterSpeechText &&\r\n          !f.DataGetter.DataGetterValue\r\n        );\r\n        if (this.pendingAiDataGetterFields.length > 0 && this.QueryEditorComponent != null) {\r\n          this.processNextAiDataGetterField();\r\n        }\r\n      }\r\n    }\r\n    this.configureColumns();\r\n    this.createFormForm();\r\n    injectGoogleFontsFromForm(this.form);\r\n    this.refreshFieldTypeOptions();\r\n  }\r\n\r\n  toggleFormGraphicSuggestInput(): void {\r\n    this.showFormGraphicSuggestInput = !this.showFormGraphicSuggestInput;\r\n    if (!this.showFormGraphicSuggestInput) this.formGraphicScope = 'all';\r\n  }\r\n\r\n  private refreshFieldTypeOptions(): void {\r\n    const seenTypes = new Set<number>();\r\n    const options: { value: string; label: string }[] = [];\r\n    for (const f of (this.form?.Fields ?? [])) {\r\n      if (seenTypes.has(f.FieldType)) continue;\r\n      seenTypes.add(f.FieldType);\r\n      const label = (EqpDynamicModuleConfiguratorComponent.FIELD_TYPE_LABELS as any)[f.FieldType] ?? `Tipo ${f.FieldType}`;\r\n      options.push({ value: `type_${f.FieldType}`, label });\r\n    }\r\n    this.presentFieldTypeOptions = options;\r\n  }\r\n\r\n  /**\r\n   * Configura le colonne per le tabelle necessarie alla creazione della form:\r\n   *  - per la visualizzazione dei campi inseriti\r\n   *  - per le form di dettaglio create\r\n   *  - per le azioni configurate sui record della form\r\n   */\r\n\r\n\r\n\r\n\r\n  private configureColumns() {\r\n    this.fieldsColumns = [\r\n      {\r\n        key: \"action\",\r\n        display: \"\",\r\n        type: TypeColumn.MenuAction,\r\n        buttonMenuIcon: \"dots-vertical\",\r\n        styles: { flex: \"0 0 4rem\" },\r\n        actions: [\r\n          {\r\n            name: \"Modifica\",\r\n            icon: \"edit\",\r\n            fn: (element, index, col) => this.editField(element),\r\n          },\r\n          {\r\n            name: \"Duplica sotto\",\r\n            icon: \"copy\",\r\n            fn: (element, index, col) => this.duplicateField(element, element.OrdinalPosition + 1),\r\n          },\r\n          {\r\n            name: \"Duplica in fondo\",\r\n            icon: \"copy\",\r\n            fn: (element, index, col) => this.duplicateField(element),\r\n          },\r\n          {\r\n            name: \"Elimina\",\r\n            icon: \"trash\",\r\n            fn: (element, index, col) => this.deleteElement(element, \"Fields\"),\r\n          },\r\n          // {\r\n          //   name: \"Sposta su\",\r\n          //   icon: \"arrow_upward\",\r\n          //   fn: (element, index, col) =>\r\n          //     this.moveElement(element, true, \"Fields\"),\r\n          //   disabled: (element) => this.form.Fields.indexOf(element) === 0,\r\n          // },\r\n          // {\r\n          //   name: \"Sposta giù\",\r\n          //   icon: \"arrow_downward\",\r\n          //   fn: (element, index, col) =>\r\n          //     this.moveElement(element, false, \"Fields\"),\r\n          //   disabled: (element) =>\r\n          //     this.form.Fields.indexOf(element) >= this.form.Fields.length - 1,\r\n          // },\r\n        ],\r\n      },\r\n      {\r\n        key: \"FieldType\",\r\n        display: \"Tipologia\",\r\n        type: TypeColumn.Enum,\r\n        enumModel: FieldTypeEnum,\r\n        styles: { flex: \"0 0 12rem\" },\r\n      },\r\n      { key: \"Label\", display: \"Label\", styles: { flex: \"0 0 8rem\" } },\r\n      {\r\n        key: \"Description\",\r\n        display: \"Descrizione\",\r\n        styles: { flex: \"0 0 12rem\" },\r\n      },\r\n      {\r\n        key: \"DataGetter.DataGetterType\",\r\n        display: \"Tipo Recupero Dati\",\r\n        type: TypeColumn.Enum,\r\n        enumModel: DataGetterTypeEnum,\r\n        styles: { flex: \"0 0 12rem\" },\r\n      },\r\n      {\r\n        key: \"Required\",\r\n        display: \"Obbligatorio\",\r\n        value: (element) => element.Required,\r\n        type: TypeColumn.Boolean,\r\n        booleanValues: {\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n          false: '<i class=\"fa fa-close error-color\"></i>',\r\n        },\r\n        styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n      },\r\n      {\r\n        key: \"Formula\",\r\n        display: \"Calcolato\",\r\n        value: (element) => element.Formula != null && element.Formula != '',\r\n        type: TypeColumn.Boolean,\r\n        booleanValues: {\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n          false: '<i class=\"fa fa-close error-color\"></i>',\r\n        },\r\n        styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n      },\r\n      {\r\n        key: \"InListView\",\r\n        display: \"Visibile in Compilazione\",\r\n        value: (element) => element.InListView,\r\n        type: TypeColumn.Boolean,\r\n        booleanValues: {\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n          false: '<i class=\"fa fa-close error-color\"></i>',\r\n        },\r\n        styles: { flex: \"0 0 7rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n      },\r\n      {\r\n        key: \"Invisibility\",\r\n        display: \"Occupa spazio?\",\r\n        value: (element) => element.InListView || element.Invisibility == FieldInvisibilityEnum[\"NASCOSTO CON AREA VISIBILE\"],\r\n        type: TypeColumn.Boolean,\r\n        booleanValues: {\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n          false: '<i class=\"fa fa-close error-color\"></i>',\r\n        },\r\n        styles: { flex: \"0 0 7rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n      },\r\n      {\r\n        key: \"VisibleIf\",\r\n        display: \"Visibilità condizionata\",\r\n        value: (element) => element.VisibleIf != null && element.VisibleIf != \"\",\r\n        type: TypeColumn.Boolean,\r\n        booleanValues: {\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n          false: '<i class=\"fa fa-close error-color\"></i>',\r\n        },\r\n        styles: { flex: \"0 0 7rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n      },\r\n      {\r\n        key: \"AnswerStyle.InListView\",\r\n        display: \"Visibile nella risposta\",\r\n        value: (element) => !element.AnswerStyle || element.AnswerStyle && element.AnswerStyle.InListView,\r\n        type: TypeColumn.Boolean,\r\n        booleanValues: {\r\n          true: '<i class=\"fa fa-check success-color\"></i>',\r\n          false: '<i class=\"fa fa-close error-color\"></i>',\r\n        },\r\n        styles: { flex: \"0 0 5rem\", cellAlignment: CellAlignmentEnum.CENTER },\r\n      },\r\n    ];\r\n\r\n    if (\r\n      this.form.FormScalarType &&\r\n      this.form.FormScalarType != FormScalarTypeEnum.Semplice\r\n    ) {\r\n      this.fieldsColumns.splice(1, 0, {\r\n        key: \"FieldGroup\",\r\n        display: \"Sezione\",\r\n        type: TypeColumn.ExternalTemplate,\r\n        externalTemplate: this.fieldSectionColumnTemplate,\r\n        styles: { flex: \"0 0 14rem\" },\r\n      });\r\n      // this.fieldsColumns.push(\r\n      //   {\r\n      //     key: \"FieldGroup\",\r\n      //     display: \"Sezione\",\r\n      //     type: TypeColumn.ExternalTemplate,\r\n      //     externalTemplate: this.fieldSectionColumnTemplate,\r\n      //     styles: { flex: \"0 0 14rem\" }\r\n      //   }\r\n      // );\r\n    }\r\n\r\n    this.actionButtonsColumns = [\r\n      {\r\n        key: \"action\",\r\n        display: \"\",\r\n        type: TypeColumn.MenuAction,\r\n        buttonMenuIcon: \"dots-vertical\",\r\n        styles: { flex: \"0 0 6%\" },\r\n        actions: [\r\n          {\r\n            name: \"Modifica\",\r\n            icon: \"edit\",\r\n            fn: (element, index, col) => this.openActionButtonDialog(element),\r\n          },\r\n          {\r\n            name: \"Elimina\",\r\n            icon: \"trash\",\r\n            fn: (element, index, col) =>\r\n              this.deleteActionButton(element),\r\n          }\r\n        ],\r\n      },\r\n      { key: \"ButtonLabel\", display: \"Etichetta\", styles: { flex: \"0 0 30%\" } },\r\n      {\r\n        key: \"ButtonCode\",\r\n        display: \"Codice\",\r\n        styles: { flex: \"0 0 20%\" },\r\n      },\r\n      {\r\n        key: \"Icon\",\r\n        display: \"Icona\",\r\n        styles: { flex: \"0 0 10%\" },\r\n      },\r\n      {\r\n        key: \"ShowIn\",\r\n        display: \"Sezioni\",\r\n        value: (el) => {\r\n          var finalText = \"\";\r\n          if (el.ShowIn == null || el.ShowIn.length == 0) {\r\n            return \"Nessuna\";\r\n          }\r\n          el.ShowIn.forEach(element => {\r\n            finalText += ActionFlagEnum[element] + \" / \";\r\n          });\r\n          return finalText;\r\n        },\r\n        styles: { flex: \"0 0 20%\" },\r\n      },\r\n    ];\r\n\r\n    this.actionsOnRecordColumns = [\r\n      {\r\n        key: \"action\",\r\n        display: \"\",\r\n        type: TypeColumn.MenuAction,\r\n        buttonMenuIcon: \"dots-vertical\",\r\n        styles: { flex: \"0 0 6%\" },\r\n        actions: [\r\n          {\r\n            name: \"Modifica\",\r\n            icon: \"edit\",\r\n            fn: (element, index, col) => this.openActionOnRecordDialog(element),\r\n          },\r\n          {\r\n            name: \"Elimina\",\r\n            icon: \"trash\",\r\n            fn: (element, index, col) =>\r\n              this.deleteElement(element, \"ActionsOnRecord\"),\r\n          },\r\n          {\r\n            name: \"Sposta su\",\r\n            icon: \"arrow-up\",\r\n            fn: (element, index, col) =>\r\n              this.moveElement(element, true, \"ActionsOnRecord\"),\r\n            disabled: (element) =>\r\n              this.form.ActionsOnRecord.indexOf(element) === 0,\r\n          },\r\n          {\r\n            name: \"Sposta giù\",\r\n            icon: \"arrow-down\",\r\n            fn: (element, index, col) =>\r\n              this.moveElement(element, false, \"ActionsOnRecord\"),\r\n            disabled: (element) =>\r\n              this.form.ActionsOnRecord.indexOf(element) >=\r\n              this.form.ActionsOnRecord.length - 1,\r\n          },\r\n        ],\r\n      },\r\n      { key: \"Icon\", display: \"Icona\", styles: { flex: \" 0 0 15%\" } },\r\n      { key: \"Name\", display: \"Nome\", styles: { flex: \" 0 0 20%\" } },\r\n      { key: \"Action\", display: \"Azione\" },\r\n    ];\r\n\r\n    this.triggersColumns = [\r\n      {\r\n        key: \"action\",\r\n        display: \"\",\r\n        type: TypeColumn.MenuAction,\r\n        buttonMenuIcon: \"dots-vertical\",\r\n        styles: { flex: \"0 0 6%\" },\r\n        actions: [\r\n          {\r\n            name: \"Modifica\",\r\n            icon: \"edit\",\r\n            fn: (element, index, col) => this.openTriggersDialog(element),\r\n          },\r\n          {\r\n            name: \"Elimina\",\r\n            icon: \"trash\",\r\n            fn: (element, index, col) =>\r\n              this.deleteTrigger(element),\r\n          }\r\n        ],\r\n      },\r\n      { key: \"description\", display: \"Descrizione\", styles: { flex: \" 0 0 15%\" } },\r\n      { key: \"execution\", display: \"Cosa esegue\", styles: { flex: \" 0 0 15%\" } },\r\n    ];\r\n\r\n  }\r\n\r\n  /**\r\n   * Crea il FormGroup per l'oggetto Form\r\n   */\r\n  private createFormForm() {\r\n    this.formFormGroup = this.formBuilder.group({\r\n      Code: [this.form.Code],\r\n      Name: [this.form.Name, Validators.required],\r\n      Description: [this.form.Description],\r\n      FormScalarType: [this.form.FormScalarType, Validators.required],\r\n    });\r\n    this.onChangeFormScalarType();\r\n  }\r\n\r\n  /**\r\n   * Drag and Drop delle colonne del form\r\n   */\r\n\r\n  onDragReleased(event) {\r\n\r\n  }\r\n\r\n  onDragEnded(event) {\r\n    setTimeout(() => {\r\n      this.setFieldOrdinalPosition();\r\n      this.reloadFieldsTable();\r\n    }, 1000);\r\n  }\r\n\r\n  /**\r\n   * Crea il FormGroup epr l'aggiunta o la modifica di una action sui record della Form.\r\n   */\r\n  private createActionOnRecordForm() {\r\n    this.actionOnRecordFormGroup = this.formBuilder.group({\r\n      Name: [this.selectedAction.Name, Validators.required],\r\n      Icon: [this.selectedAction.Icon, Validators.required],\r\n      Action: [this.selectedAction.Action, Validators.required],\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Chiude il dialog per aggiungere/modificare un Field senza salvare\r\n   */\r\n  private closeFieldDialog() {\r\n    if (this.dialogFieldRef != undefined) this.dialogFieldRef.close();\r\n  }\r\n\r\n  /**\r\n   * Metodo per gestire l'apertura del dialog per la modifica di un Field.\r\n   * Se il field è di tipo \"Form di dettaglio\" apre il dialog per la modifica di una\r\n   * InnerForm altrimenti apre quello per la modifica di un Field.\r\n   * @param field Campo da modificare\r\n   */\r\n  private editField(field: BaseField) {\r\n    if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n      this.openFieldDialog(field);\r\n    } else {\r\n      this.openInnerFormDialog(\r\n        this.form.InnerForms.find((f) => f.Name == field.Label)\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per gestire la duplicazione di un Field.\r\n   * @param field Campo da modificare\r\n   */\r\n  private duplicateField(field: BaseField, ordinalPosition = null) {\r\n    if (field.FieldType != FieldTypeEnum[\"Form di dettaglio\"]) {\r\n      // ricreo l'oggetto passando per un json\r\n      let cloneField: BaseField = this.safeClone(field);\r\n\r\n      cloneField.Label = field[\"Label\"] + \"Copy\";\r\n      cloneField.ID = this.generateGUID();\r\n      this.selectedField = new BaseField();\r\n      if (ordinalPosition == null) {\r\n        cloneField.OrdinalPosition = this.form.Fields.length + 1;\r\n        this.indexSelectedField = null;\r\n      } else {\r\n        cloneField.OrdinalPosition = ordinalPosition;\r\n        this.indexSelectedField = ordinalPosition;\r\n        // utilizzo ordinal position per infilare il campo correttametne nella lista\r\n        // per farlo se non è nullo devo creare lo spazio\r\n        this.OrdinatedInsertField(field, ordinalPosition)\r\n      }\r\n\r\n      let cloneFieldStructure = { field: cloneField, reopen: 0 }\r\n      this.onSaveField(cloneFieldStructure);\r\n    } else {\r\n      alert(\"non è possibile duplicare una form di dettaglio\");\r\n    }\r\n  }\r\n\r\n  private OrdinatedInsertField(field: BaseField, ordinalPosition = 0) {\r\n    this.form.Fields.splice(ordinalPosition, 0, field);\r\n  }\r\n\r\n  private positionExchangeFields(field1: BaseField, field2: BaseField) {\r\n    const temp = field1;\r\n    this.form.Fields[field1.OrdinalPosition] = field2;\r\n    this.form.Fields[field2.OrdinalPosition] = temp;\r\n  }\r\n\r\n  /**\r\n   * Metodo che genera una nuova GUID\r\n   */\r\n  private generateGUID() {\r\n    return 'xxxx-xxxx-xxxx-xxxx'.replace(/[xy]/g, function (c) {\r\n      var r = Math.random() * 16 | 0,\r\n        v = c == 'x' ? r : (r & 0x3 | 0x8);\r\n      return v.toString(16);\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Metodo per rimuovere un Field all'interno di una Form.\r\n   * Richiede conferma all'utente prima di rimuoverlo.\r\n   * @param field BaseField da rimuovere\r\n   */\r\n  private deleteElement(\r\n    element: BaseField | ActionOnRecord | Form,\r\n    propertyName: string\r\n  ) {\r\n    EqpDynamicModuleDialogService.Confirm(\r\n      \"Eliminare l'elemento selezionato?\",\r\n      () => {\r\n        this.form[propertyName].splice(\r\n          this.form[propertyName].indexOf(element),\r\n          1\r\n        );\r\n        if (propertyName === \"Fields\") {\r\n          this.setFieldOrdinalPosition();\r\n          this.reloadFieldsTable();\r\n          this.refreshFieldTypeOptions();\r\n          this.refreshPreview();\r\n        } else if (propertyName === \"ActionsOnRecord\") {\r\n          this.setActionOrdinalPosition();\r\n          this.reloadActionsOnRecordTable();\r\n        } else if (propertyName === \"ActionButtons\") {\r\n          this.setActionButtonOrdinalPosition();\r\n          this.reloadActionButtonsOnRecordTable();\r\n        }\r\n      },\r\n      false,\r\n      \"Richiesta conferma\"\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Metodo per spostare un campo all'interno della form.\r\n   * @param field Oggetto di tipo BaseField da spostare.\r\n   * @param moveUp Se TRUE allora sposta verso l'alto il campo (abbassa l'indice) altrimenti il contrario.\r\n   */\r\n  private moveElement(\r\n    element: BaseField | ActionOnRecord,\r\n    moveUp: boolean,\r\n    propertyName: string\r\n  ) {\r\n    const startingIndex = this.form[propertyName].indexOf(element);\r\n    const endingIndex = startingIndex + (moveUp ? -1 : 1);\r\n\r\n    this.form[propertyName].splice(startingIndex, 1);\r\n    this.form[propertyName].splice(endingIndex, 0, element);\r\n\r\n    if (propertyName === \"Fields\") {\r\n      this.setFieldOrdinalPosition();\r\n      this.reloadFieldsTable();\r\n    } else if (propertyName === \"ActionsOnRecord\") {\r\n      this.setActionOrdinalPosition();\r\n      this.reloadActionsOnRecordTable();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Imposta l'ordinamento delle sezioni che compongono la form.\r\n   */\r\n  private setFormFieldGroupOrdinalPosition() {\r\n    this.form.FormFieldsGroups.forEach((g, i) => (g.OrdinalPosition = i));\r\n  }\r\n\r\n  /**\r\n   * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n   * ha definito nella tabella in cui sono mostrati\r\n   */\r\n  private setFieldOrdinalPosition() {\r\n    if (this.form.Fields) {\r\n      this.form.Fields.forEach((field) => {\r\n        field.OrdinalPosition = this.form.Fields.indexOf(field);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per ricaricare i dati della tabella dei campi aggiunti in una form\r\n   */\r\n  private reloadFieldsTable() {\r\n    if (this.fieldsTable) {\r\n      this.fieldsTable.reloadDatatable();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n   * ha definito nella tabella in cui sono mostrati\r\n   */\r\n  private setActionOrdinalPosition() {\r\n    if (this.form.ActionsOnRecord) {\r\n      this.form.ActionsOnRecord.forEach((action) => {\r\n        action.OrdinalPosition = this.form.ActionsOnRecord.indexOf(action);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Imposta l'ordinamento dei campi all'interno della form in base all'ordine che l'utente\r\n   * ha definito nella tabella in cui sono mostrati\r\n   */\r\n  private setActionButtonOrdinalPosition() {\r\n    if (this.form.ActionButtons) {\r\n      this.form.ActionButtons.forEach((action) => {\r\n        action.OrdinalPosition = this.form.ActionButtons.indexOf(action);\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per ricaricare i dati della tabella delle azioni aggiuntive sui record della Form.\r\n   */\r\n  private reloadActionsOnRecordTable() {\r\n    if (this.actionsOnRecordTable) {\r\n      this.actionsOnRecordTable.reloadDatatable();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Metodo per ricaricare i dati della tabella delle azioni aggiuntive sui record della Form.\r\n   */\r\n  private reloadActionButtonsOnRecordTable() {\r\n    if (this.actionButtonsTable) {\r\n      this.actionButtonsTable.reloadDatatable();\r\n    }\r\n  }\r\n\r\n  //#endregion\r\n\r\n  onExternalComponentOut(ev: eventOut) {\r\n    this.out.emit(ev);\r\n  }\r\n\r\n  private processNextAiDataGetterField(): void {\r\n    this.currentAiDataGetterField = this.pendingAiDataGetterFields.shift();\r\n    this.QueryEditorComponent.inputParams.config.mode = QueryEditorModeEnum.COMPOSER;\r\n    this.QueryEditorComponent.inputParams.config.loadQueryStatuses = null;\r\n    this.QueryEditorComponent.inputParams.config.DataGetterSpeechText = this.currentAiDataGetterField.DataGetter.DataGetterSpeechText;\r\n    // Forza la (ri)creazione del componente azzerando prima il flag\r\n    this.aiDataGetterLoading = false;\r\n    setTimeout(() => { this.aiDataGetterLoading = true; });\r\n  }\r\n\r\n  onAiDataGetterOut(ev: eventOut): void {\r\n    if (ev.Behaviours.indexOf(\"save-query\") === -1 || !this.currentAiDataGetterField) return;\r\n\r\n    const data = ev.Params;\r\n    this.currentAiDataGetterField.DataGetter.DataGetterValue = data;\r\n    this.currentAiDataGetterField.DataGetter.DataGetterCardinality = 1;\r\n    this.currentAiDataGetterField.DataGetter.DataGetterHasResetButton = true;\r\n\r\n    // DataGetterColumnForce deve essere la stringa chiave (non l'oggetto) per funzionare con eqp-select\r\n    const columnForce = data?.DataGetterColumnForce;\r\n    if (columnForce) {\r\n      // V2 server restituisce { key, value, keyProperty } — estraiamo solo il key string\r\n      this.currentAiDataGetterField.DataGetter.DataGetterColumnForce =\r\n        typeof columnForce === 'object' ? columnForce.key : columnForce;\r\n    } else if (data?.selectedFields?.length === 1) {\r\n      const sf = data.selectedFields[0];\r\n      this.currentAiDataGetterField.DataGetter.DataGetterColumnForce =\r\n        sf.DatabaseTableName + \"_\" + sf.PropertyName + \"__\" + sf.CurrentTranslate.replace(/ /g, '_');\r\n    }\r\n\r\n    this.currentAiDataGetterField.DataGetter.DataGetterSpeechText = null;\r\n    // Azzera DataGetterSpeechText dal config object per evitare che \"Modifica\" lo rilanci\r\n    this.QueryEditorComponent.inputParams.config.DataGetterSpeechText = null;\r\n    this.currentAiDataGetterField = null;\r\n    this.aiDataGetterLoading = false;\r\n\r\n    if (this.pendingAiDataGetterFields.length > 0) {\r\n      this.processNextAiDataGetterField();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * TRIGGERS\r\n   */\r\n\r\n  openTriggersDialog(ev: Trigger = null) {\r\n\r\n    if (ev != null) {\r\n      this.selectedTrigger = ev;\r\n    } else {\r\n      this.selectedTrigger = null;\r\n    }\r\n\r\n    this.dialogTriggersRef = this.dialog.open(this.dialogTriggers, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"75%\",\r\n      height: \"80%\",\r\n    });\r\n  }\r\n\r\n  saveTrigger(element: Trigger) {\r\n\r\n    if (element != null) {\r\n      if (this.form.Triggers != null) {\r\n        var existsTriggerIndex = this.form.Triggers.findIndex(x => x.CID == element.CID);\r\n        if (existsTriggerIndex == -1) {\r\n          // Nuovo trigger\r\n          this.form.Triggers.push(element);\r\n        } else {\r\n          this.form.Triggers[existsTriggerIndex] = element;\r\n        }\r\n      } else {\r\n        this.form.Triggers = new Array<Trigger>();\r\n        this.form.Triggers.push(element);\r\n      }\r\n      this.triggersTable.reloadDatatable();\r\n    }\r\n\r\n    this.dialogTriggersRef.close();\r\n  }\r\n\r\n  deleteTrigger(element: Trigger) {\r\n    var index = this.form.Triggers.findIndex(x => x.CID == element.CID);\r\n    this.form.Triggers.splice(index, 1);\r\n    this.triggersTable.reloadDatatable();\r\n  }\r\n\r\n  deleteActionButton(element: ActionButton) {\r\n    var index = this.form.ActionButtons.findIndex(x => x.ButtonCode == element.ButtonCode);\r\n    this.form.ActionButtons.splice(index, 1);\r\n    this.actionButtonsTable.reloadDatatable();\r\n  }\r\n\r\n  openAiEditDialog() {\r\n    this.aiEditPrompt = \"\";\r\n    this.aiEditAttachments = [];\r\n    this.aiEditAutosave = false;\r\n    this.aiEditLoading = false;\r\n    this.showAiPromptHistory = true;\r\n    this.dialogAiEditRef = this.dialog.open(this.dialogAiEdit, {\r\n      disableClose: true,\r\n      hasBackdrop: true,\r\n      width: \"60%\",\r\n    });\r\n  }\r\n\r\n  closeAiEditDialog() {\r\n    this._stopAiCountdown();\r\n    this.dialogAiEditRef.close();\r\n  }\r\n\r\n  openAiHistoryDialog() {\r\n    this.dialogAiHistoryRef = this.dialog.open(this.dialogAiHistory, {\r\n      disableClose: false,\r\n      hasBackdrop: true,\r\n      maxHeight: '80vh',\r\n      position: { top: '40px' },\r\n    });\r\n  }\r\n\r\n  private _stopAiCountdown(): void {\r\n    if (this._aiCountdownRef) {\r\n      clearInterval(this._aiCountdownRef);\r\n      this._aiCountdownRef = null;\r\n    }\r\n    this.aiEditCountdown = 0;\r\n    this.aiEditEstimatedSec = 0;\r\n    this.aiEditIsOvertime = false;\r\n  }\r\n\r\n  private _startAiCountdown(estimatedSeconds: number): void {\r\n    this._stopAiCountdown();\r\n    this.aiEditEstimatedSec = Math.ceil(estimatedSeconds * 1.2);\r\n    this.aiEditCountdown = this.aiEditEstimatedSec;\r\n    this._aiCountdownRef = setInterval(() => {\r\n      this.aiEditCountdown--;\r\n      if (this.aiEditCountdown < 0 && !this.aiEditIsOvertime) {\r\n        this.aiEditIsOvertime = true;\r\n      }\r\n    }, 1000);\r\n  }\r\n\r\n  cancelAiEdit(): void {\r\n    this._aiEditCancelled = true;\r\n    this._stopAiCountdown();\r\n    this.aiEditLoading = false;\r\n    this.aiFieldSuggestLoading = false;\r\n    this.dialogAiEditRef?.close();\r\n  }\r\n\r\n  onAiEditForField(fieldCode: string): void {\r\n    this.aiEditFieldContext = { code: fieldCode };\r\n    this.openAiEditDialog();\r\n  }\r\n\r\n  onAiGraphicSuggest(data: { code: string; hint: string }): void {\r\n    const rawHint = data.hint?.trim() ?? '';\r\n    const fieldLabel = data.code?.trim() || '_camposenzanome_';\r\n\r\n    if (!this.endPointConfiguration?.Forms?.SpeechToGraphicsEndPoint) {\r\n      // Fallback: passa il rawHint nell'injectedPrompt; sendAiEdit estrarrà il modello da esso\r\n      const injectedPrompt = rawHint\r\n        ? `Voglio modificare in maniera completa la grafica del campo '${fieldLabel}' seguendo in maniera incontestabile questa indicazione: '${rawHint}'`\r\n        : `Voglio modificare in maniera completa la grafica del campo '${fieldLabel}' con uno stile creativo e originale a tua scelta`;\r\n      this.aiEditFieldContext = { code: data.code };\r\n      this.aiFieldSuggestLoading = true;\r\n      this.sendAiEdit(injectedPrompt);\r\n      return;\r\n    }\r\n\r\n    const { cleanText: hint, modelId: aiModelId } = this.extractModelFromText(rawHint);\r\n\r\n    // Trova il campo: già salvato nel form oppure nuovo ancora nel dialog\r\n    const fieldInForm = this.form?.Fields?.find(f => f.Label === fieldLabel) ?? null;\r\n    const currentField = fieldInForm ?? this.selectedField;\r\n    if (!currentField) return;\r\n\r\n    this.aiFieldSuggestLoading = true;\r\n\r\n    // Stesso payload di onFormGraphicSuggest, ma Fields con solo il campo corrente\r\n    const graphicsParams: EndPointDataParams[] = [\r\n      { ParamName: 'Name', ParamValue: this.form?.Name ?? fieldLabel, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'Description', ParamValue: this.form?.Description ?? null, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'ThemeCSS', ParamValue: this.form?.ThemeCSS ?? null, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'TitleCSS', ParamValue: this.form?.TitleCSS ?? null, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'Fields', ParamValue: [{ Label: currentField.Label, FieldType: currentField.FieldType }], ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'Hint', ParamValue: hint || this.buildRandomGraphicHint(), ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'ModelId', ParamValue: aiModelId, ParamType: ParamTypeEnum['In Body'] },\r\n      { ParamName: 'SingleFieldMode', ParamValue: true, ParamType: ParamTypeEnum['In Body'] },\r\n    ];\r\n\r\n    this.utilityHelperService.RunEndPointCall(\r\n      this.endPointConfiguration.Forms.SpeechToGraphicsEndPoint,\r\n      graphicsParams,\r\n      (res: any) => {\r\n        this.aiFieldSuggestLoading = false;\r\n\r\n        const r = res as { FieldStyles?: { [cssClassName: string]: { [prop: string]: string } }; Warnings?: string[] };\r\n\r\n        // Applica FieldStyles al campo target; se veApplyToAllOfType è attivo, propaga a tutti i campi dello stesso tipo\r\n        if (r.FieldStyles) {\r\n          const cssClassName = (EqpDynamicModuleConfiguratorComponent.FIELD_TYPE_CSS_CLASS as any)[currentField.FieldType];\r\n          if (cssClassName && r.FieldStyles[cssClassName] && typeof r.FieldStyles[cssClassName] === 'object') {\r\n            if (this.veApplyToAllOfType) {\r\n              (this.form.Fields ?? []).filter(f => f.FieldType === currentField.FieldType).forEach(f => {\r\n                (f as any)[cssClassName] = { ...r.FieldStyles![cssClassName] };\r\n              });\r\n            } else {\r\n              (currentField as any)[cssClassName] = r.FieldStyles[cssClassName];\r\n              if (fieldInForm) (fieldInForm as any)[cssClassName] = r.FieldStyles[cssClassName];\r\n            }\r\n          }\r\n        }\r\n        this.veApplyToAllOfType = false;\r\n\r\n        // Aggiorna selectedField per il dialog\r\n        const applyTarget = fieldInForm ?? currentField;\r\n        this.selectedField = this.safeClone(applyTarget);\r\n        this.selectedField.Formula = applyTarget.Formula;\r\n        if (this.selectedField.AnswerStyle == null) {\r\n          this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: '', LabelstyleCSS: '', ColSpanSizes: [], Invisibility: FieldInvisibilityEnum.NASCOSTO };\r\n        }\r\n        if (fieldInForm) this.indexSelectedField = this.form.Fields.indexOf(fieldInForm);\r\n\r\n        // Riapri il dialog campo (salvo Visual Editor graphic suggest mode)\r\n        if (!this.veGraphicSuggestActive) {\r\n          if (this.dialogFieldRef) this.dialogFieldRef.close();\r\n          this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n            disableClose: true, hasBackdrop: true, width: '75%', height: '80%',\r\n          });\r\n        }\r\n\r\n        // Aggiorna preview se era aperta\r\n        const wasOnPreview = this.formCompleted;\r\n        if (wasOnPreview) {\r\n          this.formCompleted = false;\r\n          this.previewForm = null;\r\n          setTimeout(() => this.setFormStatus(true), 50);\r\n        }\r\n        this.cdr.detectChanges();\r\n        this.veGraphicSuggestActive = false;\r\n\r\n        EqpDynamicModuleDialogService.Success('Grafica campo applicata!');\r\n        if (r.Warnings?.length > 0) EqpDynamicModuleDialogService.Warning(r.Warnings);\r\n      },\r\n      (error) => {\r\n        this.aiFieldSuggestLoading = false;\r\n        this.veGraphicSuggestActive = false;\r\n        this.veApplyToAllOfType = false;\r\n        const msg = (error as any)?.error;\r\n        EqpDynamicModuleDialogService.Error(typeof msg === 'string' && msg.trim() ? msg : 'Errore nella generazione della grafica del campo');\r\n      }\r\n    );\r\n  }\r\n\r\n  onAiEditFileChange(event: Event) {\r\n    const input = event.target as HTMLInputElement;\r\n    if (!input.files?.length) return;\r\n    Array.from(input.files).forEach(file => {\r\n      const reader = new FileReader();\r\n      reader.onload = () => {\r\n        const base64 = (reader.result as string).split(',')[1];\r\n        this.aiEditAttachments.push({ fileName: file.name, base64Content: base64, mediaType: file.type });\r\n      };\r\n      reader.readAsDataURL(file);\r\n    });\r\n    input.value = '';\r\n  }\r\n\r\n  removeAiEditAttachment(index: number) {\r\n    this.aiEditAttachments.splice(index, 1);\r\n  }\r\n\r\n  sendAiEdit(directPrompt?: string) {\r\n    const userPromptRaw = directPrompt ?? this.aiEditPrompt;\r\n    if (!userPromptRaw?.trim()) return;\r\n\r\n    this.aiEditLoading = true;\r\n\r\n    // Aggiorna lo storico prompt prima di inviare\r\n    const currentHistory: string[] = this.form?.AIPrompts ? JSON.parse(this.form.AIPrompts) : [];\r\n    currentHistory.push(userPromptRaw.trim());\r\n    const updatedPromptsJson = JSON.stringify(currentHistory);\r\n\r\n    // In field-context mode (dialog AI o graphic suggest): prendi il campo dalla modale\r\n    let fieldCloneForSend: BaseField | null = null;\r\n    let fieldCodeForRefresh: string | null = null;\r\n    let isNewUnsavedField = false;\r\n\r\n    if (this.aiEditFieldContext !== null) {\r\n      fieldCloneForSend = this.safeClone(this.selectedField);\r\n      if (!fieldCloneForSend.Label?.trim()) {\r\n        fieldCloneForSend.Label = '_camposenzanome_';\r\n      }\r\n      if (!fieldCloneForSend.FieldType) {\r\n        fieldCloneForSend.FieldType = FieldTypeEnum[\"Campo di testo\"];\r\n      }\r\n      fieldCodeForRefresh = fieldCloneForSend.Label;\r\n      isNewUnsavedField = !(this.form?.Fields?.some(f => f.Label === fieldCodeForRefresh) ?? false);\r\n    }\r\n\r\n    // Iniezione contestuale: in modalità dialog (no directPrompt) si prepende il contesto del campo\r\n    let speechText = userPromptRaw;\r\n    if (directPrompt === undefined && this.aiEditFieldContext) {\r\n      speechText = `Voglio modificare il campo '${fieldCodeForRefresh ?? this.aiEditFieldContext.code}', di seguito ti dò le istruzioni. Se quello che ti scrivo non riguarda la modifica del campo, considera tutto come incoerente. ${userPromptRaw}`;\r\n    }\r\n\r\n    this.aiEditFieldContext = null;\r\n\r\n    // Estrae il modello AI dal testo (es. \"Usa Sonnet\") e pulisce il prompt prima di inviarlo\r\n    const { cleanText: cleanSpeechText, modelId: aiModelId } = this.extractModelFromText(speechText);\r\n    speechText = cleanSpeechText;\r\n\r\n    // Prepara il form come in saveForm: Fields → ObjectFields\r\n    const formToSend = this.safeClone(this.form);\r\n    formToSend.AIPrompts = updatedPromptsJson;\r\n    formToSend.ObjectFields = [];\r\n    formToSend.ObjectFldExtraConfigValues = [];\r\n\r\n    if (formToSend.FldExtraConfigValues != null) {\r\n      formToSend.ObjectFldExtraConfigValues = JSON.parse(JSON.stringify(formToSend.FldExtraConfigValues));\r\n    }\r\n\r\n    // In field-context: sostituisce (modifica) o aggiunge (nuovo campo) il campo con il contenuto corrente della modale\r\n    if (fieldCloneForSend) {\r\n      if (!formToSend.Fields) formToSend.Fields = [];\r\n      formToSend.Fields = formToSend.Fields.filter(f => f.Label !== fieldCodeForRefresh);\r\n      formToSend.Fields.push(fieldCloneForSend);\r\n    }\r\n\r\n    if (formToSend.Fields) {\r\n      formToSend.Fields.forEach((field) => {\r\n        if (field.FieldType == FieldTypeEnum.Allegato) {\r\n          const fldA: any = field;\r\n          fldA.MetadataObjectFields = fldA.MetadataFields;\r\n          fldA.MetadataFields = [];\r\n          fldA.DataGetterValueBase64String = btoa(JSON.stringify(fldA.DataGetter ?? {}));\r\n          fldA.DataGetter = null;\r\n          formToSend.ObjectFields.push(fldA);\r\n        } else {\r\n          field.DataGetterValueBase64String = btoa(JSON.stringify(field.DataGetter ?? {}));\r\n          field.DataGetter = null;\r\n          formToSend.ObjectFields.push(field);\r\n        }\r\n      });\r\n    }\r\n    formToSend.Fields = null;\r\n    formToSend.ObjectTriggers = JSON.stringify(formToSend.Triggers ?? []);\r\n    formToSend.Triggers = null;\r\n    formToSend.ObjectActionButtons = JSON.stringify(formToSend.ActionButtons ?? []);\r\n    formToSend.ActionButtons = null;\r\n\r\n    const dynamicModuleParams = [\r\n      { ParamName: \"Form\", ParamValue: formToSend, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"SpeechText\", ParamValue: speechText, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"OrgaID\", ParamValue: parseInt(this.orgaID) || 0, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"ModifyUser\", ParamValue: this.UserID, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"Autosave\", ParamValue: this.aiEditAutosave, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"Attachments\", ParamValue: this.aiEditAttachments.map(a => ({ FileName: a.fileName, Base64Content: a.base64Content, MediaType: a.mediaType })), ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"TriggerDefinitions\", ParamValue: this.triggers ?? null, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"ActionButtonDefinitions\", ParamValue: this.actionButtons ?? null, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"ModelId\", ParamValue: aiModelId, ParamType: ParamTypeEnum[\"In Body\"] },\r\n      { ParamName: \"GenerateBackground\", ParamValue: this.aiGenerateBackground, ParamType: ParamTypeEnum[\"In Body\"] },\r\n    ];\r\n\r\n    this.utilityHelperService.RunSseEndPointCall(\r\n      this.endPointConfiguration.Forms.SpeechToFormEditEndPoint,\r\n      dynamicModuleParams,\r\n      (estimatedSeconds: number) => {\r\n        this._startAiCountdown(estimatedSeconds);\r\n      },\r\n      (res: { Form: Form, Warnings: string[], CostCents: number, ElapsedMs: number, DallEElapsedSec?: number, PromptSplits?: string[] }) => {\r\n        if (this._aiEditCancelled) { this._aiEditCancelled = false; return; }\r\n        this._stopAiCountdown();\r\n        this.aiEditLoading = false;\r\n\r\n        if (directPrompt === undefined) {\r\n          this.closeAiEditDialog();\r\n\r\n          if (isNewUnsavedField) {\r\n            // Campo nuovo non salvato: elabora il form tornato e riapri il dialog campo con i valori aggiornati\r\n            this.setFormAndConfigure(res.Form);\r\n            if (this.form) this.form.AIPrompts = updatedPromptsJson;\r\n\r\n            const updatedFieldIdx = this.form?.Fields?.findIndex(f => f.Label === fieldCodeForRefresh) ?? -1;\r\n            const updatedField = updatedFieldIdx >= 0 ? this.form.Fields[updatedFieldIdx] : null;\r\n            if (updatedField && this.form?.Fields) {\r\n              this.form.Fields.splice(updatedFieldIdx, 1);\r\n              this.setFieldOrdinalPosition();\r\n              this.reloadFieldsTable();\r\n\r\n              this.indexSelectedField = null;\r\n              this.selectedField = this.safeClone(updatedField);\r\n              this.selectedField.Formula = updatedField.Formula;\r\n              if (this.selectedField.AnswerStyle == null) {\r\n                this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: '', LabelstyleCSS: '', ColSpanSizes: [], Invisibility: FieldInvisibilityEnum.NASCOSTO };\r\n              }\r\n              if (this.dialogFieldRef) this.dialogFieldRef.close();\r\n              this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n                disableClose: true, hasBackdrop: true, width: '75%', height: '80%',\r\n              });\r\n            }\r\n          } else {\r\n            // Campo già esistente o nessun contesto campo\r\n            const wasOnPreview = this.formCompleted;\r\n            if (wasOnPreview) {\r\n              this.formCompleted = false;\r\n              this.previewForm = null;\r\n            }\r\n            this.setFormAndConfigure(res.Form);\r\n            if (this.form) this.form.AIPrompts = updatedPromptsJson;\r\n\r\n            // Se c'era un contesto campo, aggiorna selectedField e riapri il dialog\r\n            // per riflettere le modifiche AI (es. TextFieldStyleCSS) nell'editor\r\n            if (fieldCodeForRefresh && this.form?.Fields) {\r\n              const updatedField = this.form.Fields.find(f => f.Label === fieldCodeForRefresh);\r\n              if (updatedField) {\r\n                this.indexSelectedField = this.form.Fields.indexOf(updatedField);\r\n                this.selectedField = this.safeClone(updatedField);\r\n                this.selectedField.Formula = updatedField.Formula;\r\n                if (this.selectedField.AnswerStyle == null) {\r\n                  this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: '', LabelstyleCSS: '', ColSpanSizes: [], Invisibility: FieldInvisibilityEnum.NASCOSTO };\r\n                }\r\n                if (this.dialogFieldRef) {\r\n                  this.dialogFieldRef.close();\r\n                  this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n                    disableClose: true, hasBackdrop: true, width: '75%', height: '80%',\r\n                  });\r\n                }\r\n              }\r\n            }\r\n\r\n            if (wasOnPreview) {\r\n              setTimeout(() => this.setFormStatus(true), 50);\r\n            }\r\n          }\r\n        } else {\r\n          // \"Suggerisci grafica\": stesso flusso field-context (nuovo o esistente)\r\n          this.aiFieldSuggestLoading = false;\r\n\r\n          if (isNewUnsavedField) {\r\n            this.setFormAndConfigure(res.Form);\r\n            if (this.form) this.form.AIPrompts = updatedPromptsJson;\r\n\r\n            const updatedFieldIdx = this.form?.Fields?.findIndex(f => f.Label === fieldCodeForRefresh) ?? -1;\r\n            const updatedField = updatedFieldIdx >= 0 ? this.form.Fields[updatedFieldIdx] : null;\r\n            if (updatedField && this.form?.Fields) {\r\n              this.form.Fields.splice(updatedFieldIdx, 1);\r\n              this.setFieldOrdinalPosition();\r\n              this.reloadFieldsTable();\r\n\r\n              this.indexSelectedField = null;\r\n              this.selectedField = this.safeClone(updatedField);\r\n              this.selectedField.Formula = updatedField.Formula;\r\n              if (this.selectedField.AnswerStyle == null) {\r\n                this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: '', LabelstyleCSS: '', ColSpanSizes: [], Invisibility: FieldInvisibilityEnum.NASCOSTO };\r\n              }\r\n              if (!this.veGraphicSuggestActive) {\r\n                if (this.dialogFieldRef) this.dialogFieldRef.close();\r\n                this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n                  disableClose: true, hasBackdrop: true, width: '75%', height: '80%',\r\n                });\r\n              }\r\n            }\r\n          } else {\r\n            const wasOnPreview = this.formCompleted;\r\n            if (wasOnPreview) {\r\n              this.formCompleted = false;\r\n              this.previewForm = null;\r\n            }\r\n            this.setFormAndConfigure(res.Form);\r\n            if (this.form) this.form.AIPrompts = updatedPromptsJson;\r\n\r\n            if (fieldCodeForRefresh && this.form?.Fields) {\r\n              const updatedField = this.form.Fields.find(f => f.Label === fieldCodeForRefresh);\r\n              if (updatedField) {\r\n                const updatedIdx = this.form.Fields.indexOf(updatedField);\r\n                this.selectedField = this.safeClone(updatedField);\r\n                this.selectedField.Formula = updatedField.Formula;\r\n                if (this.selectedField.AnswerStyle == null) {\r\n                  this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: '', LabelstyleCSS: '', ColSpanSizes: [], Invisibility: FieldInvisibilityEnum.NASCOSTO };\r\n                }\r\n                this.indexSelectedField = updatedIdx;\r\n                if (!this.veGraphicSuggestActive) {\r\n                  if (this.dialogFieldRef) this.dialogFieldRef.close();\r\n                  this.dialogFieldRef = this.dialog.open(this.dialogField, {\r\n                    disableClose: true, hasBackdrop: true, width: '75%', height: '80%',\r\n                  });\r\n                }\r\n              }\r\n            }\r\n\r\n            if (wasOnPreview) {\r\n              setTimeout(() => this.setFormStatus(true), 50);\r\n            }\r\n          }\r\n          this.veGraphicSuggestActive = false;\r\n        }\r\n\r\n        this.lastPromptSplits = res.PromptSplits ?? [];\r\n\r\n        const dallEPart = res.DallEElapsedSec != null ? ` (sfondo generato in ${res.DallEElapsedSec.toFixed(1)}s)` : '';\r\n        EqpDynamicModuleDialogService.Success(`Form modificata con AI!${dallEPart}`);\r\n        if (res.Warnings && res.Warnings.length > 0) {\r\n          EqpDynamicModuleDialogService.Warning(res.Warnings);\r\n        }\r\n        if (this.lastPromptSplits.length > 0) {\r\n          EqpDynamicModuleDialogService.Info(this.lastPromptSplits.map((s, i) => `${i + 1}. ${s}`).join('<br>'), 'Form generato in parti parallele');\r\n        }\r\n      },\r\n      (error) => {\r\n        if (this._aiEditCancelled) { this._aiEditCancelled = false; return; }\r\n        this._stopAiCountdown();\r\n        this.aiEditLoading = false;\r\n        if (directPrompt !== undefined) this.aiFieldSuggestLoading = false;\r\n        const serverMsg = (error as any)?.error ?? (error as any)?.message;\r\n        const displayMsg = typeof serverMsg === 'string' && serverMsg.trim()\r\n          ? serverMsg\r\n          : 'Errore nella modifica della form con AI';\r\n        EqpDynamicModuleDialogService.Error(displayMsg);\r\n        console.error(\"Errore nella modifica della form con AI\", error);\r\n      },\r\n      true\r\n    );\r\n  }\r\n\r\n  onContestualizationSelect() {\r\n    this.selectedContestualizationValue = this.contestualization.find(x => x.entityTableName == this.selectedContestualization).entityID;\r\n  }\r\n\r\n  onContestualizationSelectValue() {\r\n    this.contestualization.find(x => x.entityTableName == this.selectedContestualization).entityID = this.selectedContestualizationValue;\r\n  }\r\n\r\n  applyContestualization(element) {\r\n    this.formCompleted = false;\r\n\r\n    if (this.QueryEditorComponent != null) {\r\n      this.QueryEditorComponent.inputParams.config.contestualization = element;\r\n    }\r\n\r\n    setTimeout(() => {\r\n      this.formCompleted = true;\r\n    }, 50);\r\n  }\r\n\r\n  openContestualizationDialog() {\r\n    this.dialogContestualizationRef = this.dialog.open(this.dialogContestualization, {\r\n      disableClose: false,\r\n      hasBackdrop: true,\r\n      width: '480px',\r\n    });\r\n  }\r\n\r\n  closeContestualizationDialog() {\r\n    this.dialogContestualizationRef?.close();\r\n  }\r\n\r\n  onFireTrigger(ev: FireTrigger) {\r\n    this.fireTrigger.emit(ev);\r\n  }\r\n\r\n  toggleDeleteButton(event: Array<BaseField>) {\r\n    this.showDeleteButton = event.length > 0;\r\n    this.selectedFields = event;\r\n  }\r\n\r\n  deleteSelectedFields(propertyName: string) {\r\n\r\n\r\n    EqpDynamicModuleDialogService.Confirm(\r\n      \"Eliminare gli elementi selezionati?\",\r\n      () => {\r\n\r\n        this.selectedFields.forEach((selectedField) => {\r\n          this.form[propertyName].splice(this.form[propertyName].indexOf(selectedField), 1);\r\n        });\r\n\r\n        this.setFieldOrdinalPosition();\r\n        this.reloadFieldsTable();\r\n\r\n      },\r\n      false,\r\n      \"Richiesta conferma\"\r\n    );\r\n  }\r\n\r\n  //#region Visual Editor\r\n\r\n  toggleVisualEditor(): void {\r\n    this.visualEditorActive = !this.visualEditorActive;\r\n    if (!this.visualEditorActive) {\r\n      this.veSwapField = null;\r\n    }\r\n  }\r\n\r\n  onVeFieldClick(ev: { field: BaseField; event: MouseEvent }): void {\r\n    if (this.veSwapField) {\r\n      if (this.veSwapField.Label !== ev.field.Label) {\r\n        this.veDoSwap(ev.field);\r\n      }\r\n      return;\r\n    }\r\n    this.veSelectedField = this.form.Fields?.find(f => f.Label === ev.field.Label) ?? ev.field;\r\n    this.veShowGraphicInput = false;\r\n    this.veGraphicHint = '';\r\n    this.dialogVeTooltipRef = this.dialog.open(this.dialogVeTooltip, {\r\n      hasBackdrop: true,\r\n      width: '320px',\r\n    });\r\n  }\r\n\r\n  veEditField(): void {\r\n    this.dialogVeTooltipRef?.close();\r\n    if (!this.veSelectedField) return;\r\n    this.openFieldDialog(this.veSelectedField);\r\n  }\r\n\r\n  veAiEdit(): void {\r\n    this.dialogVeTooltipRef?.close();\r\n    if (!this.veSelectedField) return;\r\n    // Replica ciò che fa openFieldDialog: popola selectedField e indexSelectedField\r\n    // così sendAiEdit può clonare correttamente il campo\r\n    this.indexSelectedField = this.form.Fields?.indexOf(this.veSelectedField) ?? null;\r\n    this.selectedField = this.safeClone(this.veSelectedField);\r\n    this.selectedField.Formula = this.veSelectedField.Formula;\r\n    if (this.selectedField.AnswerStyle == null) {\r\n      this.selectedField.AnswerStyle = { InListView: true, VisibleIf: null, FieldstyleCSS: '', LabelstyleCSS: '', ColSpanSizes: [], Invisibility: FieldInvisibilityEnum.NASCOSTO };\r\n    }\r\n    this.onAiEditForField(this.veSelectedField.Label);\r\n  }\r\n\r\n  veSendGraphic(): void {\r\n    this.dialogVeTooltipRef?.close();\r\n    if (!this.veSelectedField) return;\r\n    this.selectedField = this.form?.Fields?.find(f => f.Label === this.veSelectedField.Label) ?? this.veSelectedField as any;\r\n    this.veGraphicSuggestActive = true;\r\n    this.onAiGraphicSuggest({ code: this.veSelectedField.Label, hint: this.veGraphicHint });\r\n    this.veShowGraphicInput = false;\r\n    this.veGraphicHint = '';\r\n  }\r\n\r\n  veOpenReorder(): void {\r\n    this.dialogVeTooltipRef?.close();\r\n    this.veReorderFields = [...(this.form.Fields ?? [])];\r\n    this.dialogVeReorderRef = this.dialog.open(this.dialogVeReorder, {\r\n      hasBackdrop: true,\r\n      width: '400px',\r\n    });\r\n  }\r\n\r\n  veApplyReorder(): void {\r\n    this.form.Fields = [...this.veReorderFields];\r\n    this.setFieldOrdinalPosition();\r\n    this.reloadFieldsTable();\r\n    this.dialogVeReorderRef?.close();\r\n    this.refreshPreview();\r\n  }\r\n\r\n  onVeDragDropReorder(event: CdkDragDrop<BaseField[]>): void {\r\n    moveItemInArray(this.veReorderFields, event.previousIndex, event.currentIndex);\r\n  }\r\n\r\n  veStartSwap(): void {\r\n    this.dialogVeTooltipRef?.close();\r\n    this.veSwapField = this.veSelectedField;\r\n  }\r\n\r\n  veDoSwap(targetField: BaseField): void {\r\n    if (!this.veSwapField || !this.form.Fields) return;\r\n    const fields = this.form.Fields;\r\n    const idxA = fields.findIndex(f => f.Label === this.veSwapField!.Label);\r\n    const idxB = fields.findIndex(f => f.Label === targetField.Label);\r\n    if (idxA >= 0 && idxB >= 0) {\r\n      [fields[idxA], fields[idxB]] = [fields[idxB], fields[idxA]];\r\n      this.setFieldOrdinalPosition();\r\n      this.reloadFieldsTable();\r\n      this.refreshPreview();\r\n    }\r\n    this.veSwapField = null;\r\n  }\r\n\r\n  veCancelSwap(): void {\r\n    this.veSwapField = null;\r\n  }\r\n\r\n  veDeleteField(): void {\r\n    if (!this.veSelectedField) return;\r\n    const field = this.form?.Fields?.find(f => f.Label === this.veSelectedField.Label);\r\n    if (!field) return;\r\n    this.dialogVeTooltipRef?.close();\r\n    // setTimeout necessario: SweetAlert non si apre correttamente se il Material Dialog è ancora in fase di chiusura\r\n    setTimeout(() => this.deleteElement(field, 'Fields'), 200);\r\n  }\r\n\r\n  private static readonly HINT_PALETTES = [\r\n    'monocromatico vibrante', 'complementare', 'triadico', 'analogo caldo', 'analogo freddo',\r\n    'pastello delicato', 'neon su scuro', 'earth tones', 'oceano profondo', 'tramonto colorato',\r\n    'foresta autunnale', 'lavanda e oro', 'corallo e turchese', 'rosso e antracite', 'verde acqua e sabbia',\r\n    'viola elettrico e giallo limone', 'rosa cipria e grigio perla', 'blu cobalto e arancio bruciato',\r\n    'oro antico e bordeaux', 'menta fresca e cioccolato', 'argento e blu acciaio', 'pesca e indaco',\r\n    'rosso ciliegia e avorio', 'teal scuro e rame', 'lime e blu navy', 'lilla e verde salvia',\r\n    'azzurro ghiaccio e grigio ardesia', 'ambra e petrolio', 'smeraldo e rosa antico', 'bianco e nero con accento rosso fuoco',\r\n  ];\r\n\r\n  private static readonly HINT_STYLES = [\r\n    'minimalista', 'bold e vivace', 'elegante e sobrio', 'giocoso e dinamico', 'industriale',\r\n    'retrofuturista', 'organico e naturale', 'tech/digitale', 'luxury premium', 'vintage morbido',\r\n    'flat design pulito', 'glassmorphism', 'neumorfismo', 'dark mode raffinato',\r\n    'brutalist con bordi spessi', 'scandinavo pulito', 'art déco geometrico', 'cyberpunk distopico',\r\n    'pop art a tinte piatte', 'watercolor pastello sfumato', 'neon anni ottanta', 'material design con ombre',\r\n    'aurora boreale', 'swiss style tipografico', 'tropicale vivace', 'monocromo con accento singolo',\r\n    'aurora notturna scura', 'cottagecore caldo',\r\n  ];\r\n\r\n  private static readonly HINT_ADJECTIVES = [\r\n    'originale', 'imprevedibile', 'accattivante', 'spettacolare', 'delicato',\r\n    'audace', 'raffinato', 'giocoso', 'vivace', 'misterioso',\r\n    'caldo', 'fresco', 'romantico', 'futuristico', 'elegante',\r\n    'rustico', 'moderno', 'vintage', 'armonioso', 'sorprendente',\r\n  ];\r\n\r\n  private buildHintText(): string {\r\n    const pick = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)];\r\n    const palette = pick(EqpDynamicModuleConfiguratorComponent.HINT_PALETTES);\r\n    const style = pick(EqpDynamicModuleConfiguratorComponent.HINT_STYLES);\r\n    const adj1 = pick(EqpDynamicModuleConfiguratorComponent.HINT_ADJECTIVES);\r\n    const useTwo = Math.random() < 0.5;\r\n    const adj2 = useTwo ? pick(EqpDynamicModuleConfiguratorComponent.HINT_ADJECTIVES.filter(a => a !== adj1)) : null;\r\n    const adjText = adj2 ? `${adj1} e ${adj2}` : adj1;\r\n    return `Palette ${palette}, stile ${style}, ${adjText}`;\r\n  }\r\n\r\n  randomizeHint(): void {\r\n    this.formGraphicSuggestHint = this.buildHintText();\r\n  }\r\n\r\n  randomizeVeHint(): void {\r\n    this.veGraphicHint = this.buildHintText();\r\n  }\r\n\r\n  private buildRandomGraphicHint(): string {\r\n    const pick = <T>(arr: T[]): T => arr[Math.floor(Math.random() * arr.length)];\r\n    const radius = ['border-radius piccolo (2-4px)', 'border-radius medio (8-10px)', 'border-radius grande (16-20px)', 'border-radius pillola (9999px)'];\r\n    return `CASUALE: palette \"${pick(EqpDynamicModuleConfiguratorComponent.HINT_PALETTES)}\", stile \"${pick(EqpDynamicModuleConfiguratorComponent.HINT_STYLES)}\", ${pick(radius)}. Ignora la tabella preset settoriali e crea una grafica originale e imprevedibile.`;\r\n  }\r\n\r\n  private refreshPreview(): void {\r\n    if (this.formCompleted) {\r\n      this.formCompleted = false;\r\n      this.previewForm = null;\r\n      setTimeout(() => this.setFormStatus(true), 50);\r\n    }\r\n  }\r\n\r\n  //#endregion Visual Editor\r\n\r\n}\r\n","<eqp-dynamic-module-spinner></eqp-dynamic-module-spinner>\r\n\r\n\r\n<div class=\"dynamic-module-configurator-header row title p-1\" *ngIf=\"innerFormManagment\">\r\n  <div class=\"col-md-10\">\r\n    <div class=\"header-title-standard\">Aggiunta form di dettaglio</div>\r\n  </div>\r\n  <div class=\"col-md-2 text-right\">\r\n    <tmw-icon class=\"mat-icon close\" (click)=\"closeDialogInnerForm()\" name=\"x\"></tmw-icon>\r\n  </div>\r\n</div>\r\n\r\n<!--#region EXPORT MODULE -->\r\n<div class=\"dynamic-module-configurator-exporter\" *ngIf=\"loader && viewMode == 'Export'\" class=\"p-3\">\r\n\r\n  <button mat-raised-button class=\"btn btn-primary\" (click)=\"export()\">Esporta</button>\r\n\r\n  <!--<a\r\n    class=\"btn btn-clear\"\r\n    mat-raised-button\r\n    color=\"primary\"\r\n    title=\"Download JSON\"\r\n    [href]=\"downloadJsonHref\"\r\n    download=\"{{ downloadName }}.json\"\r\n    >Export</a>-->\r\n\r\n</div>\r\n<!--#endregion EXPORT MODULE -->\r\n\r\n<mat-horizontal-stepper *ngIf=\"loader && formFormGroup && viewMode == 'addOrEdit'\" linear #stepper\r\n  [ngClass]=\"{ outerForm: true, 'innerFormManagment-stepper': innerFormManagment  }\"\r\n  class=\"dynamic-module-configurator-stepper {{ 'last-edited-step-' + stepper.selectedIndex }}\">\r\n  <!--#region DATI GENERALI DELLA FORM -->\r\n  <mat-step class=\"dynamic-module-configurator-general-data\" [stepControl]=\"formFormGroup\">\r\n    <form [formGroup]=\"formFormGroup\" (keydown.enter)=\"(false)\">\r\n      <ng-template matStepLabel>\r\n        <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n        Dati generali della form\r\n      </ng-template>\r\n\r\n      <div class=\"row justify-content-start addButtons\">\r\n        <div class=\"col\">\r\n          <button class=\"btn btn-outlined me-2\" mat-raised-button color=\"accent\" type=\"button\"\r\n            (click)=\"openAiEditDialog()\" *ngIf=\"endPointConfiguration?.Forms?.SpeechToFormEditEndPoint\">\r\n            <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n            <span style=\"margin-left: 10px\">{{ isNewForm ? 'Crea con AI' : 'Modifica con AI' }}</span>\r\n          </button>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Ultimo prompt AI + accesso allo storico -->\r\n      <div *ngIf=\"endPointConfiguration?.Forms?.SpeechToFormEditEndPoint && aiPromptHistory.length > 0\"\r\n        class=\"ai-last-prompt-bar\">\r\n        <div class=\"ai-last-prompt-icon-wrap\">\r\n          <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n        </div>\r\n        <div class=\"ai-last-prompt-content\">\r\n          <div class=\"ai-last-prompt-label\">Richiesta AI iniziale</div>\r\n          <div class=\"ai-last-prompt-text\">{{ aiPromptHistory[0] }}</div>\r\n        </div>\r\n        <button mat-icon-button type=\"button\" class=\"ai-last-prompt-history-btn\" matTooltip=\"Vedi storico completo\"\r\n          (click)=\"openAiHistoryDialog()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"history\"></tmw-icon>\r\n        </button>\r\n      </div>\r\n\r\n      <div class=\"row firstRow\">\r\n        <!--\r\n            <div class=\"col-md-6\">\r\n              <mat-label\r\n              [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n              >\r\n                Codice Univoco\r\n              </mat-label>\r\n              <mat-form-field class=\"name\">\r\n                <input\r\n                  matInput\r\n                  [matTooltip]=\"'Va inserito per essere utilizzato come riferimento nei template. non accetta caratteri speciali ne spazi.'\"\r\n                  formControlName=\"Code\"\r\n                  [(ngModel)]=\"form.Code\"\r\n                  required\r\n                  (focusout)=\"setCode(form.Code)\"\r\n                  disabled=\"true\"\r\n                  readonly=\"true\"\r\n                />\r\n              </mat-form-field>\r\n            </div>\r\n            <div class=\"col-md-6\"></div>\r\n            -->\r\n        <div class=\"col-md-4\">\r\n          <mat-form-field class=\"name\" appearance=\"outline\">\r\n            <mat-label>Nome</mat-label>\r\n            <input placeholder=\"Nome\" matInput formControlName=\"Name\" [(ngModel)]=\"form.Name\" required\r\n              (focusout)=\"setName(form.Name)\" />\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-md-4\">\r\n          <!-- <mat-label>Tipo di visualizzazione</mat-label> -->\r\n          <tmw-select class=\"nameSection\" [enumData]=\"FormScalarTypeEnum\" [(ngModelInput)]=\"form.FormScalarType\"\r\n            [isRequired]=\"false\" required [showCancelButton]=\"false\" [formGroupInput]=\"formFormGroup\"\r\n            [formControlNameInput]=\"'FormScalarType'\" (ngModelInputChange)=\"onChangeFormScalarType()\"\r\n            placeholder=\"Tipo di visualizzazione\">\r\n          </tmw-select>\r\n        </div>\r\n\r\n        <div class=\"col-md-6\">\r\n          <mat-form-field class=\"name\" appearance=\"outline\">\r\n            <mat-label>Descrizione</mat-label>\r\n            <input matInput formControlName=\"Description\" [(ngModel)]=\"form.Description\"\r\n              (focusout)=\"stringSanitizer(form.Name)\" placeholder=\"Descrizione\" />\r\n          </mat-form-field>\r\n        </div>\r\n      </div>\r\n      <div class=\"row inserted\" *ngIf=\"\r\n          form.FormScalarType &&\r\n          form.FormScalarType != FormScalarTypeEnum.Semplice\r\n        \">\r\n        <div class=\"col-md-4\">\r\n          <mat-form-field class=\"nameSection\" appearance=\"outline\">\r\n            <mat-label> Nome sezione (invio per confermare) </mat-label>\r\n\r\n            <input matInput [(ngModel)]=\"formFieldGroupName\" [ngModelOptions]=\"{ standalone: true }\"\r\n              (keyup)=\"onFormFieldGroupNameKeyUp($event)\" placeholder=\"Nome sezione (invio per confermare)\" />\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"col-md-8\">\r\n          <span class=\"mr-3\">Sezioni inserite:</span>\r\n          <ul class=\"section-list\">\r\n            <li *ngFor=\"let groupName of form.FormFieldsGroups; let i = index\">\r\n              <span class=\"sectionInsert\">\r\n                <tmw-icon class=\"mat-icon mr-1\" (click)=\"onDeleteFormFieldGroupName(groupName.Name)\" name=\"x\"></tmw-icon>\r\n                <tmw-icon class=\"mat-icon mr-1 icon-black\" (click)=\"onEditFormFieldGroupName(groupName)\" name=\"edit\"></tmw-icon>\r\n                {{ groupName.Name }}\r\n              </span>\r\n            </li>\r\n          </ul>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"mt-2 d-flex justify-content-end\">\r\n        <!-- IMPORT -->\r\n        <button *ngIf=\"!this.formID\" class=\"btn btn-clear button-next me-2\" mat-raised-button color=\"primary\"\r\n          (click)=\"importModule()\">\r\n          Importa\r\n        </button>\r\n        <!-- END IMPORT -->\r\n\r\n        <button class=\"button-next\" mat-raised-button color=\"primary\" matStepperNext [disabled]=\"formFormGroup.invalid\">\r\n          Successivo\r\n        </button>\r\n      </div>\r\n    </form>\r\n  </mat-step>\r\n  <!--#endregion DATI GENERALI DELLA FORM -->\r\n\r\n  <!--#region AGGIUNTA DEI CAMPI DELLA FORM -->\r\n  <mat-step class=\"dynamic-module-configurator-add-field\" [completed]=\"isFieldStepCompleted()\">\r\n    <ng-template matStepLabel>\r\n      <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n      <mat-label>Campi da inserire</mat-label>\r\n    </ng-template>\r\n\r\n    <div class=\"row justify-content-start addButtons\">\r\n      <div class=\"col\">\r\n        <button class=\"btn btn-primary me-2\" mat-raised-button color=\"primary\" type=\"button\"\r\n          (click)=\"openFieldDialog()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Aggiungi campo</span>\r\n        </button>\r\n\r\n        <!-- <button\r\n          class=\"btn btn-outlined me-2\"\r\n          mat-raised-button\r\n          color=\"primary\"\r\n          type=\"button\"\r\n          (click)=\"openInnerFormDialog()\"\r\n          *ngIf=\"!innerFormManagment\"\r\n        >\r\n          <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Aggiungi form di dettaglio</span>\r\n        </button> -->\r\n\r\n        <button class=\"btn btn-outlined btn-outlined-red me-2\" mat-raised-button color=\"red\" type=\"button\"\r\n          (click)=\"deleteSelectedFields('Fields')\" *ngIf=\"showDeleteButton\">\r\n          <tmw-icon class=\"mat-icon\" name=\"x\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Elimina campi selezionati</span>\r\n        </button>\r\n\r\n        <button class=\"btn btn-outlined me-2\" mat-raised-button color=\"accent\" type=\"button\"\r\n          (click)=\"openAiEditDialog()\" *ngIf=\"endPointConfiguration?.Forms?.SpeechToFormEditEndPoint\">\r\n          <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">{{ isNewForm ? 'Crea con AI' : 'Modifica con AI' }}</span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <tmw-table class=\"table\" #fieldsTable [createMatCard]=\"false\" [columns]=\"fieldsColumns\" [enableDragAndDrop]=\"false\"\r\n      [enableDragColumn]=\"true\" [changeDragRowPosition]=\"true\" [isMultipleSelection]=\"true\" [data]=\"form.Fields\"\r\n      [emptyTableMessage]=\"'Nessun campo inserito'\" (dragReleasedEvent)=\"onDragReleased($event)\"\r\n      (dragEndedEvent)=\"onDragEnded($event)\" (checkboxInfo)=\"toggleDeleteButton($event)\" [searchText]=\"''\"\r\n      [paginatorVisible]=\"false\">\r\n    </tmw-table>\r\n\r\n    <div class=\"mt-2 d-flex justify-content-end\">\r\n      <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n        Precedente\r\n      </button>\r\n      <button class=\"button-next\" mat-raised-button color=\"primary\" matStepperNext [disabled]=\"!isFieldStepCompleted()\"\r\n        [ngClass]=\"{ disabled: formFormGroup.invalid }\" (click)=\"setFormStatus(false)\">\r\n        Successivo\r\n      </button>\r\n    </div>\r\n  </mat-step>\r\n  <!--#endregion AGGIUNTA DEI CAMPI DELLA FORM -->\r\n\r\n  <ng-template matStepperIcon=\"edit\" let-index=\"index\">\r\n    <mat-label>{{ index + 1 }}</mat-label>\r\n  </ng-template>\r\n\r\n  <!--#region AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n  <!--#<mat-step>\r\n    <ng-template matStepLabel>\r\n      <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n      Azioni aggiuntive sui record\r\n    </ng-template>\r\n\r\n    <div class=\"row justify-content-start addButtons\">\r\n      <div class=\"col\">\r\n        <button\r\n          class=\"btn btn-primary\"\r\n          mat-raised-button\r\n          color=\"primary\"\r\n          type=\"button\"\r\n          (click)=\"openActionOnRecordDialog()\"\r\n        >\r\n          <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Aggiungi azione</span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n    <eqp-table\r\n      class=\"table\"\r\n      #actionsOnRecordTable\r\n      [createMatCard]=\"false\"\r\n      [columns]=\"actionsOnRecordColumns\"\r\n      [data]=\"form.ActionsOnRecord\"\r\n      [emptyTableMessage]=\"'Nessuna action inserita'\"\r\n      [searchText]=\"''\"\r\n    >\r\n    </eqp-table>\r\n\r\n    <div class=\"mt-2 d-flex justify-content-end buttonsNextDiv\">\r\n      <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n        Precedente\r\n      </button>\r\n      <button\r\n        class=\"button-next\"\r\n        mat-raised-button\r\n        color=\"primary\"\r\n        matStepperNext\r\n        (click)=\"setFormStatus(false)\"\r\n      >\r\n        Successivo\r\n      </button>\r\n    </div>\r\n  </mat-step>-->\r\n  <!--#endregion AGGIUNTA DELLE OPERAZIONI SUI RECORD -->\r\n\r\n\r\n\r\n  <!--#region AGGIUNTA DEI BOTTONI AZIONE -->\r\n  <mat-step>\r\n    <ng-template matStepLabel>\r\n      <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n      Bottoni Azione\r\n    </ng-template>\r\n\r\n    <div class=\"row justify-content-start addButtons\">\r\n      <div class=\"col\">\r\n        <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\"\r\n          (click)=\"openActionButtonDialog()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Aggiungi bottone azione</span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n    <tmw-table class=\"table\" #actionButtonsTable [createMatCard]=\"false\" [columns]=\"actionButtonsColumns\"\r\n      [data]=\"form.ActionButtons\" [emptyTableMessage]=\"'Nessun bottone azione inserito'\" [searchText]=\"''\"\r\n      [enableDragAndDrop]=\"false\" [enableDragColumn]=\"true\" [changeDragRowPosition]=\"true\"\r\n      (dragReleasedEvent)=\"onDragReleased($event)\" (dragEndedEvent)=\"onDragEnded($event)\">\r\n    </tmw-table>\r\n\r\n    <div class=\"mt-2 d-flex justify-content-end buttonsNextDiv\">\r\n      <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n        Precedente\r\n      </button>\r\n      <button class=\"button-next\" mat-raised-button color=\"primary\" matStepperNext (click)=\"setFormStatus(false)\">\r\n        Successivo\r\n      </button>\r\n    </div>\r\n  </mat-step>\r\n  <!--#endregion AGGIUNTA DEI BOTTONI AZIONE -->\r\n\r\n\r\n\r\n  <!--#region TRIGGERS-->\r\n  <mat-step>\r\n    <ng-template matStepLabel>\r\n      <div class=\"stepper-header-overlay\" (click)=\"setFormStatus(false)\"></div>\r\n      Triggers\r\n    </ng-template>\r\n\r\n    <div class=\"row justify-content-start addButtons\">\r\n      <div class=\"col\">\r\n        <button class=\"btn btn-primary\" mat-raised-button color=\"primary\" type=\"button\" (click)=\"openTriggersDialog()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Aggiungi trigger</span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <tmw-table class=\"table\" #triggersTable [createMatCard]=\"false\" [columns]=\"triggersColumns\" [data]=\"form.Triggers\"\r\n      [emptyTableMessage]=\"'Nessuna action inserita'\" [searchText]=\"''\">\r\n    </tmw-table>\r\n\r\n    <div class=\"mt-2 d-flex justify-content-end\">\r\n      <button class=\"mr-2 previous\" mat-raised-button matStepperPrevious>\r\n        Precedente\r\n      </button>\r\n      <button class=\"button-next\" mat-raised-button color=\"primary\" matStepperNext [disabled]=\"!isFieldStepCompleted()\"\r\n        [ngClass]=\"{ disabled: formFormGroup.invalid }\" (click)=\"setFormStatus(true)\">\r\n        Successivo\r\n      </button>\r\n    </div>\r\n\r\n  </mat-step>\r\n  <!--#endregion TRIGGERS-->\r\n\r\n  <!--#region VISUALIZZAZIONE FORM CREATA -->\r\n  <mat-step class=\"dynamic-module-configurator-preview\">\r\n    <ng-template matStepLabel>\r\n      <div class=\"stepper-header-overlay\"\r\n        (click)=\"setFormStatus( formFormGroup.valid && form.Fields && form.Fields.length > 0 )\"></div>\r\n      Anteprima\r\n    </ng-template>\r\n\r\n    <div class=\"row align-items-center addButtons\">\r\n      <div class=\"col-auto\">\r\n        <button class=\"btn btn-outlined me-2\" [class.active]=\"showAllFields\" mat-raised-button color=\"primary\"\r\n          type=\"button\" (click)=\"showAllFields = !showAllFields\">\r\n          <tmw-icon class=\"mat-icon\" [name]=\"showAllFields ? 'eye-off' : 'eye'\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Mostra anche i campi invisibili</span>\r\n        </button>\r\n      </div>\r\n      <div class=\"col-auto\" *ngIf=\"contestualization && contestualization.length > 0\">\r\n        <button class=\"btn btn-outlined me-2\" [class.active]=\"selectedContestualization != null\" mat-raised-button\r\n          color=\"primary\" type=\"button\" (click)=\"openContestualizationDialog()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"adjustments-horizontal\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Contestualizzazione</span>\r\n        </button>\r\n      </div>\r\n      <div class=\"col-auto\">\r\n        <button class=\"btn btn-outlined me-2\" [class.active]=\"showGraficaPanel\" mat-raised-button color=\"accent\"\r\n          type=\"button\" (click)=\"showGraficaPanel = !showGraficaPanel\">\r\n          <tmw-icon class=\"mat-icon\" name=\"palette\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Grafica</span>\r\n        </button>\r\n      </div>\r\n      <div class=\"col-auto\">\r\n        <button class=\"btn btn-outlined me-2\" [class.active]=\"visualEditorActive\" mat-raised-button color=\"accent\"\r\n          type=\"button\" (click)=\"toggleVisualEditor()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"layout-grid\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Visual Editor</span>\r\n        </button>\r\n      </div>\r\n      <div class=\"col-auto\" *ngIf=\"endPointConfiguration?.Forms?.SpeechToFormSpeechToFormEditEndPointEndPoint\">\r\n        <button class=\"btn btn-outlined me-2\" mat-raised-button color=\"accent\" type=\"button\"\r\n          (click)=\"openAiEditDialog()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n          <span style=\"margin-left: 10px\">Modifica con AI</span>\r\n        </button>\r\n      </div>\r\n    </div>\r\n\r\n    <div *ngIf=\"veSwapField\" class=\"ve-swap-banner\">\r\n      <tmw-icon class=\"mat-icon ve-swap-banner-icon\" name=\"arrows-left-right\"></tmw-icon>\r\n      <span>Clicca sul campo con cui vuoi scambiare la posizione</span>\r\n      <button mat-stroked-button color=\"warn\" type=\"button\" (click)=\"veCancelSwap()\" class=\"ve-swap-banner-cancel\">\r\n        <tmw-icon class=\"mat-icon\" name=\"x\"></tmw-icon>\r\n        Annulla\r\n      </button>\r\n    </div>\r\n\r\n    <div *ngIf=\"showGraficaPanel\" class=\"mt-2\">\r\n      <mat-accordion class=\"configurator-accordion\" [multi]=\"true\" displayMode=\"flat\">\r\n        <mat-expansion-panel class=\"configurator-panel\" [expanded]=\"true\">\r\n          <mat-expansion-panel-header>\r\n            <mat-panel-title>Grafica</mat-panel-title>\r\n          </mat-expansion-panel-header>\r\n          <div class=\"form-grafica-ai-row\" *ngIf=\"endPointConfiguration?.Forms?.SpeechToGraphicsEndPoint\">\r\n            <button mat-stroked-button type=\"button\" class=\"btn-form-graphic-suggest\"\r\n              [disabled]=\"formGraphicSuggestLoading\" (click)=\"toggleFormGraphicSuggestInput()\">\r\n              <mat-spinner *ngIf=\"formGraphicSuggestLoading\" diameter=\"14\"\r\n                style=\"display:inline-block;vertical-align:middle;margin-right:4px\"></mat-spinner>\r\n              <tmw-icon class=\"mat-icon\" *ngIf=\"!formGraphicSuggestLoading\" name=\"palette\"></tmw-icon>\r\n              {{ formGraphicSuggestLoading ? 'Elaborazione...' : 'Suggerisci Grafica Completa' }}\r\n            </button>\r\n            <div class=\"form-hint-input-group\" *ngIf=\"showFormGraphicSuggestInput && !formGraphicSuggestLoading\">\r\n              <select class=\"form-graphic-scope-select\" [(ngModel)]=\"formGraphicScope\"\r\n                [ngModelOptions]=\"{standalone: true}\">\r\n                <option value=\"all\">Tutto</option>\r\n                <option value=\"main\">Principale</option>\r\n                <option *ngFor=\"let opt of presentFieldTypeOptions\" [value]=\"opt.value\">{{ opt.label }}</option>\r\n              </select>\r\n              <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeHint()\"\r\n                matTooltip=\"Suggerimento casuale\">\r\n                <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n              </button>\r\n              <button type=\"button\" class=\"btn-generate-bg\" [class.active]=\"generateBackground\"\r\n                (click)=\"generateBackground = !generateBackground\"\r\n                [matTooltip]=\"generateBackground ? 'Sfondo AI: attivo' : 'Genera anche sfondo AI'\">\r\n                <tmw-icon class=\"mat-icon\" name=\"photo\"></tmw-icon>\r\n              </button>\r\n              <input type=\"text\" class=\"form-graphic-hint-input\" [(ngModel)]=\"formGraphicSuggestHint\"\r\n                [ngModelOptions]=\"{standalone: true}\"\r\n                placeholder=\"es. toni di blu scuro, stile professionale, sfondo sfumato...\" />\r\n              <button type=\"button\" class=\"btn-form-graphic-send\" (click)=\"onFormGraphicSuggest()\"\r\n                matTooltip=\"Applica suggerimento grafico al form\">\r\n                <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n              </button>\r\n            </div>\r\n          </div>\r\n          <hr class=\"grafica-ai-separator\" />\r\n          <div class=\"row align-items-start grafica-row\">\r\n            <div class=\"col-md-4\">\r\n              <p class=\"grafica-field-label\">Immagine di sfondo</p>\r\n              <tmw-attachments [attachmentsList]=\"bgAttachmentList\" [showMatCard]=\"false\" [allowOnlyImages]=\"true\"\r\n                [isDisabled]=\"false\" [showInlinePreview]=\"true\" [multipleAttachment]=\"false\" [showHeader]=\"false\"\r\n                [allowedTypes]=\"[AttachmentType.FILE]\" (localEditedAttachments)=\"onBgImageChange($event)\"\r\n                (onDeleteAttachment)=\"onBgImageDelete()\">\r\n              </tmw-attachments>\r\n            </div>\r\n            <div class=\"col-md-4\">\r\n              <mat-form-field class=\"w-100\" appearance=\"outline\">\r\n                <mat-label>CSS Principale</mat-label>\r\n                <textarea matInput [(ngModel)]=\"form.ThemeCSS\" [ngModelOptions]=\"{ standalone: true }\"\r\n                  placeholder=\"es. max-width: 800px; padding: 16px; background: #f5f5f5;\" rows=\"5\"></textarea>\r\n              </mat-form-field>\r\n            </div>\r\n            <div class=\"col-md-4\">\r\n              <mat-form-field class=\"w-100\" appearance=\"outline\">\r\n                <mat-label>CSS Titolo</mat-label>\r\n                <textarea matInput [(ngModel)]=\"form.TitleCSS\"\r\n                  (ngModelChange)=\"previewForm && (previewForm.TitleCSS = $event)\"\r\n                  [ngModelOptions]=\"{ standalone: true }\"\r\n                  placeholder=\"es. font-size: 2rem; font-weight: 700; color: #fff;\" rows=\"5\"></textarea>\r\n              </mat-form-field>\r\n            </div>\r\n          </div>\r\n        </mat-expansion-panel>\r\n      </mat-accordion>\r\n    </div>\r\n\r\n    <hr />\r\n\r\n    <div class=\"dynamic-module-preview\" [style]=\"previewBgStyle\">\r\n      <div [style]=\"previewThemeStyle\">\r\n        <add-form-record *ngIf=\"previewForm && formCompleted\" [form]=\"previewForm\" [userID]=\"UserID\" [orgaID]=\"orgaID\"\r\n          [formulaObject]=\"formulaObject\" [configurations]=\"viewConfig\" [showAllFields]=\"showAllFields\"\r\n          [QueryEditorComponent]=\"QueryEditorComponent\" [endPointConfiguration]=\"endPointConfiguration\"\r\n          [visualEditorMode]=\"visualEditorActive\" [veSwapFieldCode]=\"veSwapField?.Label ?? null\"\r\n          (veFieldClick)=\"onVeFieldClick($event)\" (out)=\"onExternalComponentOut($event)\"\r\n          (fireTrigger)=\"onFireTrigger($event)\" [inConfig]=\"true\">\r\n        </add-form-record>\r\n      </div>\r\n    </div>\r\n\r\n    <div class=\"mt-2 d-flex justify-content-end button-nextDiv\">\r\n      <button class=\"mr-2 button-exit\" mat-raised-button matStepperPrevious (click)=\"setFormStatus(false)\">\r\n        Precedente\r\n      </button>\r\n      <button class=\"button-next\" mat-raised-button color=\"primary\" (click)=\"saveForm()\">\r\n        Salva form\r\n      </button>\r\n    </div>\r\n  </mat-step>\r\n  <!--#endregion VISUALIZZAZIONE FORM CREATA -->\r\n\r\n</mat-horizontal-stepper>\r\n\r\n<!-- DIALOG AGGIUNTA/MODIFICA CAMPO -->\r\n<ng-template #dialogField>\r\n  <eqp-dynamic-module-add-form-field [form]=\"form\" [endPointConfiguration]=\"endPointConfiguration\"\r\n    [field]=\"selectedField\" [formulaObject]=\"formulaObject\" [indexField]=\"indexSelectedField\"\r\n    [availableFields]=\"form.Fields\" [contestualization]=\"contestualization\"\r\n    [QueryEditorComponent]=\"QueryEditorComponent\" [fieldsExtraConfig]=\"fieldsExtraConfig\"\r\n    [actionButtons]=\"actionButtons\" [aiFieldSuggestLoading]=\"aiFieldSuggestLoading\" [formFieldsGroups]=\"\r\n      form.FormScalarType != FormScalarTypeEnum.Semplice\r\n      ? form.FormFieldsGroups\r\n      : null\r\n      \" (openAiEditForFieldEvent)=\"onAiEditForField($event)\" (openAiGraphicSuggestEvent)=\"onAiGraphicSuggest($event)\"\r\n    (saveFieldEvent)=\"onSaveField($event)\" (out)=\"onExternalComponentOut($event)\">\r\n  </eqp-dynamic-module-add-form-field>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER VISUALIZZARE LA COLONNA DELLA SEZIONE NELLA TABELLA DEI FIELDS -->\r\n<ng-template #fieldSectionColumnTemplate let-row=\"row\">\r\n  <tmw-select [arrayData]=\"form.FormFieldsGroups\" [(ngModelInput)]=\"row.FieldGroup\" [arrayKeyProperty]=\"'Name'\"\r\n    [arrayValueProperty]=\"'Name'\" placeholder=\"Sezione\" [isRequired]=\"true\" [includeFullObject]=\"false\">\r\n  </tmw-select>\r\n</ng-template>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE UNA ACTION SUI RECORD DELLA FORM -->\r\n<ng-template #dialogActionOnRecord>\r\n\r\n  <div class=\"container-fluid third-modal\" style=\"max-height: 70vh !important; overflow-x: hidden; overflow-y: auto\">\r\n    <form [formGroup]=\"actionOnRecordFormGroup\">\r\n      <div class=\"row title\">\r\n        <div class=\"header-title-standard\">\r\n          {{\r\n          indexSelectedAction != null && indexSelectedAction >= 0\r\n          ? \"Modifica\"\r\n          : \"Aggiungi\"\r\n          }}\r\n          azione sul record\r\n        </div>\r\n      </div>\r\n      <div class=\"row\">\r\n        <div class=\"col-sm-12 col-md-4 mt-2\">\r\n          <mat-label> Nome </mat-label>\r\n          <mat-form-field>\r\n            <input formControlName=\"Name\" required matInput [(ngModel)]=\"selectedAction.Name\" />\r\n          </mat-form-field>\r\n        </div>\r\n        <div class=\"col-sm-12 col-md-4 mt-2\">\r\n          <mat-label> Icona </mat-label>\r\n          <mat-form-field>\r\n            <input formControlName=\"Icon\" required matInput [(ngModel)]=\"selectedAction.Icon\" />\r\n          </mat-form-field>\r\n        </div>\r\n\r\n        <div class=\"col-12 mt-2\">\r\n          <mat-label>Azione (Javascript)</mat-label>\r\n          <mat-form-field>\r\n            <textarea matInput [rows]=\"3\" formControlName=\"Action\" required [(ngModel)]=\"selectedAction.Action\"\r\n              [matAutocomplete]=\"actionAutocomplete\" (keyup)=\"setActionAutocompleteOptions($event)\"\r\n              (focus)=\"setActionAutocompleteOptions(null)\" style=\"\r\n                border: 1px solid lightgray !important;\r\n                border-radius: 10px !important;\r\n              \"></textarea>\r\n            <mat-autocomplete #actionAutocomplete=\"matAutocomplete\">\r\n              <mat-option *ngFor=\"let option of actionAutocompleteOptions\" [value]=\"option.value\">\r\n                {{ option.label }}\r\n              </mat-option>\r\n            </mat-autocomplete>\r\n          </mat-form-field>\r\n        </div>\r\n      </div>\r\n\r\n      <div class=\"d-flex justify-content-end mt-2 mb-1\">\r\n        <div class=\"buttonsForm\">\r\n          <button class=\"btn mat-raised-button cancel\" (click)=\"closeDialogActionOnRecord()\" type=\"button\">\r\n            Annulla\r\n          </button>\r\n          <button class=\"mr-2 save\" mat-raised-button color=\"primary\" (click)=\"saveActionOnRecord()\"\r\n            [disabled]=\"actionOnRecordFormGroup.invalid\" type=\"button\">\r\n            Salva\r\n          </button>\r\n        </div>\r\n      </div>\r\n    </form>\r\n  </div>\r\n</ng-template>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE UN BOTTONE AZIONE -->\r\n<ng-template #dialogActionButton>\r\n  <action-button-creator [endPointConfiguration]=\"endPointConfiguration\" [form]=\"form\" [formulas]=\"actionButtons\"\r\n    [actionButton]=\"selectedActionButton\" (onSaveRecord)=\"saveActionButtons($event)\"></action-button-creator>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER CONFIGURARE LE FORM DI DETTAGLIO -->\r\n<ng-template #dialogInnerForm>\r\n  <!-- [form]=\"selectedInnerForm\"\r\n    [innerFormManagment]=\"true\"\r\n    [innerFormRef]=\"dialogInnerFormRef\" -->\r\n  <eqp-dynamic-module-configurator [configurations]=\"innerFormConfig\" (saveFormEvent)=\"onSaveOrExitInnerForm($event)\">\r\n  </eqp-dynamic-module-configurator>\r\n</ng-template>\r\n\r\n<!-- TEMPLATE PER IMPORT -->\r\n<ng-template #dialogImport>\r\n  <mat-card class=\"importDialog\">\r\n    <mat-card-header class=\"p-2 justify-content-around\">\r\n      <mat-card-title>\r\n        Import\r\n      </mat-card-title>\r\n    </mat-card-header>\r\n    <mat-card-content class=\"p-2\">\r\n      <input type=\"file\" class=\"input-file-btn pb-2\" (change)=\"onImport($event)\" />\r\n    </mat-card-content>\r\n    <mat-card-footer class=\"p-2 d-flex justify-content-end\">\r\n      <button class=\"btn btn-clear button-back me-2\" mat-raised-button color=\"disabled\" (click)=\"closeImport()\">\r\n        Annulla\r\n      </button>\r\n    </mat-card-footer>\r\n  </mat-card>\r\n</ng-template>\r\n\r\n<!-- DIALOG PER AGGIUNGERE/MODIFICARE I TRIGGERS -->\r\n<ng-template #dialogTriggers>\r\n  <trigger-creator [endPointConfiguration]=\"endPointConfiguration\" [form]=\"form\" [formulas]=\"triggers\"\r\n    [trigger]=\"selectedTrigger\" (onSaveRecord)=\"saveTrigger($event)\"></trigger-creator>\r\n</ng-template>\r\n\r\n<!-- DIALOG MODIFICA CON AI -->\r\n<ng-template #dialogAiEdit>\r\n  <mat-card style=\"min-width: 480px\">\r\n    <div class=\"ai-dialog-header\">\r\n      <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n      <span>{{ isNewForm ? 'Crea form con AI' : 'Modifica form con AI' }}</span>\r\n      <button *ngIf=\"aiPromptHistory.length > 0\" mat-icon-button type=\"button\" class=\"ai-history-toggle-btn\"\r\n        [class.active]=\"showAiPromptHistory\"\r\n        [matTooltip]=\"showAiPromptHistory ? 'Nascondi storico richieste' : 'Mostra storico richieste'\"\r\n        (click)=\"showAiPromptHistory = !showAiPromptHistory\">\r\n        <tmw-icon class=\"mat-icon\" [name]=\"showAiPromptHistory ? 'history-off' : 'history'\"></tmw-icon>\r\n      </button>\r\n    </div>\r\n\r\n    <div class=\"ai-dialog-body-flex\">\r\n      <mat-card-content class=\"p-3 ai-dialog-main-content\">\r\n        <!-- Prompt textarea + microfono -->\r\n        <div style=\"position: relative\">\r\n          <mat-form-field appearance=\"outline\" style=\"width: 100%\">\r\n            <mat-label>{{ isNewForm ? 'Descrivi il form da creare' : 'Descrivi la modifica da apportare' }}</mat-label>\r\n            <textarea matInput [(ngModel)]=\"aiEditPrompt\" rows=\"5\" [disabled]=\"aiEditLoading\"\r\n              [placeholder]=\"isNewForm ? 'Es: crea un form per la registrazione pazienti con campi nome, cognome, data di nascita e codice fiscale...' : 'Es: aggiungi un campo data di nascita, rimuovi il campo email, rendi obbligatorio il campo telefono...'\"></textarea>\r\n          </mat-form-field>\r\n          <tmw-icon class=\"mat-icon\" *ngIf=\"true\" SpeechToText [(bindedText)]=\"aiEditPrompt\"\r\n            style=\"position: absolute; right: 12px; top: 12px; cursor: pointer; color: #666\"\r\n            [matTooltip]=\"isNewForm ? 'Parla per descrivere il form' : 'Parla per dettare la modifica'\" name=\"microphone\"></tmw-icon>\r\n        </div>\r\n\r\n        <!-- Allegati + genera sfondo -->\r\n        <div class=\"mb-2 mt-1\" style=\"display:flex;align-items:center;gap:8px;flex-wrap:wrap\">\r\n          <button mat-stroked-button type=\"button\" [disabled]=\"aiEditLoading\" (click)=\"aiEditFileInput.click()\">\r\n            <tmw-icon class=\"mat-icon\" name=\"paperclip\"></tmw-icon>\r\n            <span style=\"margin-left: 6px\">Aggiungi allegati (PDF o immagini)</span>\r\n          </button>\r\n          <input #aiEditFileInput type=\"file\" multiple accept=\"image/*,application/pdf\" style=\"display: none\"\r\n            (change)=\"onAiEditFileChange($event)\" />\r\n          <button *ngIf=\"endPointConfiguration?.Forms?.SpeechToFormEditEndPoint\" type=\"button\" class=\"btn-generate-bg\"\r\n            [class.active]=\"aiGenerateBackground\" [disabled]=\"aiEditLoading\"\r\n            (click)=\"aiGenerateBackground = !aiGenerateBackground\"\r\n            [matTooltip]=\"aiGenerateBackground ? 'Sfondo AI: attivo' : 'Genera anche sfondo AI'\">\r\n            <tmw-icon class=\"mat-icon\" name=\"photo\"></tmw-icon>\r\n          </button>\r\n        </div>\r\n        <ul *ngIf=\"aiEditAttachments.length > 0\" style=\"list-style: none; padding: 0; margin: 0 0 12px\">\r\n          <li *ngFor=\"let att of aiEditAttachments; let i = index\"\r\n            style=\"display: flex; align-items: center; gap: 6px; margin-bottom: 4px\">\r\n            <tmw-icon class=\"mat-icon\" style=\"font-size: 18px\" name=\"file\"></tmw-icon>\r\n            <span>{{ att.fileName }}</span>\r\n            <tmw-icon class=\"mat-icon\" style=\"font-size: 18px; cursor: pointer; color: #999\"\r\n              (click)=\"removeAiEditAttachment(i)\" name=\"x\"></tmw-icon>\r\n          </li>\r\n        </ul>\r\n\r\n        <!-- Autosave -->\r\n        <mat-slide-toggle [(ngModel)]=\"aiEditAutosave\" [disabled]=\"aiEditLoading\" color=\"primary\">\r\n          {{ isNewForm ? 'Salva automaticamente dopo la creazione' : 'Salva automaticamente dopo la modifica' }}\r\n        </mat-slide-toggle>\r\n\r\n        <!-- Conto alla rovescia mostrato mentre AI elabora -->\r\n        <div *ngIf=\"aiEditLoading && aiEditEstimatedSec > 0\" class=\"mt-3 mb-1\">\r\n          <!-- Fase normale: countdown in corso -->\r\n          <ng-container *ngIf=\"!aiEditIsOvertime\">\r\n            <mat-progress-bar mode=\"determinate\" [value]=\"(1 - aiEditCountdown / aiEditEstimatedSec) * 100\"\r\n              color=\"accent\">\r\n            </mat-progress-bar>\r\n            <div style=\"text-align: center; margin-top: 4px\">\r\n              <small class=\"text-muted\">\r\n                Operazione in corso — tempo stimato rimanente: <b>{{ aiEditCountdown }}s</b>\r\n              </small>\r\n            </div>\r\n          </ng-container>\r\n          <!-- Fase overtime: il server impiega più del previsto -->\r\n          <ng-container *ngIf=\"aiEditIsOvertime\">\r\n            <mat-progress-bar mode=\"indeterminate\" color=\"warn\"></mat-progress-bar>\r\n            <div style=\"display: flex; align-items: center; justify-content: center; gap: 12px; margin-top: 6px\">\r\n              <small class=\"text-muted\">\r\n                Sembra che ci voglia più del previsto — <b>+{{ -aiEditCountdown }}s</b>\r\n              </small>\r\n              <button mat-stroked-button type=\"button\" color=\"warn\" (click)=\"cancelAiEdit()\"\r\n                style=\"height: 26px; line-height: 26px; font-size: 12px; padding: 0 10px; min-width: unset\">\r\n                Annulla\r\n              </button>\r\n            </div>\r\n          </ng-container>\r\n        </div>\r\n\r\n        <!-- Stima costo AI (aggiornata in tempo reale al variare del prompt, del modello citato,\r\n             degli allegati e del numero di split ipotizzato) -->\r\n        <div class=\"ai-cost-panel mt-3\" *ngIf=\"!aiEditLoading\">\r\n          <div class=\"ai-cost-panel-icon\">\r\n            <tmw-icon class=\"mat-icon\" name=\"cash\"></tmw-icon>\r\n          </div>\r\n\r\n          <div class=\"ai-cost-panel-body\">\r\n            <div class=\"ai-cost-panel-header\">\r\n              <span class=\"ai-cost-panel-title\">Costo stimato uso AI</span>\r\n              <span class=\"ai-cost-panel-model\">{{ aiEditDetectedModelLabel }}</span>\r\n            </div>\r\n\r\n            <ng-container *ngIf=\"aiEditSplitCount <= 1; else aiCostSplitLines\">\r\n              <div class=\"ai-cost-panel-line\">\r\n                <span class=\"ai-cost-panel-line-label\">Primo uso</span>\r\n                <span class=\"ai-cost-panel-line-value\">al massimo {{ formatAiEditCost(aiEditCostFirstEur) }} €</span>\r\n              </div>\r\n              <div class=\"ai-cost-panel-line\">\r\n                <span class=\"ai-cost-panel-line-label\">Usi successivi</span>\r\n                <span class=\"ai-cost-panel-line-value\">al massimo {{ formatAiEditCost(aiEditCostSubsequentEur) }}\r\n                  €</span>\r\n              </div>\r\n            </ng-container>\r\n            <ng-template #aiCostSplitLines>\r\n              <div class=\"ai-cost-panel-line\">\r\n                <span class=\"ai-cost-panel-line-label\">{{ aiEditSplitCount }} parti parallele</span>\r\n                <span class=\"ai-cost-panel-line-value\">al massimo {{ formatAiEditCost(aiEditCostFirstEur) }} €</span>\r\n              </div>\r\n              <div class=\"ai-cost-panel-hint\">{{ aiEditSplitWarmUpApplies\r\n                ? 'Il server scalda la cache prima dello split: risparmio su ' + aiEditSplitCount + ' chiamate'\r\n                : 'Split troppo piccolo per la cache: nessun beneficio, prezzo pieno su ' + aiEditSplitCount + '\r\n                chiamate' }}</div>\r\n            </ng-template>\r\n          </div>\r\n\r\n          <div class=\"ai-cost-panel-split\"\r\n            matTooltip=\"Numero di split ipotizzati per la stima (1 = nessuno split, altrimenti 3-12: il server non usa mai 2 split)\">\r\n            <span class=\"ai-cost-panel-split-label\">Split</span>\r\n            <div class=\"ai-cost-panel-split-stepper\">\r\n              <button type=\"button\" class=\"ai-cost-split-btn\" [disabled]=\"aiEditSplitCount <= 1\"\r\n                (click)=\"decrementAiEditSplitCount()\">\r\n                <tmw-icon class=\"mat-icon\" name=\"minus\"></tmw-icon>\r\n              </button>\r\n              <input type=\"number\" class=\"ai-cost-split-input\" [(ngModel)]=\"aiEditSplitCount\" min=\"1\" max=\"12\" />\r\n              <button type=\"button\" class=\"ai-cost-split-btn\" [disabled]=\"aiEditSplitCount >= 12\"\r\n                (click)=\"incrementAiEditSplitCount()\">\r\n                <tmw-icon class=\"mat-icon\" name=\"plus\"></tmw-icon>\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </mat-card-content>\r\n\r\n      <!-- Pannello storico richieste -->\r\n      <div *ngIf=\"showAiPromptHistory && aiPromptHistory.length > 0\" class=\"ai-history-panel\">\r\n        <div class=\"ai-history-panel-title\">\r\n          <tmw-icon class=\"mat-icon\" style=\"font-size: 16px; width: 16px; height: 16px\" name=\"history\"></tmw-icon>\r\n          <span>Storico richieste</span>\r\n        </div>\r\n        <div class=\"ai-history-list\">\r\n          <div *ngFor=\"let prompt of aiPromptHistory; let i = index\" class=\"ai-history-item\">\r\n            <span class=\"ai-history-index\">{{ i + 1 }}</span>\r\n            <span class=\"ai-history-text\">{{ prompt }}</span>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n\r\n    <mat-card-footer class=\"p-2 d-flex justify-content-end\" style=\"gap: 8px\">\r\n      <button mat-raised-button type=\"button\" [disabled]=\"aiEditLoading\" (click)=\"closeAiEditDialog()\">\r\n        Annulla\r\n      </button>\r\n      <button mat-raised-button color=\"primary\" type=\"button\" [disabled]=\"!aiEditPrompt?.trim() || aiEditLoading\"\r\n        (click)=\"sendAiEdit()\">\r\n        <mat-spinner *ngIf=\"aiEditLoading\" diameter=\"18\"\r\n          style=\"display: inline-block; margin-right: 6px; vertical-align: middle\"></mat-spinner>\r\n        <span>{{ aiEditLoading ? 'Elaborazione...' : (isNewForm ? 'Crea con AI' : 'Modifica con AI') }}</span>\r\n      </button>\r\n    </mat-card-footer>\r\n  </mat-card>\r\n</ng-template>\r\n\r\n<!-- VISUAL EDITOR — Tooltip azioni campo -->\r\n<ng-template #dialogVeTooltip>\r\n  <div class=\"ve-tooltip-panel\">\r\n    <div class=\"ve-tooltip-header\">\r\n      <tmw-icon class=\"mat-icon ve-tooltip-icon\" name=\"edit\"></tmw-icon>\r\n      <span class=\"ve-tooltip-title\">{{ veSelectedField?.Description }}</span>\r\n      <button mat-icon-button (click)=\"dialogVeTooltipRef?.close()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"x\"></tmw-icon>\r\n      </button>\r\n    </div>\r\n\r\n    <ng-container *ngIf=\"!veShowGraphicInput\">\r\n      <button mat-menu-item (click)=\"veEditField()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"settings\"></tmw-icon>\r\n        Modifica campo\r\n      </button>\r\n      <button mat-menu-item *ngIf=\"endPointConfiguration?.Forms?.SpeechToFormEditEndPoint\" (click)=\"veAiEdit()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n        Modifica con IA\r\n      </button>\r\n      <button mat-menu-item *ngIf=\"endPointConfiguration?.Forms?.SpeechToFormEditEndPoint\"\r\n        (click)=\"veShowGraphicInput = true\">\r\n        <tmw-icon class=\"mat-icon\" name=\"palette\"></tmw-icon>\r\n        Suggerisci Grafica\r\n      </button>\r\n      <button mat-menu-item (click)=\"veOpenReorder()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"grip-vertical\"></tmw-icon>\r\n        Riordina\r\n      </button>\r\n      <button mat-menu-item (click)=\"veStartSwap()\">\r\n        <tmw-icon class=\"mat-icon\" name=\"arrows-left-right\"></tmw-icon>\r\n        Scambia\r\n      </button>\r\n      <mat-divider></mat-divider>\r\n      <button mat-menu-item (click)=\"veDeleteField()\" style=\"color: #e53935;\">\r\n        <tmw-icon class=\"mat-icon\" style=\"color: #e53935;\" name=\"trash\"></tmw-icon>\r\n        Elimina campo\r\n      </button>\r\n    </ng-container>\r\n\r\n    <div class=\"ve-tooltip-graphic\" *ngIf=\"veShowGraphicInput\">\r\n      <div class=\"ve-tooltip-graphic-header\">\r\n        <button mat-icon-button (click)=\"veShowGraphicInput = false; veApplyToAllOfType = false\">\r\n          <tmw-icon class=\"mat-icon\" name=\"arrow-left\"></tmw-icon>\r\n        </button>\r\n        <span style=\"flex:1\">Grafica per \"{{ veSelectedField?.Label }}\"</span>\r\n        <button type=\"button\" class=\"btn-hint-randomize\" (click)=\"randomizeVeHint()\" matTooltip=\"Suggerimento casuale\">\r\n          <tmw-icon class=\"mat-icon\" name=\"bulb\"></tmw-icon>\r\n        </button>\r\n      </div>\r\n      <mat-form-field appearance=\"outline\" class=\"w-100\">\r\n        <mat-label>Suggerimento grafico</mat-label>\r\n        <textarea matInput [(ngModel)]=\"veGraphicHint\" [ngModelOptions]=\"{standalone: true}\" rows=\"3\"\r\n          placeholder=\"es. bordo blu, sfondo semi-trasparente, etichetta in grassetto...\"></textarea>\r\n      </mat-form-field>\r\n      <div class=\"ve-apply-all-row\">\r\n        <mat-slide-toggle [(ngModel)]=\"veApplyToAllOfType\" [ngModelOptions]=\"{standalone: true}\" color=\"primary\">\r\n          Applica a tutti i <strong>{{ veSelectedFieldTypeName }}</strong>\r\n        </mat-slide-toggle>\r\n      </div>\r\n      <div class=\"ve-tooltip-graphic-actions\">\r\n        <button mat-button (click)=\"veShowGraphicInput = false; veApplyToAllOfType = false\">Annulla</button>\r\n        <button mat-raised-button color=\"primary\" (click)=\"veSendGraphic()\">\r\n          <tmw-icon class=\"mat-icon\" name=\"wand\"></tmw-icon>\r\n          Invia\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n\r\n<!-- VISUAL EDITOR — Riordina campi -->\r\n<ng-template #dialogVeReorder>\r\n  <mat-card class=\"ve-reorder-card\">\r\n    <div class=\"ve-reorder-header\">\r\n      <tmw-icon class=\"mat-icon\" name=\"grip-vertical\"></tmw-icon>\r\n      <span>Riordina campi</span>\r\n    </div>\r\n    <mat-card-content>\r\n      <div cdkDropList (cdkDropListDropped)=\"onVeDragDropReorder($event)\" class=\"ve-reorder-list\">\r\n        <div *ngFor=\"let field of veReorderFields\" cdkDrag class=\"ve-reorder-item\">\r\n          <tmw-icon class=\"mat-icon ve-drag-handle\" cdkDragHandle name=\"grip-vertical\"></tmw-icon>\r\n          <span>{{ field.Description }}</span>\r\n          <div class=\"ve-drag-placeholder\" *cdkDragPlaceholder></div>\r\n        </div>\r\n      </div>\r\n    </mat-card-content>\r\n    <mat-card-footer class=\"p-2 d-flex justify-content-end\" style=\"gap: 8px\">\r\n      <button mat-button (click)=\"dialogVeReorderRef?.close()\">Annulla</button>\r\n      <button mat-raised-button color=\"primary\" (click)=\"veApplyReorder()\">OK</button>\r\n    </mat-card-footer>\r\n  </mat-card>\r\n</ng-template>\r\n\r\n<!-- DIALOG CONTESTUALIZZAZIONE DBGETTER -->\r\n<ng-template #dialogContestualization>\r\n  <mat-card style=\"min-width: 420px\">\r\n    <mat-card-header class=\"p-2\">\r\n      <mat-card-title>Contestualizzazione del DBGetter</mat-card-title>\r\n    </mat-card-header>\r\n    <mat-card-content class=\"p-3\">\r\n      <tmw-select [arrayData]=\"contestualization\" [(ngModelInput)]=\"selectedContestualization\"\r\n        [arrayKeyProperty]=\"'entityTableName'\" [arrayValueProperty]=\"'entityTableName'\"\r\n        (ngModelInputChange)=\"onContestualizationSelect()\" [placeholder]=\"'Contestualizzazione del DBGetter'\"\r\n        [includeFullObject]=\"false\"></tmw-select>\r\n      <div *ngIf=\"selectedContestualization != null\" class=\"mt-2\">\r\n        <input matInput class=\"form-control\" [(ngModel)]=\"selectedContestualizationValue\"\r\n          (change)=\"onContestualizationSelectValue()\">\r\n      </div>\r\n    </mat-card-content>\r\n    <mat-card-footer class=\"p-2 d-flex justify-content-end\" style=\"gap: 8px\">\r\n      <button class=\"btn btn-danger\"\r\n        (click)=\"applyContestualization(null); closeContestualizationDialog()\">Rimuovi</button>\r\n      <button class=\"btn btn-primary\"\r\n        (click)=\"applyContestualization(contestualization); closeContestualizationDialog()\">Applica</button>\r\n    </mat-card-footer>\r\n  </mat-card>\r\n</ng-template>\r\n\r\n<!-- MODALE STORICO PROMPT AI -->\r\n<ng-template #dialogAiHistory>\r\n  <div class=\"ai-history-dialog\">\r\n    <div class=\"ai-dialog-header\">\r\n      <tmw-icon class=\"mat-icon\" name=\"history\"></tmw-icon>\r\n      <span>Storico richieste AI</span>\r\n      <button mat-icon-button type=\"button\" class=\"ai-history-toggle-btn\" (click)=\"dialogAiHistoryRef?.close()\"\r\n        matTooltip=\"Chiudi\">\r\n        <tmw-icon class=\"mat-icon\" name=\"x\"></tmw-icon>\r\n      </button>\r\n    </div>\r\n    <div class=\"ai-history-dialog-body\">\r\n      <div *ngFor=\"let prompt of aiPromptHistory; let i = index\" class=\"ai-history-dialog-item\"\r\n        [class.ai-history-dialog-item--last]=\"i === aiPromptHistory.length - 1\">\r\n        <div class=\"ai-history-dialog-badge\">{{ i + 1 }}</div>\r\n        <div class=\"ai-history-dialog-prompt\">\r\n          <span class=\"ai-history-dialog-prompt-label\" *ngIf=\"i === aiPromptHistory.length - 1\">Più recente</span>\r\n          <span class=\"ai-history-dialog-prompt-text\">{{ prompt }}</span>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"ai-history-dialog-footer\">\r\n      <button mat-raised-button color=\"primary\" type=\"button\" (click)=\"dialogAiHistoryRef?.close()\">Chiudi</button>\r\n    </div>\r\n  </div>\r\n</ng-template>\r\n\r\n<!-- AI DataGetter: caricamento silent del QueryEditor per popolare DataGetterValue via prompt -->\r\n<div *ngIf=\"aiDataGetterLoading\" style=\"display:none; position:absolute; width:0; height:0; overflow:hidden\"\r\n  aria-hidden=\"true\">\r\n  <ng-template [appDynamicLoader] [data]=\"QueryEditorComponent\" (out)=\"onAiDataGetterOut($event)\"></ng-template>\r\n</div>","import { Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { LogicOperatorText } from '../../../../../models/logicOperator.model';\r\nimport { Record } from '../../../../../models/record.model';\r\nimport { NotNumberAggregationFunctionEnum, NumberAggregationFunctionEnum, Statistic } from '../../../../../models/statistic.model';\r\nimport { TextField } from '../../../../../models/fields/textField.model';\r\nimport { BooleanLogicOperatorType } from '../../../../../models/trigger.model';\r\n\r\n@Component({\r\n  selector: 'list-form-record-trigger-template',\r\n  templateUrl: './list-form-record-trigger-template.component.html',\r\n  styleUrls: ['./list-form-record-trigger-template.component.scss']\r\n})\r\nexport class ListFormRecordTriggerTemplateComponent {\r\n\r\n  @Input() field: TextField;\r\n  @Input() record: Record;\r\n  @Output() filterChange: EventEmitter<any> = new EventEmitter<any>();\r\n  logicOperatorText = LogicOperatorText;\r\n  selectedLogicOperator: LogicOperatorText;\r\n  activeCondition: boolean = false;  \r\n\r\n  booleanLogicOperatorType = BooleanLogicOperatorType;\r\n  selectedBooleanLogicOperator: BooleanLogicOperatorType = BooleanLogicOperatorType.AND;\r\n\r\n  aggregations: Array<NumberAggregationFunctionEnum> | Array<NotNumberAggregationFunctionEnum>;\r\n  aggregationFunctionEnum = NotNumberAggregationFunctionEnum;  \r\n\r\n  operatorsGroupBy: Array<NumberAggregationFunctionEnum>;\r\n\r\n  onTriggerChange() {\r\n    if (this.record[this.field.Name] != null && this.record[this.field.Name] != \"\" && this.selectedLogicOperator != null){\r\n      this.activeCondition = true;\r\n      this.filterChange.emit(this.generateCondition(\"active\"));\r\n    }\r\n    if (this.activeCondition && (this.record[this.field.Name] == null || this.record[this.field.Name] == \"\" || this.selectedLogicOperator == null)){\r\n      this.activeCondition = false;\r\n      this.filterChange.emit(this.generateCondition(\"deactivated\"));\r\n    }\r\n  }\r\n\r\n/**\r\n * Metodo che genera l'oggetto da inviare all'esterno\r\n */\r\n\r\n  generateCondition(mode){\r\n    let output:Statistic = new Statistic();\r\n    if (mode == \"active\"){\r\n      output = {\r\n        key: this.field.Name,\r\n        value: this.record[this.field.Name],\r\n        logicoperator: this.selectedLogicOperator,\r\n        fieldtype: this.field.FieldType,\r\n        visible: true,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      };\r\n    } else {\r\n      output = {\r\n        key: this.field.Name,\r\n        value: null,\r\n        logicoperator: null,\r\n        fieldtype: null,\r\n        visible: true,\r\n        aggregations: this.aggregations,\r\n        operatorsGroupBy: this.operatorsGroupBy\r\n      };\r\n    }\r\n\r\n    return output;\r\n  }  \r\n\r\n}\r\n","","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { EqpDynamicModuleComponent } from './components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nimport { MaterialModule } from './modules/material.module';\r\nimport { TmwTableComponent } from 'tmw-table';\r\nimport { TmwAttachmentsComponent } from 'tmw-attachments';\r\nimport { TmwSelectComponent } from 'tmw-select';\r\nimport { TmwNumericMaskDirective } from 'tmw-numeric';\r\nimport { TmwIconComponent } from 'tmw-icons';\r\nimport { EqpDynamicModuleConfiguratorComponent } from './components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nimport { AddFormFieldComponent } from './components/private/add-form-field/add-form-field.component';\r\nimport { TextFieldTemplateComponent } from './components/private/field-templates/text-field-template/text-field-template.component';\r\nimport { BooleanFieldTemplateComponent } from './components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nimport { DateFieldTemplateComponent } from './components/private/field-templates/date-field-template/date-field-template.component';\r\nimport { TextareaFieldTemplateComponent } from './components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nimport { NumericFieldTemplateComponent } from './components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nimport { ListValueFieldTemplateComponent } from './components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nimport { AttachmentFieldTemplateComponent } from './components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nimport { ImageFieldTemplateComponent } from './components/private/field-templates/image-field-template/image-field-template.component';\r\nimport { ListFormRecordComponent } from './components/private/form-records/list-form-record/list-form-record.component';\r\nimport { AddFormRecordComponent } from './components/private/form-records/add-form-record/add-form-record.component';\r\nimport { SpinnerComponent } from './components/private/spinner/spinner.component';\r\nimport { DynamicModuleFieldFixComponent } from './components/private/dynamic-module-field-fix/dynamic-module-field.component';\r\nimport { AddFormulaComponent,DialogDataExampleDialog } from './components/private/add-formula-field/add-formula-field.component';\r\nimport { RepairFormFieldsComponent } from './components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nimport { ListViewFormRecordComponent } from './components/private/form-records/list-view-form-record/list-view-form-record.component';\r\nimport { ViewFormRecordComponent } from './components/private/form-records/view-form-record/view-form-record.component';\r\nimport { SingleRecordComponent } from './components/private/form-records/list-view-form-record/single-record/single-record.component';\r\nimport { FilterFormStatisticComponent } from './components/private/form-statistics/filter-form-statistic/filter-form-statistic.component';\r\nimport { DynamicModuleFilterFixComponent } from './components/private/form-statistics/dynamic-module-filter-fix/dynamic-module-filter-fix.component';\r\nimport { TextFilterTemplateComponent } from './components/private/form-statistics/filter-templates/text-filter-template/text-filter-template.component';\r\nimport { NumericFilterTemplateComponent } from './components/private/form-statistics/filter-templates/numeric-filter-template/numeric-filter-template.component';\r\nimport { BooleanFilterTemplateComponent } from './components/private/form-statistics/filter-templates/boolean-filter-template/boolean-filter-template.component';\r\nimport { DateFilterTemplateComponent } from './components/private/form-statistics/filter-templates/date-filter-template/date-filter-template.component';\r\nimport { ListValueFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-value-filter-template/list-value-filter-template.component';\r\nimport { TextareaFilterTemplateComponent } from './components/private/form-statistics/filter-templates/textarea-filter-template/textarea-filter-template.component';\r\nimport { AttachmentFilterTemplateComponent } from './components/private/form-statistics/filter-templates/attachment-filter-template/attachment-filter-template.component';\r\nimport { ImageFilterTemplateComponent } from './components/private/form-statistics/filter-templates/image-filter-template/image-filter-template.component';\r\nimport { ListFormRecordFilterTemplateComponent } from './components/private/form-statistics/filter-templates/list-form-record-filter-template/list-form-record-filter-template.component';\r\nimport { GraphsComponent } from './components/private/graphs/graphs.component';\r\nimport { GraphComponent } from './components/private/graphs/graph/graph.component';\r\nimport { CanvasJSAngularStockChartsModule, CanvasJSChart, CanvasJSStockChart } from '@canvasjs/angular-stockcharts';\r\nimport { ImageFieldSelectorTemplateComponent } from './components/private/field-templates/image-field-selector-template/image-field-selector-template.component';\r\nimport { LabelFieldTemplateComponent } from './components/private/field-templates/label-field-template/label-field-template.component';\r\nimport { ImageSelectorFilterTemplateComponent } from './components/private/form-statistics/filter-templates/image-selector-filter-template/image-selector-filter-template.component';\r\nimport { TmwImageDrawerComponent } from './components/private/tmw-image-drawer/tmw-image-drawer.component';\r\nimport { ImageWithMarkersFieldTemplateComponent } from './components/private/field-templates/image-with-markers-field-template/image-with-markers-field-template.component';\r\nimport { TmwImageMarkerComponent } from './components/private/tmw-image-marker/tmw-image-marker.component';\r\nimport { DragDropModule } from '@angular/cdk/drag-drop';\r\nimport { DynamicLoaderDirective } from './directives/dynamic-loader/dynamic-loader.directive';\r\nimport { DbgetterComponent } from './components/private/dbgetter/dbgetter.component';\r\nimport { TmwDateTimePickerComponent, TmwPickerComponent, TmwDateRangePickerComponent } from \"tmw-picker\";\r\nimport { TriggerCreatorComponent } from './components/private/trigger-creator/trigger-creator.component';\r\nimport { DynamicModuleTriggerFixComponent } from './components/private/trigger-creator/dynamic-module-trigger-fix/dynamic-module-trigger-fix.component';\r\nimport { TextTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/text-trigger-template/text-trigger-template.component';\r\nimport { NumericTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/numeric-trigger-template/numeric-trigger-template.component';\r\nimport { BooleanTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/boolean-trigger-template/boolean-trigger-template.component';\r\nimport { DateTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/date-trigger-template/date-trigger-template.component';\r\nimport { ListValueTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/list-value-trigger-template/list-value-trigger-template.component';\r\nimport { TextareaTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/textarea-trigger-template/textarea-trigger-template.component';\r\nimport { ListFormRecordTriggerTemplateComponent } from './components/private/trigger-creator/trigger-templates/list-form-record-trigger-template/list-form-record-trigger-template.component';\r\nimport { SpeechToTextDirective } from './directives/speech-to-text/speech-to-text.directive';\r\nimport { HListFormRecordComponent } from './components/private/form-records/hlist-form-record/hlist-form-record.component';\r\nimport { ActionButtonCreatorComponent } from './components/private/action-button-creator/action-button-creator.component';\r\nimport { ActionButtonFieldTemplateComponent } from './components/private/field-templates/action-button-field-template/action-button-field-template.component';\r\nimport { DynamicModuleFieldExtraFixComponent } from './components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component';\r\nimport { ListValueDbgTemplateComponent } from './components/private/dbg-templates/list-value-dbg-template/list-value-dbg-template.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    EqpDynamicModuleComponent,\r\n    EqpDynamicModuleConfiguratorComponent,\r\n    AddFormFieldComponent,\r\n    TextFieldTemplateComponent,\r\n    BooleanFieldTemplateComponent,\r\n    DateFieldTemplateComponent,\r\n    TextareaFieldTemplateComponent,\r\n    NumericFieldTemplateComponent,\r\n    ListValueFieldTemplateComponent,\r\n    AttachmentFieldTemplateComponent,\r\n    ImageFieldTemplateComponent,\r\n    ListFormRecordComponent,\r\n    HListFormRecordComponent,\r\n    ListViewFormRecordComponent,\r\n    AddFormRecordComponent,\r\n    ViewFormRecordComponent,\r\n    DynamicModuleFieldFixComponent,\r\n    SpinnerComponent,\r\n    AddFormulaComponent,\r\n    DialogDataExampleDialog,\r\n    RepairFormFieldsComponent,\r\n    SingleRecordComponent,\r\n    FilterFormStatisticComponent,\r\n    DynamicModuleFilterFixComponent,\r\n    DynamicModuleTriggerFixComponent,\r\n    TextFilterTemplateComponent,\r\n    NumericFilterTemplateComponent,\r\n    BooleanFilterTemplateComponent,\r\n    DateFilterTemplateComponent,\r\n    ListValueFilterTemplateComponent,\r\n    TextareaFilterTemplateComponent,\r\n    AttachmentFilterTemplateComponent,\r\n    ImageFilterTemplateComponent,\r\n    ListFormRecordFilterTemplateComponent,\r\n    GraphsComponent,\r\n    GraphComponent,\r\n    ImageFieldSelectorTemplateComponent,\r\n    LabelFieldTemplateComponent,\r\n    ImageSelectorFilterTemplateComponent,\r\n    TmwImageDrawerComponent,\r\n    ImageWithMarkersFieldTemplateComponent,\r\n    TmwImageMarkerComponent,\r\n    DynamicLoaderDirective,\r\n    DbgetterComponent,\r\n    TriggerCreatorComponent,\r\n    TextTriggerTemplateComponent,\r\n    NumericTriggerTemplateComponent,\r\n    BooleanTriggerTemplateComponent,\r\n    DateTriggerTemplateComponent,\r\n    ListValueTriggerTemplateComponent,\r\n    TextareaTriggerTemplateComponent,\r\n    ListFormRecordTriggerTemplateComponent,\r\n    SpeechToTextDirective,\r\n    ActionButtonCreatorComponent,\r\n    ActionButtonFieldTemplateComponent,\r\n    DynamicModuleFieldExtraFixComponent,\r\n    ListValueDbgTemplateComponent\r\n\r\n  ],\r\n  imports: [\r\n    MaterialModule,\r\n    FormsModule,\r\n    CommonModule,\r\n    ReactiveFormsModule,\r\n    TmwTableComponent,\r\n    TmwAttachmentsComponent,\r\n    TmwSelectComponent,\r\n    TmwNumericMaskDirective,\r\n    TmwIconComponent,\r\n    DragDropModule,\r\n    CanvasJSAngularStockChartsModule,\r\n    TmwDateTimePickerComponent,\r\n    TmwPickerComponent,\r\n    TmwDateRangePickerComponent\r\n  ],\r\n  exports: [\r\n    EqpDynamicModuleComponent,\r\n    EqpDynamicModuleConfiguratorComponent,\r\n    DragDropModule,\r\n    CanvasJSChart,\r\n    CanvasJSStockChart,\r\n    DynamicLoaderDirective,\r\n    TmwDateTimePickerComponent,\r\n    TmwPickerComponent,\r\n    TmwDateRangePickerComponent\r\n  ]\r\n})\r\nexport class EqpDynamicModuleModule { }\r\n","import { DynamicModuleCompileConfig } from \"./dynamicModuleCompileConfig.model\";\r\nimport { DynamicModuleGeneralConfig } from \"./dynamicModuleGeneralConfig.model\";\r\nimport { DynamicModuleListConfig } from \"./dynamicModuleListConfig.model\";\r\nimport { DynamicModuleRepairConfig } from \"./dynamicModuleRepairConfig.model\";\r\n\r\nexport class DynamicModuleConfig {\r\n  dynamicModuleGeneralConfig: DynamicModuleGeneralConfig;\r\n  dynamicModuleCompileConfig: DynamicModuleCompileConfig;\r\n  dynamicModuleListConfig: DynamicModuleListConfig;\r\n  dynamicModuleRepairConfig: DynamicModuleRepairConfig;\r\n\r\n  constructor(\r\n    general: DynamicModuleGeneralConfig,\r\n    compile: DynamicModuleCompileConfig,\r\n    list: DynamicModuleListConfig,\r\n    repair: DynamicModuleRepairConfig\r\n  ) {\r\n    this.dynamicModuleGeneralConfig = general;\r\n    this.dynamicModuleCompileConfig = compile;\r\n    this.dynamicModuleListConfig = list;\r\n    this.dynamicModuleRepairConfig = repair;\r\n  }\r\n}\r\n","import { IRootObject } from \"../interfaces/iRootObject.interface\";\r\nimport { BaseField } from \"./baseField.model\";\r\nimport { BaseObj } from \"./baseObj.model\";\r\n\r\n/**\r\n * Rappresenta l'entità su cui vengono eseguite le operazioni di salvataggio.\r\n */\r\nexport class Entity extends BaseObj implements IRootObject {\r\n    Name: string;\r\n    Fields: Array<BaseField>;\r\n    OrgaID: string;\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\nimport { DynAttachment } from \"../dynAttachment\";\r\n\r\nexport class ImageSelectorField extends BaseField {\r\n\r\n    ValuePairs: { [key: string]: any};\r\n    DynAttachments: Array<DynAttachment>;\r\n    DynAttachmentsIDs: Array<number>;\r\n    ResizedImagesHeightPx: number = 128;\r\n    IsMultiChoiche: boolean;\r\n    AttachmentList: Array<DynAttachment>;\r\n    ImageSelectorFieldStyleCSS?: ImageSelectorFieldStyleCSS;\r\n}\r\n\r\nexport class ImageSelectorFieldStyleCSS {\r\n    ContainerNormale?: string;\r\n    ContainerMouseover?: string;\r\n    ContainerSelezionato?: string;\r\n    ContainerNotValid?: string;\r\n    ContainerReadonly?: string;\r\n    CasellaSelezioneNormale?: string;\r\n    CasellaSelezioneMouseover?: string;\r\n    CasellaSelezioneSelezionato?: string;\r\n    CasellaSelezioneNotValid?: string;\r\n    CasellaSelezioneReadonly?: string;\r\n    DescrizioneNormale?: string;\r\n    DescrizioneMouseover?: string;\r\n    DescrizioneSelezionato?: string;\r\n    DescrizioneNotValid?: string;\r\n    DescrizioneReadonly?: string;\r\n    SelezioniNormale?: string;\r\n    SelezioniMouseover?: string;\r\n    SelezioniSelezionato?: string;\r\n    SelezioniNotValid?: string;\r\n    SelezioniReadonly?: string;\r\n}\r\n","import { BaseField } from \"../baseField.model\";\r\n\r\n/**Questo tipo di campo rappresenta una lookup ad altri valori */\r\nexport class LookupField extends BaseField {\r\n    /**Entità relazionata (il padre) */\r\n    EntitySourceName: string;\r\n\r\n    /**Elenco di campi ordinato che verrà visualizzato nella lookup */\r\n    FieldNames: string[];\r\n\r\n    /**Se true la lookup viene visualizzata in una modale per lo scegli scarta  */\r\n    UseAsGetOrDiscard: boolean;\r\n}","/*\r\n * Public API Surface of eqp-dynamic-module\r\n */\r\nexport * from './lib/eqp-dynamic-module.module';\r\nexport * from './lib/components/exported/eqp-dynamic-module/eqp-dynamic-module.component';\r\nexport * from './lib/components/exported/eqp-dynamic-module-configurator/eqp-dynamic-module-configurator.component';\r\nexport * from './lib/components/private/add-form-field/add-form-field.component';\r\nexport * from './lib/components/private/dynamic-module-field-fix/dynamic-module-field.component';\r\nexport * from './lib/components/private/dynamic-module-field-extra-fix/dynamic-module-field-extra-fix.component';\r\nexport * from './lib/components/private/field-templates/attachment-field-template/attachment-field-template.component';\r\nexport * from './lib/components/private/field-templates/boolean-field-template/boolean-field-template.component';\r\nexport * from './lib/components/private/field-templates/date-field-template/date-field-template.component';\r\nexport * from './lib/components/private/field-templates/image-field-template/image-field-template.component';\r\nexport * from './lib/components/private/field-templates/list-value-field-template/list-value-field-template.component';\r\nexport * from './lib/components/private/field-templates/numeric-field-template/numeric-field-template.component';\r\nexport * from './lib/components/private/field-templates/text-field-template/text-field-template.component';\r\nexport * from './lib/components/private/field-templates/textarea-field-template/textarea-field-template.component';\r\nexport * from './lib/components/private/form-records/add-form-record/add-form-record.component';\r\nexport * from './lib/components/private/form-records/repair-form-fields/repair-form-fields.component';\r\nexport * from './lib/components/private/form-records/list-form-record/list-form-record.component';\r\nexport * from './lib/interfaces/iBaseFieldComponent.interface';\r\nexport * from './lib/interfaces/iRootObject.interface';\r\nexport * from './lib/models/baseField.model';\r\nexport * from './lib/models/baseObj.model';\r\nexport * from './lib/models/context.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorConfig.model';\r\nexport * from './lib/models/dynamicModuleConfiguratorSpecificConfig.model';\r\nexport * from './lib/models/dynamicModuleConfig.model';\r\nexport * from './lib/models/dynamicModuleGeneralConfig.model';\r\nexport * from './lib/models/dynamicModuleCompileConfig.model';\r\nexport * from './lib/models/dynamicModuleListConfig.model';\r\nexport * from './lib/models/dynamicModuleRepairConfig.model';\r\nexport * from './lib/models/dynamicModuleFilterResultViewModeEnum.model';\r\nexport * from './lib/models/dynamicModuleViewModeEnum';\r\nexport * from './lib/models/dynamicModuleListFormRecordActionsDefault';\r\nexport * from './lib/models/endPointConfiguration.model';\r\nexport * from './lib/models/entity.model';\r\nexport * from './lib/models/form.model';\r\nexport * from './lib/models/record.model';\r\nexport * from './lib/models/trigger.model';\r\nexport * from './lib/models/statistic.model';\r\nexport * from './lib/models/fieldExtraConfig.model';\r\nexport * from './lib/models/fields/attachmentField.model';\r\nexport * from './lib/models/fields/booleanField.model';\r\nexport * from './lib/models/fields/dateField.model';\r\nexport * from './lib/models/fields/imageField.model';\r\nexport * from './lib/models/fields/listValueField.model';\r\nexport * from './lib/models/fields/imageSelectorField.model';\r\nexport * from './lib/models/fields/lookupField.model';\r\nexport * from './lib/models/fields/numericField.model';\r\nexport * from './lib/models/fields/textareaField.model';\r\nexport * from './lib/models/fields/textField.model';\r\nexport * from './lib/services/custom-form-validators.service';\r\nexport * from './lib/services/eqp-dynamic-module-dialog.service';\r\nexport * from './lib/services/spinner.service';\r\nexport * from './lib/services/utilityHelper.services';\r\nexport * from './lib/models/graph.model';\r\nexport * from './lib/directives/dynamic-loader/dynamic-loader.directive';\r\nexport * from './lib/directives/speech-to-text/speech-to-text.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i3.SpinnerService","i1.UtilityHelperService","i3","i6","i4","i5","i8","ELEMENT_SELECTORS","ELEMENTS","STATES","DEFAULT_FIELD_STYLES","i6.SpeechToTextDirective","i7","toBase64","i2.UtilityHelperService","i4.TmwImageDrawerComponent","switchMap","i4.TmwImageMarkerComponent","i5.DynamicLoaderDirective","i5.TextFieldTemplateComponent","i6.BooleanFieldTemplateComponent","i7.DateFieldTemplateComponent","i8.TextareaFieldTemplateComponent","i9.NumericFieldTemplateComponent","i10.ListValueFieldTemplateComponent","i11.AttachmentFieldTemplateComponent","i12.ImageFieldTemplateComponent","i13.ListFormRecordComponent","i14.ImageFieldSelectorTemplateComponent","i15.LabelFieldTemplateComponent","i16.ImageWithMarkersFieldTemplateComponent","i17.DbgetterComponent","i18.ActionButtonFieldTemplateComponent","i19.ListValueDbgTemplateComponent","i9","i10.DynamicModuleFieldFixComponent","i3.AddFormRecordComponent","i4.ViewFormRecordComponent","i9.GraphComponent","i4.dbDateService","i10","i11","i12","i13.HListFormRecordComponent","i14.AddFormRecordComponent","i15.SingleRecordComponent","i16.GraphsComponent","i1.SpinnerService","i7.SpeechToTextDirective","i4.TextFilterTemplateComponent","i5.NumericFilterTemplateComponent","i6.BooleanFilterTemplateComponent","i7.DateFilterTemplateComponent","i8.ListValueFilterTemplateComponent","i9.TextareaFilterTemplateComponent","i10.AttachmentFilterTemplateComponent","i11.ImageFilterTemplateComponent","i12.ListFormRecordFilterTemplateComponent","i13.ImageSelectorFilterTemplateComponent","i6.ListViewFormRecordComponent","i7.DynamicModuleFilterFixComponent","i4.ListFormRecordComponent","i5.HListFormRecordComponent","i7.AddFormRecordComponent","i8.ViewFormRecordComponent","i9.SpinnerComponent","i10.RepairFormFieldsComponent","i11.FilterFormStatisticComponent","i12.GraphsComponent","i11.AddFormulaComponent","i5.UtilityHelperService","i13","i14","i15","i16","i17","i18.TextFieldTemplateComponent","i19.BooleanFieldTemplateComponent","i20.DateFieldTemplateComponent","i21.TextareaFieldTemplateComponent","i22.NumericFieldTemplateComponent","i23.ListValueFieldTemplateComponent","i24.AttachmentFieldTemplateComponent","i25.AddFormulaComponent","i26.ImageFieldSelectorTemplateComponent","i27.LabelFieldTemplateComponent","i28.DynamicLoaderDirective","i29.ActionButtonCreatorComponent","i30.ActionButtonFieldTemplateComponent","i31.DynamicModuleFieldExtraFixComponent","i3.TextTriggerTemplateComponent","i4.NumericTriggerTemplateComponent","i5.BooleanTriggerTemplateComponent","i6.DateTriggerTemplateComponent","i7.ListValueTriggerTemplateComponent","i8.TextareaTriggerTemplateComponent","i12.AddFormulaComponent","i13.DynamicModuleTriggerFixComponent","i3.UtilityHelperService","i18","i19","i20","i21","i22","i23","i25.AddFormFieldComponent","i26.AddFormRecordComponent","i27.SpinnerComponent","i29.TriggerCreatorComponent","i30.SpeechToTextDirective","i31.ActionButtonCreatorComponent"],"mappings":"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"}