{"version":3,"file":"esfaenza-query-builder.mjs","sources":["../../../projects/query-builder/src/lib/parameterinputs/parameter_input.component.loc.ts","../../../projects/query-builder/src/lib/parameterinputs/parameter_input.component.ts","../../../projects/query-builder/src/lib/parameterinputs/parameter_input.component.html","../../../projects/query-builder/src/lib/models/KeyValue.ts","../../../projects/query-builder/src/lib/models/QueryRule.ts","../../../projects/query-builder/src/lib/metadata_querybuilder.component.loc.ts","../../../projects/query-builder/src/lib/base/query-operator.directive.ts","../../../projects/query-builder/src/lib/base/query-field.directive.ts","../../../projects/query-builder/src/lib/base/query-entity.directive.ts","../../../projects/query-builder/src/lib/base/query-switch-group.directive.ts","../../../projects/query-builder/src/lib/base/query-button-group.directive.ts","../../../projects/query-builder/src/lib/base/query-input.directive.ts","../../../projects/query-builder/src/lib/base/query-remove-button.directive.ts","../../../projects/query-builder/src/lib/base/query-empty-warning.directive.ts","../../../projects/query-builder/src/lib/base/query-arrow-icon.directive.ts","../../../projects/query-builder/src/lib/base/query-builder.component.ts","../../../projects/query-builder/src/lib/base/query-builder.component.html","../../../projects/query-builder/src/lib/metadata_querybuilder.component.ts","../../../projects/query-builder/src/lib/metadata_querybuilder.component.html","../../../projects/query-builder/src/lib/es-query-builder.module.ts","../../../projects/query-builder/src/lib/models/MtdEntity.ts","../../../projects/query-builder/src/lib/models/MtdField.ts","../../../projects/query-builder/src/public-api.ts","../../../projects/query-builder/src/esfaenza-query-builder.ts"],"sourcesContent":["// Angular\r\nimport { Injectable, Injector } from \"@angular/core\";\r\n\r\n// Es\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **ParameterInputComponent**\r\n */\r\n@Injectable()\r\nexport class ParameterInputComponentLoc extends LocalizationService {\r\n\r\n    /**\r\n     * Costruttore\r\n     * \r\n     * @ignore\r\n     */\r\n    constructor(injector: Injector) {\r\n        super(injector);\r\n\r\n        super.set(\"en->it\", \"Parameter\", [\"Parametro\"]);\r\n        super.set(\"en->it\", \"Reference\", [\"Riferimento\"]);\r\n    }\r\n}","// Angular\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\nimport { Component, forwardRef, Input } from \"@angular/core\";\r\nimport { ViewEncapsulation } from \"@angular/core\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n// Classi\r\nimport { KeyValue } from '../models/KeyValue';\r\n\r\n// Applicazione\r\nimport { ParameterInputComponentLoc } from \"./parameter_input.component.loc\";\r\n\r\n/** Componente di input che può diventare \"Parametro\" */\r\n@Component({\r\n    selector: \"parameter-input\",\r\n    templateUrl: \"parameter_input.component.html\",\r\n    encapsulation: ViewEncapsulation.None,\r\n    providers: [\r\n        { provide: LocalizationService, useClass: ParameterInputComponentLoc },\r\n        { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => ParameterInputComponent), multi: true }\r\n    ],\r\n    standalone: false\r\n})\r\nexport class ParameterInputComponent implements ControlValueAccessor {\r\n    \r\n    /** Modello del componente */\r\n    public value: any;\r\n\r\n    /** Indica se questo Input è un parametro o no */\r\n    @Input() IsParameter: boolean = false;\r\n\r\n    /**Indica se questo Input è un parametro o no*/\r\n    @Input() IsReference: boolean = false;\r\n\r\n    /** Tipo dell'Input. Sono supportati solo i tipi per cui esistono effettivamente parametri, altrimenti il componente non avrebbe senso */\r\n    @Input() Type: 'date' | 'string';\r\n\r\n    /** Indica se questo Input è in sola lettura */\r\n    @Input() Readonly: boolean = false;\r\n\r\n    /** Indica se per questo Input è possibile selezionare un parametro */\r\n    @Input() CanSelectParameters: boolean = true;\r\n\r\n     /** Indica se per questo Input è possibile selezionare un riferimento */\r\n     @Input() CanSelectReferences: boolean = false;\r\n\r\n    /** Parametri disponibili per quest'Input */\r\n    @Input() Parameters: KeyValue[] = [];\r\n\r\n    /** Riferimenti disponibili per quest'Input */\r\n    @Input() References: KeyValue[] = [];\r\n\r\n    /** @ignore Costruttore */\r\n    constructor(public lc: LocalizationService) { }\r\n\r\n    /** @ignore Angular Pipeline */\r\n    writeValue(value: any): void {\r\n        this.value = value;\r\n    }\r\n\r\n    /** @ignore Angular Pipeline */\r\n    propagateChange = (_: any) => { };\r\n\r\n    /** @ignore Angular Pipeline */\r\n    public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n    /** @ignore Angular Pipeline */\r\n    public registerOnTouched(fn): void { }\r\n\r\n    /** Propagazione del valore del modello */\r\n    changed() {\r\n        this.propagateChange(this.value);\r\n    }\r\n}","<div class=\"row col-md-12 app-no-padding app-no-margin\">\r\n    <div class=\"col-md-6 app-no-padding\">\r\n        <form-adaptive *ngIf=\"!IsParameter && !IsReference\" [readonly]=\"Readonly\" [Type]=\"Type\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"value\" required name=\"value\" (inputChange)=\"changed();\" [Last]=\"true\"></form-adaptive>\r\n        <form-select *ngIf=\"IsParameter\" [readonly]=\"Readonly\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"value\" required name=\"value\" (inputChange)=\"changed();\" [Source]=\"Parameters\" [Last]=\"true\"></form-select>\r\n        <form-select *ngIf=\"IsReference\" [readonly]=\"Readonly\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"value\" required name=\"value\" (inputChange)=\"changed();\" [Source]=\"References\" [Last]=\"true\"></form-select>\r\n    </div>\r\n\r\n    <div class=\"col-md-6 row app-no-margin app-padding-right-0 ng-star-inserted\" *ngIf=\"CanSelectParameters && Parameters && Parameters.length > 0\">\r\n        <div class=\"col-md-1 app-margin-top-10 app-no-padding\">\r\n            <input type=\"checkbox\" [(ngModel)]=\"IsParameter\" name=\"par\" (ngModelChange)=\"value = ''; changed();\" [disabled]=\"Readonly\" />\r\n        </div>\r\n        <div *ngIf=\"!Readonly\" class=\"col-md-11 m-t-8 app-padding-left-10 app-pointer\" (click)=\"IsParameter = !IsParameter; value = ''; changed();\">{{'Parameter' | localize : lc}}</div>\r\n        <div *ngIf=\"Readonly\" class=\"col-md-11 m-t-8 app-padding-left-10 app-pointer\">{{'Parameter' | localize : lc}}</div>\r\n    </div>\r\n\r\n    <div class=\"col-md-6 row app-no-margin app-padding-right-0 ng-star-inserted\" *ngIf=\"CanSelectReferences && References && References.length > 0\">\r\n        <div class=\"col-md-1 app-margin-top-10 app-no-padding\">\r\n            <input type=\"checkbox\" [(ngModel)]=\"IsReference\" name=\"ref\" (ngModelChange)=\"value = ''; changed();\" [disabled]=\"Readonly\" />\r\n        </div>\r\n        <div *ngIf=\"!Readonly\" class=\"col-md-11 m-t-8 app-padding-left-10 app-pointer\" (click)=\"IsReference = !IsReference; value = ''; changed();\">{{'Reference' | localize : lc}}</div>\r\n        <div *ngIf=\"Readonly\" class=\"col-md-11 m-t-8 app-padding-left-10 app-pointer\">{{'Reference' | localize : lc}}</div>\r\n    </div>\r\n\r\n</div>","/**\r\n * Modello rappresentante una semplice coppia Chiave - Valore\r\n */\r\nexport class KeyValue {\r\n\r\n    /**\r\n     * Costruttore\r\n     * \r\n     * @param {string} id Chiave\r\n     * @param {string} description Valore\r\n     */\r\n    constructor(public id: string, public description: string) { }\r\n}","\r\n/** Albero di regole letto e generato dal componente */\r\nexport class QueryRule {\r\n\r\n    /** Condizione AND / OR. Quando questo è valorizzato sono valorizzate anche le **rules**, mentre non sono valorizzati tutti gli altri campi */\r\n    condition: string;\r\n    /** Campo su cui applicare un operatore */\r\n    field: string;\r\n    /** Operatore da applicare al campo **field**. Dipende dal tipo di dato **type** */\r\n    operator: string;\r\n    /** Tipo di dato */\r\n    type: 'integer' | 'number' | 'double' | 'string' | 'date' | 'datetime' | 'boolean';\r\n    /** Valore di confronto applicabile a **field** in base all'**operator** */\r\n    value: string;\r\n    /** Indica se il valore scritto in **value** non è un valore letterale ma è un placeholder per un parametro */\r\n    isparameter: boolean;\r\n    /** Indica se il valore scritto in **value** non è un valore letterale ma è un placeholder per un riferimento */\r\n    isreference: boolean;\r\n    /** Resto della gerarchia di questa regola */\r\n    rules: QueryRule[];\r\n    /** Funzione di trasformazione da applicare al **value** */\r\n    transform: string;\r\n    /** Funzioni di trasformazione disponibili per **value** */\r\n    transforms: { id: string, description: string }[];\r\n}","// Angular\r\nimport { Injectable, Injector } from \"@angular/core\";\r\n\r\n// Es\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\n\r\n/**\r\n * Classe di localizzazione per il componente **MetadataQueryBuilderComponent**\r\n */\r\n@Injectable()\r\nexport class MetadataQueryBuilderLoc extends LocalizationService {\r\n\r\n    /**\r\n     * Costruttore\r\n     * \r\n     * @ignore\r\n     */\r\n    constructor(injector: Injector) {\r\n        super(injector);\r\n\r\n        super.set(\"en->it\", \"Linked Entities\", [\"Entità collegate\"]);\r\n    }\r\n}","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryOperator]\" })\r\nexport class QueryOperatorDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryField]\" })\r\nexport class QueryFieldDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryEntity]\" })\r\nexport class QueryEntityDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[querySwitchGroup]\" })\r\nexport class QuerySwitchGroupDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryButtonGroup]\" })\r\nexport class QueryButtonGroupDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, Input, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryInput]\" })\r\nexport class QueryInputDirective {\r\n  /** Unique name for query input type. */\r\n  @Input()\r\n  get queryInputType(): string {\r\n    return this._type;\r\n  }\r\n  set queryInputType(value: string) {\r\n    // If the directive is set without a type (updated programatically), then this setter will\r\n    // trigger with an empty string and should not overwrite the programatically set value.\r\n    if (!value) {\r\n      return;\r\n    }\r\n    this._type = value;\r\n  }\r\n  private _type!: string;\r\n\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryRemoveButton]\" })\r\nexport class QueryRemoveButtonDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryEmptyWarning]\" })\r\nexport class QueryEmptyWarningDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import { Directive, TemplateRef } from \"@angular/core\";\r\n\r\n@Directive({ selector: \"[queryArrowIcon]\" })\r\nexport class QueryArrowIconDirective {\r\n  constructor(public template: TemplateRef<any>) {}\r\n}\r\n","import {\r\n  AbstractControl,\r\n  ControlValueAccessor,\r\n  NG_VALUE_ACCESSOR,\r\n  NG_VALIDATORS,\r\n  ValidationErrors,\r\n  Validator,\r\n  FormsModule\r\n} from \"@angular/forms\";\r\nimport { QueryOperatorDirective } from \"./query-operator.directive\";\r\nimport { QueryFieldDirective } from \"./query-field.directive\";\r\nimport { QueryEntityDirective } from \"./query-entity.directive\";\r\nimport { QuerySwitchGroupDirective } from \"./query-switch-group.directive\";\r\nimport { QueryButtonGroupDirective } from \"./query-button-group.directive\";\r\nimport { QueryInputDirective } from \"./query-input.directive\";\r\nimport { QueryRemoveButtonDirective } from \"./query-remove-button.directive\";\r\nimport { QueryEmptyWarningDirective } from \"./query-empty-warning.directive\";\r\nimport { QueryArrowIconDirective } from \"./query-arrow-icon.directive\";\r\nimport {\r\n  ButtonGroupContext,\r\n  Entity,\r\n  Field,\r\n  SwitchGroupContext,\r\n  EntityContext,\r\n  FieldContext,\r\n  InputContext,\r\n  LocalRuleMeta,\r\n  OperatorContext,\r\n  Option,\r\n  QueryBuilderClassNames,\r\n  QueryBuilderConfig,\r\n  RemoveButtonContext,\r\n  ArrowIconContext,\r\n  Rule,\r\n  RuleSet,\r\n  EmptyWarningContext\r\n} from \"./query-builder.interfaces\";\r\nimport {\r\n  ChangeDetectorRef,\r\n  Component,\r\n  ContentChild,\r\n  ContentChildren,\r\n  forwardRef,\r\n  Input,\r\n  OnChanges,\r\n  OnInit,\r\n  QueryList,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ElementRef,\r\n  HostBinding\r\n} from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\n\r\nexport const CONTROL_VALUE_ACCESSOR: any = {\r\n  provide: NG_VALUE_ACCESSOR,\r\n  useExisting: forwardRef(() => QueryBuilderComponent),\r\n  multi: true\r\n};\r\n\r\nexport const VALIDATOR: any = {\r\n  provide: NG_VALIDATORS,\r\n  useExisting: forwardRef(() => QueryBuilderComponent),\r\n  multi: true\r\n};\r\n\r\n@Component({\r\n  selector: \"query-builder\",\r\n  templateUrl: \"./query-builder.component.html\",\r\n  styleUrls: [\"./query-builder.component.scss\"],\r\n  imports: [CommonModule, FormsModule],\r\n  providers: [CONTROL_VALUE_ACCESSOR, VALIDATOR],\r\n})\r\nexport class QueryBuilderComponent implements OnChanges, ControlValueAccessor, Validator {\r\n  public fields: Field[];\r\n  public filterFields: Field[];\r\n  public entities: Entity[];\r\n  public defaultClassNames: QueryBuilderClassNames = {\r\n    arrowIconButton: \"q-arrow-icon-button\",\r\n    arrowIcon: \"q-icon q-arrow-icon\",\r\n    removeIcon: \"q-icon q-remove-icon\",\r\n    addIcon: \"q-icon q-add-icon\",\r\n    button: \"q-button\",\r\n    buttonGroup: \"q-button-group\",\r\n    removeButton: \"q-remove-button\",\r\n    switchGroup: \"q-switch-group\",\r\n    switchLabel: \"q-switch-label\",\r\n    switchRadio: \"q-switch-radio\",\r\n    rightAlign: \"q-right-align\",\r\n    transition: \"q-transition\",\r\n    collapsed: \"q-collapsed\",\r\n    treeContainer: \"q-tree-container\",\r\n    tree: \"q-tree\",\r\n    row: \"q-row\",\r\n    connector: \"q-connector\",\r\n    rule: \"q-rule\",\r\n    ruleSet: \"q-ruleset\",\r\n    invalidRuleSet: \"q-invalid-ruleset\",\r\n    emptyWarning: \"q-empty-warning\",\r\n    fieldControl: \"q-field-control\",\r\n    fieldControlSize: \"q-control-size\",\r\n    entityControl: \"q-entity-control\",\r\n    entityControlSize: \"q-control-size\",\r\n    operatorControl: \"q-operator-control\",\r\n    operatorControlSize: \"q-control-size\",\r\n    inputControl: \"q-input-control\",\r\n    inputControlSize: \"q-control-size\"\r\n  };\r\n  public defaultOperatorMap: { [key: string]: string[] } = {\r\n    string: [\"=\", \"!=\", \"contains\", \"like\"],\r\n    number: [\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\"],\r\n    time: [\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\"],\r\n    date: [\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\"],\r\n    category: [\"=\", \"!=\", \"in\", \"not in\"],\r\n    boolean: [\"=\"]\r\n  };\r\n  @Input() disabled = false;\r\n  @Input() data: RuleSet = { condition: \"and\", rules: [] };\r\n\r\n  @HostBinding(\"attr.query-builder-condition\") get condition() {\r\n    return this.data?.condition;\r\n  }\r\n\r\n  // For ControlValueAccessor interface\r\n  public onChangeCallback!: () => void;\r\n  public onTouchedCallback!: () => any;\r\n\r\n  @Input() allowRuleset = true;\r\n  @Input() allowCollapse = false;\r\n  @Input() emptyMessage = \"A ruleset cannot be empty. Please add a rule or remove it all together.\";\r\n  @Input() classNames: QueryBuilderClassNames = {};\r\n  @Input() operatorMap: { [key: string]: string[] } = {};\r\n  @Input() parentValue?: RuleSet;\r\n  @Input() config: QueryBuilderConfig = { fields: {} };\r\n  @Input() parentArrowIconTemplate!: QueryArrowIconDirective;\r\n  @Input() parentInputTemplates!: QueryList<QueryInputDirective>;\r\n  @Input() parentOperatorTemplate!: QueryOperatorDirective;\r\n  @Input() parentFieldTemplate!: QueryFieldDirective;\r\n  @Input() parentEntityTemplate!: QueryEntityDirective;\r\n  @Input() parentSwitchGroupTemplate!: QuerySwitchGroupDirective;\r\n  @Input() parentButtonGroupTemplate!: QueryButtonGroupDirective;\r\n  @Input() parentRemoveButtonTemplate!: QueryRemoveButtonDirective;\r\n  @Input() parentEmptyWarningTemplate!: QueryEmptyWarningDirective;\r\n  @Input() parentChangeCallback!: () => void;\r\n  @Input() parentTouchedCallback!: () => void;\r\n  @Input() persistValueOnFieldChange = false;\r\n\r\n  @ViewChild(\"treeContainer\", { static: true }) treeContainer!: ElementRef;\r\n\r\n  @ContentChild(QueryButtonGroupDirective)\r\n  buttonGroupTemplate!: QueryButtonGroupDirective;\r\n  @ContentChild(QuerySwitchGroupDirective)\r\n  switchGroupTemplate!: QuerySwitchGroupDirective;\r\n  @ContentChild(QueryFieldDirective) fieldTemplate!: QueryFieldDirective;\r\n  @ContentChild(QueryEntityDirective) entityTemplate!: QueryEntityDirective;\r\n  @ContentChild(QueryOperatorDirective)\r\n  operatorTemplate!: QueryOperatorDirective;\r\n  @ContentChild(QueryRemoveButtonDirective)\r\n  removeButtonTemplate!: QueryRemoveButtonDirective;\r\n  @ContentChild(QueryEmptyWarningDirective)\r\n  emptyWarningTemplate!: QueryEmptyWarningDirective;\r\n  @ContentChildren(QueryInputDirective, { descendants: true })\r\n  inputTemplates!: QueryList<QueryInputDirective>;\r\n  @ContentChild(QueryArrowIconDirective)\r\n  arrowIconTemplate!: QueryArrowIconDirective;\r\n\r\n  private defaultTemplateTypes: string[] = [\r\n    \"string\",\r\n    \"number\",\r\n    \"time\",\r\n    \"date\",\r\n    \"category\",\r\n    \"boolean\",\r\n    \"multiselect\"\r\n  ];\r\n  private defaultPersistValueTypes: string[] = [\"string\", \"number\", \"time\", \"date\", \"boolean\"];\r\n  private defaultEmptyList: any[] = [];\r\n  private operatorsCache: { [key: string]: string[] } = {};\r\n  private inputContextCache = new Map<Rule, InputContext>();\r\n  private operatorContextCache = new Map<Rule, OperatorContext>();\r\n  private fieldContextCache = new Map<Rule, FieldContext>();\r\n  private entityContextCache = new Map<Rule, EntityContext>();\r\n  private removeButtonContextCache = new Map<Rule, RemoveButtonContext>();\r\n  private buttonGroupContext!: ButtonGroupContext;\r\n\r\n  constructor(private changeDetectorRef: ChangeDetectorRef) {\r\n    this.fields = [];\r\n    this.filterFields = [];\r\n    this.entities = [];\r\n  }\r\n\r\n  // ----------OnChanges Implementation----------\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const config = this.config;\r\n    const type = typeof config;\r\n    if (type === \"object\") {\r\n      this.fields = Object.keys(config.fields).map((value) => {\r\n        const field = config.fields[value];\r\n        field.value = field.value || value;\r\n        return field;\r\n      });\r\n      if (config.entities) {\r\n        this.entities = Object.keys(config.entities).map((value) => {\r\n          const entity = config.entities ? config.entities[value] : ([] as any);\r\n          entity.value = entity.value || value;\r\n          return entity;\r\n        });\r\n      } else {\r\n        this.entities = [];\r\n      }\r\n      this.operatorsCache = {};\r\n    } else {\r\n      throw new Error(`Expected 'config' must be a valid object, got ${type} instead.`);\r\n    }\r\n  }\r\n\r\n  // ----------Validator Implementation----------\r\n\r\n  validate(control: AbstractControl): ValidationErrors | null {\r\n    const errors: { [key: string]: any } = {};\r\n    const ruleErrorStore = [] as any;\r\n    let hasErrors = false;\r\n\r\n    if (!this.config.allowEmptyRulesets && this.checkEmptyRuleInRuleset(this.data)) {\r\n      errors.empty = \"Empty rulesets are not allowed.\";\r\n      hasErrors = true;\r\n    }\r\n\r\n    this.validateRulesInRuleset(this.data, ruleErrorStore);\r\n\r\n    if (ruleErrorStore.length) {\r\n      errors.rules = ruleErrorStore;\r\n      hasErrors = true;\r\n    }\r\n    return hasErrors ? errors : null;\r\n  }\r\n\r\n  // ----------ControlValueAccessor Implementation----------\r\n\r\n  @Input()\r\n  get value(): RuleSet {\r\n    return this.data;\r\n  }\r\n  set value(value: RuleSet) {\r\n    // When component is initialized without a formControl, null is passed to value\r\n    this.data = value || { condition: \"and\", rules: [] };\r\n    this.handleDataChange();\r\n  }\r\n\r\n  writeValue(obj: any): void {\r\n    this.value = obj;\r\n  }\r\n  registerOnChange(fn: any): void {\r\n    this.onChangeCallback = () => fn(this.data);\r\n  }\r\n  registerOnTouched(fn: any): void {\r\n    this.onTouchedCallback = () => fn(this.data);\r\n  }\r\n  setDisabledState(isDisabled: boolean): void {\r\n    this.disabled = isDisabled;\r\n    this.changeDetectorRef.detectChanges();\r\n  }\r\n\r\n  // ----------END----------\r\n\r\n  getDisabledState = (): boolean => {\r\n    return this.disabled;\r\n  };\r\n\r\n  findTemplateForRule(rule: Rule): TemplateRef<any> | any {\r\n    const type = this.getInputType(rule.field, rule.operator as string);\r\n    if (type) {\r\n      const queryInput = this.findQueryInput(type);\r\n      if (queryInput) {\r\n        return queryInput.template;\r\n      } else {\r\n        if (this.defaultTemplateTypes.indexOf(type) === -1) {\r\n          console.warn(`Could not find template for field with type: ${type}`);\r\n        }\r\n        return null;\r\n      }\r\n    }\r\n  }\r\n\r\n  findQueryInput(type: string): QueryInputDirective {\r\n    const templates = this.parentInputTemplates || this.inputTemplates || [];\r\n    return templates.find((item) => item.queryInputType === type) as QueryInputDirective;\r\n  }\r\n\r\n  getOperators(field: string): string[] {\r\n    if (this.operatorsCache[field]) {\r\n      return this.operatorsCache[field];\r\n    }\r\n    let operators = this.defaultEmptyList;\r\n    const fieldObject = this.config.fields[field];\r\n\r\n    if (this.config.getOperators) {\r\n      return this.config.getOperators(field, fieldObject);\r\n    }\r\n\r\n    const type = fieldObject.type;\r\n\r\n    if (fieldObject && fieldObject.operators) {\r\n      operators = fieldObject.operators;\r\n    } else if (type) {\r\n      operators =\r\n        (this.operatorMap && this.operatorMap[type]) ||\r\n        this.defaultOperatorMap[type] ||\r\n        this.defaultEmptyList;\r\n      if (operators.length === 0) {\r\n        console.warn(\r\n          `No operators found for field '${field}' with type ${fieldObject.type}. ` +\r\n            `Please define an 'operators' property on the field or use the 'operatorMap' binding to fix this.`\r\n        );\r\n      }\r\n      if (fieldObject.nullable) {\r\n        operators = operators.concat([\"is null\", \"is not null\"]);\r\n      }\r\n    } else {\r\n      console.warn(`No 'type' property found on field: '${field}'`);\r\n    }\r\n\r\n    // Cache reference to array object, so it won't be computed next time and trigger a rerender.\r\n    this.operatorsCache[field] = operators;\r\n    return operators;\r\n  }\r\n\r\n  getFields(entity: string): Field[] {\r\n    if (this.entities?.length && entity) {\r\n      return this.fields.filter((field) => {\r\n        return field && field.entity === entity;\r\n      });\r\n    } else {\r\n      return this.fields;\r\n    }\r\n  }\r\n\r\n  getInputType(field: string, operator: string): string | null {\r\n    if (this.config.getInputType) {\r\n      return this.config.getInputType(field, operator);\r\n    }\r\n\r\n    if (!this.config.fields[field]) {\r\n      throw new Error(\r\n        `No configuration for field '${field}' could be found! Please add it to config.fields.`\r\n      );\r\n    }\r\n\r\n    const type = this.config.fields[field].type;\r\n    switch (operator) {\r\n      case \"is null\":\r\n      case \"is not null\":\r\n        return null; // No displayed component\r\n      case \"in\":\r\n      case \"not in\":\r\n        return type === \"category\" || type === \"boolean\" ? \"multiselect\" : type;\r\n      default:\r\n        return type;\r\n    }\r\n  }\r\n\r\n  getOptions(field: string): Option[] {\r\n    if (this.config.getOptions) {\r\n      return this.config.getOptions(field);\r\n    }\r\n    return this.config.fields[field].options || this.defaultEmptyList;\r\n  }\r\n\r\n  getClassNames(...args: string[]): any | string[] {\r\n    const clsLookup = this.classNames ? this.classNames : (this.defaultClassNames as any);\r\n    const defaultClassNames = this.defaultClassNames as any;\r\n    const classNames = args\r\n      .map((id: any) => clsLookup[id] || defaultClassNames[id])\r\n      .filter((c: any) => !!c);\r\n    return classNames.length ? classNames.join(\" \") : [];\r\n  }\r\n\r\n  getDefaultField(entity: Entity): Field | null {\r\n    if (!entity) {\r\n      return null;\r\n    } else if (entity.defaultField !== undefined) {\r\n      return this.getDefaultValue(entity.defaultField);\r\n    } else {\r\n      const entityFields = this.fields.filter((field) => {\r\n        return field && field.entity === entity.value;\r\n      });\r\n      if (entityFields && entityFields.length) {\r\n        return entityFields[0];\r\n      } else {\r\n        console.warn(\r\n          `No fields found for entity '${entity.name}'. ` +\r\n            `A 'defaultOperator' is also not specified on the field config. Operator value will default to null.`\r\n        );\r\n        return null;\r\n      }\r\n    }\r\n  }\r\n\r\n  getDefaultOperator(field: Field): string | null {\r\n    if (field && field.defaultOperator !== undefined) {\r\n      return this.getDefaultValue(field.defaultOperator);\r\n    } else {\r\n      const operators = this.getOperators(field.value as string);\r\n      if (operators && operators.length) {\r\n        return operators[0];\r\n      } else {\r\n        console.warn(\r\n          `No operators found for field '${field.value}'. ` +\r\n            `A 'defaultOperator' is also not specified on the field config. Operator value will default to null.`\r\n        );\r\n        return null;\r\n      }\r\n    }\r\n  }\r\n\r\n  addRule(parent?: RuleSet): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    parent = parent || this.data;\r\n    if (this.config.addRule) {\r\n      this.config.addRule(parent);\r\n    } else {\r\n      const field = this.fields[0];\r\n      parent.rules = parent.rules.concat([\r\n        {\r\n          field: field.value as string,\r\n          operator: this.getDefaultOperator(field) as string,\r\n          value: this.getDefaultValue(field.defaultValue),\r\n          entity: field.entity\r\n        }\r\n      ]);\r\n    }\r\n\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  removeRule(rule: Rule, parent?: RuleSet): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    parent = parent || this.data;\r\n    if (this.config.removeRule) {\r\n      this.config.removeRule(rule, parent);\r\n    } else {\r\n      parent.rules = parent.rules.filter((r) => r !== rule);\r\n    }\r\n    this.inputContextCache.delete(rule);\r\n    this.operatorContextCache.delete(rule);\r\n    this.fieldContextCache.delete(rule);\r\n    this.entityContextCache.delete(rule);\r\n    this.removeButtonContextCache.delete(rule);\r\n\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  addRuleSet(parent?: RuleSet): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    parent = parent || this.data;\r\n    if (this.config.addRuleSet) {\r\n      this.config.addRuleSet(parent);\r\n    } else {\r\n      parent.rules = parent.rules.concat([{ condition: \"and\", rules: [] }]);\r\n    }\r\n\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  removeRuleSet(ruleset?: RuleSet, parent?: RuleSet): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    ruleset = ruleset || this.data;\r\n    parent = parent || this.parentValue;\r\n    if (this.config.removeRuleSet) {\r\n      this.config.removeRuleSet(ruleset, parent);\r\n    } else if (parent) {\r\n      parent.rules = parent.rules.filter((r) => r !== ruleset);\r\n    }\r\n\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  transitionEnd(e: Event): void {\r\n    this.treeContainer.nativeElement.style.maxHeight = null;\r\n  }\r\n\r\n  toggleCollapse(): void {\r\n    this.computedTreeContainerHeight();\r\n    setTimeout(() => {\r\n      this.data.collapsed = !this.data.collapsed;\r\n    }, 100);\r\n  }\r\n\r\n  computedTreeContainerHeight(): void {\r\n    const nativeElement: HTMLElement = this.treeContainer.nativeElement;\r\n    if (nativeElement && nativeElement.firstElementChild) {\r\n      nativeElement.style.maxHeight = nativeElement.firstElementChild.clientHeight + 8 + \"px\";\r\n    }\r\n  }\r\n\r\n  changeCondition(value: string): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    this.data.condition = value;\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  changeOperator(rule: Rule): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    if (this.config.coerceValueForOperator) {\r\n      rule.value = this.config.coerceValueForOperator(rule.operator as string, rule.value, rule);\r\n    } else {\r\n      rule.value = this.coerceValueForOperator(rule.operator as string, rule.value, rule);\r\n    }\r\n\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  coerceValueForOperator(operator: string, value: any, rule: Rule): any {\r\n    const inputType: string | null = this.getInputType(rule.field, operator);\r\n    if (inputType === \"multiselect\" && !Array.isArray(value)) {\r\n      return [value];\r\n    }\r\n    return value;\r\n  }\r\n\r\n  changeInput(): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  changeField(fieldValue: string, rule: Rule): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n\r\n    const inputContext = this.inputContextCache.get(rule);\r\n    const currentField = inputContext && inputContext.field;\r\n\r\n    const nextField: Field = this.config.fields[fieldValue];\r\n\r\n    const nextValue = this.calculateFieldChangeValue(currentField as Field, nextField, rule.value);\r\n\r\n    if (nextValue !== undefined) {\r\n      rule.value = nextValue;\r\n    } else {\r\n      delete rule.value;\r\n    }\r\n\r\n    rule.operator = this.getDefaultOperator(nextField) as string;\r\n\r\n    // Create new context objects so templates will automatically update\r\n    this.inputContextCache.delete(rule);\r\n    this.operatorContextCache.delete(rule);\r\n    this.fieldContextCache.delete(rule);\r\n    this.entityContextCache.delete(rule);\r\n    this.getInputContext(rule);\r\n    this.getFieldContext(rule);\r\n    this.getOperatorContext(rule);\r\n    this.getEntityContext(rule);\r\n\r\n    this.handleTouched();\r\n    this.handleDataChange();\r\n  }\r\n\r\n  changeEntity(entityValue: string, rule: Rule, index: number, data: RuleSet): void {\r\n    if (this.disabled) {\r\n      return;\r\n    }\r\n    let i = index;\r\n    let rs = data;\r\n    const entity: Entity = this.entities.find((e) => e.value === entityValue) as Entity;\r\n    const defaultField: Field = this.getDefaultField(entity) as Field;\r\n    if (!rs) {\r\n      rs = this.data;\r\n      i = rs.rules.findIndex((x) => x === rule);\r\n    }\r\n    rule.field = defaultField.value as string;\r\n    rs.rules[i] = rule;\r\n    if (defaultField) {\r\n      this.changeField(defaultField.value as string, rule);\r\n    } else {\r\n      this.handleTouched();\r\n      this.handleDataChange();\r\n    }\r\n  }\r\n\r\n  getDefaultValue(defaultValue: any): any {\r\n    switch (typeof defaultValue) {\r\n      case \"function\":\r\n        return defaultValue();\r\n      default:\r\n        return defaultValue;\r\n    }\r\n  }\r\n\r\n  getOperatorTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentOperatorTemplate || this.operatorTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getFieldTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentFieldTemplate || this.fieldTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getEntityTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentEntityTemplate || this.entityTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getArrowIconTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentArrowIconTemplate || this.arrowIconTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getButtonGroupTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentButtonGroupTemplate || this.buttonGroupTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getSwitchGroupTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentSwitchGroupTemplate || this.switchGroupTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getRemoveButtonTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentRemoveButtonTemplate || this.removeButtonTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getEmptyWarningTemplate(): TemplateRef<any> | null {\r\n    const t = this.parentEmptyWarningTemplate || this.emptyWarningTemplate;\r\n    return t ? t.template : null;\r\n  }\r\n\r\n  getQueryItemClassName(local: LocalRuleMeta): string {\r\n    let cls = this.getClassNames(\"row\", \"connector\", \"transition\");\r\n    cls += \" \" + this.getClassNames(local.ruleset ? \"ruleSet\" : \"rule\");\r\n    if (local.invalid) {\r\n      cls += \" \" + this.getClassNames(\"invalidRuleSet\");\r\n    }\r\n    return cls as string;\r\n  }\r\n\r\n  getButtonGroupContext(): ButtonGroupContext {\r\n    if (!this.buttonGroupContext) {\r\n      this.buttonGroupContext = {\r\n        addRule: this.addRule.bind(this),\r\n        addRuleSet: this.allowRuleset && (this.addRuleSet.bind(this) as any),\r\n        removeRuleSet:\r\n          this.allowRuleset && this.parentValue && (this.removeRuleSet.bind(this) as any),\r\n        getDisabledState: this.getDisabledState,\r\n        $implicit: this.data\r\n      };\r\n    }\r\n    return this.buttonGroupContext;\r\n  }\r\n\r\n  getRemoveButtonContext(rule: Rule): RemoveButtonContext {\r\n    if (!this.removeButtonContextCache.has(rule)) {\r\n      this.removeButtonContextCache.set(rule, {\r\n        removeRule: this.removeRule.bind(this),\r\n        getDisabledState: this.getDisabledState,\r\n        $implicit: rule\r\n      });\r\n    }\r\n    return this.removeButtonContextCache.get(rule) as RemoveButtonContext;\r\n  }\r\n\r\n  getFieldContext(rule: Rule): FieldContext {\r\n    if (!this.fieldContextCache.has(rule)) {\r\n      this.fieldContextCache.set(rule, {\r\n        onChange: this.changeField.bind(this),\r\n        getFields: this.getFields.bind(this),\r\n        getDisabledState: this.getDisabledState,\r\n        fields: this.fields,\r\n        $implicit: rule\r\n      });\r\n    }\r\n    return this.fieldContextCache.get(rule) as FieldContext;\r\n  }\r\n\r\n  getEntityContext(rule: Rule): EntityContext {\r\n    if (!this.entityContextCache.has(rule)) {\r\n      this.entityContextCache.set(rule, {\r\n        onChange: this.changeEntity.bind(this) as any,\r\n        getDisabledState: this.getDisabledState,\r\n        entities: this.entities,\r\n        $implicit: rule\r\n      });\r\n    }\r\n    return this.entityContextCache.get(rule) as EntityContext;\r\n  }\r\n\r\n  getSwitchGroupContext(): SwitchGroupContext {\r\n    return {\r\n      onChange: this.changeCondition.bind(this),\r\n      getDisabledState: this.getDisabledState,\r\n      $implicit: this.data\r\n    };\r\n  }\r\n\r\n  getArrowIconContext(): ArrowIconContext {\r\n    return {\r\n      getDisabledState: this.getDisabledState,\r\n      $implicit: this.data\r\n    };\r\n  }\r\n\r\n  getEmptyWarningContext(): EmptyWarningContext {\r\n    return {\r\n      getDisabledState: this.getDisabledState,\r\n      message: this.emptyMessage,\r\n      $implicit: this.data\r\n    };\r\n  }\r\n\r\n  getOperatorContext(rule: Rule): OperatorContext {\r\n    if (!this.operatorContextCache.has(rule)) {\r\n      this.operatorContextCache.set(rule, {\r\n        onChange: this.changeOperator.bind(this) as any,\r\n        getDisabledState: this.getDisabledState,\r\n        operators: this.getOperators(rule.field),\r\n        $implicit: rule\r\n      });\r\n    }\r\n    return this.operatorContextCache.get(rule) as OperatorContext;\r\n  }\r\n\r\n  getInputContext(rule: Rule): InputContext {\r\n    if (!this.inputContextCache.has(rule)) {\r\n      this.inputContextCache.set(rule, {\r\n        onChange: this.changeInput.bind(this),\r\n        getDisabledState: this.getDisabledState,\r\n        options: this.getOptions(rule.field),\r\n        field: this.config.fields[rule.field],\r\n        $implicit: rule\r\n      });\r\n    }\r\n    return this.inputContextCache.get(rule) as InputContext;\r\n  }\r\n\r\n  private calculateFieldChangeValue(currentField: Field, nextField: Field, currentValue: any): any {\r\n    if (this.config.calculateFieldChangeValue != null) {\r\n      return this.config.calculateFieldChangeValue(currentField, nextField, currentValue);\r\n    }\r\n\r\n    const canKeepValue = () => {\r\n      if (currentField == null || nextField == null) {\r\n        return false;\r\n      }\r\n      return (\r\n        currentField.type === nextField.type &&\r\n        this.defaultPersistValueTypes.indexOf(currentField.type) !== -1\r\n      );\r\n    };\r\n\r\n    if (this.persistValueOnFieldChange && canKeepValue()) {\r\n      return currentValue;\r\n    }\r\n\r\n    if (nextField && nextField.defaultValue !== undefined) {\r\n      return this.getDefaultValue(nextField.defaultValue);\r\n    }\r\n\r\n    return undefined;\r\n  }\r\n\r\n  private checkEmptyRuleInRuleset(ruleset: RuleSet): boolean {\r\n    if (!ruleset || !ruleset.rules || ruleset.rules.length === 0) {\r\n      return true;\r\n    } else {\r\n      return ruleset.rules.some((item: RuleSet | any) => {\r\n        if (item.rules) {\r\n          return this.checkEmptyRuleInRuleset(item);\r\n        } else {\r\n          return false;\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  private validateRulesInRuleset(ruleset: RuleSet, errorStore: any[]) {\r\n    if (ruleset && ruleset.rules && ruleset.rules.length > 0) {\r\n      ruleset.rules.forEach((item) => {\r\n        if ((item as RuleSet).rules) {\r\n          return this.validateRulesInRuleset(item as RuleSet, errorStore);\r\n        } else if ((item as Rule).field) {\r\n          const field = this.config.fields[(item as Rule).field];\r\n          if (field && field.validator) {\r\n            const error = field.validator(item as Rule, ruleset);\r\n            if (error != null) {\r\n              errorStore.push(error);\r\n            }\r\n          }\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  private handleDataChange(): void {\r\n    this.changeDetectorRef.markForCheck();\r\n    if (this.onChangeCallback) {\r\n      this.onChangeCallback();\r\n    }\r\n    if (this.parentChangeCallback) {\r\n      this.parentChangeCallback();\r\n    }\r\n  }\r\n\r\n  private handleTouched(): void {\r\n    if (this.onTouchedCallback) {\r\n      this.onTouchedCallback();\r\n    }\r\n    if (this.parentTouchedCallback) {\r\n      this.parentTouchedCallback();\r\n    }\r\n  }\r\n}\r\n","<div [ngClass]=\"getClassNames('switchRow')\">\r\n  <ng-template #defaultArrowIcon>\r\n    <i [ngClass]=\"getClassNames('arrowIcon')\"></i>\r\n  </ng-template>\r\n\r\n  <a\r\n    *ngIf=\"allowCollapse\"\r\n    (click)=\"toggleCollapse()\"\r\n    [ngClass]=\"getClassNames('arrowIconButton', data.collapsed ? 'collapsed' : '')\"\r\n  >\r\n    <ng-container *ngIf=\"getArrowIconTemplate() as template; else defaultArrowIcon\">\r\n      <ng-container *ngTemplateOutlet=\"template; context: getArrowIconContext()\"></ng-container>\r\n    </ng-container>\r\n  </a>\r\n\r\n  <ng-container *ngIf=\"getButtonGroupTemplate() as template; else defaultButtonGroup\">\r\n    <div [ngClass]=\"getClassNames('buttonGroup', 'rightAlign')\">\r\n      <ng-container *ngTemplateOutlet=\"template; context: getButtonGroupContext()\"></ng-container>\r\n    </div>\r\n  </ng-container>\r\n\r\n  <ng-template #defaultButtonGroup>\r\n    <div [ngClass]=\"getClassNames('buttonGroup', 'rightAlign')\">\r\n      <button\r\n        type=\"button\"\r\n        (click)=\"addRule()\"\r\n        [ngClass]=\"getClassNames('button')\"\r\n        [disabled]=\"disabled\"\r\n      >\r\n        <i [ngClass]=\"getClassNames('addIcon')\"></i> Rule\r\n      </button>\r\n      <button\r\n        type=\"button\"\r\n        (click)=\"addRuleSet()\"\r\n        [ngClass]=\"getClassNames('button')\"\r\n        *ngIf=\"allowRuleset\"\r\n        [disabled]=\"disabled\"\r\n      >\r\n        <i [ngClass]=\"getClassNames('addIcon')\"></i> Ruleset\r\n      </button>\r\n      <ng-container *ngIf=\"!!parentValue && allowRuleset\">\r\n        <button\r\n          type=\"button\"\r\n          (click)=\"removeRuleSet()\"\r\n          [ngClass]=\"getClassNames('button', 'removeButton')\"\r\n          [disabled]=\"disabled\"\r\n        >\r\n          <i [ngClass]=\"getClassNames('removeIcon')\"></i>\r\n        </button>\r\n      </ng-container>\r\n    </div>\r\n  </ng-template>\r\n\r\n  <ng-container *ngIf=\"getSwitchGroupTemplate() as template; else defaultSwitchGroup\">\r\n    <ng-container *ngTemplateOutlet=\"template; context: getSwitchGroupContext()\"></ng-container>\r\n  </ng-container>\r\n\r\n  <ng-template #defaultSwitchGroup>\r\n    <div [ngClass]=\"getClassNames('switchGroup', 'transition')\" *ngIf=\"data\">\r\n      <div [ngClass]=\"getClassNames('switchControl')\">\r\n        <input\r\n          type=\"radio\"\r\n          [ngClass]=\"getClassNames('switchRadio')\"\r\n          [(ngModel)]=\"data.condition\"\r\n          [disabled]=\"disabled\"\r\n          value=\"and\"\r\n          #andOption\r\n        />\r\n        <label (click)=\"changeCondition(andOption.value)\" [ngClass]=\"getClassNames('switchLabel')\"\r\n          >AND</label\r\n        >\r\n      </div>\r\n      <div [ngClass]=\"getClassNames('switchControl')\">\r\n        <input\r\n          type=\"radio\"\r\n          [ngClass]=\"getClassNames('switchRadio')\"\r\n          [(ngModel)]=\"data.condition\"\r\n          [disabled]=\"disabled\"\r\n          value=\"or\"\r\n          #orOption\r\n        />\r\n        <label (click)=\"changeCondition(orOption.value)\" [ngClass]=\"getClassNames('switchLabel')\"\r\n          >OR</label\r\n        >\r\n      </div>\r\n    </div>\r\n  </ng-template>\r\n</div>\r\n\r\n<div\r\n  #treeContainer\r\n  (transitionend)=\"transitionEnd($event)\"\r\n  [ngClass]=\"getClassNames('treeContainer', data.collapsed ? 'collapsed' : '')\"\r\n>\r\n  <ul [ngClass]=\"getClassNames('tree')\" *ngIf=\"data && data.rules\">\r\n    <ng-container *ngFor=\"let rule of data.rules; let i = index\">\r\n      <ng-container\r\n        *ngIf=\"{\r\n          ruleset: !!rule.rules,\r\n          invalid: !config.allowEmptyRulesets && rule.rules && rule.rules.length === 0\r\n        } as local\"\r\n      >\r\n        <li [ngClass]=\"getQueryItemClassName(local)\">\r\n          <ng-container *ngIf=\"!local.ruleset\">\r\n            <ng-container *ngIf=\"getRemoveButtonTemplate() as template; else defaultRemoveButton\">\r\n              <div [ngClass]=\"getClassNames('buttonGroup', 'rightAlign')\">\r\n                <ng-container\r\n                  *ngTemplateOutlet=\"template; context: getRemoveButtonContext(rule)\"\r\n                ></ng-container>\r\n              </div>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultRemoveButton>\r\n              <div [ngClass]=\"getClassNames('removeButtonSize', 'rightAlign')\">\r\n                <button\r\n                  type=\"button\"\r\n                  [ngClass]=\"getClassNames('button', 'removeButton')\"\r\n                  (click)=\"removeRule(rule, data)\"\r\n                  [disabled]=\"disabled\"\r\n                >\r\n                  <i [ngClass]=\"getClassNames('removeIcon')\"></i>\r\n                </button>\r\n              </div>\r\n            </ng-template>\r\n\r\n            <div *ngIf=\"entities?.length\" class=\"q-inline-block-display\">\r\n              <ng-container *ngIf=\"getEntityTemplate() as template; else defaultEntity\">\r\n                <ng-container\r\n                  *ngTemplateOutlet=\"template; context: getEntityContext(rule)\"\r\n                ></ng-container>\r\n              </ng-container>\r\n            </div>\r\n\r\n            <ng-template #defaultEntity>\r\n              <div [ngClass]=\"getClassNames('entityControlSize')\">\r\n                <select\r\n                  [ngClass]=\"getClassNames('entityControl')\"\r\n                  [(ngModel)]=\"rule.entity\"\r\n                  (ngModelChange)=\"changeEntity($event, rule, i, data)\"\r\n                  [disabled]=\"disabled\"\r\n                >\r\n                  <option *ngFor=\"let entity of entities\" [ngValue]=\"entity.value\">\r\n                    {{ entity.name }}\r\n                  </option>\r\n                </select>\r\n              </div>\r\n            </ng-template>\r\n\r\n            <ng-container *ngIf=\"getFieldTemplate() as template; else defaultField\">\r\n              <ng-container\r\n                *ngTemplateOutlet=\"template; context: getFieldContext(rule)\"\r\n              ></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultField>\r\n              <div [ngClass]=\"getClassNames('fieldControlSize')\">\r\n                <select\r\n                  [ngClass]=\"getClassNames('fieldControl')\"\r\n                  [(ngModel)]=\"rule.field\"\r\n                  (ngModelChange)=\"changeField($event, rule)\"\r\n                  [disabled]=\"disabled\"\r\n                >\r\n                  <option *ngFor=\"let field of getFields(rule.entity)\" [ngValue]=\"field.value\">\r\n                    {{ field.name }}\r\n                  </option>\r\n                </select>\r\n              </div>\r\n            </ng-template>\r\n\r\n            <ng-container *ngIf=\"getOperatorTemplate() as template; else defaultOperator\">\r\n              <ng-container\r\n                *ngTemplateOutlet=\"template; context: getOperatorContext(rule)\"\r\n              ></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultOperator>\r\n              <div [ngClass]=\"getClassNames('operatorControlSize')\">\r\n                <select\r\n                  [ngClass]=\"getClassNames('operatorControl')\"\r\n                  [(ngModel)]=\"rule.operator\"\r\n                  (ngModelChange)=\"changeOperator(rule)\"\r\n                  [disabled]=\"disabled\"\r\n                >\r\n                  <option *ngFor=\"let operator of getOperators(rule.field)\" [ngValue]=\"operator\">\r\n                    {{ operator }}\r\n                  </option>\r\n                </select>\r\n              </div>\r\n            </ng-template>\r\n\r\n            <ng-container *ngIf=\"findTemplateForRule(rule) as template; else defaultInput\">\r\n              <ng-container\r\n                *ngTemplateOutlet=\"template; context: getInputContext(rule)\"\r\n              ></ng-container>\r\n            </ng-container>\r\n\r\n            <ng-template #defaultInput>\r\n              <div\r\n                [ngClass]=\"getClassNames('inputControlSize')\"\r\n                [ngSwitch]=\"getInputType(rule.field, rule.operator)\"\r\n              >\r\n                <input\r\n                  [ngClass]=\"getClassNames('inputControl')\"\r\n                  [(ngModel)]=\"rule.value\"\r\n                  (ngModelChange)=\"changeInput()\"\r\n                  [disabled]=\"disabled\"\r\n                  *ngSwitchCase=\"'string'\"\r\n                  type=\"text\"\r\n                />\r\n                <input\r\n                  [ngClass]=\"getClassNames('inputControl')\"\r\n                  [(ngModel)]=\"rule.value\"\r\n                  (ngModelChange)=\"changeInput()\"\r\n                  [disabled]=\"disabled\"\r\n                  *ngSwitchCase=\"'number'\"\r\n                  type=\"number\"\r\n                />\r\n                <input\r\n                  [ngClass]=\"getClassNames('inputControl')\"\r\n                  [(ngModel)]=\"rule.value\"\r\n                  (ngModelChange)=\"changeInput()\"\r\n                  [disabled]=\"disabled\"\r\n                  *ngSwitchCase=\"'date'\"\r\n                  type=\"date\"\r\n                />\r\n                <input\r\n                  [ngClass]=\"getClassNames('inputControl')\"\r\n                  [(ngModel)]=\"rule.value\"\r\n                  (ngModelChange)=\"changeInput()\"\r\n                  [disabled]=\"disabled\"\r\n                  *ngSwitchCase=\"'time'\"\r\n                  type=\"time\"\r\n                />\r\n                <select\r\n                  [ngClass]=\"getClassNames('inputControl')\"\r\n                  [(ngModel)]=\"rule.value\"\r\n                  (ngModelChange)=\"changeInput()\"\r\n                  [disabled]=\"disabled\"\r\n                  *ngSwitchCase=\"'category'\"\r\n                >\r\n                  <option *ngFor=\"let opt of getOptions(rule.field)\" [ngValue]=\"opt.value\">\r\n                    {{ opt.name }}\r\n                  </option>\r\n                </select>\r\n                <ng-container *ngSwitchCase=\"'multiselect'\">\r\n                  <select\r\n                    [ngClass]=\"getClassNames('inputControl')\"\r\n                    [(ngModel)]=\"rule.value\"\r\n                    (ngModelChange)=\"changeInput()\"\r\n                    [disabled]=\"disabled\"\r\n                    multiple\r\n                  >\r\n                    <option *ngFor=\"let opt of getOptions(rule.field)\" [ngValue]=\"opt.value\">\r\n                      {{ opt.name }}\r\n                    </option>\r\n                  </select>\r\n                </ng-container>\r\n                <input\r\n                  [ngClass]=\"getClassNames('inputControl')\"\r\n                  [(ngModel)]=\"rule.value\"\r\n                  (ngModelChange)=\"changeInput()\"\r\n                  [disabled]=\"disabled\"\r\n                  *ngSwitchCase=\"'boolean'\"\r\n                  type=\"checkbox\"\r\n                />\r\n              </div>\r\n            </ng-template>\r\n          </ng-container>\r\n          <query-builder\r\n            *ngIf=\"local.ruleset\"\r\n            [data]=\"rule\"\r\n            [disabled]=\"disabled\"\r\n            [parentTouchedCallback]=\"parentTouchedCallback || onTouchedCallback\"\r\n            [parentChangeCallback]=\"parentChangeCallback || onChangeCallback\"\r\n            [parentInputTemplates]=\"parentInputTemplates || inputTemplates\"\r\n            [parentOperatorTemplate]=\"parentOperatorTemplate || operatorTemplate\"\r\n            [parentFieldTemplate]=\"parentFieldTemplate || fieldTemplate\"\r\n            [parentEntityTemplate]=\"parentEntityTemplate || entityTemplate\"\r\n            [parentSwitchGroupTemplate]=\"parentSwitchGroupTemplate || switchGroupTemplate\"\r\n            [parentButtonGroupTemplate]=\"parentButtonGroupTemplate || buttonGroupTemplate\"\r\n            [parentRemoveButtonTemplate]=\"parentRemoveButtonTemplate || removeButtonTemplate\"\r\n            [parentEmptyWarningTemplate]=\"parentEmptyWarningTemplate || emptyWarningTemplate\"\r\n            [parentArrowIconTemplate]=\"parentArrowIconTemplate || arrowIconTemplate\"\r\n            [parentValue]=\"data\"\r\n            [classNames]=\"classNames\"\r\n            [config]=\"config\"\r\n            [allowRuleset]=\"allowRuleset\"\r\n            [allowCollapse]=\"allowCollapse\"\r\n            [emptyMessage]=\"emptyMessage\"\r\n            [operatorMap]=\"operatorMap\"\r\n          >\r\n          </query-builder>\r\n\r\n          <ng-container *ngIf=\"getEmptyWarningTemplate() as template; else defaultEmptyWarning\">\r\n            <ng-container *ngIf=\"local.invalid\">\r\n              <ng-container\r\n                *ngTemplateOutlet=\"template; context: getEmptyWarningContext()\"\r\n              ></ng-container>\r\n            </ng-container>\r\n          </ng-container>\r\n\r\n          <ng-template #defaultEmptyWarning>\r\n            <p [ngClass]=\"getClassNames('emptyWarning')\" *ngIf=\"local.invalid\">\r\n              {{ emptyMessage }}\r\n            </p>\r\n          </ng-template>\r\n        </li>\r\n      </ng-container>\r\n    </ng-container>\r\n  </ul>\r\n</div>\r\n","// Angular\r\nimport { ChangeDetectorRef, Component, EventEmitter, forwardRef, Input, Output, SimpleChanges } from \"@angular/core\";\r\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from \"@angular/forms\";\r\n\r\n// Configurazioni\r\nimport { LocalizationService } from \"@esfaenza/localizations\";\r\nimport { UtilityService } from \"@esfaenza/extensions\";\r\n\r\n// Classi\r\nimport { MtdEntity } from './models/MtdEntity';\r\nimport { KeyValue } from './models/KeyValue';\r\nimport { QueryRule } from './models/QueryRule';\r\n\r\n// Direttive, Componenti, Librerie\r\nimport { Option, QueryBuilderConfig, Rule, RuleSet } from \"./base/query-builder.interfaces\";\r\n\r\n// Applicazione\r\nimport { MetadataQueryBuilderLoc } from \"./metadata_querybuilder.component.loc\";\r\nimport { Observable } from 'rxjs';\r\n\r\n/**\r\n * Componente che permette di generare una Query basata da una lista di entità e le loro proprietà\r\n */\r\n@Component({\r\n    selector: \"mdqb\",\r\n    providers: [\r\n        { provide: LocalizationService, useClass: MetadataQueryBuilderLoc },\r\n        { provide: NG_VALUE_ACCESSOR, useExisting: forwardRef(() => MetadataQueryBuilderComponent), multi: true }\r\n    ],\r\n    styleUrls: [\"./metadata_querybuilder.component.scss\"],\r\n    templateUrl: \"./metadata_querybuilder.component.html\",\r\n    standalone: false\r\n})\r\nexport class MetadataQueryBuilderComponent implements ControlValueAccessor {\r\n\r\n    /** Nome dell'entità di partenza da cui iniziare a caricare i campi su cui poter creare la Query */\r\n    @Input() StartingEntity: string = \"\";\r\n\r\n    /** Titolo del componente. Se non presente non apparirà nemmeno il tag lato HTML */\r\n    @Input() Title: string = \"\";\r\n\r\n    /** Rimuove padding destro e sinistro dai contenitori del selettore di entità e dal contenitore del Query Builder */\r\n    @Input() NoPadding: boolean = false;\r\n\r\n    /** Rimuove padding destro e sinistro dai contenitori del selettore di entità e dal contenitore del Query Builder */\r\n    @Input() AllowReferences: boolean = false;\r\n\r\n    /** Indica se la query può essere modificata */\r\n    @Input() Readonly: boolean = false;\r\n\r\n    /** Lista di Entità caricate i cui campi fanno parte della Query attuale */\r\n    @Input() Entities: string[] = [];\r\n\r\n    /** Observable di Input da implementare. Utilizzato per richieedre informazioni su una lista di Entità */\r\n    @Input() onEntitiesRequest: () => Observable<MtdEntity[]>;\r\n\r\n    /** Observable di Input da implementare. Utilizzato per richieedre informazioni su una singola Entità */\r\n    @Input() onEntityRequest: (entityName: string) => Observable<MtdEntity>;\r\n\r\n    /** Observable di Input da implementare. Utilizzato per richieedre informazioni sulle Entità collegate ad una singola Entità */\r\n    @Input() onEntityRelationsRequest: (commaSeparatedEntityNames: string) => Observable<MtdEntity[]>;\r\n\r\n    /** Parametri utilizzabili per gli Input di tipo \"date\" */\r\n    @Input() DateParameters: KeyValue[] = [];\r\n\r\n    /** Parametri utilizzabili per gli Input di tipo \"string\" */\r\n    @Input() StringParameters: KeyValue[] = [];\r\n\r\n    /** Modalità ad utilizzo singola entità, senza dover navigare nessuna gerarchia */\r\n    @Input() SingleEntity: MtdEntity = null;\r\n\r\n    /** Evento richiamato alla modifica delle Entità utilizzate dalla Query corrente */\r\n    @Output() EntitiesChange: EventEmitter<string[]> = new EventEmitter<string[]>();\r\n\r\n    /** Lista di tutte le Entità attualmente disponibili  */\r\n    public AvailableEntities: MtdEntity[] = [];\r\n\r\n    /** Lista di tutte le Entità attualmente utilizzate  */\r\n    public UsedEntities: MtdEntity[] = [];\r\n\r\n    /** Indice dell'entità aggiunta in questo momento. Il valore \"-1\" reppresenta il default vuoto di nessuna Entità selezionata */\r\n    public AddedBind: string = \"\";\r\n\r\n    /** Indica che l'Entità da cui si parte non può essere rimossa. Viene automaticamente impostato a **true** qualora **StartingEntity** fosse valorizzato */\r\n    public StartingEntityFixed: boolean = false;\r\n\r\n    /** Cache per tenere in memoria lo stato di caricamento delle varie Entità richieste */\r\n    private EntitiesLoadingCache: {[index: string] : {loaded: boolean, loading: boolean}}  = {};\r\n\r\n    /** Modello del componente che rappresenta la Query generata */\r\n    public Query: RuleSet;\r\n\r\n    /** Configurazione per la libreria nativa QueryBuilder */\r\n    public QueryBuilderConfig: QueryBuilderConfig = null;\r\n\r\n    /** Cache dei tipi dei Field per non doverli sempre ricalcolare quando richiesti */\r\n    public FieldTypeCache: { [index: string]: { fieldType: string, underlyingFieldType: string, transformFunctions: KeyValue[] } } = {};\r\n\r\n    /** Cache dei riferimenti ad altri campi presenti nell'entità collegata */\r\n    public References: { [index: string]: KeyValue[] } = {};\r\n\r\n    /** Mappa degli operatori disponibili per ogni tipo di Input gestito dal Query Builder */\r\n    public defaultOperatorMap: { [key: string]: string[] } = {\r\n        string: [\"=\", \"!=\", \"contains\", \"not contains\", \"begins with\", \"not begins with\", \"ends with\", \"not ends with\", \"is null\", \"is not null\"],\r\n        number: [\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\", \"is null\", \"is not null\"],\r\n        time: [\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\", \"is null\", \"is not null\"],\r\n        date: [\"=\", \"!=\", \">\", \">=\", \"<\", \"<=\", \"is null\", \"is not null\"],\r\n        category: [\"=\", \"!=\", \"in\", \"not in\", \"is null\", \"is not null\"],\r\n        boolean: [\"=\", \"is null\", \"is not null\"]\r\n    };\r\n\r\n    /** @ignore Costruttore */\r\n    constructor(private utiExts: UtilityService, public lc: LocalizationService, private cdr: ChangeDetectorRef) {\r\n        this.EntitiesLoadingCache = {};\r\n    }\r\n\r\n    /** @ignore Pipeline di Angular */\r\n    ngOnChanges(changes: SimpleChanges) {\r\n        // Utilizzo il campo entities per ricreare la configurazione piuttosto che passarmi l'oggetto che poi Ale dovrebbe salvarlo in qualche modo\r\n        if (changes[\"Entities\"] && changes[\"Entities\"].currentValue) {\r\n            this.AvailableEntities = [];\r\n            this.UsedEntities = [];\r\n            for (let i = 0; i < this.Entities.length; i++) {\r\n                var t = this.Entities[i];\r\n                this.addToLoadCache(t);\r\n                this.loadUsedEntity(t);\r\n            }\r\n            this.baseInit();\r\n        }\r\n        else if (changes[\"SingleEntity\"] && changes[\"SingleEntity\"].currentValue) {\r\n            this.AvailableEntities = [];\r\n            this.UsedEntities = [];\r\n\r\n            this.postEntityRequest(this.SingleEntity);\r\n        }\r\n    }\r\n\r\n    /** @ignore Pipeline di Angular */\r\n    public writeValue(obj): void {\r\n        if (obj !== undefined) {\r\n            setTimeout(() => {\r\n                this.Query = this.aggregationGroupRuleToRuleSet(obj);\r\n\r\n                //Da fare solo se la view non sta venendo distrutta\r\n                if (!this.cdr['destroyed'])\r\n                    this.cdr.detectChanges();\r\n            });\r\n        } else\r\n            this.Query = null;\r\n    }\r\n\r\n    /** @ignore Pipeline di Angular */\r\n    public registerOnChange(fn): void { this.propagateChange = fn; }\r\n\r\n    /** @ignore Pipeline di Angular */\r\n    public registerOnTouched(fn): void { }\r\n\r\n    /** @ignore Pipeline di Angular */\r\n    public propagateChange = (_: any) => { };\r\n\r\n    /** Inizializzazione chiamata sulla modifica dell'Input **Entities** */\r\n    private baseInit() {\r\n        if (this.StartingEntity) {\r\n            this.addToLoadCache(this.StartingEntity);\r\n            this.StartingEntityFixed = true;\r\n            this.initStart();\r\n        }\r\n        else\r\n            this.addToAvailableEntities();\r\n    }\r\n\r\n    /** Inizializzazione base partendo dalla **StartingEntity** */\r\n    private initStart() {\r\n        this.loadUsedEntity(this.StartingEntity);\r\n    }\r\n\r\n    /**\r\n     * Aggiunta di un'Entità alle disponibili dopo averla selezionata da interfaccia\r\n     * \r\n     * @param {stirng} entityId Entità selezionata\r\n     */\r\n    public addEntity(entityId: string) {\r\n        // È la prima aggiunta, senza starting entity\r\n        if (!this.StartingEntity) {\r\n            this.addToLoadCache(entityId);\r\n            // Carico la prima entity e resetto alla situa iniziale\r\n            this.StartingEntity = entityId;\r\n            this.initStart();\r\n            return;\r\n        }\r\n\r\n        // Se è gia' aggiunta blocco\r\n        if (this.UsedEntities.filter(t => t.id == entityId).length == 1) {\r\n            setTimeout(() => { this.AddedBind = \"-1\"; });\r\n            return;\r\n        }\r\n\r\n        this.addToLoadCache(entityId);\r\n        // Altrimenti proseguo ed aggiungo la nuova entita', in più ricarico le disponibili in base all'attuale lista delle utilizzate\r\n        this.loadUsedEntity(entityId);\r\n\r\n        // Nascondo l'elemento che ho appena selezionato\r\n        this.AvailableEntities.filter(t => t.id == entityId)[0].hidden = true;\r\n        this.AvailableEntities = JSON.parse(JSON.stringify(this.AvailableEntities));\r\n    }\r\n\r\n    /**\r\n     * Effettua il caricamento di un'Entità utilizzata ma le cui informazioni non sono ancora state caricate\r\n     * \r\n     * @param {string} name Entità da caricare\r\n     */\r\n    private loadUsedEntity(name: string) {\r\n        // Se questa funzione restituisce false vuol dire che tutte le tabelle sono state caricate\r\n        var canload = this.markLoadingCache(name);\r\n        if (!canload)\r\n            return;\r\n\r\n        if (!this.onEntityRequest) {\r\n            console.warn(\"No 'onEntityRequest' function set. Cannot continue\")\r\n            return;\r\n        }\r\n\r\n        this.onEntityRequest(name).subscribe(t => { this.postEntityRequest(t); });\r\n    }\r\n\r\n    /**\r\n     * Evento di post-caricamento di un Entità\r\n     * \r\n     * @param {MtdEntity} entity Entità caricata\r\n     */\r\n    private postEntityRequest(entity: MtdEntity) {\r\n        if (this.UsedEntities.filter(e => e.id == entity.id).length == 1)\r\n            return;\r\n\r\n        // Se l'entità è la prima la metto all'inizio, altrimenti alla fine\r\n        if (entity.id == this.StartingEntity) {\r\n            this.AvailableEntities.push(entity);\r\n            this.UsedEntities.splice(0, 0, entity);\r\n        }\r\n        else\r\n            this.UsedEntities.push(entity);\r\n\r\n        var setLoaded = this.markLoadedCache(entity.id);\r\n        if (!setLoaded)\r\n            return;\r\n\r\n        if (this.Entities.indexOf(entity.id) == -1) {\r\n            this.Entities.push(entity.id);\r\n            this.EntitiesChange.emit(this.Entities);\r\n        }\r\n        this.addToAvailableEntities();\r\n\r\n        // Se era l'ultimo caricamento che dovevo fare, aggiorno la configurazione\r\n        if (this.checkLastLoading())\r\n            this.updateFieldsAndConfiguration();\r\n\r\n        // Ripulisco il bind della combo\r\n        setTimeout(() => { this.AddedBind = \"-1\"; }, 0);\r\n    }\r\n\r\n    /**\r\n     * Rimozione di un'Entità utilizzata\r\n     * \r\n     * @param {MtdEntity} entity Entità da rimuovere\r\n     */\r\n    public removeUsed(entity: MtdEntity) {\r\n        this.UsedEntities.splice(this.UsedEntities.indexOf(entity), 1);\r\n        this.Entities.splice(this.Entities.indexOf(entity.id), 1);\r\n        this.EntitiesChange.emit(this.Entities);\r\n\r\n        // Torno a mostrare l'elemento che ho rimosso dalla lista degli elementi usati\r\n        this.AvailableEntities.filter(t => t.id == entity.id)[0].hidden = false;\r\n        this.AvailableEntities = JSON.parse(JSON.stringify(this.AvailableEntities));\r\n    }\r\n\r\n    /** Aggiunta delle Entità usate o delle Relazioni delle Entità usate alla lista delle Entità disponibili */\r\n    private addToAvailableEntities() {\r\n        var useds = this.getUsedEntitiesList();\r\n        if (!useds) {\r\n            this.onEntitiesRequest().subscribe(t => {\r\n                // Tutte le entità che sono in uso non devono apparire nella combo delle usabili\r\n                this.alignHiddenEntities(t);\r\n                this.AvailableEntities = t;\r\n            });\r\n        }\r\n        else {\r\n            this.onEntityRelationsRequest(useds).subscribe(t => {\r\n                // Tutte le entità che sono in uso non devono apparire nella combo delle usabili\r\n                this.alignHiddenEntities(t);\r\n                this.AvailableEntities = t;\r\n            });\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Data una lista di Entità vengono marcate come \"nascoste\" tutte quelle che risultano in uso\r\n     * \r\n     * @param {MtdEntity[]} entities Entità di cui verificare quelle che sono in uso\r\n     */\r\n    private alignHiddenEntities(entities: MtdEntity[]) {\r\n        this.UsedEntities.forEach(ue => {\r\n            var item = entities.filter(en => en.id == ue.id)[0];\r\n            if (item) item.hidden = true;\r\n        });\r\n    }\r\n\r\n    /** In base ai Campi delle Entità utilizzate genera la configurazione da utilizzare nella libreria base del QueryBuilder */\r\n    private updateFieldsAndConfiguration() {\r\n        if (this.UsedEntities.length == 0)\r\n            return;\r\n\r\n        this.FieldTypeCache = {};\r\n        var tmpQueryBuilderConfig = { fields: {} };\r\n\r\n        for (let i = 0; i < this.UsedEntities.length; i++) {\r\n            var t = this.UsedEntities[i];\r\n\r\n            let tableid = t.id;\r\n            let tabledesc = t.description;\r\n\r\n            for (let f = 0; f < t.fields.length; f++) {\r\n                var e = t.fields[f];\r\n                var typeAndUnderlying = this.getQBType(e.typeid, e.isdictionary, e.isenum);\r\n                var type = typeAndUnderlying[0];\r\n                var underlying = type == \"category\" ? typeAndUnderlying[1] : \"\";\r\n                var hasOptions = e.isdictionary || e.isenum;\r\n                var opts: Option[] = hasOptions ? this.getQBOptions(e.values) : null;\r\n                var fieldId = tableid + \".\" + e.id;\r\n\r\n                if (this.AllowReferences && !underlying) {\r\n                    if (!this.References[type]) this.References[type] = [];\r\n                    this.References[type].push({ id: \"§{\" + fieldId + \"}\", description: e.description + \" (\" + tabledesc + \")\" })\r\n                }\r\n\r\n                this.FieldTypeCache[fieldId] = { fieldType: type, underlyingFieldType: underlying, transformFunctions: [new KeyValue(\"F1\", \"Formula Test\")]};\r\n                tmpQueryBuilderConfig.fields[fieldId] = { name: e.description + \" (\" + tabledesc + \")\", type: type };\r\n\r\n                if (hasOptions)\r\n                    tmpQueryBuilderConfig.fields[fieldId].options = opts;\r\n\r\n                if (e.defaultvalue)\r\n                    tmpQueryBuilderConfig.fields[fieldId].defaultValue = (() => e.defaultvalue);\r\n            }\r\n        }\r\n\r\n        this.QueryBuilderConfig = tmpQueryBuilderConfig;\r\n    }\r\n\r\n    /**\r\n     * Helper che data una lista di **KeyValue** la trasforma in una lista di **Option** digeribili dal QueryBuilder sottostante\r\n     * \r\n     * @param {KeyValue[]} values Valori da trasformare in **Option**\r\n     * \r\n     * @returns {Option[]} Equivalente degli input **values** trasformati\r\n     */\r\n    private getQBOptions(values: KeyValue[]): Option[] {\r\n        var ret: Option[] = [];\r\n        for (let i = 0; i < values.length; i++) {\r\n            var t = values[i];\r\n            ret.push({ name: t.id + \" - \" + t.description, value: t.id });\r\n        }\r\n\r\n        return ret;\r\n    }\r\n\r\n    /**\r\n     * In base al tipo di input e se quest'ultimo è un dictionary o un enum, genera un tipo che il QueryBuilder è in grado di interpretare\r\n     * \r\n     * @param {number} typeid TypeCode C# che rappresenta la tipologia di questo campo\r\n     * @param {boolean} isdictionary Indica se è un dizionario\r\n     * @param {boolean} isenum Indica se è un enum\r\n     * \r\n     * @returns {string[]} Array che presenta all'indice 0 il tipo e all'indice 1 una stringa vuota, \r\n     * oppure all'indice 0 'category' e all'indice 1 il tipo del campo qualora fosse un enum\r\n     */\r\n    private getQBType(typeid: number, isdictionary: boolean, isenum: boolean): string[] {\r\n        var ret = [\"\", \"\"];\r\n        if (isdictionary || isenum)\r\n            ret[0] = \"category\";\r\n\r\n        var type = this.utiExts.getJsTypeFromTypeCode(typeid);\r\n\r\n        if (ret[0])\r\n            ret[1] = type;\r\n        else\r\n            ret[0] = type;\r\n\r\n        return ret;\r\n    }\r\n\r\n    /**\r\n     * Restituisce una lista di nomi concatenati da virgola di tutte le Entità attualmente in uso\r\n     * \r\n     * @returns {string} Id delle Entità concatenati\r\n     */\r\n    private getUsedEntitiesList(): string {\r\n        var ents = \"\";\r\n        for (let i = 0; i < this.UsedEntities.length; i++) {\r\n            var t = this.UsedEntities[i];\r\n            ents += t.id + \",\";\r\n        }\r\n\r\n        return ents;\r\n    }\r\n\r\n    /** Metodo che si occupa di propagare il valore attuale del Modello all'esterno, previe eventuali sistemazioni per standardizzare l'Input con l'Output */\r\n    public changed() {\r\n        if (!this.Query) {\r\n            this.propagateChange(null);\r\n            return;\r\n        }\r\n\r\n        this.adjustQuery(this.Query);\r\n\r\n        var rt = this.ruleSetToAggregationGroup(this.Query);\r\n\r\n        // Ad ogni cambiamento di modello potrei avere dei pulsantini \"Add Rule\" o \"Add Ruleset\" in più che andrebbero a rompere il cazzo\r\n        // all'eventuale Form dentro cui sono contenuti essendo dei submit di default. Quindi li prendo tutti e li faccio diventare dei button\r\n        setTimeout(() => {\r\n            let elements = document.getElementsByClassName(\"q-button\");\r\n            for (let i = 0; i < elements.length; i++)\r\n                elements[i].setAttribute(\"type\", \"button\");\r\n        });\r\n\r\n        this.propagateChange(rt);\r\n    }\r\n\r\n    /**\r\n     * Aggiusta la Query attuale aggiungendo le informazioni sui tipi \r\n     * \r\n     * @param {RuleSet} ruleset Query da aggiustare\r\n     */\r\n    private adjustQuery(ruleset: RuleSet) {\r\n        if (!ruleset.rules || ruleset.rules.length == 0)\r\n            return;\r\n\r\n        for (let i = 0; i < ruleset.rules.length; i++) {\r\n            var t = ruleset.rules[i];\r\n\r\n            // Se è una ruleset vado ricorsivo\r\n            if ((<any>t).condition != \"undefined\")\r\n                this.adjustQuery(<RuleSet>t);\r\n\r\n            // Se è una rule aggiusto\r\n            if ((<any>t).field != \"undefined\") {\r\n                var rule = <any>t;\r\n\r\n                var ruleCache = this.FieldTypeCache[rule.field];\r\n                if (ruleCache)\r\n                    rule.type = ruleCache.fieldType == \"category\" ? ruleCache.underlyingFieldType : ruleCache.fieldType;\r\n            }\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sistema di trasformazione dell'Input ricevuto dall'applicazione ad un Input digeribile dal sistema interno del QueryBuilder\r\n     * \r\n     * @param {QueryRule} rl Query in formato Applicativo\r\n     * \r\n     * @returns {RuleSet} Query in formato libreria interno (QueryBuilder)\r\n     */\r\n    private aggregationGroupRuleToRuleSet(rl: QueryRule): RuleSet {\r\n        if (!rl || !rl.rules) return null;\r\n\r\n        var res: RuleSet = { condition: rl.condition, rules: [] };\r\n        for (let i = 0; i < rl.rules.length; i++)\r\n            res.rules.push(this.aggregationGroupRuleToRuleOrRuleSet(rl.rules[i]));\r\n\r\n        return res;\r\n    }\r\n\r\n    /**\r\n     * Step ricorsivo di trasformazione da **QueryRule** a **RuleSet**\r\n     * \r\n     * @param {QueryRule} rl Query in formato Applicativo\r\n     * \r\n     * @returns {RuleSet | Rule} Query in formato libreria interno (QueryBuilder)\r\n     */\r\n    private aggregationGroupRuleToRuleOrRuleSet(rl: QueryRule): RuleSet | Rule {\r\n        if (rl.field) {\r\n            var rule: Rule = <any>{ field: rl.field, operator: rl.operator, value: rl.value, transform: rl.transform, transforms: rl.transforms };\r\n            (<any>rule).isreference = rl.value != null && rl.value.toString().startsWith(\"§{\");\r\n            (<any>rule).isparameter = rl.value != null && rl.value.toString().startsWith(\"${\");\r\n            (<any>rule).type = rl.type;\r\n            return rule;\r\n        }\r\n        else {\r\n            var res: RuleSet = { condition: rl.condition, rules: [] };\r\n            for (let i = 0; i < rl.rules.length; i++) {\r\n                var t = rl.rules[i];\r\n                res.rules.push(this.aggregationGroupRuleToRuleOrRuleSet(t));\r\n            }\r\n            return res;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Sistema di trasformazione dell'Output ricevuto dal QueryBuilder ad un Output restituibile a un'Applicazione\r\n     * \r\n     * @param {RuleSet} rl Query in formato libreria interno (QueryBuilder)\r\n     * \r\n     * @returns {QueryRule} Query in formato Applicativo\r\n     */\r\n    private ruleSetToAggregationGroup(rl: RuleSet): QueryRule {\r\n        if (!rl || !rl.rules) return null;\r\n\r\n        var res: QueryRule = new QueryRule();\r\n        res.condition = rl.condition;\r\n        res.rules = [];\r\n\r\n        for (let i = 0; i < rl.rules.length; i++)\r\n            res.rules.push(this.ruleOrRuleSetToAggregationGroupRuleTo(rl.rules[i]));\r\n\r\n        return res;\r\n    }\r\n\r\n    /**\r\n     * Step ricorsivo di trasformazione da **RuleSet** o **Rule** a **QueryRule**\r\n     * \r\n     * @param {RuleSet | Rule} rl Query in formato libreria interno (QueryBuilder)\r\n     * \r\n     * @returns {QueryRule} Query in formato Applicativo\r\n     */\r\n    private ruleOrRuleSetToAggregationGroupRuleTo(rl: RuleSet | Rule): QueryRule {\r\n        if ((<any>rl).field) {\r\n            let thisRl = <Rule>rl;\r\n            var rule: QueryRule = new QueryRule();\r\n            rule.field = thisRl.field;\r\n            rule.operator = thisRl.operator;\r\n            rule.value = thisRl.value;\r\n            rule.type = (<any>thisRl).type;\r\n            rule.isparameter = thisRl.value && thisRl.value.toString().startsWith(\"${\");\r\n            rule.isreference = thisRl.value && thisRl.value.toString().startsWith(\"§{\");\r\n            return rule;\r\n        }\r\n        else {\r\n            let thisRl = <RuleSet>rl;\r\n            var res: QueryRule = new QueryRule();\r\n            res.condition = thisRl.condition;\r\n            res.rules = [];\r\n\r\n            for (let i = 0; i < thisRl.rules.length; i++) {\r\n                var t = thisRl.rules[i];\r\n                res.rules.push(this.ruleOrRuleSetToAggregationGroupRuleTo(t));\r\n            }\r\n\r\n            return res;\r\n        }\r\n    }\r\n\r\n    /**\r\n     * Aggiunge un Entità alla cache di caricamento per tenerne d'occhio lo stato in maniera ottimizzata\r\n     * \r\n     * @param {string} tablename Nome dell'Entità da caricare\r\n     */\r\n    private addToLoadCache(tablename: string) {\r\n        let et = this.EntitiesLoadingCache[tablename];\r\n        var exist = et && !et.loaded;\r\n\r\n        if (!exist)\r\n            this.EntitiesLoadingCache[tablename] = { loaded: false, loading: false };\r\n    }\r\n\r\n    /**\r\n     * Marca un Entità come \"In caricamento\"\r\n     * \r\n     * @param {string} tablename Nome dell'Entità da marcare in caricamento\r\n     * \r\n     * @returns {boolean} **true** se l'operazione è andata a buon fine, **false** altrimenti\r\n     */\r\n    private markLoadingCache(tablename: string): boolean {\r\n        // Devo prendere l'entita' con quel nome non caricata e non in processo di caricamento, se non ne trovo vuol dire che quell'entità\r\n        // o è gia' caricata o la sto caricando ora quindi non ha senso fare un altra get\r\n        let et = this.EntitiesLoadingCache[tablename];\r\n        var exist = et && !et.loaded && !et.loading;\r\n\r\n        if (!exist) return false;\r\n\r\n        et.loading = true;\r\n        return true;\r\n    }\r\n\r\n    /**\r\n     * Marca un Entità come \"Caricata\"\r\n     * \r\n     * @param {string} tablename Nome dell'Entità da marcare caricata\r\n     * \r\n     * @returns {boolean} **true** se l'operazione è andata a buon fine, **false** altrimenti\r\n     */\r\n    private markLoadedCache(tablename: string): boolean {\r\n        let et = this.EntitiesLoadingCache[tablename];\r\n        var exist = et && !et.loaded;\r\n\r\n        if (!exist) return false;\r\n\r\n        et.loading = false;\r\n        et.loaded = true;\r\n        return true;\r\n    }\r\n\r\n\r\n    /**\r\n     * Controlla che tutte le Entità siano state caricate completamente, nessuna esclusa\r\n     * \r\n     * @returns {boolean} **true** se tutte le Entità sono state caricate, **false** altrimenti\r\n     */\r\n    private checkLastLoading(): boolean {\r\n        for (let prop in this.EntitiesLoadingCache)\r\n            if (!this.EntitiesLoadingCache[prop].loaded)\r\n                return false;\r\n\r\n        return true;\r\n    }\r\n}","<h4 *ngIf=\"Title\">{{Title}}</h4>\r\n<div class=\"col-md-12\" [class.app-padding-left-0]=\"!Title || NoPadding\" [class.app-padding-right-0]=\"!Title || NoPadding\" *ngIf=\"!SingleEntity\">\r\n    <strong class=\"pull-left\">{{'Linked Entities' | localize : lc}}:&nbsp;</strong>\r\n    <div *ngFor=\"let item of UsedEntities; let i = index\" class=\"app-margin-right-15 pull-left\">\r\n        <span>{{item.description}}</span>&nbsp;\r\n        <span class=\"fa fa-remove text-danger app-pointer\" (click)=\"removeUsed(item)\" *ngIf=\"!Readonly && (!StartingEntityFixed || i > 0)\"></span>\r\n    </div>\r\n\r\n    <select class=\"pull-left form-control query-builder-combo\" [(ngModel)]=\"AddedBind\" name=\"added\" (ngModelChange)=\"addEntity($event)\" *ngIf=\"!Readonly\">\r\n        <option value=\"-1\"></option>\r\n        <option *ngFor=\"let en of AvailableEntities\" [hidden]=\"en.hidden\" [value]=\"en.id\">{{en.description}}</option>\r\n    </select>\r\n</div>\r\n\r\n<div class=\"clearfix\"></div>\r\n<div class=\"app-margin-top-15 col-md-12\" [class.app-padding-right-0]=\"!Title || NoPadding\" [class.app-padding-left-0]=\"!Title || NoPadding\">\r\n    <!--Creo il componente solo quando ho QueryBuilderConfig altrimenti scoppietta che è na meraviglia-->\r\n    <query-builder *ngIf=\"QueryBuilderConfig\" [disabled]=\"Readonly\" [(ngModel)]='Query' [config]='QueryBuilderConfig' (ngModelChange)=\"changed()\" [operatorMap]=\"defaultOperatorMap\">\r\n\r\n        <ng-container *queryInput=\"let rule; type: 'date'\">\r\n            <div class=\"query-builder-input\">\r\n                <parameter-input [Readonly]=\"Readonly\" [CanSelectParameters]=\"true\" [CanSelectReferences]=\"true\" [IsParameter]=\"$any(rule).isparameter\" [IsReference]=\"$any(rule).isreference\" [Parameters]=\"DateParameters\" [References]=\"References['date']\" [Type]=\"'date'\" [(ngModel)]=\"rule.value\" name=\"value\" (ngModelChange)=\"changed();\"></parameter-input>\r\n            </div>\r\n        </ng-container>\r\n\r\n        <ng-container *queryInput=\"let rule; type: 'string'\">\r\n            <div class=\"query-builder-input\">\r\n                <parameter-input [Readonly]=\"Readonly\" [CanSelectParameters]=\"true\" [CanSelectReferences]=\"true\" [IsParameter]=\"$any(rule).isparameter\" [IsReference]=\"$any(rule).isreference\" [Parameters]=\"StringParameters\" [References]=\"References['string']\" [Type]=\"'string'\" [(ngModel)]=\"rule.value\" name=\"value\" (ngModelChange)=\"changed();\"></parameter-input>\r\n            </div>\r\n        </ng-container>\r\n\r\n        <!-- <ng-container *queryField=\"let rule; let fields=fields; let onChange=onChange; let getFields = getFields\">\r\n            <form-select *ngIf=\"FieldTypeCache[rule.field].transformFunctions?.length > 0\" [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"rule.transform\" name=\"rltsf\" [Source]=\"FieldTypeCache[rule.field].transformFunctions\"></form-select>\r\n            <form-select [FormLayout]=\"false\" [Validation]=\"false\" [(ngModel)]=\"rule.field\" name=\"ruleField\" (inputChange)=\"onChange($event, rule); rule.transform = ''\" IdField=\"value\" Display=\"{name}\" [Source]=\"getFields(rule.entity)\" required></form-select>\r\n        </ng-container> -->\r\n\r\n    </query-builder>\r\n</div>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule } from '@angular/forms';\r\n\r\nimport { LocalizationModule } from '@esfaenza/localizations';\r\nimport { FormsAndValidationsModule } from \"@esfaenza/forms-and-validations\";\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\n\r\nimport { ParameterInputComponent } from './parameterinputs/parameter_input.component';\r\nimport { MetadataQueryBuilderComponent } from './metadata_querybuilder.component';\r\nimport { QueryBuilderComponent } from './base/query-builder.component';\r\n\r\n\r\n@NgModule({\r\n  declarations: [MetadataQueryBuilderComponent, ParameterInputComponent],\r\n  imports: [\r\n    CommonModule,\r\n    LocalizationModule,\r\n    FormsModule,\r\n    FormsAndValidationsModule,\r\n    TooltipModule,\r\n    QueryBuilderComponent\r\n  ],\r\n  exports: [MetadataQueryBuilderComponent]\r\n})\r\nexport class EsQueryBuilderModule {\r\n}","import { MtdField } from './MtdField';\r\n\r\n/**\r\n * Modello che identifica un'entità su cui sarà possibile applicare filtri\r\n */\r\nexport class MtdEntity {\r\n\r\n    /**\r\n     * Codice univoco\r\n     */\r\n    id: string;\r\n\r\n    /**\r\n     * Campo descrittivo\r\n     */\r\n    description: string;\r\n\r\n    /**\r\n     * Campi di questo oggetto\r\n     */\r\n    fields: MtdField[];\r\n\r\n    /**\r\n     * Riferimento solo lato a interfaccia che indica se l'entità è già in uso, quindi da non mostrare più\r\n     */\r\n    hidden: boolean;\r\n}","import { KeyValue } from \"../models/KeyValue\";\r\n\r\n/**\r\n * Modello che indica un singolo campo di un'entità\r\n */\r\nexport class MtdField {\r\n\r\n    /**\r\n     * Costruttore\r\n     * \r\n     * @param {string} id Codice\r\n     * @param {string} description Descrizione\r\n     * @param {number} typeid Typecode C# del tipo di dati\r\n     * @param {boolean} nullable Indica se il valore può essere null o no\r\n     * @param {string} defaultvalue Valore di default per questo campo\r\n     * @param {boolean} isenum Indica se è un enum\r\n     * @param {boolean} isdictionary Indica se è un dizionario\r\n     * @param {KeyValue[]} values In caso fosse **enum** o **dictionary** indica i valori che può assumere questo campo\r\n     */\r\n    constructor(\r\n        public id: string,\r\n        public description: string,\r\n        public typeid: number,\r\n        public nullable: boolean,\r\n        public defaultvalue: string,\r\n        public isenum: boolean,\r\n        public isdictionary: boolean,\r\n        public values: KeyValue[]) {\r\n    }\r\n}","/*\r\n * Public API Surface of query-builder\r\n */\r\n export * from './lib/es-query-builder.module';\r\n\r\n export * from './lib/metadata_querybuilder.component';\r\n export * from './lib/models/QueryRule';\r\n export * from './lib/models/MtdEntity';\r\n export * from './lib/models/MtdField';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1","i4","i5.QueryBuilderComponent","i6.ParameterInputComponent"],"mappings":"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"}