{"version":3,"file":"ngx-len-xcng-component-library.mjs","sources":["../../../projects/ngx-len-xcng-component-library/src/lib/components/material-bootstrap-test/material-bootstrap-test.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/material-bootstrap-test/material-bootstrap-test.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/material-bootstrap-test/material-bootstrap-test.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/directives/loading.directive.ts","../../../projects/ngx-len-xcng-component-library/src/lib/classes/sortingFilteringUtils/sortingFilteringUtils.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/inline-alerts/inline-alerts.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/inline-alerts/inline-alerts.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/inline-alerts/inline-alerts.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/dialog-modal/dialog-modal.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/dialog-modal/dialog-modal.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/dialog-modal/dialog-modal.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/icons/icons.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/icons/icons.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/icons/icons.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/table-dropdown/table-dropdown.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/table-dropdown/table-dropdown.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/services/tableFilteringService/tableFilteringConfigurations.service.ts","../../../projects/ngx-len-xcng-component-library/src/lib/classes/primengCalendarLocales.ts","../../../projects/ngx-len-xcng-component-library/src/lib/services/localStorageService/localStorage.service.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/table-toolbar/table-toolbar.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/table-toolbar/table-toolbar.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/global-configurations.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/pipes/not-available/not-available.pipe.ts","../../../projects/ngx-len-xcng-component-library/src/lib/pipes/extended-date/extended-date.pipe.ts","../../../projects/ngx-len-xcng-component-library/src/lib/pipes/pipes.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/table-toolbar/table-toolbar-xcng.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/ngx-datatable/ngx-datatable.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/ngx-datatable/ngx-datatable.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/ngx-treetable/tree-utils.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/ngx-treetable/ngx-treetable.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/ngx-treetable/ngx-treetable.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/ngx-datatable/ngx-datatable-xcng.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/services/mobileService/mobile-service.service.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/breadcrumb-menu/breadcrumb-menu.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/breadcrumb-menu/breadcrumb-menu.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/breadcrumb-menu/breadcrumb-menu.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-table/alertsService/alerts.service.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-table/alerts-table.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-table/alerts-table.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-table/alerts-table.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/call-home-privacy-modal/call-home-privacy-modal.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/call-home-privacy-modal/call-home-privacy-modal.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/eula/eula.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/eula/eula.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/about-modal/about-modal.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/about-modal/about-modal.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/call-home-privacy-modal/call-home-privacy-modal.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/eula/eula.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/about-modal/about-modal.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/mock-warning/mock-warning.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/mock-warning/mock-warning.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/mock-warning/mock-warning.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/quick-access-list/quick-access-list.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/quick-access-list/quick-access-list.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/quick-access-list/quick-access-list.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/mini-card/mini-card.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/mini-card/mini-card.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/mini-card/mini-card.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/device-information-card/device-information-card.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/device-information-card/device-information-card.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/device-information-card/device-information-card.module.ts","../../../projects/ngx-len-xcng-component-library/src/lib/classes/constants.ts","../../../projects/ngx-len-xcng-component-library/src/lib/classes/echartsConstants.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-analytics-card/alerts-analytics-charts-options.ts","../../../projects/ngx-len-xcng-component-library/src/lib/classes/datesHelper.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-analytics-card/alerts-analytics-card.component.ts","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-analytics-card/alerts-analytics-card.component.html","../../../projects/ngx-len-xcng-component-library/src/lib/components/alerts-analytics-card/alerts-analytics-card.module.ts","../../../projects/ngx-len-xcng-component-library/src/public-api.ts","../../../projects/ngx-len-xcng-component-library/src/ngx-len-xcng-component-library.ts"],"sourcesContent":["import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-material-bootstrap-test',\r\n  templateUrl: './material-bootstrap-test.component.html',\r\n  styleUrls: ['./material-bootstrap-test.component.scss']\r\n})\r\nexport class MaterialBootstrapTestComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n}\r\n","<!-- <script src=\"../../../../styles/bootstrap/bootstrap.bundle.min.js\"></script> -->\r\n<!-- <mat-slider aria-label=\"unit(s)\"></mat-slider>\r\n\r\n<mat-form-field appearance=\"fill\">\r\n  <mat-label>Choose a date</mat-label>\r\n  <input matInput [matDatepicker]=\"picker\" />\r\n  <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\r\n  <mat-datepicker #picker></mat-datepicker>\r\n</mat-form-field>\r\n\r\n<mat-form-field appearance=\"fill\">\r\n  <mat-label>First name</mat-label>\r\n  <input matInput />\r\n</mat-form-field>\r\n\r\n<button\r\n  type=\"button\"\r\n  class=\"btn btn-primary\"\r\n  tooltip=\"Vivamus sagittis lacus vel augue laoreet rutrum faucibus.\"\r\n>\r\n  Simple demo\r\n</button> -->\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatNativeDateModule } from '@angular/material/core';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { MaterialBootstrapTestComponent } from './material-bootstrap-test.component';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\n\r\n@NgModule({\r\n  declarations: [MaterialBootstrapTestComponent],\r\n  imports: [\r\n    CommonModule,\r\n    MatSliderModule,\r\n    MatDatepickerModule,\r\n    MatFormFieldModule,\r\n    MatNativeDateModule,\r\n    MatCheckboxModule,\r\n    FormsModule,\r\n    TooltipModule.forRoot(),\r\n    MatInputModule,\r\n    BrowserAnimationsModule,\r\n  ],\r\n  exports: [MaterialBootstrapTestComponent],\r\n})\r\nexport class MaterialBootstrapTestModule {}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport {\r\n  Directive,\r\n  Input,\r\n  ElementRef,\r\n  OnInit,\r\n  OnChanges,\r\n  SimpleChanges,\r\n} from '@angular/core';\r\n\r\n/**\r\n * In order to use the loading directive there are few conditions which need to be considered:\r\n *\r\n * The item which receives the directive MUST have a parent element and that parent element MUST have an id.\r\n *\r\n * Reason: The spinner is added as a child of the parent element because the element which gets the directive must have the opacity set to 0.3 and we don't\r\n * want that to affect the spinner so the spinner must be on the same level as the child elements which uses the directive, in most cases the <div class=\"card\"> element\r\n * but the directive can be used also on other elements (see user groups page) if the condition presented above will be respected.\r\n */\r\n@Directive({ selector: '[loading]' })\r\nexport class LoadingDirective implements OnInit, OnChanges {\r\n  interval: any;\r\n\r\n  @Input() loading: boolean;\r\n  @Input() progress: string;\r\n  @Input() showProgress: boolean;\r\n  @Input() importProgressMessage: string;\r\n  /**\r\n   * When adding the importProgressMessage, it may happen that if the message is too long to  be displayed outside the borders of the modal.\r\n   * Set this property if you want to maximize the modal with spacerSizePx number of pixels\r\n   */\r\n  @Input() spacerSizePx: number;\r\n\r\n  constructor(private el: ElementRef) {}\r\n\r\n  ngOnInit() {}\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    if (changes['loading']) {\r\n      if (changes['loading'].currentValue === true) this.addLoadingSpinner();\r\n      else if (changes['loading'].currentValue === false)\r\n        this.removeLoadingSpinner();\r\n    }\r\n    if (changes['progress']) {\r\n      if (changes['progress'].currentValue !== undefined) {\r\n        let element: HTMLDivElement = this.el.nativeElement;\r\n        let spinnerId = 'loadingSpinner-' + element.parentElement.id;\r\n        let span = document.getElementById(spinnerId + '-progressSpan');\r\n        if (span) {\r\n          span.innerHTML = this.progress + '%';\r\n        } else {\r\n          if (document.getElementById(spinnerId)) this.createSpanForProgress();\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  addLoadingSpinner() {\r\n    let element: HTMLDivElement = this.el.nativeElement;\r\n    if (!element.parentElement)\r\n      throw new Error(\r\n        'In order to place the loading directive the element on which the directive was placed must have a parent with an unique id. \\n This is the element which is causing errors: \\n' +\r\n          element.outerHTML\r\n      );\r\n\r\n    let spinnerId = 'loadingSpinner-' + element.parentElement.id;\r\n    element.style.opacity = '0.15';\r\n    let div = document.createElement('div');\r\n    div.id = spinnerId;\r\n    for (let i = 0; i < 5; i++) div.appendChild(document.createElement('div'));\r\n    div.classList.add('lds-ring');\r\n    div.style.position = 'absolute';\r\n    div.style.top = element.parentElement.offsetTop + 70 + 'px';\r\n    div.style.left = '50%';\r\n    element.parentElement.appendChild(div);\r\n    this.interval = setInterval(() => {\r\n      this.resetPositionOfLoadingSpinners();\r\n    }, 10);\r\n  }\r\n\r\n  createSpanForProgress() {\r\n    if (this.showProgress) {\r\n      let element: HTMLDivElement = this.el.nativeElement;\r\n      if (!element.parentElement)\r\n        throw new Error(\r\n          'In order to place the loading directive the element on which the directive was placed must have a parent with an unique id. \\n This is the element which is causing errors: \\n' +\r\n            element.outerHTML\r\n        );\r\n\r\n      let spinnerId = 'loadingSpinner-' + element.parentElement.id;\r\n      let span = document.createElement('span');\r\n      span.id = spinnerId + '-progressSpan';\r\n      span.innerHTML = this.progress + '%';\r\n      span.style.margin = 'auto';\r\n\r\n      let spanText = document.createElement('span');\r\n      spanText.id = spinnerId + '-progressSpanText';\r\n      spanText.innerHTML = this.importProgressMessage;\r\n      spanText.style.position = 'absolute';\r\n      spanText.style.left = '25%';\r\n      spanText.style.width = '50%';\r\n      spanText.style.top = element.parentElement.offsetTop + 120 + 'px';\r\n      spanText.style.textAlign = 'center';\r\n      spanText.style.fontWeight = '500';\r\n\r\n      // Spacer div used to avoid overflow\r\n      let spaceDiv = document.createElement('div');\r\n      spaceDiv.id = spinnerId + '-spacerDiv';\r\n      spaceDiv.style.height = this.spacerSizePx + 'px';\r\n\r\n      let div = document.getElementById(spinnerId);\r\n      if (div) {\r\n        div.appendChild(span);\r\n\r\n        let blinkDots = document.createElement('span');\r\n        blinkDots.classList.add('saving');\r\n        let dotSpans = [];\r\n        for (let i = 0; i < 3; i++) {\r\n          let dotSpan = document.createElement('span');\r\n          dotSpan.id = spinnerId + '-blinkDot' + i;\r\n          dotSpan.innerText = '.';\r\n          dotSpans.push(dotSpan);\r\n        }\r\n\r\n        dotSpans.forEach((dotSpan) => blinkDots.appendChild(dotSpan));\r\n        spanText.appendChild(blinkDots);\r\n        div.parentElement.appendChild(spanText);\r\n\r\n        if (\r\n          div.parentElement.childNodes[0].lastChild.childNodes[1] &&\r\n          div.parentElement.childNodes[0].lastChild.childNodes[1].childNodes[1]\r\n        ) {\r\n          div.parentElement.childNodes[0].lastChild.childNodes[1].childNodes[1].insertBefore(\r\n            spaceDiv,\r\n            div.parentElement.childNodes[0].lastChild.childNodes[1]\r\n              .childNodes[1].childNodes[11]\r\n          );\r\n        } else if (div.parentElement.childNodes[0].lastChild.childNodes[0]) {\r\n          div.parentElement.childNodes[0].lastChild.childNodes[0].childNodes[1].insertBefore(\r\n            spaceDiv,\r\n            div.parentElement.childNodes[0].lastChild.childNodes[0]\r\n              .childNodes[1].childNodes[11]\r\n          );\r\n        }\r\n      }\r\n    }\r\n  }\r\n\r\n  removeLoadingSpinner() {\r\n    let element: HTMLDivElement = this.el.nativeElement;\r\n    element.style.opacity = '1';\r\n    if (!element.parentElement)\r\n      throw new Error(\r\n        'In order to place the loading directive the element on which the directive was placed must have a parent with an unique id. \\n This is the element which is causing errors: \\n' +\r\n          element.outerHTML\r\n      );\r\n\r\n    let spinnerId = 'loadingSpinner-' + element.parentElement.id;\r\n\r\n    let spans = document.querySelectorAll(\r\n      '[id^=' + spinnerId + '-progressSpan]'\r\n    );\r\n    if (spans) spans.forEach((span) => span.remove());\r\n\r\n    let spacers = document.querySelectorAll(\r\n      '[id^=' + spinnerId + '-spacerDiv]'\r\n    );\r\n    if (spacers) spacers.forEach((spacer) => spacer.remove());\r\n\r\n    let spinners = document.querySelectorAll('[id^=' + spinnerId + ']');\r\n    if (spinners) spinners.forEach((spinner) => spinner.remove());\r\n  }\r\n\r\n  /**\r\n   * Because the spinner is used also on the tables, when the request is done the table will change its size and that will affect other spinners.\r\n   * Because of that, we need to recalculate the position of the spinners.\r\n   */\r\n  resetPositionOfLoadingSpinners() {\r\n    let loadingSpinners = document.querySelectorAll('[id^=loadingSpinner]');\r\n    if (!loadingSpinners.length || loadingSpinners.length < 2)\r\n      clearInterval(this.interval);\r\n    // The reset position function should be called only on the pages which have many loading spinners such as server inventory page\r\n    else if (loadingSpinners.length >= 2)\r\n      loadingSpinners.forEach((spinner: any) => {\r\n        let parentElementId = spinner.id.split('loadingSpinner-')[1];\r\n        let parentElement = document.getElementById(parentElementId);\r\n        if (parentElement) {\r\n          spinner.style.top = parentElement.offsetTop + 70 + 'px';\r\n          spinner.style.left = '50%';\r\n        } else {\r\n          if (\r\n            !parentElementId ||\r\n            !parentElementId.includes('exportModalContainer')\r\n          )\r\n            spinner.remove();\r\n        }\r\n      });\r\n  }\r\n}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport * as _ from 'lodash-es';\r\n\r\nexport type Filter = { attributes: string[]; values: string[] };\r\ndeclare type FilterObject = Filter[];\r\n\r\n/**\r\n * Builder class to help creating the sorting and filtering complex params\r\n * https://confluence1.labs.lenovo.com:8443/display/TSM/Sorting+and+Filtering\r\n */\r\nexport class SortingAndFilteringParamsBuilder {\r\n  private offset: number | undefined;\r\n  private limit: number | undefined;\r\n  private attributes: { included: string[]; excluded: string[] };\r\n  private filtering: {\r\n    filterEquals: FilterObject;\r\n    filterContains: FilterObject;\r\n    filterRange: FilterObject;\r\n    filterNotEquals: FilterObject;\r\n    filterNotContains: FilterObject;\r\n  };\r\n  private sorting: { name: string; order: 'asc' | 'desc' }[];\r\n  private defaultSorting: { name: string; order: 'asc' | 'desc' }[];\r\n  /**\r\n   * If besides filterContains/filterEquals/sorting/offset/limit and so on we must add another parameter, let's say - type with value unknown, this array should be used as following\r\n   *\r\n   * additionalParams = [ { param: 'type', value: 'unknown' } ]\r\n   */\r\n  private additionalParams: { param: string; value: string }[] = [];\r\n\r\n  get defaultSortingParams(): { name: string; order: 'asc' | 'desc' }[] {\r\n    return this.defaultSorting;\r\n  }\r\n\r\n  constructor(builder?: SortingAndFilteringParamsBuilder) {\r\n    if (!builder) {\r\n      this.initializeParams();\r\n      return this;\r\n    } else {\r\n      let newBuilder = new SortingAndFilteringParamsBuilder();\r\n      newBuilder.offset = builder.offset;\r\n      newBuilder.limit = builder.limit;\r\n      newBuilder.attributes = _.cloneDeep(builder.attributes);\r\n      newBuilder.filtering = _.cloneDeep(builder.filtering);\r\n      newBuilder.sorting = _.cloneDeep(builder.sorting);\r\n      newBuilder.additionalParams = _.cloneDeep(builder.additionalParams);\r\n      return newBuilder;\r\n    }\r\n  }\r\n\r\n  initializeParams() {\r\n    this.offset = undefined;\r\n    this.limit = undefined;\r\n    this.attributes = { included: [], excluded: [] };\r\n    this.initializeFiltering();\r\n    this.sorting = [];\r\n  }\r\n\r\n  initializeFiltering() {\r\n    this.filtering = {\r\n      filterEquals: [],\r\n      filterContains: [],\r\n      filterRange: [],\r\n      filterNotEquals: [],\r\n      filterNotContains: [],\r\n    };\r\n  }\r\n  getAdditionalParams() {\r\n    return this.additionalParams;\r\n  }\r\n  getParams(): string {\r\n    let addSeparator = function (params: string) {\r\n      params += '&';\r\n      return params;\r\n    };\r\n    let params = '?';\r\n\r\n    // Set additional parameters\r\n    if (this.additionalParams && this.additionalParams.length) {\r\n      this.additionalParams.forEach((p) => {\r\n        params += p.param + '=' + p.value;\r\n        params = addSeparator(params);\r\n      });\r\n    }\r\n\r\n    // Set offset\r\n    if (this.offset !== undefined) {\r\n      params += 'offset=' + this.offset;\r\n      params = addSeparator(params);\r\n    }\r\n\r\n    // Set limit\r\n    if (this.limit !== undefined) {\r\n      params += 'limit=' + this.limit;\r\n      params = addSeparator(params);\r\n    }\r\n\r\n    // Set included attributes\r\n    if (\r\n      this.attributes &&\r\n      this.attributes.included &&\r\n      this.attributes.included.length\r\n    ) {\r\n      params += 'includeAttributes=' + this.attributes.included.toString();\r\n      params = addSeparator(params);\r\n    }\r\n\r\n    // Set excluded attributes\r\n    if (\r\n      this.attributes &&\r\n      this.attributes.excluded &&\r\n      this.attributes.excluded.length\r\n    ) {\r\n      params += 'excludeAttributes=' + this.attributes.excluded.toString();\r\n      params = addSeparator(params);\r\n    }\r\n\r\n    function getKeysGen<T extends object>(o: T) {\r\n      return Object.keys(o) as Array<keyof T>;\r\n    }\r\n\r\n    // Set filterEquals, filterContains, filterRange, filterNotEquals, filterNotContains\r\n    if (this.filtering) {\r\n      let filteringKeys = getKeysGen(this.filtering);\r\n      filteringKeys.forEach((filterType) => {\r\n        this.filtering[filterType].forEach((searchBy: Filter, index) => {\r\n          if (searchBy.attributes && searchBy.attributes.length) {\r\n            params +=\r\n              filterType +\r\n              '[' +\r\n              index +\r\n              ']' +\r\n              '[attributes]=' +\r\n              searchBy.attributes.toString();\r\n            params = addSeparator(params);\r\n          }\r\n          if (searchBy.values && searchBy.values.length) {\r\n            params +=\r\n              filterType +\r\n              '[' +\r\n              index +\r\n              ']' +\r\n              '[values]=' +\r\n              searchBy.values.toString();\r\n            params = addSeparator(params);\r\n          } else {\r\n            throw new Error('The values array is mandatory when filtering');\r\n          }\r\n        });\r\n      });\r\n    }\r\n\r\n    let sortingIndex = 0;\r\n    // Set sorting\r\n    if (this.sorting && this.sorting.length) {\r\n      this.sorting.forEach((attr, index) => {\r\n        params += 'sort[' + sortingIndex + ']=' + attr.name + ',' + attr.order;\r\n        params = addSeparator(params);\r\n        sortingIndex++;\r\n      });\r\n    }\r\n\r\n    // Set default sorting\r\n    if (this.defaultSorting && this.defaultSorting.length) {\r\n      this.defaultSorting.forEach((attr, index) => {\r\n        params += 'sort[' + sortingIndex + ']=' + attr.name + ',' + attr.order;\r\n        params = addSeparator(params);\r\n        sortingIndex++;\r\n      });\r\n    }\r\n\r\n    params = params.slice(0, -1);\r\n    return params;\r\n  }\r\n\r\n  /**\r\n   * Get the filter object\r\n   * @returns filter\r\n   */\r\n  getFiltering(): {\r\n    filterEquals: FilterObject;\r\n    filterContains: FilterObject;\r\n    filterRange: FilterObject;\r\n    filterNotEquals: FilterObject;\r\n    filterNotContains: FilterObject;\r\n  } {\r\n    return this.filtering;\r\n  }\r\n\r\n  /**\r\n   * Set the offset for the query\r\n   * @param offset\r\n   */\r\n  setOffset(offset: number) {\r\n    if (isNaN(offset)) throw new Error('The offset must be a number');\r\n    this.offset = offset;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set the limit for the query (how many items should the request fetch)\r\n   * @param limit\r\n   */\r\n  setLimit(limit: number) {\r\n    if (isNaN(limit)) throw new Error('The limit must be a number');\r\n    this.limit = limit;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Method which creates the filtering query string using the filterContains attribute, values provided and attributes.\r\n   *\r\n   * If the attributes array is not provided the filtering will be done considering all attributes.\r\n   * The values array's length does not have to match the attributes array (see the confluence page).\r\n   * The API will ignore any extra query parameters and will only look for the three filters.\r\n   *\r\n   * filterContains: Searches for string values in the specified attributes that have a partial or full match to one or more of the specified values.\r\n   * @param values the values which are used for filtering\r\n   * @param attributes the attributes which are used for filtering\r\n   */\r\n  setFilterContains(values: string[], attributes?: string[]) {\r\n    this.checkForNotAvailable(values);\r\n    this.setFilterAttributesAndValues('filterContains', values, attributes);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Method which creates the filtering query string using the filterEquals attribute, values provided and attributes.\r\n   *\r\n   * If the attributes array is not provided the filtering will be done considering all attributes.\r\n   * The values array's length does not have to match the attributes array (see the confluence page).\r\n   *\r\n   * The API will ignore any extra query parameters and will only look for the three filters.\r\n   *\r\n   * filterEquals: Searches for string values in the specified attributes that have a full match to one or more of the specified values.\r\n   * @param values the values which are used for filtering\r\n   * @param attributes the attributes which are used for filtering\r\n   */\r\n  setFilterEquals(values: string[], attributes?: string[]) {\r\n    this.checkForNotAvailable(values);\r\n    this.setFilterAttributesAndValues('filterEquals', values, attributes);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Method which creates the filtering query string using the filterNotEquals attribute, values provided and attributes.\r\n   *\r\n   * If the attributes array is not provided the filtering will be done considering all attributes.\r\n   * The values array's length does not have to match the attributes array (see the confluence page).\r\n   *\r\n   * The API will ignore any extra query parameters and will only look for the three filters.\r\n   *\r\n   * filterNotEquals:  Excludes the searches for string values in the specified attributes that have a full match to one or more of the specified values.\r\n   * @param values the values which are used for filtering\r\n   * @param attributes the attributes which are used for filtering\r\n   */\r\n  setFilterNotEquals(values: string[], attributes?: string[]) {\r\n    this.checkForNotAvailable(values);\r\n    this.setFilterAttributesAndValues('filterNotEquals', values, attributes);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Method which creates the filtering query string using the filterNotEquals attribute, values provided and attributes.\r\n   *\r\n   * If the attributes array is not provided the filtering will be done considering all attributes.\r\n   * The values array's length does not have to match the attributes array (see the confluence page).\r\n   *\r\n   * The API will ignore any extra query parameters and will only look for the three filters.\r\n   *\r\n   * filterNotEquals:  Excludes the searches for string values in the specified attributes that have a full match to one or more of the specified values.\r\n   * @param values the values which are used for filtering\r\n   * @param attributes the attributes which are used for filtering\r\n   */\r\n  setFilterNotContains(values: string[], attributes?: string[]) {\r\n    this.checkForNotAvailable(values);\r\n    this.setFilterAttributesAndValues('filterNotContains', values, attributes);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Method which creates the filtering query string using the filterRange attribute, values provided and attributes.\r\n   *\r\n   * If the attributes array is not provided the filtering will be done considering all attributes.\r\n   * The values array's length does not have to match the attributes array (see the confluence page).\r\n   *\r\n   * The API will ignore any extra query parameters and will only look for the three filters.\r\n   *\r\n   * filterRange: Searches for a range of values on the specified attributes.\r\n   *\r\n   * If val1 is greater than val2, the API should handle this as a range between val2 to val1.\r\n   * Dates need to be in the ISO 8601 format: https://www.w3.org/TR/NOTE-datetime\r\n   * @param values the values which are used for filtering\r\n   * @param attributes the attributes which are used for filtering\r\n   */\r\n  setFilterRange(values: string[], attributes?: string[]) {\r\n    this.setFilterAttributesAndValues('filterRange', values, attributes);\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set the sorting attributes for the query\r\n   * Note: if the sorting parameters array's length is 3 the priorities should only be 0, 1, 2 and they must be specified for all items of the array; the priorities should also not repeat\r\n   *\r\n   * (calling this method will overwrite the previously set sorting)\r\n   * @param sortingParametersAndValues\r\n   */\r\n  setSorting(\r\n    sortingParametersAndValues: { name: string; order: 'asc' | 'desc' }[]\r\n  ) {\r\n    if (!sortingParametersAndValues || !sortingParametersAndValues.length)\r\n      throw new Error('The values array is mandatory when filtering');\r\n    this.sorting = sortingParametersAndValues;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set the default sorting attributes for the query which will be applied first and then the other sorting\r\n   * The default sorting is defined in the components and the sorting comes from the user who clicks the table headers\r\n   * Note: if the sorting parameters array's length is 3 the priorities should only be 0, 1, 2 and they must be specified for all items of the array; the priorities should also not repeat\r\n   *\r\n   * (calling this method will overwrite the previously set sorting)\r\n   * @param sortingParametersAndValues\r\n   */\r\n  setDefaultSorting(\r\n    sortingParametersAndValues: { name: string; order: 'asc' | 'desc' }[]\r\n  ) {\r\n    if (!sortingParametersAndValues || !sortingParametersAndValues.length)\r\n      throw new Error('The values array is mandatory when filtering');\r\n    this.defaultSorting = sortingParametersAndValues;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set the included attributes (calling this method will overwrite the previously set included attributes)\r\n   * @param includedAttributes attributes which must be included for each object returned\r\n   */\r\n  setIncludeAttributes(includedAttributes: string[]) {\r\n    if (!includedAttributes)\r\n      throw new Error(\r\n        'The attributes array is mandatory when trying to set includeAttributes parameter'\r\n      );\r\n    this.attributes.included = includedAttributes;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set the excluded attributes (calling this method will overwrite the previously set excluded attributes)\r\n   * @param excludedAttributes attributes which must be excluded from each object returned\r\n   */\r\n  setExcludeAttributes(excludedAttributes: string[]) {\r\n    if (!excludedAttributes)\r\n      throw new Error(\r\n        'The attributes array is mandatory when trying to set excludeAttributes parameter'\r\n      );\r\n    this.attributes.excluded = excludedAttributes;\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Set the additional attributes (calling this method will overwrite the previously set excluded attributes)\r\n   * @param additionalParams attributes which should be set as additional parameters in the request\r\n   */\r\n  setAdditionalParameters(\r\n    additionalParams: { param: string; value: string }[]\r\n  ) {\r\n    if (!additionalParams)\r\n      throw new Error(\r\n        'The attributes array is mandatory when trying to set additional parameters'\r\n      );\r\n    this.additionalParams = additionalParams;\r\n    return this;\r\n  }\r\n\r\n  resetParams() {\r\n    this.initializeParams();\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Method used to remove a parameter from the query string\r\n   * If we have filterContains[0][values]=someValue&filterContains[1][values]=someOtherValue this method will remove both of them\r\n   *\r\n   *\r\n   * Use `removeParameterExplicitly('filterContains', [someValue], [])` if you only want to remove the first one\r\n   * @param parameterToRemove 'offset' | 'limit' | 'sort' | 'filterContains' | 'filterRange' | 'filterEquals' | 'includeAttributes' | 'excludeAttributes'\r\n   */\r\n  removeParameter(parameterToRemove: string) {\r\n    if (parameterToRemove === 'offset') this.offset = undefined;\r\n    else if (parameterToRemove === 'limit') this.limit = undefined;\r\n    else if (parameterToRemove === 'sort') this.sorting = [];\r\n    else if (parameterToRemove === 'includeAttributes')\r\n      this.attributes.included = [];\r\n    else if (parameterToRemove === 'excludeAttributes')\r\n      this.attributes.excluded = [];\r\n    else if (\r\n      parameterToRemove === 'filterEquals' ||\r\n      parameterToRemove === 'filterContains' ||\r\n      parameterToRemove === 'filterRange' ||\r\n      parameterToRemove === 'filterNotEquals' ||\r\n      parameterToRemove === 'filterNotContains'\r\n    ) {\r\n      // Filtering options\r\n      this.filtering[parameterToRemove] = [];\r\n    } else {\r\n      let f = this.additionalParams.find((p) => p.param === parameterToRemove);\r\n      let index = f ? this.additionalParams.indexOf(f) : -1;\r\n      if (index > -1) this.additionalParams.splice(index, 1);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /**\r\n   * Method used to remove a parameter explicitly from the query string. Explicitly means that the parameter which will be removed has the values and the attributes provided as parameters. Works for filterContains, filterRange, filterEquals and filterNotEquals\r\n   *\r\n   *\r\n   * If we have filterContains[0][values]=someValue&filterContains[1][values]=someOtherValue `removeParameter('filterContains')` will remove both of them.\r\n   *\r\n   *\r\n   * Use `removeParameterExplicitly('filterContains', [someValue], [])` if you only want to remove the first one.\r\n   *\r\n   * @param parameterToRemove\r\n   * @param values\r\n   * @param attributes\r\n   */\r\n  removeParameterExplicitly(\r\n    parameterToRemove:\r\n      | 'filterContains'\r\n      | 'filterRange'\r\n      | 'filterEquals'\r\n      | 'filterNotEquals'\r\n      | 'filterNotContains',\r\n    values: string[] | undefined,\r\n    attributes: string[] | undefined\r\n  ) {\r\n    if (!values || !values.length)\r\n      throw new Error(\r\n        'The values array is mandatory when removing a parameter explicitly'\r\n      );\r\n    values = values.sort();\r\n    attributes = attributes.sort();\r\n    let filter = this.filtering[parameterToRemove];\r\n    let itemToRemove = undefined;\r\n    filter.some((searchBy) => {\r\n      let searchByAttributes = searchBy.attributes;\r\n      let searchByValues = searchBy.values;\r\n      if (\r\n        searchByAttributes.toString() === attributes.toString() &&\r\n        (searchByValues.toString() === values?.toString() ||\r\n          searchByValues.toString() === 'NOT_AVAILABLE')\r\n      ) {\r\n        itemToRemove = searchBy;\r\n        return true;\r\n      } else return false;\r\n    });\r\n    if (itemToRemove !== undefined) {\r\n      let index = this.filtering[parameterToRemove].indexOf(itemToRemove);\r\n      this.filtering[parameterToRemove].splice(index, 1);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  /* Checks if the parameter is part of the filter and includes the attributes and values specified */\r\n\r\n  parameterExists(\r\n    parameterToSearchFor:\r\n      | 'filterContains'\r\n      | 'filterRange'\r\n      | 'filterEquals'\r\n      | 'filterNotEquals'\r\n      | 'filterNotContains',\r\n    values: string[],\r\n    attributes: string[]\r\n  ) {\r\n    if (!values || !values.length) {\r\n      throw new Error(\r\n        'The values array is mandatory when checking for a parameter explicitly'\r\n      );\r\n    }\r\n    const filter = this.filtering[parameterToSearchFor];\r\n    let found = false;\r\n    filter.some((searchBy) => {\r\n      const searchByAttributes = searchBy.attributes;\r\n      const searchByValues = searchBy.values;\r\n      if (\r\n        searchByAttributes.toString() === attributes.toString() &&\r\n        searchByValues.toString() === values.toString()\r\n      ) {\r\n        found = true;\r\n        return true;\r\n      } else return false;\r\n    });\r\n    return found;\r\n  }\r\n\r\n  /**\r\n   * Method which creates the filtering query string by filterType, values provided and attributes. If the attributes array is not provided the filtering will be done considering all attributes.\r\n   * @param filterType can be 'filterContains', 'filterEquals' or 'filterRange'\r\n   * @param values the values which are used for filtering\r\n   * @param attributes the attributes which are used for filtering\r\n   */\r\n  private setFilterAttributesAndValues(\r\n    filterType:\r\n      | 'filterContains'\r\n      | 'filterEquals'\r\n      | 'filterRange'\r\n      | 'filterNotEquals'\r\n      | 'filterNotContains',\r\n    values: string[],\r\n    attributes?: string[]\r\n  ) {\r\n    if (!values || !values.length)\r\n      throw new Error('The values array is mandatory when filtering');\r\n    if (!attributes) attributes = [];\r\n    if (!this.checkForFilterDuplicates(filterType, values, attributes))\r\n      this.filtering[filterType].push({\r\n        attributes: attributes.sort(),\r\n        values: values.sort(),\r\n      });\r\n  }\r\n\r\n  /**\r\n   * Method which checks if the filter parameter which we are going to add is already set (considering its attributes and values)\r\n   * @param parameter\r\n   * @param values\r\n   * @param attributes\r\n   */\r\n  private checkForFilterDuplicates(\r\n    parameter:\r\n      | 'filterContains'\r\n      | 'filterEquals'\r\n      | 'filterRange'\r\n      | 'filterNotEquals'\r\n      | 'filterNotContains',\r\n    values: string[],\r\n    attributes: string[]\r\n  ) {\r\n    values = values.sort();\r\n    attributes = attributes.sort();\r\n    let filter = this.filtering[parameter];\r\n    let itemToRemove = undefined;\r\n    let res = filter.some((searchBy) => {\r\n      let searchByAttributes = searchBy.attributes;\r\n      let searchByValues = searchBy.values;\r\n      if (\r\n        searchByAttributes.toString() === attributes.toString() &&\r\n        searchByValues.toString() === values.toString()\r\n      ) {\r\n        itemToRemove = searchBy;\r\n        return true;\r\n      } else return false;\r\n    });\r\n    return res;\r\n  }\r\n\r\n  /**\r\n   * If the user searches for translated 'Not available' then the backend will receive the constant 'NOT_AVAILABLE' and based on this value will return all empty entries for that property (for a column filter) or any property (for a global filter)\r\n   * @param valuesToSearchFor\r\n   */\r\n  checkForNotAvailable(valuesToSearchFor: string[]) {\r\n    valuesToSearchFor.map((v, index) => {\r\n      let translatedNA = localStorage.getItem('translatedNotAvailable');\r\n      if (translatedNA)\r\n        if (decodeURIComponent(v).toLowerCase() === translatedNA.toLowerCase())\r\n          valuesToSearchFor[index] = 'NOT_AVAILABLE';\r\n    });\r\n  }\r\n}\r\n","import { Component, OnInit, Input } from '@angular/core';\r\nimport { Alert } from '../../interfaces/alert';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-inline-alerts',\r\n  templateUrl: './inline-alerts.component.html',\r\n  styleUrls: ['./inline-alerts.component.css']\r\n})\r\nexport class InlineAlertsComponent implements OnInit {\r\n  @Input() alerts: Alert[] = [];\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit() {}\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n<div *ngFor=\"let alert of alerts\">\r\n  <alert [type]=\"alert.type\" [dismissible]=\"alert.dismissible\">\r\n    <div class=\"alertText\">\r\n      <strong>\r\n        {{ alert.text\r\n        }}<span *ngIf=\"alert.explanation && alert.explanation !== ''\"></span>\r\n      </strong>\r\n    </div>\r\n    <div class=\"alertDescription\">\r\n      {{ alert.explanation! }}\r\n    </div>\r\n    <div class=\"alertUserAction\">\r\n      <div *ngIf=\"alert.recovery && alert.recovery !== ''\" class=\"recoveryText\">\r\n        {{ alert.recovery }}\r\n        <a\r\n          *ngIf=\"alert.recoveryUrl && alert.recoveryUrl !== ''\"\r\n          href=\"{{ alert.recoveryUrl }}\"\r\n        >\r\n          {{ alert.recoveryUrl }}\r\n        </a>\r\n      </div>\r\n    </div>\r\n  </alert>\r\n</div>\r\n","import { TranslateModule } from '@ngx-translate/core';\r\nimport { AlertModule } from 'ngx-bootstrap/alert';\r\nimport { InlineAlertsComponent } from './inline-alerts.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\n@NgModule({\r\n  declarations: [InlineAlertsComponent],\r\n  imports: [CommonModule, AlertModule.forRoot()],\r\n  exports: [InlineAlertsComponent],\r\n})\r\nexport class InlineAlertsModule {}\r\n","import { TranslateService } from '@ngx-translate/core';\r\n/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Component, ViewChild, Input } from '@angular/core';\r\nimport { BsModalRef, ModalDirective, ModalOptions } from 'ngx-bootstrap/modal';\r\nimport { ModalDialogButton } from '../../interfaces/modalDialogButton';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-dialog-modal',\r\n  templateUrl: './dialog-modal.component.html',\r\n  styleUrls: ['./dialog-modal.component.scss'],\r\n})\r\nexport class DialogModalComponent {\r\n  @ViewChild(ModalDirective, { static: true }) modal: ModalDirective;\r\n  @Input() id: string;\r\n  @Input() modalTitle: string; // The title of the modal\r\n  @Input() class: any; // Typically the size of the modal (modal-sm, modal-lg, modal-xl)\r\n  @Input() buttonText: string; // Submit button text if using a form\r\n  @Input() buttonArray: ModalDialogButton[]; // Array of buttons in footer as follows\r\n  @Input() formName: string; // If passing in a form, specify the form name\r\n  @Input() onShowFunc: Function;\r\n  @Input() onShownFunc: Function;\r\n  @Input() onHideFunc: Function;\r\n  @Input() onHiddenFunc: Function;\r\n  @Input() disabledCondition: boolean; // boolean to determine if buttons should be disabled\r\n  modalRef: BsModalRef;\r\n\r\n  config: ModalOptions = {\r\n    backdrop: 'static',\r\n  };\r\n\r\n  constructor() {}\r\n\r\n  openModal() {\r\n    this.modal.show();\r\n  }\r\n\r\n  hideModal() {\r\n    this.modal.hide();\r\n  }\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n<div\r\n  class=\"modal fade\"\r\n  bsModal\r\n  #modal=\"bs-modal\"\r\n  tabindex=\"-1\"\r\n  role=\"dialog\"\r\n  aria-labelledby=\"dialog-events-name\"\r\n  [config]=\"config\"\r\n  (onShow)=\"onShowFunc && onShowFunc()\"\r\n  (onShown)=\"onShownFunc && onShownFunc()\"\r\n  (onHide)=\"onHideFunc && onHideFunc()\"\r\n  (onHidden)=\"onHiddenFunc && onHiddenFunc()\"\r\n>\r\n  <div class=\"modal-dialog\" [ngClass]=\"class\">\r\n    <div class=\"modal-content\">\r\n      <div class=\"modal-header\">\r\n        <h5 class=\"modal-title pull-left\">{{ modalTitle }}</h5>\r\n        <button\r\n          tabindex=\"-1\"\r\n          type=\"button\"\r\n          class=\"close\"\r\n          data-dismiss=\"modal\"\r\n          aria-label=\"Close\"\r\n          (click)=\"modal.hide()\"\r\n          id=\"{{ id }}-dialog-close-btn\"\r\n        >\r\n          <span aria-hidden=\"true\">&times;</span>\r\n        </button>\r\n      </div>\r\n      <div class=\"modal-body\">\r\n        <ng-content></ng-content>\r\n      </div>\r\n      <div class=\"modal-footer\">\r\n        <ng-content select=\"[footer]\"></ng-content>\r\n        <button\r\n          *ngFor=\"let button of buttonArray\"\r\n          [type]=\"button.type\"\r\n          class=\"btn modalButton\"\r\n          [id]=\"button.id\"\r\n          [ngClass]=\"button.classes || ''\"\r\n          [attr.aria-label]=\"button.name\"\r\n          [attr.form]=\"button.addForm && formName\"\r\n          [disabled]=\"\r\n            button.isDisabled\r\n              ? button.isDisabled()\r\n              : disabledCondition\r\n              ? disabledCondition\r\n              : false\r\n          \"\r\n          (click)=\"button.action ? button.action() : false\"\r\n        >\r\n          {{ button.name }}\r\n        </button>\r\n      </div>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\n\r\nimport { DialogModalComponent } from './dialog-modal.component';\r\nimport { NgModule } from '@angular/core';\r\nimport { ModalModule } from 'ngx-bootstrap/modal';\r\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\n@NgModule({\r\n  declarations: [DialogModalComponent],\r\n  imports: [ModalModule.forRoot(), BrowserModule, TooltipModule, CommonModule],\r\n  exports: [DialogModalComponent],\r\n})\r\nexport class DialogModalModule {}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Component, OnInit, Input } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'ngx-len-icon',\r\n  templateUrl: './icons.component.html',\r\n  styleUrls: ['./icons.component.scss'],\r\n})\r\nexport class IconsComponent implements OnInit {\r\n  /** \r\n   * Example of classConfig:\r\n   * {\r\n      'severity': {\r\n        'xc-critical': ['Critical'],\r\n        'xc-warning': ['Warning'],\r\n        'xc-normal': ['Normal'],\r\n        'xc-unknown': ['Unknown'],\r\n      },\r\n    }\r\n   */\r\n  @Input() classConfig: object;\r\n  /**\r\n   * Example: 'Critical'\r\n   */\r\n  @Input() value: string;\r\n  /**\r\n   * Example: 'severity'\r\n   */\r\n  @Input() iconType: string;\r\n  iconClass: string = '';\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit() {\r\n    if (this.classConfig) {\r\n      const config = this.classConfig[this.iconType.toString()];\r\n      for (const key in config) {\r\n        if (config[key].includes(this.value)) {\r\n          this.iconClass = key;\r\n          return;\r\n        }\r\n      }\r\n    }\r\n  }\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n<div class=\"xc-icon\" [ngClass]=\"iconClass\" [class.xc-icon-hidden]=\"!classConfig\"></div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { IconsComponent } from './icons.component';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\n\r\n@NgModule({\r\n  imports: [CommonModule, BrowserModule],\r\n  declarations: [IconsComponent],\r\n  exports: [IconsComponent],\r\n})\r\nexport class IconsModule {}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  ViewChildren,\r\n  QueryList,\r\n  HostBinding,\r\n} from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\r\nimport { Action } from '../../interfaces/action';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-table-dropdown',\r\n  templateUrl: './table-dropdown.component.html',\r\n  styleUrls: ['./table-dropdown.component.scss'],\r\n})\r\nexport class TableDropdownComponent implements OnInit {\r\n  /* True if the action is inside the All Action dropdown */\r\n  @Input() nested: boolean;\r\n  @Input() action: Action;\r\n  @Input() tableId: string;\r\n  @HostBinding('class') @Input() public disabled: boolean;\r\n\r\n  @ViewChildren(PopoverDirective) pop: QueryList<PopoverDirective>;\r\n\r\n  constructor(private translateSvc: TranslateService) {}\r\n\r\n  ngOnInit() {}\r\n\r\n  isDropdownWithImages() {\r\n    if (this.action?.options && this.action.options.length > 0) {\r\n      return this.action.options.filter((option) => option.img).length > 0;\r\n    }\r\n    return false;\r\n  }\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n<!-- Dropdown -->\r\n<div\r\n  *ngIf=\"action\"\r\n  [popover]=\"nested || action.showLabel ? null : tooltipTemplate\"\r\n  [delay]=\"750\"\r\n  triggers=\"mouseenter:mouseleave\"\r\n  placement=\"top\"\r\n>\r\n  <div\r\n    *ngIf=\"action.options && action.options.length > 0\"\r\n    id=\"container-{{ tableId }}-{{ action.id }}-{{\r\n      nested ? 'action-menu-item' : 'toolbar-button'\r\n    }}\"\r\n    class=\"btn-group btn-toolbar action\"\r\n    dropdown\r\n  >\r\n    <button\r\n      id=\"{{ tableId }}-{{ action.id }}-{{\r\n        nested ? 'action-menu-item' : 'toolbar-button'\r\n      }}\"\r\n      dropdownToggle\r\n      type=\"button\"\r\n      class=\"\r\n        btn btn-outline-secondary\r\n        dropdown-toggle\r\n        buttonRightPadding\r\n        button-dropdown\r\n        toolbarDropdown\r\n        text-left\r\n      \"\r\n      [ngClass]=\"{\r\n        disabled: (action.canEnable && !action.canEnable()) || disabled\r\n      }\"\r\n      attr.aria-controls=\"target-{{ tableId }}-{{ action.id }}-{{\r\n        nested ? 'action-menu-item' : 'toolbar-button'\r\n      }}\"\r\n      aria-expanded=\"false\"\r\n      (click)=\"nested && $event.stopPropagation()\"\r\n    >\r\n      <img\r\n        class=\"imageOnly\"\r\n        *ngIf=\"action.img\"\r\n        [src]=\"\r\n          action.canEnable\r\n            ? action.canEnable() && !disabled\r\n              ? action.img.src\r\n              : action.img.srcDisabled\r\n            : action.img.src\r\n        \"\r\n      />\r\n      <!-- <img *ngIf=\"!action.img\" src=\"../../../../assets/images/icons/blank.png\" class=\"phantomImage\" /> -->\r\n      <img\r\n        *ngIf=\"!action.img\"\r\n        src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wUJDRkUYO7tQAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAC0lEQVQI12NgAAIAAAUAAeImBZsAAAAASUVORK5CYII=\"\r\n        class=\"phantomImage\"\r\n      />\r\n      <span *ngIf=\"action.showLabel\" class=\"defaultFontFamily\"\r\n        >{{ action.label | translate }} </span\r\n      ><span class=\"caret\"></span>\r\n    </button>\r\n    <ul\r\n      id=\"target-{{ tableId }}-{{ action.id }}-{{\r\n        nested ? 'action-menu-item' : 'toolbar-button'\r\n      }}\"\r\n      [ngClass]=\"{ embeddedDropdown: nested === true }\"\r\n      *dropdownMenu\r\n      class=\"dropdown-menu toolbarDropdownMenu\"\r\n      role=\"menu\"\r\n      attr.aria-labelledby=\"{{ tableId }}-{{ action.id }}-{{\r\n        nested ? 'action-menu-item' : 'toolbar-button'\r\n      }}\"\r\n    >\r\n      <hr *ngIf=\"nested === true\" />\r\n      <ng-container *ngFor=\"let option of action.options\">\r\n        <li role=\"menuitem\">\r\n          <div\r\n            class=\"dropdown-item optionsContainer\"\r\n            id=\"{{ tableId }}-{{ action.id }}-{{ option.id }}-{{\r\n              nested ? 'action-menu-item' : 'toolbar-button'\r\n            }}\"\r\n            [ngClass]=\"{ disabled: option.canEnable && !option.canEnable() }\"\r\n            (click)=\"option.onClick($event)\"\r\n          >\r\n            <img\r\n              *ngIf=\"option.img\"\r\n              [src]=\"\r\n                option.canEnable\r\n                  ? option.canEnable()\r\n                    ? option.img.src\r\n                    : option.img.srcDisabled\r\n                  : option.img.src\r\n              \"\r\n            />\r\n            <img\r\n              *ngIf=\"!option.img && isDropdownWithImages()\"\r\n              src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wUJDRkUYO7tQAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAC0lEQVQI12NgAAIAAAUAAeImBZsAAAAASUVORK5CYII=\"\r\n            />\r\n            <!-- <img\r\n              *ngIf=\"!option.img && isDropdownWithImages()\"\r\n              src=\"../../../../assets/images/icons/blank.png\"\r\n            /> -->\r\n            <span class=\"defaultFontFamily\">{{\r\n              option.label | translate\r\n            }}</span>\r\n          </div>\r\n        </li>\r\n      </ng-container>\r\n      <hr *ngIf=\"nested === true\" />\r\n    </ul>\r\n  </div>\r\n\r\n  <!-- Regular action -->\r\n\r\n  <div\r\n    *ngIf=\"!action.options\"\r\n    class=\"btn-group btn-toolbar action\"\r\n    (click)=\"action.onClick()\"\r\n    id=\"container-{{ tableId }}-{{ action.id }}-{{\r\n      nested ? 'action-menu-item' : 'toolbar-button'\r\n    }}\"\r\n  >\r\n    <button\r\n      id=\"{{ tableId }}-{{ action.id }}-{{\r\n        nested ? 'action-menu-item' : 'toolbar-button'\r\n      }}\"\r\n      type=\"button\"\r\n      class=\"\r\n        btn btn-outline-secondary\r\n        button-dropdown\r\n        toolbarDropdown\r\n        text-left\r\n      \"\r\n      [ngClass]=\"{\r\n        disabled: (action.canEnable && !action.canEnable()) || disabled\r\n      }\"\r\n    >\r\n      <img\r\n        *ngIf=\"action.img\"\r\n        class=\"imageOnly\"\r\n        [src]=\"\r\n          action.canEnable\r\n            ? action.canEnable() && !disabled\r\n              ? action.img.src\r\n              : action.img.srcDisabled\r\n            : action.img.src\r\n        \"\r\n      />\r\n      <img\r\n        *ngIf=\"!action.img\"\r\n        src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4wUJDRkUYO7tQAAAAB1pVFh0Q29tbWVudAAAAAAAQ3JlYXRlZCB3aXRoIEdJTVBkLmUHAAAAC0lEQVQI12NgAAIAAAUAAeImBZsAAAAASUVORK5CYII=\"\r\n        class=\"phantomImage\"\r\n      />\r\n      <!-- <img\r\n        *ngIf=\"!action.img\"\r\n        src=\"../../../../assets/images/icons/blank.png\"\r\n        class=\"phantomImage\"\r\n      /> -->\r\n      <span\r\n        *ngIf=\"action.showLabel || nested\"\r\n        class=\"defaultFontFamily textOnlyPadding\"\r\n        >{{ action.label | translate }}\r\n      </span>\r\n    </button>\r\n  </div>\r\n</div>\r\n\r\n<!-- Tooltip template -->\r\n<ng-template #tooltipTemplate>\r\n  <div id=\"{{ action ? action.id : 'actionId' }}-toolbarTooltip\">\r\n    <span>{{ action.label | translate }}</span>\r\n  </div>\r\n</ng-template>\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { ActiveFilter } from '../../interfaces/activeFilter';\r\nimport { TableFilter } from '../../interfaces/tableFilter';\r\n@Injectable({ providedIn: 'root' })\r\nexport class TableFilteringConfigurationsService {\r\n  constructor() {}\r\n\r\n  getConfiguration(\r\n    filters: TableFilter[],\r\n    activeFilters?: ActiveFilter[]\r\n  ): TableFilter[] {\r\n    if (activeFilters && activeFilters.length)\r\n      this.activateFilters(filters, activeFilters);\r\n    return filters;\r\n  }\r\n\r\n  private activateFilters(\r\n    allFilters: TableFilter[],\r\n    activeFilters: ActiveFilter[]\r\n  ) {\r\n    if (!activeFilters || !activeFilters.length)\r\n      throw new Error('Did not provide any filters to activate!');\r\n    activeFilters.forEach((activeFilter: ActiveFilter) => {\r\n      let filter = allFilters.find(\r\n        (f: TableFilter) => f.id === activeFilter.id\r\n      );\r\n      if (!filter)\r\n        throw new Error(\r\n          'The filter you are trying to activate does not exist! Check the id'\r\n        );\r\n      filter.wasApplied = true;\r\n      filter.isActive = true;\r\n      switch (filter.type) {\r\n        case 'boolean':\r\n          if (activeFilter.values.length > 1)\r\n            throw new Error(\r\n              'Only one value allowed when setting boolean filter'\r\n            );\r\n          filter.selectedValue!.currentValue = activeFilter.values[0];\r\n          break;\r\n        case 'checkbox':\r\n          activeFilter.values.forEach((value: string) => {\r\n            let possibleValue = filter?.possibleValues?.find(\r\n              (v) => v.value === value\r\n            );\r\n            if (!possibleValue)\r\n              throw new Error(\r\n                'The value you are trying to set does not exist in the array of possible values. Please check spelling'\r\n              );\r\n            possibleValue.isSelected = true;\r\n          });\r\n          break;\r\n        case 'date':\r\n          if (activeFilter.values.length > 2)\r\n            throw new Error('Only two value allowed when setting date filter');\r\n          // Dates must come in iso formats\r\n          filter.rangeDates = [activeFilter.values[0], activeFilter.values[1]];\r\n          break;\r\n        case 'string':\r\n          filter.searchValues![0].currentValue = activeFilter.values[0];\r\n          activeFilter.values.shift();\r\n          activeFilter.values.forEach((value) =>\r\n            filter?.searchValues!.push({\r\n              currentValue: value,\r\n              previousValue: '',\r\n              enteredPreviousSearch: false,\r\n            })\r\n          );\r\n          if (activeFilter.negate)\r\n            filter.negation = { currentValue: true, previousValue: undefined };\r\n          if (!filter.additionalPropertiesForSearch)\r\n            filter.additionalPropertiesForSearch = [];\r\n          if (\r\n            activeFilter.additionalProps &&\r\n            activeFilter.additionalProps.length\r\n          ) {\r\n            activeFilter.additionalProps.forEach((prop) => {\r\n              let found: any;\r\n              allFilters.forEach((f: TableFilter) => {\r\n                if (f.id === prop) found = f;\r\n                if (f.subFilters && !found)\r\n                  f.subFilters.forEach((sf) => {\r\n                    if (sf.id === prop) found = sf;\r\n                  });\r\n              });\r\n              if (found) {\r\n                filter?.additionalPropertiesForSearch?.push({\r\n                  id: prop,\r\n                  prop: found.properties.toString(),\r\n                  isSelected: true,\r\n                  enteredPreviousSearch: false,\r\n                });\r\n              }\r\n            });\r\n          }\r\n          break;\r\n      }\r\n    });\r\n  }\r\n}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class CalendarLocaleService {\r\n  constructor() {}\r\n\r\n  getCalendarSettings(locale: string) {\r\n    switch (locale) {\r\n      case 'en-US':\r\n        return this.enUS();\r\n      case 'zh':\r\n        return this.zh();\r\n      case 'zh-hant':\r\n        return this.zhHant();\r\n      case 'fr':\r\n        return this.fr();\r\n      case 'de':\r\n        return this.de();\r\n      case 'it':\r\n        return this.it();\r\n      case 'ja':\r\n        return this.ja();\r\n      case 'ko':\r\n        return this.ko();\r\n      case 'pt':\r\n        return this.pt();\r\n      case 'ru':\r\n        return this.ru();\r\n      case 'es':\r\n        return this.es();\r\n      case 'th':\r\n        return this.th();\r\n      default:\r\n        return this.enUS();\r\n    }\r\n  }\r\n\r\n  enUS() {\r\n    return {\r\n      firstDayOfWeek: 0, // Sunday\r\n      dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n      dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n      dayNamesMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\r\n      monthNames: [\r\n        'January',\r\n        'February',\r\n        'March',\r\n        'April',\r\n        'May',\r\n        'June',\r\n        'July',\r\n        'August',\r\n        'September',\r\n        'October',\r\n        'November',\r\n        'December',\r\n      ],\r\n      monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\r\n      today: 'Today',\r\n      clear: 'Clear',\r\n      dateFormat: 'M/d/yy',\r\n      weekHeader: 'Wk',\r\n    };\r\n  }\r\n\r\n  zh() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\r\n      dayNamesShort: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\r\n      dayNamesMin: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\r\n      monthNames: ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],\r\n      monthNamesShort: ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],\r\n      today: '今天',\r\n      clear: '清除',\r\n      dateFormat: 'y/M/d',\r\n      weekHeader: '周',\r\n    };\r\n  }\r\n\r\n  zhHant() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'],\r\n      dayNamesShort: ['週日', '週一', '週二', '週三', '週四', '週五', '週六'],\r\n      dayNamesMin: ['日', '一', '二', '三', '四', '五', '六'],\r\n      monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'],\r\n      monthNamesShort: ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],\r\n      today: '今日',\r\n      clear: '清除',\r\n      dateFormat: 'y/M/d',\r\n      weekHeader: '週',\r\n    };\r\n  }\r\n\r\n  fr() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['Dimanche', 'Dimanche', 'Mardi', 'Mercredi', 'Jeudi', 'Vendredi', 'Samedi'],\r\n      dayNamesShort: ['Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam'],\r\n      dayNamesMin: ['Di', 'Lu', 'Ma', 'Me', 'Je', 'Ve', 'Sa'],\r\n      monthNames: ['Janvier', 'Février', 'Mars', 'Avril', 'Mai', 'Juin', 'Juillet', 'Août', 'Septembre', 'Octobre', 'Novembre', 'Décembre'],\r\n      monthNamesShort: ['Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Juin', 'Juil', 'Août', 'Sept', 'Oct', 'Nov', 'Déc'],\r\n      today: \"Aujourd'hui\",\r\n      clear: 'Effacer',\r\n      dateFormat: 'dd/MM/y',\r\n      weekHeader: 'Sem',\r\n    };\r\n  }\r\n\r\n  de() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],\r\n      dayNamesShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\r\n      dayNamesMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],\r\n      monthNames: ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'],\r\n      monthNamesShort: ['Jan', 'Feb', 'Mär', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez'],\r\n      today: 'Heute',\r\n      clear: 'Leeren',\r\n      dateFormat: 'dd.MM.yy',\r\n      weekHeader: 'KW',\r\n    };\r\n  }\r\n\r\n  it() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['Domenica', 'Lunedì', 'Martedì', 'Mercoledì', 'Giovedì', 'Venerdì', 'Sabato'],\r\n      dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],\r\n      dayNamesMin: ['Dom', 'Lun', 'Mar', 'Mer', 'Gio', 'Ven', 'Sab'],\r\n      monthNames: [\r\n        'Gennaio',\r\n        'Febbraio',\r\n        'Marzo',\r\n        'Aprile',\r\n        'Maggio',\r\n        'Giugno',\r\n        'Luglio',\r\n        'Agosto',\r\n        'settembre',\r\n        'Ottobre',\r\n        'Novembre',\r\n        'Dicembre',\r\n      ],\r\n      monthNamesShort: ['Gen', 'Feb', 'Mar', 'Apr', 'Mag', 'Giu', 'Lug', 'Ago', 'Set', 'Ott', 'Nov', 'Dic'],\r\n      today: 'Oggi',\r\n      clear: 'Cancella',\r\n      dateFormat: 'dd/MM/yy',\r\n      weekHeader: 'Set',\r\n    };\r\n  }\r\n\r\n  ja() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['日曜日', '月曜日', '火曜日', '水曜日', '木曜日', '金曜日', '土曜日'],\r\n      dayNamesShort: ['日', '月', '火', '水', '木', '金', '土'],\r\n      dayNamesMin: ['日', '月', '火', '水', '木', '金', '土'],\r\n      monthNames: ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],\r\n      monthNamesShort: ['1 月', '2 月', '3 月', '4 月', '5 月', '6 月', '7 月', '8 月', '9 月', '10 月', '11 月', '12 月'],\r\n      today: '今日',\r\n      clear: 'クリア',\r\n      dateFormat: 'y/MM/dd',\r\n      weekHeader: '週',\r\n    };\r\n  }\r\n\r\n  ko() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],\r\n      dayNamesShort: ['일', '월', '화', '수', '목', '금', '토'],\r\n      dayNamesMin: ['일', '월', '화', '수', '목', '금', '토'],\r\n      monthNames: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\r\n      monthNamesShort: ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],\r\n      today: '현재',\r\n      clear: '지우기',\r\n      dateFormat: 'yy. M. d.',\r\n      weekHeader: '주',\r\n    };\r\n  }\r\n\r\n  pt() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['Domingo', 'Segunda-feira', 'Terça-feira', 'Quarta-feira', 'Quinta-feira', 'Sexta-feira', 'Sábado'],\r\n      dayNamesShort: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\r\n      dayNamesMin: ['Dom', 'Seg', 'Ter', 'Qua', 'Qui', 'Sex', 'Sáb'],\r\n      monthNames: [\r\n        'Janeiro',\r\n        'Fevereiro',\r\n        'Março',\r\n        'Abril',\r\n        'Maio',\r\n        'junho',\r\n        'Julho',\r\n        'Agosto',\r\n        'setembro',\r\n        'Outubro',\r\n        'Novembro',\r\n        'Dezembro',\r\n      ],\r\n      monthNamesShort: ['Jan', 'Fev', 'Mar', 'Abr', 'Maio', 'Jun', 'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'],\r\n      today: 'Hoje',\r\n      clear: 'Limpar',\r\n      dateFormat: 'dd/MM/y',\r\n      weekHeader: 'Sem',\r\n    };\r\n  }\r\n\r\n  ru() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота'],\r\n      dayNamesShort: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],\r\n      dayNamesMin: ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб'],\r\n      monthNames: ['Январь', 'Февраль', 'март', 'Апрель', 'Май', 'Июнь', 'июль', 'август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь'],\r\n      monthNamesShort: ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек'],\r\n      today: 'Сегодня',\r\n      clear: 'Очистить',\r\n      dateFormat: 'dd.MM.y',\r\n      weekHeader: 'Нед.',\r\n    };\r\n  }\r\n\r\n  es() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado'],\r\n      dayNamesShort: ['Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sáb'],\r\n      dayNamesMin: ['Ele', 'Lu', 'Ma', 'Mi', 'Ju', 'Vi', 'Sá'],\r\n      monthNames: [\r\n        'Enero',\r\n        'Febrero',\r\n        'Marzo',\r\n        'Abril',\r\n        'Mayo',\r\n        'Junio',\r\n        'Julio',\r\n        'agosto',\r\n        'Septiembre',\r\n        'Octubre',\r\n        'Noviembre',\r\n        'Diciembre',\r\n      ],\r\n      monthNamesShort: ['Ene', 'Feb', 'Mar', 'Abr', 'Mayo', 'Jun', 'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'],\r\n      today: 'Hoy',\r\n      clear: 'Borrar',\r\n      dateFormat: 'd/M/yy',\r\n      weekHeader: 'Sem',\r\n    };\r\n  }\r\n\r\n  th() {\r\n    return {\r\n      firstDayOfWeek: 0,\r\n      dayNames: ['อาทิตย์', 'จันทร์', 'อังคาร', 'พุธ', 'พฤหัสบดี', 'ศุกร์', 'เสาร์'],\r\n      dayNamesShort: ['อา', 'จ', 'อ', 'พ', 'พฤ', 'ศ', 'ส'],\r\n      dayNamesMin: ['อา.', 'จ.', 'อ.', 'พ.', 'พฤ.', 'ศ.', 'ส.'],\r\n      monthNames: [\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      monthNamesShort: ['ม.ค.', 'ก.พ.', 'มี.ค.', 'เม.ย.', 'พ.ค.', 'มิ.ย.', 'ก.ค.', 'ส.ค.', 'ก.ย.', 'ต.ค.', 'พ.ย.', 'ธ.ค.'],\r\n      today: 'วันนี้',\r\n      clear: 'ล้างข้อมูล',\r\n      dateFormat: 'd/M/yy',\r\n      weekHeader: 'สัปดาห์',\r\n    };\r\n  }\r\n}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Injectable } from '@angular/core';\r\nimport { SortingAndFilteringParamsBuilder } from '../../classes/sortingFilteringUtils/sortingFilteringUtils';\r\nimport {\r\n  UiSettings,\r\n  PageSetting,\r\n  ColumnSetting,\r\n  PaginationInfo,\r\n  LocalStorageFilter,\r\n} from './localStorageItems';\r\n\r\n@Injectable({ providedIn: 'root' })\r\nexport class LocalStorageService {\r\n  constructor() {}\r\n\r\n  retrievePaginationInfoDataWithBuilder(\r\n    pageName: string\r\n  ):\r\n    | [\r\n        number,\r\n        number,\r\n        SortingAndFilteringParamsBuilder,\r\n        string | undefined,\r\n        'asc' | 'desc' | undefined\r\n      ]\r\n    | undefined {\r\n    let pageSettings = this.getUiSettingsFromStorage(pageName, 'session')[1];\r\n    if (pageSettings) {\r\n      let paginationInfo = pageSettings.paginationInfo;\r\n      if (paginationInfo) {\r\n        let newBuilder = new SortingAndFilteringParamsBuilder(\r\n          paginationInfo.sortingAndFilteringBuilder\r\n        );\r\n        return [\r\n          paginationInfo.offset,\r\n          paginationInfo.limit,\r\n          newBuilder,\r\n          paginationInfo.sortField,\r\n          paginationInfo.sortMode,\r\n        ];\r\n      } else return undefined;\r\n    } else return undefined;\r\n  }\r\n\r\n  // TODO: When all the microservices will use the builder-like syntax this method should be deleted\r\n  retrievePaginationInfoDataWithoutBuilder(\r\n    pageName: string\r\n  ):\r\n    | [number, number, string | undefined, 'asc' | 'desc' | undefined]\r\n    | undefined {\r\n    let pageSettings = this.getUiSettingsFromStorage(pageName, 'session')[1];\r\n    if (pageSettings) {\r\n      let paginationInfo = pageSettings.paginationInfo;\r\n      if (paginationInfo)\r\n        return [\r\n          paginationInfo.offset,\r\n          paginationInfo.limit,\r\n          paginationInfo.sortField,\r\n          paginationInfo.sortMode,\r\n        ];\r\n      else return undefined;\r\n    } else return undefined;\r\n  }\r\n\r\n  createPaginationInfoBasedOnData(\r\n    offset: number,\r\n    limit: number,\r\n    builder: SortingAndFilteringParamsBuilder,\r\n    sortField?: string,\r\n    sortMode?: 'asc' | 'desc'\r\n  ) {\r\n    let localStoragePaginationInfo: PaginationInfo;\r\n    // let builderParams: string | undefined = builder ? builder.getParams() : '';\r\n    localStoragePaginationInfo = {\r\n      offset: offset,\r\n      limit: limit,\r\n      sortField: sortField ? sortField : '',\r\n      sortMode: sortMode ? sortMode : 'asc',\r\n      sortingAndFilteringBuilder: builder,\r\n    };\r\n    return localStoragePaginationInfo;\r\n  }\r\n\r\n  /**\r\n   * Method used to retrieve all uiSettings and specific page settings from local storage or session storage\r\n   * @param pageName\r\n   * @param storageType use 'session' for session storage and 'local' for local storage\r\n   */\r\n  getUiSettingsFromStorage(\r\n    pageName: string,\r\n    storageType: 'session' | 'local'\r\n  ): [UiSettings | undefined, PageSetting | any] {\r\n    let source: any;\r\n    storageType === 'session'\r\n      ? (source = sessionStorage)\r\n      : (source = localStorage);\r\n    let uiSettings: UiSettings = JSON.parse(source.getItem('uiSettings'));\r\n    if (!uiSettings) return [undefined, undefined];\r\n    let pageSettings: PageSetting[] = uiSettings.pageSettings;\r\n    let currentPageSettings = pageSettings.find((s) => s.pageName === pageName);\r\n    return [uiSettings, currentPageSettings];\r\n  }\r\n\r\n  updateSessionStorageColumnSettings(\r\n    pageName: string,\r\n    columnSettings: ColumnSetting[]\r\n  ) {\r\n    let [uiSettings, currentPageSettings] = this.getUiSettingsFromStorage(\r\n      pageName,\r\n      'session'\r\n    );\r\n    if (!uiSettings || !currentPageSettings) {\r\n      this.initializePageSettingsInStorage(pageName, 'session');\r\n      [uiSettings, currentPageSettings] = this.getUiSettingsFromStorage(\r\n        pageName,\r\n        'session'\r\n      );\r\n    }\r\n    [uiSettings, currentPageSettings] = this.getUiSettingsFromStorage(\r\n      pageName,\r\n      'session'\r\n    );\r\n    if (currentPageSettings) {\r\n      currentPageSettings.columnSettings = columnSettings;\r\n    }\r\n    sessionStorage.setItem('uiSettings', JSON.stringify(uiSettings));\r\n  }\r\n\r\n  updateSessionStorageTablePaginationSettings(\r\n    pageName: string,\r\n    paginationInfo: PaginationInfo\r\n  ) {\r\n    let [uiSettings, currentPageSettings] = this.getUiSettingsFromStorage(\r\n      pageName,\r\n      'session'\r\n    );\r\n    if (!uiSettings || !currentPageSettings) {\r\n      this.initializePageSettingsInStorage(pageName, 'session');\r\n      [uiSettings, currentPageSettings] = this.getUiSettingsFromStorage(\r\n        pageName,\r\n        'session'\r\n      );\r\n    }\r\n    [uiSettings, currentPageSettings] = this.getUiSettingsFromStorage(\r\n      pageName,\r\n      'session'\r\n    );\r\n    if (currentPageSettings) {\r\n      currentPageSettings.paginationInfo = paginationInfo;\r\n    }\r\n    sessionStorage.setItem('uiSettings', JSON.stringify(uiSettings));\r\n  }\r\n\r\n  /**\r\n   * Method used to initialize page settings for a specific page in local storage or session storage\r\n   * @param pageName\r\n   * @param storageType use 'session' for session storage and 'local' for local storage\r\n   */\r\n  initializePageSettingsInStorage(\r\n    pageName: string,\r\n    storageType: 'session' | 'local'\r\n  ) {\r\n    let uiSettings = this.getUiSettingsFromStorage(pageName, storageType)[0];\r\n    let source;\r\n    storageType === 'session'\r\n      ? (source = sessionStorage)\r\n      : (source = localStorage);\r\n    if (!uiSettings) uiSettings = { pageSettings: [] };\r\n    let pageSettings = uiSettings.pageSettings;\r\n    let currentPageSettings = pageSettings.find((s) => s.pageName === pageName);\r\n    if (!currentPageSettings)\r\n      uiSettings.pageSettings.push({ pageName: pageName });\r\n    source.setItem('uiSettings', JSON.stringify(uiSettings));\r\n  }\r\n\r\n  getLimit(pageName: string, storageType: 'session' | 'local') {\r\n    let uiSettings = this.getUiSettingsFromStorage(pageName, storageType)[0];\r\n    if (!uiSettings) {\r\n      return undefined;\r\n    }\r\n    let pageSettings = uiSettings.pageSettings;\r\n    let currentPageSettings = pageSettings.find((s) => s.pageName === pageName);\r\n    if (!currentPageSettings || !currentPageSettings.paginationInfo) {\r\n      return undefined;\r\n    }\r\n    return currentPageSettings.paginationInfo.limit;\r\n  }\r\n\r\n  getOffset(pageName: string, storageType: 'session' | 'local') {\r\n    let uiSettings = this.getUiSettingsFromStorage(pageName, storageType)[0];\r\n    if (!uiSettings) {\r\n      return undefined;\r\n    }\r\n    let pageSettings = uiSettings.pageSettings;\r\n    let currentPageSettings = pageSettings.find((s) => s.pageName === pageName);\r\n    if (!currentPageSettings || !currentPageSettings.paginationInfo) {\r\n      return undefined;\r\n    }\r\n    return currentPageSettings.paginationInfo.offset;\r\n  }\r\n\r\n  /**\r\n   * Method which saves the active filtering configuration in local storage based on username and page name\r\n   * @param currentUsername\r\n   * @param filter\r\n   * @param pageName\r\n   * @param replace if the user clicks the 'Save as' button replace should be false, otherwise the user wants to replace an existing filter\r\n   */\r\n  saveFilterForCurrentUser(\r\n    currentUsername: string,\r\n    filter: LocalStorageFilter,\r\n    pageName: string,\r\n    replace?: boolean\r\n  ) {\r\n    let [uiSettings, pageSettings] = this.getUiSettingsFromStorage(\r\n      pageName,\r\n      'local'\r\n    );\r\n    if (!uiSettings || !pageSettings) {\r\n      this.initializePageSettingsInStorage(pageName, 'local');\r\n      [uiSettings, pageSettings] = this.getUiSettingsFromStorage(\r\n        pageName,\r\n        'local'\r\n      );\r\n    }\r\n    if (!pageSettings[currentUsername]) {\r\n      pageSettings[currentUsername] = {};\r\n      pageSettings[currentUsername].filters = [];\r\n    }\r\n    if (!replace) pageSettings[currentUsername].filters.push(filter);\r\n    else {\r\n      let filterToReplace = pageSettings[currentUsername].filters.find(\r\n        (f: LocalStorageFilter) => f.name === filter.name\r\n      );\r\n      let index =\r\n        pageSettings[currentUsername].filters.indexOf(filterToReplace);\r\n      if (index !== -1) pageSettings[currentUsername].filters[index] = filter;\r\n      else pageSettings[currentUsername].filters.push(filter);\r\n    }\r\n    localStorage.setItem('uiSettings', JSON.stringify(uiSettings));\r\n  }\r\n\r\n  /**\r\n   * Method used to check if a user can be saved as the entered username\r\n   * @param currentUsername\r\n   * @param pageName\r\n   * @param filterName\r\n   */\r\n  checkIfFilterWithSameNameExists(\r\n    currentUsername: string,\r\n    pageName: string,\r\n    filterName: string\r\n  ): boolean {\r\n    let [uiSettings, pageSettings] = this.getUiSettingsFromStorage(\r\n      pageName,\r\n      'local'\r\n    );\r\n    if (!uiSettings || !pageSettings || !pageSettings[currentUsername])\r\n      return false;\r\n    let currentUserFilters = pageSettings[currentUsername].filters;\r\n    if (currentUserFilters.some((f: LocalStorageFilter) => f.name === filterName)) return true;\r\n    return false;\r\n  }\r\n\r\n  removeFilter(\r\n    currentUsername: string,\r\n    pageName: string,\r\n    filterName: string\r\n  ): boolean {\r\n    let [uiSettings, pageSettings] = this.getUiSettingsFromStorage(\r\n      pageName,\r\n      'local'\r\n    );\r\n    if (uiSettings && pageSettings && pageSettings[currentUsername]) {\r\n      let filters: LocalStorageFilter[] = pageSettings[currentUsername].filters;\r\n      let filter = filters.find((f) => f.name === filterName);\r\n      let index = filters.indexOf(filter!);\r\n      if (index > -1) {\r\n        pageSettings[currentUsername].filters.splice(index, 1);\r\n        localStorage.setItem('uiSettings', JSON.stringify(uiSettings));\r\n        return true;\r\n      }\r\n    }\r\n    return false;\r\n  }\r\n\r\n  getLanguage() {\r\n    if (!localStorage.getItem('language')) {\r\n      localStorage.setItem('language', 'en-US');\r\n    }\r\n    return localStorage.getItem('language');\r\n  }\r\n}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport {\r\n  Component,\r\n  OnInit,\r\n  Input,\r\n  ChangeDetectorRef,\r\n  ElementRef,\r\n  HostBinding,\r\n  AfterViewInit,\r\n  EventEmitter,\r\n  Output,\r\n  SimpleChanges,\r\n  OnChanges,\r\n  TemplateRef,\r\n} from '@angular/core';\r\nimport { SortingAndFilteringParamsBuilder } from '../../classes/sortingFilteringUtils/sortingFilteringUtils';\r\nimport {\r\n  StringTableFilterSearchValue,\r\n  TableFilter,\r\n} from '../../interfaces/tableFilter';\r\nimport { Action } from '../../interfaces/action';\r\nimport { TableFilteringConfigurationsService } from '../../services/tableFilteringService/tableFilteringConfigurations.service';\r\nimport { LocalStorageService } from '../../services/localStorageService/localStorage.service';\r\nimport { LocalStorageFilter } from '../../services/localStorageService/localStorageItems';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { Subscription, Observable } from 'rxjs';\r\nimport XRegExp from 'xregexp';\r\nimport { PrimeNGConfig } from 'primeng/api';\r\nimport { CalendarLocaleService } from '../../classes/primengCalendarLocales';\r\n// import { NgxTreetableComponent } from '../ngx-treetable/ngx-treetable.component';\r\n// import { ToasterService, ToasterTypes } from 'src/app/services/toaster.service';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-table-toolbar',\r\n  templateUrl: './table-toolbar.component.html',\r\n  styleUrls: [\r\n    './table-toolbar.component.scss',\r\n    '../../../../styles/primeng/primeng-progress-bar.scss',\r\n  ],\r\n})\r\nexport class TableToolbarComponent implements OnInit, OnChanges, AfterViewInit {\r\n  @Input() public actions: Action[];\r\n  @Input() public table: any; // Common data table: NgxDatatableComponent | NgxTreetableComponent\r\n  /**\r\n   * Boolean indicating if the refresh button should be displayed or not\r\n   */\r\n  @Input() public showRefreshButton: boolean = true;\r\n  /**\r\n   * When prefilling filters from shortcuts, the component sends the active filters to the toolbar and it applies them\r\n   */\r\n  @Input() public activeFilters: TableFilter[];\r\n  /**\r\n   * If currentUser is received (e.g. from sessionStorage.getItem('currentUser')), table settings will be saved per that user.\r\n   * Else, these will be saved in sessionStorage as 'tableSettings' in the 'uiSettings' object.\r\n   */\r\n  @Input() public currentUser: string;\r\n  /**\r\n   * The configuration of the table, including column names and properties used.\r\n   */\r\n  @Input() public tableFilteringConfig: TableFilter[] = [];\r\n  /**\r\n   * Custom Table toolbar icons configuration for filters\r\n   */\r\n  @Input() public tableToolbarIconsClassConfig: object;\r\n  /**\r\n   * After setting the active filters, clear them because they are already applied and saved in session storage\r\n   */\r\n  @Output() public activeFiltersChange: EventEmitter<TableFilter[]> =\r\n    new EventEmitter();\r\n  @HostBinding('class') @Input() public disabled: boolean;\r\n\r\n  filters: TableFilter[] = [];\r\n  /** Previously searched global value */\r\n  // lastEnteredTableGlobalSearchValue: string;\r\n  /** Current search global value */\r\n  tableGlobalSearchValue: StringTableFilterSearchValue = {\r\n    currentValue: '',\r\n    previousValue: '',\r\n    enteredPreviousSearch: false,\r\n  };\r\n  /** Boolean indifcating if the global filter on table was applied */\r\n  globalFilterOnTableWasApplied: boolean = false;\r\n  /** In order to show days in the current selected language */\r\n  calendarLocale: any;\r\n\r\n  savedFilterConfigurations: LocalStorageFilter[] = [];\r\n  // filteredSavedFilterConfigurations: LocalStorageFilter[] = [];\r\n  filterName: string = '';\r\n  showFilterNameInput: boolean = false;\r\n  initialTableBuilder: SortingAndFilteringParamsBuilder;\r\n  searchSavedFiltersInputValue: string;\r\n  /** Actions for filtering like save filter, save filter as and clear filter */\r\n  filtersActions: Action[] = [];\r\n  // searchThroughSavedFiltersWasApplied: boolean = false;\r\n  activeFilteringConfigurationName: string | undefined;\r\n\r\n  startDateTime: Date = new Date();\r\n  endDateTime: Date = new Date();\r\n\r\n  translatedNotAvailable: string = 'Not Available';\r\n\r\n  isGlobalSearchPopoverOpen: boolean = false;\r\n\r\n  tableEventsSubscription: Subscription;\r\n  refreshAction: Action;\r\n  toggleColumnsAction: Action;\r\n\r\n  @Input() tableEvents: Observable<string>;\r\n\r\n  constructor(\r\n    private tableFilteringConfigSvc: TableFilteringConfigurationsService,\r\n    private cdr: ChangeDetectorRef,\r\n    private calendarLocaleSvc: CalendarLocaleService,\r\n    private localStorageSvc: LocalStorageService,\r\n    // private toasterSvc: ToasterService,\r\n    private translateSvc: TranslateService,\r\n    private elRef: ElementRef,\r\n    private primeNGConfig: PrimeNGConfig\r\n  ) {\r\n    const notAvailable = this.translateSvc.get('STR_NOT_AVAILABLE');\r\n\r\n    this.getLocaleForCalendar();\r\n\r\n    notAvailable.subscribe((res) => {\r\n      this.translatedNotAvailable = res;\r\n      localStorage.setItem(\r\n        'translatedNotAvailable',\r\n        this.translatedNotAvailable\r\n      );\r\n    });\r\n\r\n    this.refreshAction = {\r\n      id: 'refresh',\r\n      label: 'LBL_REFRESH',\r\n      onClick: () => {\r\n        this.table.refresh();\r\n      },\r\n      canEnable: () => !this.disabled,\r\n      img: {\r\n        // 64_refresh, refresh-inactive\r\n        src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RUM2QkM2MjBGMjA5MTFFODlDODZFQzhGN0REMEI4NEEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RUM2QkM2MjFGMjA5MTFFODlDODZFQzhGN0REMEI4NEEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFQzZCQzYxRUYyMDkxMUU4OUM4NkVDOEY3REQwQjg0QSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFQzZCQzYxRkYyMDkxMUU4OUM4NkVDOEY3REQwQjg0QSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PoaujCEAAAUDSURBVHja5FtLbExRGD4zZBYoVZUQgtRrWguNNmgQJSQNCwvVUO9HsUI8FxJtWUioBbsm4pFqJcVChEgaUm8WJJVoS0dDRUg0qsWmyPj/zDdxDTN3zrn33N65/ZNv0emc//HNOf85/3n48uYvFZplDKGAkE0IEqYQRhGGEdLwna+EbsJHwitCK6GF8IjwXqdzAzXpzSOUEpYgaDNJA8YS8mP+x2TcINQRnrqZAA5gG2EjIcdGvUFgN6GZcJZQjV5jWfw26EgnlBPeEI7bHHys5MDGG9hM70sCfIQNhDZCBSFDOCcZsNkGH3wJvhtOBFUCJhHuoTtmir6TTPjAvkx0qgesQDKaI9wj7Msz+KaNAO5mVYR6wlDhPhkK36pMhoQSAQHCBcIe4X7ZA18Ddk2DrOgqoUikjpQiUS6z2gO4K51JseCjUgTfLRFwlLBapK6stjIEigkHbHKkk9BIeIA1fjs++4b/DyGMwFSWjaxe6MQU64tTDGVhWhlmQfdPwmV0w9uEX5LtBxAWEjbhx9BSt/jjjPvzFoLnFdZFwmTCKkKDQvACbRqgYxJ0hp0gYD1hrqK+DnTdUqzX7ZK30FkIG9oI4OLimKKuW4Rcwl2NQ5Z1T4ctLQTsJIxU0FOP2r/Lgcz+Bbbq7SaAM/EOBR2c4NYSeh2c3nph87adBGxXKGnfIkM7GbyRhGL4YHlHiDP/VoVsv86Bbh/WqTzaAwowbclIneaE54j4DTW+7CLnoPCA+A2Fg4xcsTr23EQAb0UHJdudFh4RJmC2YmHjGQJyJds0Igd4hoBsyTb3hYeE1wHjJdu0OuyjT3cPGC3Zpt1LPYAJSJNs86m/E/DdawT0a2ECZI+ZB/d3AkZ6jYAPkm2yvEaAbFET9BoBLZJt5ro4nlkiyUNRIwHPJY0UCn2Xq6wIH6RcQ48+JCI30ZIi4JGkoUyQ4DZZgATNgVeCCD4mn2lGwDvCS0ljm11IwJaYv3ko8OHoE8JjETlYCcRbCN2UNFasUETpFPZluUluqEWvKDcOjygBlxSqyCMuIuBwknmJA68AEUEjAQ8JIUmja1wyI8wTkUMSGemIDvsoAbz3Xq1Qp3OSGd6HwbPtGoU9g2rE/FcxxB92KYy9y7Jzr00SgG3ZXNRl/LGNBHBNcFLBkYX4FQIOB18D27Jyylj/xJbDJxU3PEoI14UNd3eTkHTYKlFo+wkExN0P4KNn1XtBiwhNSEo6E14TbKkIx/bZbEPknIhcZlKRcYQ7mHPtXCeMR5e/Axsq8gCxCTMCODvyNZluRUM+rLp4WuV7PYuxTldZ2y+CjhCmXdUd4m7EFP7fguZ/8ppQJqzdwmDdKwEee41YbzRDP3fFHnyX7/ny3YTYa3J2bb6Uwea/v5bJmyG+L7QvxUv+qkQx+JNIGrUpHDz7vt+sGkwkPGY2KRRLbpCb8D1shQAWvovDt67rUij4Ovhsencp2XOBXmThEykQ/An4mtTFLZmDEe5Ke7EC63Fh4D3wba+QuFilcjLEewd5FhZLOoR9maGwr6F8NBbCspSTTGcfBt4JH+bFm+d1ERAdEvxkja/XVcausTXLZ+wCTYYPyncJ7Tgc5QKqgjABC44WjYG3wAbbKodtS2Ln6fBXrLr4eWs+SuuQDXpD0JUP3VXCpnfDiWoBq/IU2CX+PJ+fRpgq/jyf5+2sQYQfIvJ0pgvg5/O8X/dCOPB8/rcAAwCYg/48KKSLzAAAAABJRU5ErkJggg==',\r\n        srcDisabled:\r\n          'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTMyIDc5LjE1OTI4NCwgMjAxNi8wNC8xOS0xMzoxMzo0MCAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6N0I5RDUwM0YxNDY0MTFFNzk3NDdCQUI4RUM3OEIxOTEiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6N0I5RDUwNDAxNDY0MTFFNzk3NDdCQUI4RUM3OEIxOTEiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo3QjlENTAzRDE0NjQxMUU3OTc0N0JBQjhFQzc4QjE5MSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo3QjlENTAzRTE0NjQxMUU3OTc0N0JBQjhFQzc4QjE5MSIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Pr0qgOgAAAUKSURBVHja5FtLbExRGD4zZBYoRZsQgnhOa6HRxiNISkgaGwttQ73fVojnQqLFQkIt2DURj5RKioUIkUilHvVYkFSiLYZQEZI2rRabIuP/M9/ENTG9c8495/bO7Z98i07n/I9vzvnPf16Buro6YVjGEOYScghhwlTCKMIwQga+843QRfhCeE1oITQTHhM+mXRuoCG9+YQywlIEbScZwFhCQcL/mIxbhBrCMy8TwAFsI2wg5GrUGwZ2E5oI5whV6DWOJahBRyahnPCecEJz8ImSCxvvYTOzLwkIENYT3hAqCCOEezICNt/Ah0Av3432BlUCJhMeoDtmib6TLPjAvkxyqweUIBnNE94R9uU5fDNGAHezSkItYajwngyFb5U2Q0KJgBDhImGP8L7sga8hXdMgK7pOKBLpI2VIlMuc9gDuSmfTLPi4FMF3RwQcI6wS6SurnAyBYsIBTY60E+oJDajx3+Gz7/j/EMJITGU5yOqFbkyxgSSLoYmYVoY50P2LcBXd8C7ht2T7AYRFhI34MYysW4JJxv0FB8FzhXWZMIWwknBHIXiBNnegYzJ0Rt0gYB1hvqK+VnTdMtTruuQDdBbChjECeHFxXFEXj6U8wn2DQ5Z1z4AtIwTsJGQr6KnF2r/Thcz+FbZqdRPAmXiHgg5OcGsIPS5Obz2weVcnAdsVlrQfkKHdDN5KQjF8cLwjxJl/q0K2X+tCt4+aVB7vAXMxbclIjeGE54oELWt82SLnoPCBBC0LBxm55nTseYkA3ooOS7Y7I3wiTMAcxYWNbwjIk2xTjxzgGwJyJNs8FD4SrgPGS7ZpcdnHgOkeMFqyzTs/9QAmIEOyTVt/J+CH3wjo18IEyB4zD+7vBGT7jYDPkm0m+o0A2UVN2G8ENEu2me/heGaLFA9FrQS8kDRSKMxdrnIifJByAz36kIjdREuJgMeShrJAgtdkIRI0B34YRPAx+Sw7Aj4SXkka2+RBAjYn/M1DgQ9HnxKeiNjBSihZIXRb0lixwiLKpLAvy21ywyX0inLr8IgTcEVhFXnUQwQcSTEvceAVICJsJeARISJpdLVHZoQFInZIIiOt8WEfJ4D33qsU1umcZIb3YfBsu1phz6AKMf+zGOIPOxXG3lXZuVeThGBbNhd1Wn9sKwG8Jjil4Mgi/Aohl4Ovhm1ZOW1d/yQuh08pbniUEm4KDXd3U5BM2CpVaNsGApLuB/DRs+q9oMWERiQlkwmvEbZUhGPrsNsQOS9il5lUZBzhHuZcnXXCeHT5e7ChIg2ITdgRwNmRr8l0KRoKoOriaZXv9SxBna5S2y+GjgimXdUd4i7EFP1fQfM/eUvYIpzdwmDdKwAee/WoN5qgn7tiN77L93z5bkLiNTldmy9bYFOkSkC8OuTHCfs0OMCBlAiF29wapLK3SjeYQtK4lMb7Hez7frvVYG/CY2ajwmLJC3IbvkedEMDCd3H41nVNGgVfA59t7y6lei7Qgyx8Mg2CPwlfU7q4JXMwwl1pLyqwbg8G3g3f9gqJi1UqJ0OcUfMdFEsmhH2ZqbCvoXw0FkFZykmmvQ8Db4cPC5LN86YIiA8JfrLG1+sOJ9bYhqUDu0BT4IPyXUIdh6O8gKogTEDR1Gww8GbYYFvlsO1IdJ4Of0PVxc9bC7C0jmjQG4GuAuiuFJreDduVwk7kGbBL/H0+P50wTfx9Ps/bWYMIP0Xs6UwnwM/neb/upXDh+fwfAQYAYEICJn4ewqwAAAAASUVORK5CYII=',\r\n      },\r\n    };\r\n\r\n    this.toggleColumnsAction = {\r\n      id: 'toggle',\r\n      label: 'LBL_TOGGLE_COLUMNS',\r\n      onClick: () => {\r\n        this.table.toggleModal.openModal();\r\n      },\r\n      canEnable: () => !this.disabled,\r\n      img: {\r\n        // 64_tableSettings\r\n        src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTVGREZDNjlGMjA5MTFFOEEwRkNBRUQ3Q0ZCRkE0NDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTVGREZDNkFGMjA5MTFFOEEwRkNBRUQ3Q0ZCRkE0NDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFNUZERkM2N0YyMDkxMUU4QTBGQ0FFRDdDRkJGQTQ0MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFNUZERkM2OEYyMDkxMUU4QTBGQ0FFRDdDRkJGQTQ0MiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Phm2RQMAAAM2SURBVHja7JpLaxRBEMdnJY+Dm4uCCoIHH6CoiWguQVTwlBhBvETyCUKil8S7foNVBNdEFC+6qDkYRI0eVNCLGh/J5uAD4sEniOvFKKyRrP8yNTIO8+g2cbtnpwp+kOnpqUr/p6e7qtnMtl2dFSfZlpnPw4uclJsIIAKIACKACJBmq5vvPiozQAQQARK/BkgtIJ+ACCACiAAigAggAogAIoAIIAKIACKACJC+84Ak2CwYA3fBY/AKvAffal2Ad+AkuADepmkGlMARcAb8SNsncBkcBJ/Ttgj+BL3gQMTglztzZ5hRrEiiAN/BfjAY069ZwdfmpAlAb74bXFPoqyJAS9IEOASuKvZtWSCRrBHgEhjyXC8B+0Djf5gBjex7qS0ClPjte+0oGAEfQB60cfsqUNBYAwr8jMM+8uxzhLfXP5Yx+CuxXt+itx4UQb2v3xRYBpo0/U+DT2B1wJpDIr0wOQPegLO+tlzA4MnW/MPgybIBg3dzn5zpT+AUmPFct4OOKsbvcOOZEIAKm/Nhb6SKRjHrTAgwxkWOa31gg8bzVBuc4MWtiWnjNp26gdacPhO1wB3fdZfGs1QC7wXjvvYHzDlOqFYq+usyMQOe+K7p+x9WfPNBg/ca3esEZQV/FLPdhAAvA7YrKoAGeIsKs6GYwbs2AU7HpN6HOea0CQE+BrRRLnIM7PbtDl4raMQI6zvDMXIc08gu8DXi3n3eJYLsqUaMZyHtFY7x1xZUi78TrE/igQjZjogXslXDz6aYGFYK0A9ug4aQ+90avsL6NvA23G+TAFkui3MxU7dH4zygJ+K+m3lSzKwNAowqJkNUz18HW2LOAm5EnCf4E7BbNggwrNGXMryH4DhoBYuZVm57pJEF/j6QofMA0wLQlJzk3LyaRucBzbYcig4YiEsxZ2zZBUaZatlNN55N22BYLTAVkz2GGdUYr+NmnE0C0DeZ57+/cPGzHazjxOaio/bL9gr33QjWso9B9ulwjOduZxsWQa/RkfVO3srKIeVuXC5QDOlDW+MecM+ZO5G2MhWmf+xKRD1fVCyHg6zMvks21wKOwtuNs0kdh0kTYEKhz3gtC7DgM+CXAAMAjWalwvYBluIAAAAASUVORK5CYII=',\r\n        srcDisabled:\r\n          'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RTVGREZDNjlGMjA5MTFFOEEwRkNBRUQ3Q0ZCRkE0NDIiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RTVGREZDNkFGMjA5MTFFOEEwRkNBRUQ3Q0ZCRkE0NDIiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpFNUZERkM2N0YyMDkxMUU4QTBGQ0FFRDdDRkJGQTQ0MiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpFNUZERkM2OEYyMDkxMUU4QTBGQ0FFRDdDRkJGQTQ0MiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/Phm2RQMAAAM2SURBVHja7JpLaxRBEMdnJY+Dm4uCCoIHH6CoiWguQVTwlBhBvETyCUKil8S7foNVBNdEFC+6qDkYRI0eVNCLGh/J5uAD4sEniOvFKKyRrP8yNTIO8+g2cbtnpwp+kOnpqUr/p6e7qtnMtl2dFSfZlpnPw4uclJsIIAKIACKACJBmq5vvPiozQAQQARK/BkgtIJ+ACCACiAAigAggAogAIoAIIAKIACKACJC+84Ak2CwYA3fBY/AKvAffal2Ad+AkuADepmkGlMARcAb8SNsncBkcBJ/Ttgj+BL3gQMTglztzZ5hRrEiiAN/BfjAY069ZwdfmpAlAb74bXFPoqyJAS9IEOASuKvZtWSCRrBHgEhjyXC8B+0Djf5gBjex7qS0ClPjte+0oGAEfQB60cfsqUNBYAwr8jMM+8uxzhLfXP5Yx+CuxXt+itx4UQb2v3xRYBpo0/U+DT2B1wJpDIr0wOQPegLO+tlzA4MnW/MPgybIBg3dzn5zpT+AUmPFct4OOKsbvcOOZEIAKm/Nhb6SKRjHrTAgwxkWOa31gg8bzVBuc4MWtiWnjNp26gdacPhO1wB3fdZfGs1QC7wXjvvYHzDlOqFYq+usyMQOe+K7p+x9WfPNBg/ca3esEZQV/FLPdhAAvA7YrKoAGeIsKs6GYwbs2AU7HpN6HOea0CQE+BrRRLnIM7PbtDl4raMQI6zvDMXIc08gu8DXi3n3eJYLsqUaMZyHtFY7x1xZUi78TrE/igQjZjogXslXDz6aYGFYK0A9ug4aQ+90avsL6NvA23G+TAFkui3MxU7dH4zygJ+K+m3lSzKwNAowqJkNUz18HW2LOAm5EnCf4E7BbNggwrNGXMryH4DhoBYuZVm57pJEF/j6QofMA0wLQlJzk3LyaRucBzbYcig4YiEsxZ2zZBUaZatlNN55N22BYLTAVkz2GGdUYr+NmnE0C0DeZ57+/cPGzHazjxOaio/bL9gr33QjWso9B9ulwjOduZxsWQa/RkfVO3srKIeVuXC5QDOlDW+MecM+ZO5G2MhWmf+xKRD1fVCyHg6zMvks21wKOwtuNs0kdh0kTYEKhz3gtC7DgM+CXAAMAjWalwvYBluIAAAAASUVORK5CYII=',\r\n      },\r\n    };\r\n  }\r\n\r\n  ngOnInit() {\r\n    if (this.tableEvents)\r\n      this.tableEventsSubscription = this.tableEvents.subscribe(\r\n        (methodToBeCalled: string) => {\r\n          if (methodToBeCalled === 'applyLastActiveFilterFromSessionStorage')\r\n            this.applyLastActiveFilterFromSessionStorage();\r\n          if (methodToBeCalled === 'saveActiveFilterInSessionStorage')\r\n            this.saveActiveFilterInSessionStorage();\r\n          if (methodToBeCalled === 'removeAllFilters') this.removeAllFilters();\r\n          if (methodToBeCalled === 'resetActiveFilterInSessionStorage')\r\n            this.resetActiveFilterInSessionStorage();\r\n        }\r\n      );\r\n    if (this.activeFilters && this.activeFilters.length)\r\n      this.table.isFirstFetchActivated = false;\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    const tableFilteringConfigChange = changes['tableFilteringConfig'];\r\n    if (\r\n      tableFilteringConfigChange &&\r\n      tableFilteringConfigChange.currentValue !== undefined\r\n    ) {\r\n      this.filters = this.tableFilteringConfigSvc.getConfiguration(\r\n        this.tableFilteringConfig\r\n      ); // TODO\r\n      this.ngAfterViewInit();\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // Add the save filter as button after the table is properly initialized in order to use its id\r\n    if (this.filters.length) {\r\n      this.filtersActions = [\r\n        {\r\n          id: this.table.id + '-saveFilterAs',\r\n          label: 'LBL_SAVE_FILTER_AS',\r\n          onClick: () => {\r\n            if (this.checkIfAnyFilterWasApplied())\r\n              this.showFilterNameInput = true;\r\n          },\r\n          canEnable: () => {\r\n            return this.checkIfAnyFilterWasApplied();\r\n          },\r\n          img: {\r\n            // 64_saveFilterAs, 64_saveFilterAs_inactive\r\n            src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABiUlEQVR4nO2aQW7CMBBFB4sDcImKA3TDjg3qpkdiz6GqnqAnoLfoDUBqFBX1j4PGxGbiP09i82RE+LJnJlFWr/t3cc7lwctbgbkhgSEjAgBDRgQAhoz1Av6uVsVznUFbOwn9DogAwJAxRw3IncdnYL4W+h0QAYAhIwIAQ0bNSdA8lRnIVfup31S/Q78DIgAwZEQAYMio2QXUqluZuBewEgGAISMCAEPGHF1gav6uRa7ax1NhKxEAGDJua8D/c3XvPNVe3wT6HRABgCGjNIAXMLpzT0kAWxH5Aju4LVjnlARwEpEN2MGdwHYYwAHMH29gnBNFEMx9PidWfIBxTkkARxH5ATu4I9jHuSifHJa1v5QEcBaRHdjBncE6ZwxA6+GaG/kGo7tFBNBVX7eSeuvrVlJvfd3KUt8UnY3UW1+3kp7Q112ReuvrVsY5QOvhmitFmyk015wWN0Ou54wWAbieM1oE4HrOiOcBYObH9ZzRIgDXc0aLAFzPGa1qgDZTaK45UQTBkMEdgIhcAeiGO0DFWr3nAAAAAElFTkSuQmCC',\r\n            srcDisabled:\r\n              'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABhUlEQVR4nO2a4W3CMBCFD6sDsETFCgxQdSn+M1TVLMAEsEU3oFKjCNR3DjoTm4vffRJ/PhkRnuy7S5TNMAzinOuTl7cBc0cCQ0YEAIaMCAAMGW8r+LtaFc91Bm3tLPQ7IAIAQ8YSNSB3Hl+B+Vrod0AEAIaMCAAMGTUnQfNUZiBX7ed+U/0O/Q6IAMCQEQGAIaNmF1CrbmXiXsBKBACGjAgADBlLdIG5+bsWuWofT4WtRABgyLivAf/P1aPzVHt9E+h3QAQAhozSAN7B6M49JQHsROQEdnQ7sM4pCeAoIluwozuC7TCADzA3PsE4J4ogmMd8z6z4AuOckgAOIvIDdnQHsM9zVT45LGv/KAngLCJ7sKM7g3XOFIDWwzU3cQGju1UE0FVft5J66+tWUm993cpa3xRdjNRbX7eSXtDXXZF66+tWpjlA6+GaK0WbKTTXnBY3Q67njBYBuJ4zWgTges6I5wFglsf1nNEiANdzRosAXM8ZrWqANlNorjlRBMGQwR2AiPwCybs8ugSp9U4AAAAASUVORK5CYII=',\r\n          },\r\n        },\r\n        {\r\n          id: this.table.id + '-saveFilter',\r\n          label: 'LBL_SAVE_FILTER',\r\n          onClick: () => {\r\n            if (\r\n              this.savedFilterConfigurations.filter(\r\n                (sf) => sf.isActive === true\r\n              ).length\r\n            ) {\r\n              let savedFilter = this.savedFilterConfigurations?.find(\r\n                (f: LocalStorageFilter) => f.isActive === true\r\n              );\r\n              this.saveFilteringConfiguration(savedFilter);\r\n            }\r\n          },\r\n          canEnable: () => {\r\n            return !!this.savedFilterConfigurations.filter(\r\n              (sf) => sf.isActive === true\r\n            ).length;\r\n          },\r\n          img: {\r\n            // 64_saveFilter\r\n            src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACgElEQVR4nO2aPU7DQBBGv6wQHIIi4QT8SaEMtHADqlRwJjqouADUQJkGAeIAScEhgAI0kpcYj3e9tsf2rJPXIGZWkb9HiGeSDA4nZ0jxg3wGuVU32h7HiXE1VoW1AFZZMdYCWGXFaELAJquE9TpBWsA2gBmrLpklZ3opgP66dwD2WGcJ9e4BbLFOR0gKuCwIb9kFcMGqPRBwzipuypxtFEkBB6ziZt/ZaZmuboPfrNIRkgKeWcXNu7PTMpICblnFTZmzjSIp4ArAK6ty3pKzKpAU8AmA3lx4YZ0lJOg0OauCDeGL+ABw5Ak4BvDFqh2Sfgb45nRfL4svoK/XCVZAdDO8FCbWGV4KE+sML4WJdYaXwsQ6w0tRdg5QM8NLYWKd4aUwsc7wUphYZ3gpTKwzvBR2F4huhpcifRfwBfT1msK3f/h6pdD6yVBru4lGAa3uJhoFtLqbaBTQ6m6iUUCru0nsH4/X3k00Cmh1N9EooIndZAjgAcAo29AoQHo3ofCPAI7zJGgUILmb2PA29CgrQeuLoN1NXIyTMz6y4S3/JGi+C/j2D18PnvCWPwl9/JZYUXgL9a/7JiA0PLEAMO2TgLLh6a4w74uASuHpF40C7NAyZJ18Kocnsh+PS30Pv+rjpMPQz530xeZQKzyh6RlQOLQUnPeRG57QIsAVxiXBdT4PZ3hCg4DgoSXwfBpveEKDgJvAoYUkTCTDExoETIsuMmEkHZ7QIIAu8iRQQgjB4QktL4JSEkqFJzTdButKKB2e0DYJVpVQKTyhcRS2Ehask0/l8ITWZWgeGKpWeELzNlj071A7PKF9HXZJEAlPxPB+QFaCWHgiljdErIQnyfAA8AvRw6Eijq/LXAAAAABJRU5ErkJggg==',\r\n            srcDisabled:\r\n              'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAACgElEQVR4nO2aPU7DQBBGv6wQHIIi4QT8FKEEWrgBVSo4Ex1UXADKCCjTIEAcICk4BFCARvIS4/Gu1/bYnnXyGsTMKvL3CPFMksF0OkWKH+QzyK260fY4ToyrsSqsBbDKirEWwCorRhMCNlklrNcJ0gK2AcxYdcksOdNLAfTXvQOwxzpLqHcPYIt1OkJSwGVBeMsugAtW7YGAc1ZxU+Zso0gKOGAVN/vOTst0dRv8ZpWOkBTwzCpu3p2dlpEUcMsqbsqcbRRJAVcAXlmV85acVYGkgE8AZwBeWGcJCTpNzqpgQ/giPgAcegKOAXyxaoeknwG+Od3Xy+IL6Ot1ghUQ3QwvhYl1hpfCxDrDS2FineGlMLHO8FKUnQPUzPBSmFhneClMrDO8FCbWGV4KE+sML4XdBaKb4aVI3wV8AX29pvDtH75eKbR+MtTabqJRQKu7iUYBre4mGgW0uptoFNDqbhL7x+O1dxONAlrdTTQKaGI3GQJ4ADDKNjQKkN5NKPwjgOM8CRoFSO4mNrwNPcpK0PoiaHcTF+PkjI9seMs/CZrvAr79w9eDJ7zlT0IfvyVWFN5C/eu+CQgNTywATPokoGx4uivM+yKgUnj6RaMAO7QMWSefyuGJ7MfjUt/Dr/o46TD0cyd9sTnUCk9oegYUDi0F533khie0CHCFcUlwnc/DGZ7QICB4aAk8n8YbntAg4CZwaCEJR5LhCQ0CJkUXmTCSDk9oEEAXeRIoIYTg8ISWF0EpCaXCE5pug3UllA5PaJsEq0qoFJ7QOApbCQvWyadyeELrMjQPDFUrPKF5Gyz6d6gdntC+DrskiIQnYng/ICtBLDwRyxsiVsKTZHgA+AWy+KKcIhVnfgAAAABJRU5ErkJggg==',\r\n          },\r\n        },\r\n        {\r\n          id: this.table.id + '-clearFilter',\r\n          label: 'LBL_CLEAR_FILTER',\r\n          onClick: () => {\r\n            this.removeAllFilters();\r\n            if (\r\n              this.savedFilterConfigurations.filter(\r\n                (sf) => sf.isActive === true\r\n              ).length\r\n            )\r\n              this.getFilterConfigurationsFromLocalStorage();\r\n          },\r\n          canEnable: () => {\r\n            let activeFilters = this.getActiveFilters();\r\n            if (\r\n              activeFilters.length > 0 ||\r\n              this.globalFilterOnTableWasApplied ||\r\n              this.checkIfAnyFilterWasApplied()\r\n            )\r\n              return true;\r\n            return false;\r\n          },\r\n          img: {\r\n            // 64_close2, 64_close2_inactive\r\n            src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMDY4MDc2Zi1iZDdmLTEzNDYtOGM4Ny0yNmEzODc2YjYxNDMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6RDRGREM1OUQxRTIyMTFFOUJGRkQ4RkUxODE4QUI5N0UiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6RDRGREM1OUMxRTIyMTFFOUJGRkQ4RkUxODE4QUI5N0UiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NGY0ZjVhYzAtOWNhYy02YzQ1LWIzZWQtNDVmNGJhOThjMzhhIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MzMwNDhjMjgtZWU5OC0xMWU2LTgxYTYtZmQ5YWVjZjc2MjFiIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+qDEilwAAAhVJREFUeNrU201OwzAQhmHX5BSsWHEBDkD3HKrOzdqTAZYSKYoSxzOeb34socLCoPchalxHnr6+f9LJeCyvc4o9mh1TY1LZ/DwHjm92vL1/fF5Nui+vr+Dxhx17gP2kqAjdHVuAs0nREEgdK8DVpCgI5I4K0DvJOwKrI/9/3Rh/rGxuLxHj13GrV8BzQbgTJ3u5Erjx9ZZY1veAqAhD8fu7QDSE4fijdUAUBJH4s5WgdwSx+DMAzwii8S0Ajwji8VcAnhAg8T0AHhBg8b0AlgjQeAqABQI8ngqgiaASzwHQQFCL5wIgEVTjRwAQCOrxowCSCCbxdUwCi5SyieDMS1bxUgBSCOrxdWTBtXpJOg9QxOKlATQQROMRAEgE8XgUAAIBEo8EkESAxaMBJBCg8RoAdfwazXUB8Bj8D5YEfgKVHcerIGTn8XCEHCAeipCDxMMQcqB4CEI2jp+Z6wQxhMk4vux+D+ej9NBqc3RHSCr+mYwevowASG9jmSBwAVB7eOoIHAD0BqYqAhVAa/dWDYECoL11rYLQC2C1bw9H6AEwe2ihgXAFYB0PR2gBeImHIpwBeIuHIfScGPESD0HoPTHiJV4cgXJixEu8KAL1xIiXeDEEzokRL/EiCNwTI17it5sjnI0R1okRb/HcK4F1YsRrPBWBdWLEezyro/fESJR4ckfPiZFo8aSOqfGuevR9tHHZ8SfAAJf46QjGOwUtAAAAAElFTkSuQmCC',\r\n            srcDisabled:\r\n              'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA4RpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDowMDY4MDc2Zi1iZDdmLTEzNDYtOGM4Ny0yNmEzODc2YjYxNDMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6REZGQ0Y2NEQxRTIyMTFFOTg2NURFNkVCMkI3RkY5Q0IiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6REZGQ0Y2NEMxRTIyMTFFOTg2NURFNkVCMkI3RkY5Q0IiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6NGY0ZjVhYzAtOWNhYy02YzQ1LWIzZWQtNDVmNGJhOThjMzhhIiBzdFJlZjpkb2N1bWVudElEPSJhZG9iZTpkb2NpZDpwaG90b3Nob3A6MzMwNDhjMjgtZWU5OC0xMWU2LTgxYTYtZmQ5YWVjZjc2MjFiIi8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+08ajZwAAAdFJREFUeNrU21tugzAQhWFz5H1jFsbaUiGlEkIB7PGcufilysO0+v44JSHysu97uVnr9+dWcq9HR30YaqfHW2L8owMdQ+1UMTP+pwMvQ1kjdDvQMZQtwpADnUNZIgw76sDQeTjiP0aR49gBi+CPRdsJo/j/teA7uCWOIMUf5oYTJmOEKfz1KpAtwjT+1/uALBFU8HfvBKNHUMPfBYgcQRX/FCBiBHX8W4BIESj4ngARItDwvQE8I1DxIwE8ItDxowEsI5jgJQEsIpjhpQGYEUzxMwEYEczxswE0I7jgj1UVrtPthJDMFS+8VgCtCOZ4jZeAxsvBDa8dwCKCKp4RgBlBHc8KwIhAwTMDaEag4dkBNCJQ8RYBjvVxmg0RYJ18BmfvJ7gGWJW2LzUCguPpEZAAT42AJHhaBCTCUyLAGb8V5+8dqjO+XX6P5KP05rkDtPDNaycgAN41AoLg3SIgEN4lAoLhzSMgIN40AoLizSIgMN4kAoLj6RGQAE+NgCR4WgQkwlMiIBlePQIS4lUjICleLUJNjL/eFxDdT5CeGImCn90JohMj0fDSCKITI1HxReoYOTESHS9y9J4YyYIfdvScGMmGH3LUl0tLSYrvdvwJMAAPi9rJmWkpJwAAAABJRU5ErkJggg==',\r\n          },\r\n        },\r\n      ];\r\n      this.cdr.detectChanges();\r\n    }\r\n    /* Fetch the saved filters for the current user */\r\n    if (this.table && this.table.sortingAndFilteringBuilder) {\r\n      this.currentUser =\r\n        sessionStorage.getItem('currentUser') || 'tableSettings';\r\n      this.getFilterConfigurationsFromLocalStorage();\r\n      this.savedFilterConfigurations.map((sf) => (sf.isActive = false));\r\n\r\n      if (this.activeFilters && this.activeFilters.length) {\r\n        this.filters = this.activeFilters;\r\n        this.saveActiveFilterInSessionStorage();\r\n        this.applyLastActiveFilterFromSessionStorage();\r\n        this.table.applyFilter(\r\n          this.table.sortingAndFilteringBuilder,\r\n          this.table.sortField,\r\n          this.table.sortMode,\r\n          this.table.limit\r\n        );\r\n        // Use set timeout to not trigger ExpressionChangedAfterViewChecked error\r\n        setTimeout(() => {\r\n          this.activeFiltersChange.emit([]);\r\n        }, 0);\r\n      }\r\n    }\r\n\r\n    if (this.table && this.table.sortingAndFilteringBuilder)\r\n      this.initialTableBuilder = new SortingAndFilteringParamsBuilder(\r\n        this.table.sortingAndFilteringBuilder\r\n      );\r\n  }\r\n\r\n  removePath(src: string) {\r\n    if (src.lastIndexOf('/') !== -1) {\r\n      return src.substring(src.lastIndexOf('/'));\r\n    }\r\n    return src;\r\n  }\r\n\r\n  onEnterButton(evt: MouseEvent, srcDisabled?: string) {\r\n    const anchor = <HTMLAnchorElement>evt.target;\r\n    anchor.classList.add('hover');\r\n  }\r\n\r\n  onLeaveButton(evt: MouseEvent, srcDisabled?: string) {\r\n    const anchor = <HTMLAnchorElement>evt.target;\r\n    anchor.classList.remove('hover');\r\n  }\r\n\r\n  getActiveFiltersRecursively(\r\n    filters: TableFilter[],\r\n    activeFilters: TableFilter[]\r\n  ): any {\r\n    filters.forEach((f) => {\r\n      if (f.isActive && (f.subFilters === undefined || !f.subFilters.length))\r\n        activeFilters.push(f);\r\n      if (f.subFilters && f.subFilters.length)\r\n        return this.getActiveFiltersRecursively(f.subFilters, activeFilters);\r\n    });\r\n  }\r\n\r\n  getActiveFilters(): TableFilter[] {\r\n    let activeFilters: TableFilter[] = [];\r\n    this.getActiveFiltersRecursively(this.filters, activeFilters);\r\n    return activeFilters;\r\n  }\r\n\r\n  /**\r\n   * When opening a filter, clear what was entered before and was not saved; show what was saved, if any.\r\n   */\r\n  resetFilter() {\r\n    let aFilters = this.getActiveFilters();\r\n    aFilters.forEach((f) => {\r\n      if (f.type === 'string' && f.searchValues) {\r\n        if (!f.wasApplied)\r\n          f.searchValues = [\r\n            {\r\n              currentValue: '',\r\n              previousValue: '',\r\n              enteredPreviousSearch: false,\r\n            },\r\n          ];\r\n        else\r\n          f.searchValues = f.searchValues.filter((sv) => {\r\n            if (sv.enteredPreviousSearch) {\r\n              sv.currentValue = sv.previousValue || '';\r\n              return true;\r\n            } else return false;\r\n          });\r\n      } else if (f.type === 'checkbox' && f.possibleValues) {\r\n        f.possibleValues.forEach((pv) => {\r\n          if (pv.enteredPreviousSearch !== pv.isSelected) {\r\n            pv.isSelected = pv.enteredPreviousSearch;\r\n          }\r\n        });\r\n      } else if (f.type === 'date') {\r\n        if (f.wasApplied) {\r\n          f.rangeDates = f.alreadySearchedForRangeDates;\r\n        } else if (f.rangeDates) {\r\n          f.rangeDates = undefined;\r\n        }\r\n      } else if (\r\n        f.type === 'boolean' &&\r\n        f.selectedValue?.currentValue &&\r\n        f.selectedValue.previousValue\r\n      )\r\n        f.selectedValue.currentValue = f.selectedValue.previousValue;\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Toggle isActive property for a given filter\r\n   * @param filter\r\n   */\r\n  afterFilterToggleOff(filter: TableFilter, noFetch?: boolean) {\r\n    if (!filter.isActive) {\r\n      this.removeFilter(filter, noFetch);\r\n    }\r\n    filter.additionalPropertiesForSearch = [];\r\n    this.setTableFilterWasAppliedProp();\r\n  }\r\n\r\n  /**\r\n   * Add input in order to search by multiple values when the filter type is string\r\n   * @param values\r\n   */\r\n  addInput(\r\n    values: {\r\n      currentValue: string;\r\n      previousValue?: string;\r\n      enteredPreviousSearch: boolean;\r\n    }[]\r\n  ) {\r\n    values.push({\r\n      currentValue: '',\r\n      previousValue: '',\r\n      enteredPreviousSearch: false,\r\n    });\r\n  }\r\n\r\n  /**\r\n   * Remove input if the user wants to search only by one value and there are two inputs added\r\n   * @param event\r\n   * @param filter\r\n   * @param index\r\n   */\r\n  removeInput(event: any, filter: TableFilter, index: number) {\r\n    if (filter.wasApplied) {\r\n      let sortingAndFilteringBuilder = this.table.sortingAndFilteringBuilder;\r\n      if (!sortingAndFilteringBuilder)\r\n        throw new Error(\r\n          'Filtering cannot be performed on this table, the sorting and filtering builder does not exist!'\r\n        );\r\n      // TODO: Can we search/filter without backend?\r\n      let valuesToRemoveFromFilter =\r\n        filter.searchValues\r\n          ?.filter((v) => v.currentValue !== '')\r\n          .map((v) => {\r\n            v.enteredPreviousSearch = false;\r\n            return v.currentValue;\r\n          })\r\n          .map((v) => encodeURIComponent(v)) || [];\r\n      sortingAndFilteringBuilder.removeParameterExplicitly(\r\n        'filterContains',\r\n        valuesToRemoveFromFilter,\r\n        filter.properties || []\r\n      );\r\n\r\n      filter.searchValues?.splice(index, 1);\r\n\r\n      let valuesToSearchFor =\r\n        filter.searchValues\r\n          ?.filter((v) => v.currentValue !== '' && v.currentValue)\r\n          .map((v) => {\r\n            v.enteredPreviousSearch = true;\r\n            v.previousValue = v.currentValue;\r\n            return v.currentValue;\r\n          })\r\n          .map((v) => encodeURIComponent(v)) || [];\r\n      sortingAndFilteringBuilder.setFilterContains(\r\n        valuesToSearchFor,\r\n        filter.properties\r\n      );\r\n    } else filter.searchValues?.splice(index, 1);\r\n    event.stopImmediatePropagation();\r\n  }\r\n\r\n  /**\r\n   * Remove individual column filter\r\n   * @param filter\r\n   */\r\n  removeFilter(filter: TableFilter, noFetch?: boolean) {\r\n    if (filter.wasApplied) {\r\n      let sortingAndFilteringBuilder = this.table.sortingAndFilteringBuilder;\r\n      if (!sortingAndFilteringBuilder) {\r\n        throw new Error(\r\n          'Filtering cannot be performed on this table, the sorting and filtering builder does not exist!'\r\n        );\r\n      }\r\n      var valuesAlreadySearchedFor: string[] = [];\r\n      var propertiesAlreadySearchedIn: string[] = [];\r\n      switch (filter.type) {\r\n        case 'string':\r\n          valuesAlreadySearchedFor =\r\n            filter.searchValues\r\n              ?.filter(\r\n                (v) =>\r\n                  v.previousValue &&\r\n                  v.previousValue !== '' &&\r\n                  v.enteredPreviousSearch === true\r\n              )\r\n              .map((v) => {\r\n                v.enteredPreviousSearch = false;\r\n                return v.previousValue;\r\n              })\r\n              .map((v: any) => encodeURIComponent(v)) || [];\r\n          let properties = filter.properties || [];\r\n          let additionalProperties =\r\n            filter.additionalPropertiesForSearch\r\n              ?.filter((p) => p.enteredPreviousSearch === true)\r\n              .map((p) => p.prop) || [];\r\n\r\n          propertiesAlreadySearchedIn = [\r\n            ...properties,\r\n            ...additionalProperties,\r\n          ];\r\n          if (filter.negation?.currentValue)\r\n            sortingAndFilteringBuilder.removeParameterExplicitly(\r\n              'filterContains',\r\n              valuesAlreadySearchedFor,\r\n              propertiesAlreadySearchedIn\r\n            );\r\n          else\r\n            sortingAndFilteringBuilder.removeParameterExplicitly(\r\n              'filterNotContains',\r\n              valuesAlreadySearchedFor,\r\n              propertiesAlreadySearchedIn\r\n            );\r\n          filter.searchValues = [\r\n            {\r\n              currentValue: '',\r\n              previousValue: '',\r\n              enteredPreviousSearch: false,\r\n            },\r\n          ];\r\n          filter.additionalPropertiesForSearch?.map(\r\n            (p) => (p.enteredPreviousSearch = false)\r\n          );\r\n          break;\r\n        case 'checkbox':\r\n          valuesAlreadySearchedFor =\r\n            filter.possibleValues\r\n              ?.filter((v) => v.enteredPreviousSearch === true)\r\n              .map((v) => v.value) || [];\r\n          sortingAndFilteringBuilder.removeParameterExplicitly(\r\n            'filterEquals',\r\n            valuesAlreadySearchedFor,\r\n            filter.properties || []\r\n          );\r\n          filter.possibleValues?.map((v) => {\r\n            v.isSelected = false;\r\n            v.enteredPreviousSearch = false;\r\n          });\r\n          break;\r\n        case 'date':\r\n          let isoStringDates: string[] =\r\n            filter.alreadySearchedForRangeDates?.map((d) => {\r\n              if (typeof d === 'string') {\r\n                return new Date(d).toISOString();\r\n              }\r\n              return d.toISOString();\r\n            }) || [];\r\n          sortingAndFilteringBuilder.removeParameterExplicitly(\r\n            'filterRange',\r\n            isoStringDates,\r\n            filter.properties || []\r\n          );\r\n          filter.alreadySearchedForRangeDates = [];\r\n          filter.rangeDates = undefined; // Clear the selected dates from calendar (Bug 198678)\r\n          break;\r\n        case 'boolean':\r\n          let previous;\r\n          if (filter.selectedValue)\r\n            previous = [filter.selectedValue.previousValue.toString()];\r\n          else previous = undefined;\r\n          sortingAndFilteringBuilder.removeParameterExplicitly(\r\n            'filterEquals',\r\n            previous,\r\n            filter.properties\r\n          );\r\n          if (filter.selectedValue) {\r\n            filter.selectedValue.previousValue = undefined;\r\n            filter.selectedValue.currentValue = undefined;\r\n          }\r\n\r\n          break;\r\n      }\r\n      filter.wasApplied = false;\r\n      this.setTableFilterWasAppliedProp();\r\n      if (!noFetch) {\r\n        this.table.applyFilter(\r\n          sortingAndFilteringBuilder,\r\n          undefined,\r\n          undefined,\r\n          undefined,\r\n          true\r\n        );\r\n\r\n        this.clickIndividualFilterDropdownButton(filter.id);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Remove all column filters AND also the global table filter\r\n   */\r\n  removeAllFilters() {\r\n    /* No need to do another GET with clean filters if they are already clean */\r\n    const filters = this.getActiveFilters();\r\n    if (\r\n      (!filters || filters.length === 0) &&\r\n      !this.globalFilterOnTableWasApplied\r\n    ) {\r\n      this.activeFilteringConfigurationName = undefined;\r\n      return;\r\n    }\r\n    this.resetActiveFilterInSessionStorage();\r\n    let remove = () => {\r\n      let activeFilters = this.getActiveFilters();\r\n      activeFilters.forEach((f) => {\r\n        f.isActive = false;\r\n        this.afterFilterToggleOff(f, true);\r\n      });\r\n    };\r\n\r\n    remove(); // Once for clearing all applied filters\r\n    remove(); // Once for clearing out the checkboxes\r\n\r\n    if (this.globalFilterOnTableWasApplied) this.removeGlobalSearchFilter();\r\n    this.activeFilteringConfigurationName = undefined;\r\n    this.table.applyFilter(\r\n      this.table.sortingAndFilteringBuilder,\r\n      undefined,\r\n      undefined,\r\n      undefined,\r\n      true\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Apply individual column filter\r\n   * @param filter\r\n   */\r\n  applyFilter(filter: TableFilter, noFetch?: boolean) {\r\n    if (!this.checkIfFilterCanBeApplied(filter)) {\r\n      let sortingAndFilteringBuilder = this.table.sortingAndFilteringBuilder;\r\n      if (!sortingAndFilteringBuilder)\r\n        throw new Error(\r\n          'Filtering cannot be performed on this table, the sorting and filtering builder does not exist!'\r\n        );\r\n      var valuesToSearchFor: string[] = [];\r\n      var valuesAlreadySearchedFor: string[] = [];\r\n      var properties: string[] = [];\r\n      var propertiesAlreadySearchedIn: string[] = [];\r\n      switch (filter.type) {\r\n        case 'string':\r\n          if (filter.wasApplied) {\r\n            valuesAlreadySearchedFor =\r\n              filter.searchValues\r\n                ?.filter(\r\n                  (v) =>\r\n                    ((v.currentValue !== '' && v.currentValue) ||\r\n                      (v.previousValue !== '' && v.previousValue)) &&\r\n                    v.enteredPreviousSearch === true\r\n                )\r\n                .map((v) => v.previousValue)\r\n                .map((v: any) => encodeURIComponent(v)) || [];\r\n            let additionalProps = filter.additionalPropertiesForSearch\r\n              ?.filter((p) => p.enteredPreviousSearch === true)\r\n              .map((p) => {\r\n                p.enteredPreviousSearch = false;\r\n                return p.prop;\r\n              });\r\n            propertiesAlreadySearchedIn = [\r\n              ...filter.properties,\r\n              ...additionalProps,\r\n            ];\r\n            if (filter.negation?.previousValue)\r\n              sortingAndFilteringBuilder.removeParameterExplicitly(\r\n                'filterContains',\r\n                valuesAlreadySearchedFor,\r\n                propertiesAlreadySearchedIn\r\n              );\r\n            else\r\n              sortingAndFilteringBuilder.removeParameterExplicitly(\r\n                'filterNotContains',\r\n                valuesAlreadySearchedFor,\r\n                propertiesAlreadySearchedIn\r\n              );\r\n          }\r\n\r\n          valuesToSearchFor =\r\n            filter.searchValues\r\n              ?.filter((v) => v.currentValue !== '' && v.currentValue)\r\n              .map((v) => {\r\n                v.enteredPreviousSearch = true;\r\n                v.previousValue = v.currentValue;\r\n                return v.currentValue;\r\n              })\r\n              .map((v) => encodeURIComponent(v)) || [];\r\n\r\n          let additionalProps = filter.additionalPropertiesForSearch\r\n            ?.filter((p) => p.isSelected)\r\n            .map((p) => {\r\n              p.enteredPreviousSearch = true;\r\n              return p.prop;\r\n            });\r\n          properties = [...filter.properties, ...additionalProps];\r\n          if (filter.negation?.currentValue)\r\n            sortingAndFilteringBuilder.setFilterContains(\r\n              valuesToSearchFor,\r\n              properties\r\n            );\r\n          else\r\n            sortingAndFilteringBuilder.setFilterNotContains(\r\n              valuesToSearchFor,\r\n              properties\r\n            );\r\n          filter.negation.previousValue = filter.negation?.currentValue;\r\n\r\n          if (filter.searchValues && filter.searchValues.length > 1)\r\n            filter.searchValues = filter.searchValues.filter(\r\n              (v) => v.currentValue\r\n            );\r\n\r\n          break;\r\n        case 'checkbox':\r\n          // In order to not perform and AND operation on filtering, remove the previous search and recreate if the user wants to add more values\r\n          // For example, the user selected Critical and applied search and then thought that he would want to see also the Warning devices\r\n          // So he selects Warning and presses apply again\r\n          // The sortingAndFilteringBuilder should not contain 2 filterEquals parameters but one with two values: Critical and Warning\r\n          // This is valid also for string searches\r\n          if (filter.wasApplied) {\r\n            valuesAlreadySearchedFor =\r\n              filter.possibleValues\r\n                ?.filter((v) => v.enteredPreviousSearch === true)\r\n                .map((v) => v.value) || [];\r\n            sortingAndFilteringBuilder.removeParameterExplicitly(\r\n              'filterEquals',\r\n              valuesAlreadySearchedFor,\r\n              filter.properties || []\r\n            );\r\n            filter.possibleValues?.map(\r\n              (v) => (v.enteredPreviousSearch = false)\r\n            );\r\n          }\r\n          valuesToSearchFor =\r\n            filter.possibleValues\r\n              ?.filter((v) => v.isSelected === true)\r\n              .map((v) => {\r\n                v.enteredPreviousSearch = true;\r\n                return v.value;\r\n              }) || [];\r\n          sortingAndFilteringBuilder.setFilterEquals(\r\n            valuesToSearchFor,\r\n            filter.properties\r\n          );\r\n          break;\r\n        case 'date':\r\n          if (filter.wasApplied) {\r\n            let isoStringAlreadySearchedForDates: string[] =\r\n              filter.alreadySearchedForRangeDates?.map((d) =>\r\n                d.toISOString()\r\n              ) || [];\r\n            sortingAndFilteringBuilder.removeParameterExplicitly(\r\n              'filterRange',\r\n              isoStringAlreadySearchedForDates,\r\n              filter.properties || []\r\n            );\r\n          }\r\n\r\n          if (filter.rangeDates) {\r\n            filter.rangeDates[0] = new Date(\r\n              filter.rangeDates[0].getFullYear(),\r\n              filter.rangeDates[0].getMonth(),\r\n              filter.rangeDates[0].getDate(),\r\n              this.startDateTime.getHours(),\r\n              this.startDateTime.getMinutes(),\r\n              0,\r\n              0\r\n            );\r\n            filter.rangeDates[1] = new Date(\r\n              filter.rangeDates[1].getFullYear(),\r\n              filter.rangeDates[1].getMonth(),\r\n              filter.rangeDates[1].getDate(),\r\n              this.endDateTime.getHours(),\r\n              this.endDateTime.getMinutes(),\r\n              0,\r\n              0\r\n            );\r\n\r\n            let isoStringDates: string[] =\r\n              filter.rangeDates?.map((d) => d.toISOString()) || [];\r\n            sortingAndFilteringBuilder.setFilterRange(\r\n              isoStringDates,\r\n              filter.properties\r\n            );\r\n            filter.alreadySearchedForRangeDates = filter.rangeDates;\r\n          }\r\n          break;\r\n        case 'boolean':\r\n          if (filter.wasApplied) {\r\n            sortingAndFilteringBuilder.removeParameterExplicitly(\r\n              'filterEquals',\r\n              [filter.selectedValue.previousValue.toString()],\r\n              filter.properties\r\n            );\r\n          }\r\n          sortingAndFilteringBuilder.setFilterEquals(\r\n            [filter.selectedValue.currentValue.toString()],\r\n            filter.properties\r\n          );\r\n          break;\r\n      }\r\n\r\n      filter.wasApplied = true;\r\n      this.setTableFilterWasAppliedProp();\r\n      if (!noFetch) {\r\n        this.table.applyFilter(sortingAndFilteringBuilder);\r\n\r\n        this.clickIndividualFilterDropdownButton(filter.id);\r\n      }\r\n      this.cdr.detectChanges();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Method used only when the filter values are not coming from the UI and we only need to apply the filters on the builder\r\n   */\r\n  applyFilterOnBuilder(\r\n    filter: TableFilter,\r\n    sortingAndFilteringBuilder: SortingAndFilteringParamsBuilder\r\n  ) {\r\n    let valuesToSearchFor = [];\r\n    switch (filter.type) {\r\n      case 'string':\r\n        valuesToSearchFor =\r\n          filter.searchValues\r\n            ?.filter((v) => v.currentValue !== '' && v.currentValue)\r\n            .map((v) => {\r\n              v.enteredPreviousSearch = true;\r\n              v.previousValue = v.currentValue;\r\n              return v.currentValue;\r\n            })\r\n            .map((v) => encodeURIComponent(v)) || [];\r\n        sortingAndFilteringBuilder.setFilterContains(\r\n          valuesToSearchFor,\r\n          filter.properties\r\n        );\r\n        break;\r\n      case 'checkbox':\r\n        valuesToSearchFor =\r\n          filter.possibleValues\r\n            ?.filter((v) => v.isSelected === true)\r\n            .map((v) => {\r\n              v.enteredPreviousSearch = true;\r\n              return v.value;\r\n            }) || [];\r\n        sortingAndFilteringBuilder.setFilterEquals(\r\n          valuesToSearchFor,\r\n          filter.properties\r\n        );\r\n        break;\r\n      case 'date':\r\n        filter.rangeDates = filter.rangeDates?.map((d) => new Date(d));\r\n        let isoStringDates: string[] =\r\n          filter.rangeDates?.map((d) => {\r\n            if (typeof d === 'string') {\r\n              return new Date(d).toISOString();\r\n            }\r\n            return d.toISOString();\r\n          }) || [];\r\n        sortingAndFilteringBuilder.setFilterRange(\r\n          isoStringDates,\r\n          filter.properties\r\n        );\r\n        filter.alreadySearchedForRangeDates = filter.rangeDates;\r\n        break;\r\n      case 'boolean':\r\n        sortingAndFilteringBuilder.setFilterEquals(\r\n          [filter.selectedValue.currentValue.toString()],\r\n          filter.properties\r\n        );\r\n        break;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Apply filtering configuration\r\n   * @param filteringConfiguration\r\n   */\r\n  applyAllFiltersFromTheFilteringConfiguration(\r\n    filteringConfiguration: LocalStorageFilter\r\n  ) {\r\n    // The filtering should be applied on the initial req (basically we remove all filters before applying new ones)\r\n    if (\r\n      this.table &&\r\n      this.table.sortingAndFilteringBuilder &&\r\n      !this.initialTableBuilder\r\n    ) {\r\n      this.initialTableBuilder = new SortingAndFilteringParamsBuilder(\r\n        this.table.sortingAndFilteringBuilder\r\n      );\r\n    }\r\n\r\n    let sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n      this.initialTableBuilder\r\n    );\r\n    if (!sortingAndFilteringBuilder)\r\n      throw new Error(\r\n        'Filtering cannot be performed on this table, the sorting and filtering builder does not exist!'\r\n      );\r\n\r\n    filteringConfiguration.filters.forEach((filter) => {\r\n      if (filter.wasApplied) {\r\n        this.applyFilterOnBuilder(filter, sortingAndFilteringBuilder);\r\n      }\r\n      if (filter.subFilters && filter.subFilters.length) {\r\n        filter.subFilters.forEach((filter) => {\r\n          if (filter.wasApplied)\r\n            this.applyFilterOnBuilder(filter, sortingAndFilteringBuilder);\r\n        });\r\n      }\r\n    });\r\n\r\n    if (filteringConfiguration.globalSearchValue) {\r\n      this.tableGlobalSearchValue.previousValue =\r\n        filteringConfiguration.globalSearchValue;\r\n      this.tableGlobalSearchValue.currentValue =\r\n        filteringConfiguration.globalSearchValue;\r\n      let columnsToSearchIn: string[] = [];\r\n      this.filters.forEach((filter) => {\r\n        columnsToSearchIn.push(...filter.properties);\r\n        if (filter.subFilters && filter.subFilters.length) {\r\n          filter.subFilters.forEach((subFilter) =>\r\n            columnsToSearchIn.push(...subFilter.properties)\r\n          );\r\n        }\r\n      });\r\n      sortingAndFilteringBuilder.setFilterContains(\r\n        [filteringConfiguration.globalSearchValue],\r\n        columnsToSearchIn\r\n      );\r\n      this.globalFilterOnTableWasApplied = true;\r\n    } else {\r\n      this.globalFilterOnTableWasApplied = false;\r\n      this.tableGlobalSearchValue.previousValue = '';\r\n      this.tableGlobalSearchValue.currentValue = '';\r\n    }\r\n\r\n    this.setTableFilterWasAppliedProp();\r\n    this.table.applyFilter(\r\n      sortingAndFilteringBuilder,\r\n      filteringConfiguration.sortField,\r\n      filteringConfiguration.sortMode,\r\n      filteringConfiguration.limit\r\n    );\r\n    this.markSavedFilterAsActive();\r\n  }\r\n\r\n  performGlobalSearchOnTable(noFetch?: boolean) {\r\n    if (this.tableGlobalSearchValue.currentValue) {\r\n      this.tableGlobalSearchValue.currentValue =\r\n        this.removeTrailingSpacesFromGlobalSearchValue(\r\n          this.tableGlobalSearchValue.currentValue\r\n        );\r\n\r\n      let sortingAndFilteringBuilder = this.table.sortingAndFilteringBuilder;\r\n      if (!sortingAndFilteringBuilder)\r\n        throw new Error(\r\n          'Filtering cannot be performed on this table, the sorting and filtering builder does not exist!'\r\n        );\r\n      let columnsToSearchIn: string[] = [];\r\n      this.filters.forEach((filter) => {\r\n        if (filter.type !== 'date') {\r\n          if (filter.subFilters && filter.subFilters.length) {\r\n            filter.subFilters.forEach((subFilter) =>\r\n              columnsToSearchIn.push(...subFilter.properties)\r\n            );\r\n          } else {\r\n            columnsToSearchIn.push(...filter.properties);\r\n          }\r\n        }\r\n      });\r\n\r\n      if (this.globalFilterOnTableWasApplied) {\r\n        let previous = [this.tableGlobalSearchValue.previousValue] || undefined;\r\n        sortingAndFilteringBuilder.removeParameterExplicitly(\r\n          'filterContains',\r\n          previous,\r\n          columnsToSearchIn\r\n        );\r\n      }\r\n\r\n      let valueToSearchSplitted =\r\n        this.tableGlobalSearchValue.currentValue.split(',');\r\n      let valueToSearchFinal = valueToSearchSplitted\r\n        .filter((v) => v !== '' && v !== undefined)\r\n        .map((v) => encodeURIComponent(v))\r\n        .join(',');\r\n      sortingAndFilteringBuilder.setFilterContains(\r\n        [valueToSearchFinal],\r\n        columnsToSearchIn\r\n      );\r\n      this.globalFilterOnTableWasApplied = true;\r\n      this.setTableFilterWasAppliedProp();\r\n      if (!noFetch) this.table.applyFilter(sortingAndFilteringBuilder);\r\n      this.tableGlobalSearchValue.previousValue = valueToSearchFinal;\r\n    } else {\r\n      this.removeGlobalSearchFilter();\r\n    }\r\n  }\r\n\r\n  removeGlobalSearchFilter() {\r\n    if (this.globalFilterOnTableWasApplied) {\r\n      let sortingAndFilteringBuilder = this.table.sortingAndFilteringBuilder;\r\n      if (!sortingAndFilteringBuilder)\r\n        throw new Error(\r\n          'Filtering cannot be performed on this table, the sorting and filtering builder does not exist!'\r\n        );\r\n      if (this.tableGlobalSearchValue.previousValue) {\r\n        let columnsToSearchIn: string[] = [];\r\n        this.filters.forEach((filter) => {\r\n          if (filter.type !== 'date') {\r\n            if (filter.subFilters && filter.subFilters.length) {\r\n              filter.subFilters.forEach((subFilter) =>\r\n                columnsToSearchIn.push(...subFilter.properties)\r\n              );\r\n            } else {\r\n              columnsToSearchIn.push(...filter.properties);\r\n            }\r\n          }\r\n        });\r\n        sortingAndFilteringBuilder.removeParameterExplicitly(\r\n          'filterContains',\r\n          [this.tableGlobalSearchValue.previousValue],\r\n          columnsToSearchIn\r\n        );\r\n      }\r\n      this.globalFilterOnTableWasApplied = false;\r\n      this.setTableFilterWasAppliedProp();\r\n      this.resetActiveFilterGlobalSearchInSessionStorage();\r\n      this.table.applyFilter(sortingAndFilteringBuilder);\r\n      this.tableGlobalSearchValue.currentValue = '';\r\n      this.tableGlobalSearchValue.previousValue =\r\n        this.tableGlobalSearchValue.currentValue;\r\n    }\r\n  }\r\n\r\n  removeTrailingSpacesFromGlobalSearchValue(value: string): string {\r\n    if (value) {\r\n      let splittedByComma = value.split(', ');\r\n      return splittedByComma.join(',');\r\n    }\r\n    return value;\r\n  }\r\n\r\n  checkIfFilterCanBeApplied(filter: TableFilter): boolean {\r\n    // False means that the disabled property is false, so the filter can be applied\r\n    if (filter.type === 'string') {\r\n      if (\r\n        filter.searchValues.filter(\r\n          (v) =>\r\n            v.currentValue !== '' &&\r\n            v.currentValue &&\r\n            !v.hasMaxLengthError &&\r\n            !v.hasXssCharsError\r\n        ).length\r\n      )\r\n        return false;\r\n      return true;\r\n    } else if (filter.type === 'checkbox') {\r\n      if (filter.possibleValues.filter((v) => v.isSelected !== false).length)\r\n        return false;\r\n      return true;\r\n    } else if (filter.type === 'date') {\r\n      if (\r\n        filter.rangeDates &&\r\n        filter.rangeDates.length === 2 &&\r\n        !filter.rangeDates.filter((d) => !d).length\r\n      )\r\n        return false;\r\n      else return true;\r\n    } else if (filter.type === 'boolean') {\r\n      if (\r\n        filter.selectedValue !== undefined &&\r\n        filter.selectedValue.currentValue !== undefined\r\n      )\r\n        return false;\r\n      return true;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  checkIfFirstInputIsCompleted(filter: TableFilter): boolean {\r\n    if (filter.searchValues && filter.searchValues[0].currentValue)\r\n      return false;\r\n    return true;\r\n  }\r\n\r\n  checkIfInputCanBeRemoved(filter: TableFilter): boolean {\r\n    if (filter.searchValues.filter((v) => v.currentValue).length > 1)\r\n      return true;\r\n    return false;\r\n  }\r\n\r\n  setTableFilterWasAppliedProp() {\r\n    let activeFilters = this.getActiveFilters();\r\n    if (\r\n      (!activeFilters || activeFilters.length === 0) &&\r\n      this.globalFilterOnTableWasApplied === false\r\n    )\r\n      this.table.filterWasApplied = false;\r\n    else if (\r\n      activeFilters.filter((f) => f.wasApplied === true).length === 0 &&\r\n      this.globalFilterOnTableWasApplied === false\r\n    )\r\n      this.table.filterWasApplied = false;\r\n    else this.table.filterWasApplied = true;\r\n  }\r\n\r\n  getLocaleForCalendar() {\r\n    this.translateSvc\r\n      .get('primeng')\r\n      .subscribe((res) => this.primeNGConfig.setTranslation(res));\r\n    let lang = localStorage.getItem('language') || 'en';\r\n    this.calendarLocale = this.calendarLocaleSvc.getCalendarSettings(lang);\r\n  }\r\n\r\n  saveFilteringConfigurationAs() {\r\n    if (!this.table.id)\r\n      throw new Error('Cannot save filter for a page which does not have id!');\r\n    if (\r\n      !this.localStorageSvc.checkIfFilterWithSameNameExists(\r\n        this.currentUser,\r\n        this.table.id,\r\n        this.filterName\r\n      )\r\n    ) {\r\n      this.localStorageSvc.saveFilterForCurrentUser(\r\n        this.currentUser,\r\n        {\r\n          name: this.filterName,\r\n          filters: this.filters,\r\n          // offset: this.table.offset,\r\n          limit: this.table.limit,\r\n          sortField: this.table.sortField,\r\n          sortMode: this.table.sortMode,\r\n          // isActive: true,\r\n          globalSearchValue: this.globalFilterOnTableWasApplied\r\n            ? this.tableGlobalSearchValue.currentValue\r\n            : undefined,\r\n        },\r\n        this.table.id\r\n      );\r\n      // this.toasterSvc.showToaster( TODO\r\n      //   { text: this.translateSvc.instant('MSG_FILTER_SAVED') },\r\n      //   ToasterTypes.SUCCESS\r\n      // );\r\n      this.activeFilteringConfigurationName = this.filterName;\r\n      this.getFilterConfigurationsFromLocalStorage();\r\n      this.filterName = '';\r\n      this.showFilterNameInput = false;\r\n    } else {\r\n      // this.toasterSvc.showToaster( TODO\r\n      //   { text: this.translateSvc.instant('MSG_FILTER_ALREADY_SAVED') },\r\n      //   ToasterTypes.ERROR\r\n      // );\r\n    }\r\n  }\r\n\r\n  saveFilteringConfiguration(\r\n    filteringConfiguration: LocalStorageFilter | undefined\r\n  ) {\r\n    if (!this.table.id)\r\n      throw new Error('Cannot save filter for a page which does not have id!');\r\n    if (filteringConfiguration && filteringConfiguration.name) {\r\n      this.localStorageSvc.saveFilterForCurrentUser(\r\n        this.currentUser || 'tableSettings',\r\n        {\r\n          name: filteringConfiguration.name,\r\n          filters: this.filters,\r\n          // offset: this.table.offset,\r\n          limit: this.table.limit,\r\n          sortField: this.table.sortField,\r\n          sortMode: this.table.sortMode,\r\n          // isActive: true,\r\n          globalSearchValue: this.globalFilterOnTableWasApplied\r\n            ? this.tableGlobalSearchValue.currentValue\r\n            : undefined,\r\n        },\r\n        this.table.id,\r\n        true\r\n      );\r\n      // this.toasterSvc.showToaster(// TODO\r\n      //   { text: this.translateSvc.instant('MSG_FILTER_SAVED') },\r\n      //   ToasterTypes.SUCCESS\r\n      // );\r\n      this.activeFilteringConfigurationName = filteringConfiguration.name;\r\n      this.getFilterConfigurationsFromLocalStorage();\r\n    }\r\n  }\r\n\r\n  //TODO: Get filters from db when it will be available\r\n  getFilterConfigurationsFromLocalStorage() {\r\n    this.currentUser = sessionStorage.getItem('currentUser') || 'tableSettings'; // TODO\r\n    let [uiSettings, pageSettings] =\r\n      this.localStorageSvc.getUiSettingsFromStorage(this.table.id, 'local');\r\n    if (!uiSettings || !pageSettings)\r\n      // throw new Error('The local storage UI settings and page settings could not be retrieved!');\r\n      this.localStorageSvc.initializePageSettingsInStorage(\r\n        this.table.id,\r\n        'local'\r\n      );\r\n    [uiSettings, pageSettings] = this.localStorageSvc.getUiSettingsFromStorage(\r\n      this.table.id,\r\n      'local'\r\n    );\r\n    if (pageSettings && this.currentUser && pageSettings[this.currentUser]) {\r\n      this.savedFilterConfigurations = pageSettings[this.currentUser].filters;\r\n    }\r\n    this.markSavedFilterAsActive();\r\n  }\r\n\r\n  checkIfAnyFilterWasApplied(): boolean {\r\n    let activeFilters: TableFilter[] = this.getActiveFilters();\r\n    if (\r\n      activeFilters.some((f) => f.wasApplied === true) ||\r\n      this.globalFilterOnTableWasApplied\r\n    )\r\n      return true;\r\n    return false;\r\n  }\r\n\r\n  applyFilteringConfiguration(filteringConfiguration: LocalStorageFilter) {\r\n    this.activeFilteringConfigurationName = filteringConfiguration.name;\r\n    this.savedFilterConfigurations.map((sf) => (sf.isActive = false));\r\n    this.filters = filteringConfiguration.filters;\r\n    this.applyAllFiltersFromTheFilteringConfiguration(filteringConfiguration);\r\n    this.clickAllFiltersDropdownButton();\r\n  }\r\n\r\n  removeFilteringConfiguration(filterConfiguration: LocalStorageFilter) {\r\n    if (filterConfiguration.isActive) this.removeAllFilters();\r\n    if (\r\n      this.localStorageSvc.removeFilter(\r\n        this.currentUser,\r\n        this.table.id,\r\n        filterConfiguration.name\r\n      )\r\n    ) {\r\n      // this.toasterSvc.showToaster( // TODO\r\n      //   { text: this.translateSvc.instant('MSG_FILTER_SUCCESSFULLY_REMOVED') },\r\n      //   ToasterTypes.SUCCESS\r\n      // );\r\n      this.getFilterConfigurationsFromLocalStorage();\r\n    } else {\r\n      // this.toasterSvc.showToaster( // TODO\r\n      //   { text: this.translateSvc.instant('MSG_FILTER_REMOVED_ERR') },\r\n      //   ToasterTypes.ERROR\r\n      // );\r\n    }\r\n    this.clickAllFiltersDropdownButton();\r\n  }\r\n\r\n  onDropdownShown() {\r\n    this.getFilterConfigurationsFromLocalStorage();\r\n  }\r\n\r\n  markSavedFilterAsActive() {\r\n    let foundFilterToMarkAsActive = this.savedFilterConfigurations.find(\r\n      (f) => f.name === this.activeFilteringConfigurationName\r\n    );\r\n    if (foundFilterToMarkAsActive) foundFilterToMarkAsActive.isActive = true;\r\n  }\r\n\r\n  onBooleanSelectChange(event: any, filter: TableFilter) {\r\n    if (filter) {\r\n      //TODO\r\n      filter.selectedValue.previousValue = filter.selectedValue.currentValue;\r\n      filter.selectedValue.currentValue = event;\r\n      this.applyFilter(filter);\r\n    }\r\n  }\r\n\r\n  clickAllFiltersDropdownButton() {\r\n    const filtersBtn = this.elRef.nativeElement.querySelector(\r\n      `#${this.table.id}-button-basic-filters`\r\n    );\r\n    if (filtersBtn) filtersBtn.click();\r\n  }\r\n\r\n  clickIndividualFilterDropdownButton(filterId: string) {\r\n    const filterBtn = this.elRef.nativeElement.querySelector(\r\n      `#${this.table.id}-filter-btn-${filterId}`\r\n    );\r\n    if (filterBtn) {\r\n      filterBtn.click();\r\n    }\r\n  }\r\n\r\n  xssCharactersValidation(value: StringTableFilterSearchValue) {\r\n    if (value) {\r\n      let regexp = XRegExp(\r\n        '^[(\\\\p{L}\\\\p{M}*+)\\\\p{N}.\\\\-\\\\/+=\\\\[\\\\]\\\\&\\\\(\\\\),\\\\%\\\\*:;\\\\\\\\\\\\@_ ]*$'\r\n      );\r\n      if (!regexp.test(value.currentValue)) {\r\n        value.hasXssCharsError = true;\r\n      } else {\r\n        value.hasXssCharsError = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  checkLength(value: StringTableFilterSearchValue) {\r\n    if (value) {\r\n      if (value.currentValue.length > 1000) {\r\n        value.hasMaxLengthError = true;\r\n      } else {\r\n        value.hasMaxLengthError = false;\r\n      }\r\n    }\r\n  }\r\n\r\n  toggleHTMLElementDisplayProp(id: string, filter: TableFilter) {\r\n    let element = document.getElementById(id);\r\n    if (element?.style.display === 'none') {\r\n      element.style.display = 'flex';\r\n    } else if (element) {\r\n      element.style.display = 'none';\r\n    }\r\n    // Build additional properties array\r\n    if (\r\n      !filter.additionalPropertiesForSearch ||\r\n      !filter.additionalPropertiesForSearch.length\r\n    ) {\r\n      filter.additionalPropertiesForSearch = [];\r\n      this.filters.forEach((f: TableFilter) => {\r\n        filter.additionalPropertiesForSearch?.push({\r\n          id: f.id,\r\n          prop:\r\n            f.properties && f.properties.length ? f.properties.toString() : '',\r\n          enteredPreviousSearch: false,\r\n          isSelected: false,\r\n        });\r\n        if (f.subFilters) {\r\n          f.subFilters.forEach((sf) => {\r\n            filter.additionalPropertiesForSearch?.push({\r\n              id: sf.id,\r\n              prop: sf.properties?.toString() || '',\r\n              enteredPreviousSearch: false,\r\n              isSelected: false,\r\n            });\r\n          });\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * For a given filter, add additional columns to the search in order to perform and OR operation instead of AND between all active column filters\r\n   *\r\n   * @param filter Filter to be modified\r\n   * @param id Id of the filter which needs to be activated in the additional properties\r\n   */\r\n  markAdditionalPropertiesAsActive(filter: TableFilter, id: string) {\r\n    let f = filter.additionalPropertiesForSearch?.find((p) => p.id === id);\r\n    if (f) {\r\n      f.isSelected = !f.isSelected;\r\n    }\r\n  }\r\n\r\n  /**\r\n   * See if a specifc set of properties corresponding to one filter is marked as additional in another filter\r\n   * @param filter\r\n   * @param id\r\n   */\r\n  areAdditionalProperties(filter: TableFilter, id: string): boolean {\r\n    return filter.additionalPropertiesForSearch?.find(\r\n      (p) => p.id === id && p.isSelected\r\n    )\r\n      ? true\r\n      : false;\r\n  }\r\n\r\n  /** Return true if the filter has any other properties selected in order to perform an OR */\r\n  filterHasAdditionalProperties(filter: TableFilter): boolean {\r\n    return filter.additionalPropertiesForSearch?.find((p) => p.isSelected)\r\n      ? true\r\n      : false;\r\n  }\r\n\r\n  /**\r\n   * Filter the saved queries\r\n   */\r\n  // searchThroughSavedFilters() {\r\n  //   console.log(this.searchSavedFiltersInputValue)\r\n  //   if (this.searchSavedFiltersInputValue) {\r\n  //     this.filteredSavedFilterConfigurations = this.savedFilterConfigurations.filter(f => f.name.includes(this.searchSavedFiltersInputValue));\r\n  //     this.searchThroughSavedFiltersWasApplied = true;\r\n  //   }\r\n  //   else {\r\n  //     this.filteredSavedFilterConfigurations = [];\r\n  //     this.searchThroughSavedFiltersWasApplied = false;\r\n  //   }\r\n  // }\r\n\r\n  // --------------- Local Storage related methods ---------------\r\n\r\n  /**\r\n   * Method used to retrieve the last active filters (column filters and global search filter) from session storage and apply them\r\n   */\r\n  applyLastActiveFilterFromSessionStorage() {\r\n    let activeFilterName =\r\n      sessionStorage.getItem(\r\n        this.currentUser + '-' + this.table.id + '-activeFilters'\r\n      ) || '';\r\n    let filter = activeFilterName ? JSON.parse(activeFilterName) : null;\r\n    if (filter) {\r\n      this.table.sortingAndFilteringBuilder.setOffset(\r\n        filter.offset * this.table.limit\r\n      );\r\n      this.table.offset = filter.offset;\r\n      filter.filters.map((f: TableFilter) => (f.wasApplied = false));\r\n      this.filters = filter.filters;\r\n      this.filters.forEach((f) => this.applyFilter(f, true));\r\n      this.globalFilterOnTableWasApplied = false;\r\n      this.tableGlobalSearchValue = filter.globalSearchValue;\r\n      if (filter.globalSearchValue.currentValue)\r\n        this.performGlobalSearchOnTable(true);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Method used to save the currently applied filters in session storage in order to re-use them when data is refetched after a certain operation (add/remove etc)\r\n   */\r\n  saveActiveFilterInSessionStorage() {\r\n    let filter = {\r\n      filters: this.filters,\r\n      globalSearchValue: this.tableGlobalSearchValue\r\n        ? this.tableGlobalSearchValue\r\n        : {},\r\n      offset: this.table.offset,\r\n    };\r\n    sessionStorage.setItem(\r\n      this.currentUser + '-' + this.table.id + '-activeFilters',\r\n      JSON.stringify(filter)\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Method used to delete the saved active filters in local storage. The filters should be removed when the component is destroyed\r\n   * TODO: See if this fits the server click scenario\r\n   */\r\n  resetActiveFilterInSessionStorage() {\r\n    sessionStorage.removeItem(\r\n      this.currentUser + '-' + this.table.id + '-activeFilters'\r\n    );\r\n  }\r\n\r\n  /**\r\n   * Method used to reset only the global search value from the session storage saved active filters\r\n   */\r\n  resetActiveFilterGlobalSearchInSessionStorage() {\r\n    let filter = {\r\n      filters: this.filters,\r\n      globalSearchValue: { currentValue: '', previousValue: '' },\r\n    };\r\n    this.globalFilterOnTableWasApplied = false;\r\n    sessionStorage.setItem(\r\n      this.currentUser + '-' + this.table.id + '-activeFilters',\r\n      JSON.stringify(filter)\r\n    );\r\n  }\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n<div class=\"toolbar-wrapper\" [ngClass]=\"{ disableToolbar: disabled }\">\r\n  <ul class=\"nav nav-pills\">\r\n    <li *ngIf=\"table && showRefreshButton\" class=\"nav-item images\">\r\n      <!-- Refresh -->\r\n      <ngx-xcng-table-dropdown\r\n        *ngIf=\"table\"\r\n        [tableId]=\"table.id\"\r\n        [action]=\"refreshAction\"\r\n        [disabled]=\"disabled\"\r\n      >\r\n      </ngx-xcng-table-dropdown>\r\n    </li>\r\n\r\n    <!-- Actions (images, label and images, labels or dropdowns) -->\r\n    <li class=\"nav-item images\" *ngFor=\"let action of actions\">\r\n      <ngx-xcng-table-dropdown\r\n        *ngIf=\"table && !action.floatRight && !action.onlyAllActions\"\r\n        [tableId]=\"table.id\"\r\n        [action]=\"action\"\r\n        [disabled]=\"disabled\"\r\n      >\r\n      </ngx-xcng-table-dropdown>\r\n    </li>\r\n\r\n    <!-- All Actions menu -->\r\n    <ng-container *ngIf=\"(actions && actions.length > 0) || table\">\r\n      <li class=\"nav-item\">\r\n        <div\r\n          class=\"btn-group btn-toolbar action\"\r\n          id=\"allActionsContainer\"\r\n          dropdown\r\n        >\r\n          <button\r\n            id=\"{{ table.id }}-button-basic-all-actions\"\r\n            dropdownToggle\r\n            type=\"button\"\r\n            class=\"\r\n              btn btn-outline-secondary\r\n              dropdown-toggle\r\n              button-dropdown\r\n              toolbarDropdown\r\n            \"\r\n            aria-controls=\"dropdown-basic-all-actions\"\r\n            aria-expanded=\"false\"\r\n          >\r\n            <span class=\"defaultFontFamily\"\r\n              >{{ \"LBL_ALL_ACTIONS\" | translate }} </span\r\n            ><span class=\"caret\"></span>\r\n          </button>\r\n          <ul\r\n            id=\"dropdown-basic-all-actions\"\r\n            *dropdownMenu\r\n            class=\"dropdown-menu toolbarDropdownMenu\"\r\n            role=\"menu\"\r\n            aria-labelledby=\"button-basic-all-actions\"\r\n          >\r\n            <!-- Refresh -->\r\n            <li class=\"nav-item images\" *ngIf=\"showRefreshButton\">\r\n              <ngx-xcng-table-dropdown\r\n                *ngIf=\"table\"\r\n                [tableId]=\"table.id\"\r\n                [action]=\"refreshAction\"\r\n                [nested]=\"true\"\r\n                [disabled]=\"disabled\"\r\n              >\r\n              </ngx-xcng-table-dropdown>\r\n            </li>\r\n\r\n            <!-- Actions supplied by page -->\r\n            <li class=\"nav-item images\" *ngFor=\"let action of actions\">\r\n              <ngx-xcng-table-dropdown\r\n                *ngIf=\"table\"\r\n                [tableId]=\"table.id\"\r\n                [action]=\"action\"\r\n                [nested]=\"true\"\r\n                [disabled]=\"disabled\"\r\n              >\r\n              </ngx-xcng-table-dropdown>\r\n            </li>\r\n\r\n            <!-- Toggle columns -->\r\n            <li class=\"nav-item images\" *ngIf=\"table && !table.mobileView\">\r\n              <ngx-xcng-table-dropdown\r\n                *ngIf=\"table\"\r\n                [tableId]=\"table.id\"\r\n                [action]=\"toggleColumnsAction\"\r\n                [nested]=\"true\"\r\n                [disabled]=\"disabled\"\r\n              >\r\n              </ngx-xcng-table-dropdown>\r\n            </li>\r\n          </ul>\r\n        </div>\r\n      </li>\r\n    </ng-container>\r\n\r\n    <!-- Filters checkboxes -->\r\n    <li *ngIf=\"filters && filters.length\" class=\"nav-item\">\r\n      <div\r\n        class=\"btn-group btn-toolbar action\"\r\n        dropdown\r\n        [insideClick]=\"true\"\r\n        (onShown)=\"onDropdownShown()\"\r\n      >\r\n        <button\r\n          id=\"{{ table.id }}-button-basic-filters\"\r\n          dropdownToggle\r\n          type=\"button\"\r\n          class=\"btn btn-outline-secondary toolbarDropdown dropdown-toggle\"\r\n        >\r\n          <span\r\n            *ngIf=\"!checkIfAnyFilterWasApplied()\"\r\n            class=\"defaultFontFamily\"\r\n            >{{ \"LBL_FILTERS\" | translate }}</span\r\n          >\r\n          <span\r\n            *ngIf=\"checkIfAnyFilterWasApplied()\"\r\n            class=\"defaultFontFamily\"\r\n            style=\"font-weight: bolder\"\r\n            >{{ \"LBL_FILTERS\" | translate }}</span\r\n          >\r\n          <span *ngIf=\"checkIfAnyFilterWasApplied()\" style=\"margin-left: 5px\"\r\n            >(*)</span\r\n          >\r\n          <span class=\"caret\"></span>\r\n        </button>\r\n\r\n        <!-- Content for filters drop-down including Save, Save as and Clear -->\r\n        <ul\r\n          id=\"{{ table.id }}-button-basic-filters-content\"\r\n          *dropdownMenu\r\n          class=\"dropdown-menu toolbarDropdownMenu\"\r\n          role=\"menu\"\r\n          style=\"min-width: 200px\"\r\n        >\r\n          <!-- Filters actions -->\r\n          <li\r\n            *ngIf=\"table && filtersActions && filtersActions.length\"\r\n            class=\"nav-item images\"\r\n          >\r\n            <ng-container *ngFor=\"let action of filtersActions\">\r\n              <a\r\n                class=\"imageButton\"\r\n                id=\"{{ table.id }}-{{ action.id }}-toolbar-button\"\r\n                [ngClass]=\"{\r\n                  cursorButton: action.canEnable ? action.canEnable() : true\r\n                }\"\r\n                (click)=\"action.onClick($event)\"\r\n                (mouseenter)=\"onEnterButton($event, action.img.srcDisabled)\"\r\n                (mouseleave)=\"onLeaveButton($event, action.img.srcDisabled)\"\r\n              >\r\n                <img\r\n                  alt=\"{{ action.label | translate }}\"\r\n                  title=\"{{ action.label | translate }}\"\r\n                  [src]=\"\r\n                    action.canEnable\r\n                      ? action.canEnable() && !disabled\r\n                        ? action.img.src\r\n                        : action.img.srcDisabled\r\n                      : action.img.src\r\n                  \"\r\n                />\r\n              </a>\r\n            </ng-container>\r\n          </li>\r\n          <!-- Input for entering filter name -->\r\n          <div *ngIf=\"showFilterNameInput\" style=\"display: flex\">\r\n            <mat-form-field>\r\n              <input\r\n                matInput\r\n                type=\"text\"\r\n                [(ngModel)]=\"filterName\"\r\n                id=\"{{ table.id }}-filterNameInput\"\r\n                class=\"defaultFontFamily\"\r\n                placeholder=\"{{ 'LBL_FILTER_NAME' | translate }}\"\r\n                tabindex=\"0\"\r\n                required\r\n                matInputAutofocus\r\n                (keydown.enter)=\"saveFilteringConfigurationAs()\"\r\n                (keydown.escape)=\"showFilterNameInput = false\"\r\n                [maxLength]=\"128\"\r\n              />\r\n            </mat-form-field>\r\n            <button\r\n              id=\"{{ table.id }}-saveFilteringConfigurationBtn\"\r\n              type=\"button\"\r\n              class=\"btn btn-default btn-circle btn-lg\"\r\n              (click)=\"saveFilteringConfigurationAs()\"\r\n              [disabled]=\"!checkIfAnyFilterWasApplied()\"\r\n              title=\"{{ 'LBL_SAVE' | translate }}\"\r\n              style=\"margin-top: 10px\"\r\n            >\r\n              <i class=\"material-icons\">done</i>\r\n            </button>\r\n            <button\r\n              id=\"{{ table.id }}-closeFilteringConfigInputForm\"\r\n              type=\"button\"\r\n              class=\"btn btn-default btn-circle btn-lg\"\r\n              (click)=\"showFilterNameInput = false\"\r\n              title=\"{{ 'LBL_CANCEL' | translate }}\"\r\n              style=\"margin-top: 10px\"\r\n            >\r\n              <i class=\"material-icons\">close</i>\r\n            </button>\r\n          </div>\r\n          <!-- Delimiter -->\r\n          <hr />\r\n          <div class=\"allFiltersWrapper\">\r\n            <!-- Saved filters with search -->\r\n            <span class=\"defaultFontFamily gray\">{{\r\n              \"STR_SAVED_FILTERS\" | translate\r\n            }}</span>\r\n            <!-- <div style=\"display: flex; justify-content: space-between;\">\r\n                  <mat-form-field>\r\n                    <input matInput type=\"text\" [(ngModel)]=\"searchSavedFiltersInputValue\"\r\n                      id=\"searchThroughSavedFiltersInput\" class=\"defaultFontFamily\"\r\n                      placeholder=\"{{ 'LBL_SEARCH_FOR' | translate }}\" (keydown.enter)=\"searchThroughSavedFilters()\"\r\n                      (keydown.escape)=\"searchSavedFiltersInputValue=''; searchThroughSavedFilters()\">\r\n                  </mat-form-field>\r\n                  <span class=\"input-group-btn\">\r\n                    <button id=\"searchSavedFiltersBtn\" type=\"button\" class=\"btn btn-default btn-circle btn-lg\"\r\n                      (click)=\"searchThroughSavedFilters()\">\r\n                      <i class=\"material-icons\" style=\"margin-top: 5px;\">search</i>\r\n                    </button>\r\n                  </span>\r\n                  <span class=\"input-group-btn\">\r\n                    <button id=\"cancelSearchForSavedFilter\" type=\"button\" class=\"btn btn-default btn-circle btn-lg\"\r\n                      (click)=\"searchSavedFiltersInputValue = ''; searchThroughSavedFilters()\">\r\n                      <i class=\"material-icons\" style=\"margin-top: 5px;\">close</i>\r\n                    </button>\r\n                  </span>\r\n                </div> -->\r\n\r\n            <!-- Scrollpanel for showing the saved filters or the filtered saved filters if search was applied -->\r\n            <!-- <p-scrollPanel *ngIf=\"searchThroughSavedFiltersWasApplied ? (filteredSavedFilterConfigurations && filteredSavedFilterConfigurations.length) : (savedFilterConfigurations && savedFilterConfigurations.length)\"\r\n                  [style]=\"{width: '100%', height: '100px'}\"> -->\r\n            <li\r\n              role=\"menuitem\"\r\n              *ngFor=\"let filterConfiguration of savedFilterConfigurations\"\r\n            >\r\n              <div style=\"display: flex; justify-content: space-between\">\r\n                <div\r\n                  class=\"dropdown-item\"\r\n                  id=\"{{ table.id }}-{{ filterConfiguration.name }}-apply\"\r\n                  (click)=\"applyFilteringConfiguration(filterConfiguration)\"\r\n                >\r\n                  <b\r\n                    *ngIf=\"filterConfiguration.isActive\"\r\n                    class=\"defaultFontFamily\"\r\n                    >{{ filterConfiguration.name }}</b\r\n                  >\r\n                  <span\r\n                    *ngIf=\"!filterConfiguration.isActive\"\r\n                    class=\"defaultFontFamily\"\r\n                    >{{ filterConfiguration.name }}</span\r\n                  >\r\n                </div>\r\n                <div style=\"margin-top: 5px\">\r\n                  <img\r\n                    id=\"{{ table.id }}-removeSavedFilterBtn-{{\r\n                      filterConfiguration.name\r\n                    }}\"\r\n                    class=\"imgAsButton\"\r\n                    src=\"assets/ngx-len-assets/images/remove-dcgg.png\"\r\n                    (click)=\"removeFilteringConfiguration(filterConfiguration)\"\r\n                  />\r\n                </div>\r\n              </div>\r\n            </li>\r\n            <!-- </p-scrollPanel> -->\r\n            <hr />\r\n            <span class=\"defaultFontFamily gray\">{{\r\n              \"STR_CRITERIA\" | translate\r\n            }}</span>\r\n\r\n            <!-- All available column filters -->\r\n            <ng-container *ngFor=\"let filter of filters\">\r\n              <mat-checkbox\r\n                *ngIf=\"\r\n                  filter.subFilters === undefined || !filter.subFilters.length;\r\n                  else subFiltersTemplate\r\n                \"\r\n                [id]=\"table.id + '-' + filter.id + 'columnFilterCheckbox'\"\r\n                [(ngModel)]=\"filter.isActive\"\r\n                (change)=\"afterFilterToggleOff(filter, false)\"\r\n              >\r\n                <span class=\"defaultFontFamily\">{{\r\n                  filter.label | translate\r\n                }}</span>\r\n              </mat-checkbox>\r\n\r\n              <ng-template #subFiltersTemplate>\r\n                <div class=\"d-flex flex-row justify-content-start\">\r\n                  <span\r\n                    class=\"defaultFontFamily nestedFilter\"\r\n                    style=\"cursor: pointer\"\r\n                    (click)=\"filter.isActive = !filter.isActive\"\r\n                  >\r\n                    {{ filter.label | translate }}\r\n                  </span>\r\n\r\n                  <i\r\n                    class=\"material-icons\"\r\n                    style=\"cursor: pointer\"\r\n                    (click)=\"filter.isActive = !filter.isActive\"\r\n                  >\r\n                    {{ filter.isActive ? \"expand_less\" : \"expand_more\" }}\r\n                  </i>\r\n                </div>\r\n\r\n                <div id=\"collapseBasic\" *ngIf=\"filter.isActive\">\r\n                  <div class=\"allFiltersWrapper\">\r\n                    <ng-container *ngFor=\"let subFilter of filter.subFilters\">\r\n                      <mat-checkbox\r\n                        [(ngModel)]=\"subFilter.isActive\"\r\n                        (change)=\"afterFilterToggleOff(subFilter, false)\"\r\n                        [id]=\"\r\n                          table.id +\r\n                          '-' +\r\n                          subFilter.id +\r\n                          'columnSubFilterCheckbox'\r\n                        \"\r\n                      >\r\n                        <span class=\"defaultFontFamily\">{{\r\n                          subFilter.label | translate\r\n                        }}</span>\r\n                      </mat-checkbox>\r\n                    </ng-container>\r\n                  </div>\r\n                </div>\r\n              </ng-template>\r\n            </ng-container>\r\n          </div>\r\n        </ul>\r\n      </div>\r\n    </li>\r\n    <!-- Selected column filters -->\r\n    <ng-container>\r\n      <!-- Selected filters -->\r\n      <li *ngFor=\"let filter of getActiveFilters()\" class=\"nav-item\">\r\n        <div\r\n          id=\"{{ table.id }}-filter-content-wrapper-{{ filter.id }}\"\r\n          *ngIf=\"filter.isActive\"\r\n          class=\"btn-group btn-toolbar action\"\r\n          dropdown\r\n          [insideClick]=\"true\"\r\n          (onShown)=\"resetFilter()\"\r\n        >\r\n          <button\r\n            id=\"{{ table.id }}-filter-btn-{{ filter.id }}\"\r\n            dropdownToggle\r\n            type=\"button\"\r\n            class=\"\r\n              btn btn-outline-secondary\r\n              action\r\n              toolbarDropdown\r\n              dropdown-toggle\r\n            \"\r\n          >\r\n            <b *ngIf=\"filter.wasApplied === true\" class=\"defaultFontFamily\">{{\r\n              filter.tableLabel\r\n                ? (filter.tableLabel | translate)\r\n                : (filter.label | translate)\r\n            }}</b>\r\n            <span *ngIf=\"!filter.wasApplied\" class=\"defaultFontFamily\">{{\r\n              filter.tableLabel\r\n                ? (filter.tableLabel | translate)\r\n                : (filter.label | translate)\r\n            }}</span>\r\n            <span class=\"caret\"></span>\r\n          </button>\r\n          <ul\r\n            id=\"{{ table.id }}-filter-content-{{ filter.id }}\"\r\n            *dropdownMenu\r\n            class=\"dropdown-menu\"\r\n            role=\"menu\"\r\n          >\r\n            <ng-container [ngSwitch]=\"filter.type\">\r\n              <!-- Content for string filter -->\r\n              <ng-container *ngSwitchCase=\"'string'\">\r\n                <ng-container\r\n                  *ngTemplateOutlet=\"stringFilter; context: { filter: filter }\"\r\n                ></ng-container>\r\n              </ng-container>\r\n              <!-- Content for checkbox filter -->\r\n              <ng-container *ngSwitchCase=\"'checkbox'\">\r\n                <ng-container\r\n                  *ngTemplateOutlet=\"\r\n                    checkboxFilter;\r\n                    context: { filter: filter }\r\n                  \"\r\n                ></ng-container>\r\n              </ng-container>\r\n              <!-- Content for date filter -->\r\n              <ng-container *ngSwitchCase=\"'date'\">\r\n                <ng-container\r\n                  *ngTemplateOutlet=\"dateFilter; context: { filter: filter }\"\r\n                ></ng-container>\r\n              </ng-container>\r\n              <!-- Content for boolean filter -->\r\n              <ng-container *ngSwitchCase=\"'boolean'\">\r\n                <ng-container\r\n                  *ngTemplateOutlet=\"booleanFilter; context: { filter: filter }\"\r\n                ></ng-container>\r\n              </ng-container>\r\n            </ng-container>\r\n          </ul>\r\n        </div>\r\n\r\n        <ng-template #stringFilter let-filter=\"filter\">\r\n          <!-- Remove filter header button -->\r\n          <div\r\n            id=\"{{ table.id }}-{{ filter.id }}-removeFilterButton\"\r\n            class=\"buttonWithImg\"\r\n            [ngClass]=\"{ disabled: !filter.wasApplied }\"\r\n            (click)=\"\r\n              !filter.wasApplied ? !filter.wasApplied : removeFilter(filter)\r\n            \"\r\n          >\r\n            <img\r\n              alt=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              title=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              [src]=\"\r\n                !filter.wasApplied\r\n                  ? 'assets/ngx-len-assets/images/remove-inactive.png'\r\n                  : 'assets/ngx-len-assets/images/remove-dcgg.png'\r\n              \"\r\n            />\r\n            <span class=\"defaultFontFamily\">{{\r\n              \"LBL_REMOVE_FILTER\" | translate\r\n            }}</span>\r\n          </div>\r\n          <hr />\r\n\r\n          <!-- Actual string filter content template (inputs and remve buttons) -->\r\n          <div\r\n            *ngFor=\"let searchValue of filter.searchValues\"\r\n            [ngClass]=\"{ 'min-width': !table.mobileView }\"\r\n          >\r\n            <div style=\"display: flex; justify-content: space-between\">\r\n              <mat-form-field class=\"filterInput\">\r\n                <input\r\n                  matInput\r\n                  id=\"{{ table.id }}-{{ filter.searchValues.length }}-{{\r\n                    filter.id\r\n                  }}-input\"\r\n                  type=\"text\"\r\n                  placeholder=\"{{ 'LBL_SEARCH_FOR' | translate }}\"\r\n                  tabindex=\"0\"\r\n                  [(ngModel)]=\"searchValue.currentValue\"\r\n                  (keydown.enter)=\"applyFilter(filter)\"\r\n                  (input)=\"\r\n                    xssCharactersValidation(searchValue);\r\n                    checkLength(searchValue)\r\n                  \"\r\n                />\r\n\r\n                <mat-hint\r\n                  *ngIf=\"\r\n                    searchValue.hasMaxLengthError ||\r\n                    searchValue.hasXssCharsError\r\n                  \"\r\n                >\r\n                  <div class=\"invalidCond\" *ngIf=\"searchValue.hasXssCharsError\">\r\n                    <div class=\"invalid-icon\"></div>\r\n                    {{ \"MSG_XSS_CHARS_ERROR\" | translate }}\r\n                  </div>\r\n                  <div\r\n                    class=\"invalidCond\"\r\n                    *ngIf=\"searchValue.hasMaxLengthError\"\r\n                    translate\r\n                    [translateParams]=\"{ value: '1000' }\"\r\n                  >\r\n                    <div class=\"invalid-icon\"></div>\r\n                    {{ \"MSG_MAX_LENGTH_ERROR\" | translate }}\r\n                  </div>\r\n                </mat-hint>\r\n              </mat-form-field>\r\n\r\n              <div style=\"margin-top: 20px\">\r\n                <img\r\n                  id=\"{{ table.id }}-{{ filter.searchValues.length }}-{{\r\n                    filter.id\r\n                  }}-removeInput\"\r\n                  class=\"imgAsButton\"\r\n                  alt=\"{{ 'LBL_REMOVE_VALUE' | translate }}\"\r\n                  title=\"{{ 'LBL_REMOVE_VALUE' | translate }}\"\r\n                  *ngIf=\"\r\n                    checkIfInputCanBeRemoved(filter) ||\r\n                    filter.searchValues.indexOf(searchValue) !== 0\r\n                  \"\r\n                  src=\"assets/ngx-len-assets/images/remove-dcgg.png\"\r\n                  (click)=\"\r\n                    removeInput(\r\n                      $event,\r\n                      filter,\r\n                      filter.searchValues.indexOf(searchValue)\r\n                    )\r\n                  \"\r\n                />\r\n              </div>\r\n            </div>\r\n          </div>\r\n\r\n          <!-- Additional columns section -->\r\n          <!-- <div class=\"defaultFontFamily gray advancedOptionsLink\"\r\n                (click)=\"toggleHTMLElementDisplayProp(table.id + '-' + filter.id + '-moreOptions', filter)\">\r\n                <span>{{ 'STR_MORE_OPTIONS' | translate }}</span>\r\n              </div> -->\r\n\r\n          <!-- <div id=\"{{ table.id }}-{{ filter.id }}-moreOptions\" style=\"display: none; flex-direction: column;\"> -->\r\n          <!-- Negate filtering (filterNotEquals / filterNotContains) -->\r\n          <!-- <mat-slide-toggle [(ngModel)]=\"filter.negation.currentValue\" labelPosition=\"after\"\r\n                  style=\"float: left; font-size: 14px;\">\r\n                  {{ filter.negation.currentValue ? ('STR_CONTAINS' | translate) : ('STR_NOT_CONTAINS' | translate) }}\r\n                </mat-slide-toggle> -->\r\n          <!-- </div> -->\r\n\r\n          <!-- Remove comments if we want to add additional columns (perform OR between columns) -->\r\n          <!-- <div id=\"{{ table.id }}-{{ filter.id }}-additionalColumns\" style=\"display: none; flex-direction: column;\">\r\n                <ng-container *ngFor=\"let additionalFilter of filters\">\r\n                  <div *ngIf=\"additionalFilter.id !== filter.id\">\r\n                    <mat-checkbox\r\n                      *ngIf=\"additionalFilter.subFilters === undefined || !additionalFilter.subFilters.length; else subFiltersTemplate\"\r\n                      [checked]=\"areAdditionalProperties(filter, additionalFilter.id)\"\r\n                      (change)=\"markAdditionalPropertiesAsActive(filter, additionalFilter.id)\"\r\n                      id=\"{{ table.id }}-{{ filter.id }}-{{ additionalFilter.id }}'-additionalPropertyCheckbox'\"\r\n                    >\r\n                      <span class=\"defaultFontFamily\">{{ additionalFilter.label | translate }}</span>\r\n                    </mat-checkbox>\r\n    \r\n                    <ng-template #subFiltersTemplate>\r\n                      <ng-container *ngFor=\"let subFilter of additionalFilter.subFilters\">\r\n                        <mat-checkbox\r\n                          id=\"{{ table.id }}-{{ filter.id }}-{{ subFilter.id }}'-additionalPropertyCheckbox'\"\r\n                          [checked]=\"areAdditionalProperties(filter, subFilter.id)\"\r\n                          (change)=\"markAdditionalPropertiesAsActive(filter, subFilter.id)\"\r\n                        >\r\n                          <span class=\"defaultFontFamily\">{{ additionalFilter.label | translate }} {{ subFilter.label | translate }}</span>\r\n                        </mat-checkbox>\r\n                      </ng-container>\r\n                    </ng-template>\r\n                  </div>\r\n                </ng-container>\r\n              </div> -->\r\n\r\n          <!-- Apply filter footer -->\r\n          <div class=\"applyFilterWrapper\">\r\n            <button\r\n              id=\"{{ table.id }}-{{ filter.id }}-addInputButton\"\r\n              class=\"btn\"\r\n              (click)=\"addInput(filter.searchValues)\"\r\n              title=\"{{ 'LBL_ADD_ANOTHER_VALUE_TO_SEARCH_FOR' | translate }}\"\r\n              [disabled]=\"checkIfFirstInputIsCompleted(filter)\"\r\n            >\r\n              <i class=\"fa fa-plus\"></i>\r\n            </button>\r\n            <div style=\"display: flex\">\r\n              <button\r\n                id=\"{{ table.id }}-{{ filter.id }}-applyFilterButton\"\r\n                class=\"btn\"\r\n                (click)=\"applyFilter(filter)\"\r\n                title=\"{{ 'LBL_APPLY_FILTER' | translate }}\"\r\n                [disabled]=\"checkIfFilterCanBeApplied(filter)\"\r\n              >\r\n                <i class=\"fa fa-check\"></i>\r\n              </button>\r\n            </div>\r\n          </div>\r\n        </ng-template>\r\n\r\n        <ng-template #checkboxFilter let-filter=\"filter\">\r\n          <div\r\n            id=\"{{ table.id }}-{{ filter.id }}-removeFilterButton\"\r\n            class=\"buttonWithImg\"\r\n            [ngClass]=\"{ disabled: !filter.wasApplied }\"\r\n            (click)=\"\r\n              !filter.wasApplied ? !filter.wasApplied : removeFilter(filter)\r\n            \"\r\n          >\r\n            <img\r\n              alt=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              title=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              [src]=\"\r\n                !filter.wasApplied\r\n                  ? 'assets/ngx-len-assets/images/remove-inactive.png'\r\n                  : 'assets/ngx-len-assets/images/remove-dcgg.png'\r\n              \"\r\n            />\r\n            <span class=\"defaultFontFamily\">{{\r\n              \"LBL_REMOVE_FILTER\" | translate\r\n            }}</span>\r\n          </div>\r\n          <hr />\r\n\r\n          <div class=\"d-flex flex-column\">\r\n            <p-scrollPanel\r\n              *ngIf=\"filter.iconType === 'jobStatus'; else withoutScrollbar\"\r\n              [style]=\"{ height: '200px' }\"\r\n            >\r\n              <ng-container\r\n                *ngTemplateOutlet=\"\r\n                  possibleCheckboxValues;\r\n                  context: { f: filter, t: table }\r\n                \"\r\n              >\r\n              </ng-container>\r\n            </p-scrollPanel>\r\n\r\n            <ng-template #withoutScrollbar>\r\n              <ng-container\r\n                *ngTemplateOutlet=\"\r\n                  possibleCheckboxValues;\r\n                  context: { f: filter, t: table }\r\n                \"\r\n              >\r\n              </ng-container>\r\n            </ng-template>\r\n\r\n            <ng-template #possibleCheckboxValues let-filter=\"f\" let-table=\"t\">\r\n              <div\r\n                *ngFor=\"let possibleValue of filter.possibleValues\"\r\n                [ngClass]=\"{ 'min-width': !table.mobileView }\"\r\n              >\r\n                <mat-checkbox\r\n                  id=\"{{ table.id }}-{{ filter.id }}-{{\r\n                    possibleValue.value\r\n                  }}-checkbox\"\r\n                  class=\"filterInput defaultFontFamily\"\r\n                  tabindex=\"0\"\r\n                  [(ngModel)]=\"possibleValue.isSelected\"\r\n                >\r\n                  <ngx-len-icon\r\n                    [classConfig]=\"tableToolbarIconsClassConfig\"\r\n                    [iconType]=\"filter.iconType\"\r\n                    [value]=\"possibleValue.value\"\r\n                  ></ngx-len-icon>\r\n\r\n                  {{ possibleValue.translatedValue | translate }}\r\n                </mat-checkbox>\r\n              </div>\r\n            </ng-template>\r\n          </div>\r\n\r\n          <button\r\n            id=\"{{ table.id }}-{{ filter.id }}-applyFilterButton\"\r\n            class=\"btn\"\r\n            (click)=\"applyFilter(filter)\"\r\n            title=\"{{ 'LBL_APPLY_FILTER' | translate }}\"\r\n            [disabled]=\"checkIfFilterCanBeApplied(filter)\"\r\n            style=\"float: right\"\r\n          >\r\n            <i class=\"fa fa-check\"></i>\r\n          </button>\r\n        </ng-template>\r\n\r\n        <ng-template #dateFilter let-filter=\"filter\">\r\n          <div\r\n            id=\"{{ table.id }}-{{ filter.id }}-removeFilterButton\"\r\n            class=\"buttonWithImg\"\r\n            [ngClass]=\"{ disabled: !filter.wasApplied }\"\r\n            (click)=\"\r\n              !filter.wasApplied ? !filter.wasApplied : removeFilter(filter)\r\n            \"\r\n          >\r\n            <img\r\n              alt=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              title=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              [src]=\"\r\n                !filter.wasApplied\r\n                  ? 'assets/ngx-len-assets/images/remove-inactive.png'\r\n                  : 'assets/ngx-len-assets/images/remove-dcgg.png'\r\n              \"\r\n            />\r\n            <span class=\"defaultFontFamily\">{{\r\n              \"LBL_REMOVE_FILTER\" | translate\r\n            }}</span>\r\n          </div>\r\n          <hr />\r\n\r\n          <div style=\"display: block\">\r\n            <p-calendar\r\n              id=\"{{ table.id }}-{{ filter.id }}-calendar\"\r\n              [(ngModel)]=\"filter.rangeDates\"\r\n              [yearNavigator]=\"true\"\r\n              [monthNavigator]=\"true\"\r\n              [inline]=\"true\"\r\n              [showWeek]=\"true\"\r\n              selectionMode=\"range\"\r\n              yearRange=\"1950:2100\"\r\n              [hideOnDateTimeSelect]=\"false\"\r\n              [dateFormat]=\"calendarLocale.dateFormat\"\r\n              (click)=\"$event.stopPropagation()\"\r\n            >\r\n            </p-calendar>\r\n\r\n            <div class=\"d-flex flex-row justify-content-around\">\r\n              <p-calendar\r\n                [(ngModel)]=\"startDateTime\"\r\n                [timeOnly]=\"true\"\r\n                [inline]=\"true\"\r\n                [disabled]=\"\r\n                  !filter || !filter.rangeDates || !filter.rangeDates[0]\r\n                \"\r\n              ></p-calendar>\r\n              <p-calendar\r\n                [(ngModel)]=\"endDateTime\"\r\n                [timeOnly]=\"true\"\r\n                [inline]=\"true\"\r\n                [disabled]=\"\r\n                  !filter || !filter.rangeDates || !filter.rangeDates[1]\r\n                \"\r\n              ></p-calendar>\r\n            </div>\r\n          </div>\r\n\r\n          <button\r\n            id=\"{{ table.id }}-{{ filter.id }}-applyFilterButton\"\r\n            class=\"btn\"\r\n            (click)=\"applyFilter(filter)\"\r\n            title=\"{{ 'LBL_APPLY_FILTER' | translate }}\"\r\n            [disabled]=\"checkIfFilterCanBeApplied(filter)\"\r\n            style=\"float: right\"\r\n          >\r\n            <i class=\"fa fa-check\"></i>\r\n          </button>\r\n        </ng-template>\r\n\r\n        <ng-template #booleanFilter let-filter=\"filter\">\r\n          <div\r\n            id=\"{{ table.id }}-{{ filter.id }}-removeFilterButton\"\r\n            class=\"buttonWithImg\"\r\n            [ngClass]=\"{ disabled: !filter.wasApplied }\"\r\n            (click)=\"\r\n              !filter.wasApplied ? !filter.wasApplied : removeFilter(filter)\r\n            \"\r\n          >\r\n            <img\r\n              alt=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              title=\"{{ 'LBL_REMOVE_FILTER' | translate }}\"\r\n              [src]=\"\r\n                !filter.wasApplied\r\n                  ? 'assets/ngx-len-assets/images/remove-inactive.png'\r\n                  : 'assets/ngx-len-assets/images/remove-dcgg.png'\r\n              \"\r\n            />\r\n            <span class=\"defaultFontFamily\">{{\r\n              \"LBL_REMOVE_FILTER\" | translate\r\n            }}</span>\r\n          </div>\r\n\r\n          <hr />\r\n\r\n          <div class=\"my-2 mx-1\">\r\n            <mat-radio-group\r\n              [ngModel]=\"filter.selectedValue.currentValue\"\r\n              (ngModelChange)=\"onBooleanSelectChange($event, filter)\"\r\n            >\r\n              <mat-radio-button\r\n                *ngFor=\"let item of [false, true]; let i = index\"\r\n                [value]=\"item\"\r\n                [checked]=\"item === filter.selectedValue.currentValue\"\r\n              >\r\n                {{ (item === false ? \"STR_FALSE\" : \"STR_TRUE\") | translate }}\r\n              </mat-radio-button>\r\n            </mat-radio-group>\r\n          </div>\r\n        </ng-template>\r\n      </li>\r\n    </ng-container>\r\n  </ul>\r\n\r\n  <!-- Can be used if a table gets its data with sequential request like on apply-activate-devices -->\r\n  <div\r\n    *ngIf=\"table && table.loadedPercentage && table.loadedPercentage !== 100\"\r\n    class=\"\r\n      d-flex\r\n      flex-row\r\n      justify-content-between\r\n      tableToolbarProgressBarWrapper\r\n    \"\r\n  >\r\n    <span>{{ \"STR_LOADING_DATA\" | translate }}</span>\r\n    <p-progressBar\r\n      class=\"tableToolbarProgressBar\"\r\n      [value]=\"table.loadedPercentage\"\r\n    ></p-progressBar>\r\n  </div>\r\n  <div id=\"rightSideContainer\">\r\n    <ul class=\"nav nav-pills\">\r\n      <!-- Dropdowns on the right -->\r\n      <li class=\"nav-item images\" *ngFor=\"let action of actions\">\r\n        <ngx-xcng-table-dropdown\r\n          *ngIf=\"table && action.floatRight && action.floatRight === true\"\r\n          [tableId]=\"table.id\"\r\n          [action]=\"action\"\r\n          [disabled]=\"disabled\"\r\n        >\r\n        </ngx-xcng-table-dropdown>\r\n      </li>\r\n    </ul>\r\n\r\n    <!-- Global search input on table (search in all columns) -->\r\n    <div\r\n      *ngIf=\"filters && filters.length\"\r\n      class=\"input-group tableGlobalSearchContainer\"\r\n    >\r\n      <!-- Error popup -->\r\n      <ng-template #globalSearchPopover>\r\n        <div\r\n          class=\"invalidCond\"\r\n          *ngIf=\"tableGlobalSearchValue.hasXssCharsError\"\r\n        >\r\n          <div class=\"invalid-icon\"></div>\r\n          {{ \"MSG_XSS_CHARS_ERROR\" | translate }}\r\n        </div>\r\n        <div\r\n          class=\"invalidCond\"\r\n          *ngIf=\"tableGlobalSearchValue.hasMaxLengthError\"\r\n          translate\r\n          [translateParams]=\"{ value: '1000' }\"\r\n        >\r\n          <div class=\"invalid-icon\"></div>\r\n          MSG_MAX_LENGTH_ERROR\r\n        </div>\r\n      </ng-template>\r\n\r\n      <span class=\"input-group-btn d-flex tableGlobalSearchBtnContainer\">\r\n        <button\r\n          id=\"{{ table.id }}-tableGlobalSearchBtn\"\r\n          type=\"button\"\r\n          class=\"btn btn-default btn-circle btn-lg inline\"\r\n          (click)=\"performGlobalSearchOnTable()\"\r\n          [disabled]=\"\r\n            !tableGlobalSearchValue.currentValue ||\r\n            tableGlobalSearchValue.hasXssCharsError ||\r\n            tableGlobalSearchValue.hasMaxLengthError\r\n          \"\r\n        >\r\n          <i class=\"material-icons\">search</i>\r\n        </button>\r\n        <input\r\n          id=\"{{ table.id }}-tableGlobalSearchInput\"\r\n          class=\"form-control defaultFontFamily tableGlobalSearchInput\"\r\n          type=\"text\"\r\n          value=\"\"\r\n          [placeholder]=\"'LBL_SEARCH' | translate\"\r\n          (keydown.enter)=\"\r\n            !(\r\n              tableGlobalSearchValue.hasMaxLengthError ||\r\n              tableGlobalSearchValue.hasXssCharsError\r\n            )\r\n              ? performGlobalSearchOnTable()\r\n              : null\r\n          \"\r\n          [(ngModel)]=\"tableGlobalSearchValue.currentValue\"\r\n          [ngModelOptions]=\"{ standalone: true }\"\r\n          [popover]=\"globalSearchPopover\"\r\n          (input)=\"\r\n            xssCharactersValidation(tableGlobalSearchValue);\r\n            checkLength(tableGlobalSearchValue)\r\n          \"\r\n          [isOpen]=\"\r\n            tableGlobalSearchValue.hasMaxLengthError ||\r\n            tableGlobalSearchValue.hasXssCharsError\r\n          \"\r\n          triggers=\"\"\r\n          placement=\"left\"\r\n        />\r\n      </span>\r\n\r\n      <span class=\"input-group-btn\">\r\n        <button\r\n          id=\"{{ table.id }}-tableGlobalSearchRemoveBtn\"\r\n          type=\"button\"\r\n          class=\"btn btn-default btn-circle btn-lg\"\r\n          (click)=\"removeGlobalSearchFilter()\"\r\n          [disabled]=\"!tableGlobalSearchValue.previousValue\"\r\n        >\r\n          <i class=\"material-icons\">clear</i>\r\n        </button>\r\n      </span>\r\n    </div>\r\n  </div>\r\n</div>\r\n","import { HttpClient, HttpClientModule } from '@angular/common/http';\r\nimport { LOCALE_ID, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\nimport { LocalStorageService } from './services/localStorageService/localStorage.service';\r\n\r\n@NgModule({\r\n  declarations: [],\r\n  imports: [\r\n    HttpClientModule,\r\n    CommonModule,\r\n\r\n    TranslateModule.forRoot({\r\n      loader: {\r\n        provide: TranslateLoader,\r\n        useFactory: HttpLoaderFactory,\r\n        deps: [HttpClient],\r\n      },\r\n    }),\r\n  ],\r\n  providers: [\r\n    {\r\n      provide: LOCALE_ID,\r\n      deps: [LocalStorageService], //some service handling global settings\r\n      useFactory: (localStorageService: { getLanguage: () => any }) =>\r\n        localStorageService.getLanguage(), //returns locale string\r\n    },\r\n  ],\r\n  exports: [CommonModule, TranslateModule],\r\n})\r\nexport class GlobalConfigurationsModule {}\r\n\r\nexport function HttpLoaderFactory(http: HttpClient) {\r\n  return new TranslateHttpLoader(http, '/assets/i18n/', '.json');\r\n}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Pipe, PipeTransform } from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n@Pipe({ name: 'checkNA' })\r\nexport class NotAvailablePipe implements PipeTransform {\r\n  constructor(private translateSvc: TranslateService) {}\r\n\r\n  transform(val: any, short?: boolean): any {\r\n    let na = short ? this.translateSvc.instant('STR_NOT_AVAILABLE_SHORT') : this.translateSvc.instant('STR_NOT_AVAILABLE');\r\n    try {\r\n      if (typeof val === 'number' && Number.isNaN(val)) return na;\r\n      if (val === undefined || val === null || val === ``) return na;\r\n      if (Array.isArray(val) && !val.length) return na;\r\n      if (Array.isArray(val) && val.length) return val.toString();\r\n      if (typeof val === 'boolean') {\r\n        if (val === true) return this.translateSvc.instant('STR_TRUE');\r\n        else if (val === false) return this.translateSvc.instant('STR_FALSE');\r\n      }\r\n      if (typeof val !== 'number' && typeof val !== 'boolean' && !val.trim()) return na;\r\n    } catch (error) {\r\n      throw new Error(\r\n        \"The value couldn't be checked, perhaps a template should be used in order to process the value \" + typeof val + ' (' + val + ')'\r\n      );\r\n    }\r\n    return val;\r\n  }\r\n}\r\n","import { Pipe, PipeTransform, Inject, LOCALE_ID } from '@angular/core';\r\nimport { DatePipe } from '@angular/common';\r\nimport { NotAvailablePipe } from '../not-available/not-available.pipe';\r\nimport { TranslateService } from '@ngx-translate/core';\r\n\r\n// FIXME: Add possibility to add minutes/hours/days/months/years\r\n// FIXME: Add posibility to substract minutes/hours/days/months/years\r\n\r\nexport type ExtendedDateFormat =\r\n  | 'short'\r\n  | 'medium'\r\n  | 'long'\r\n  | 'full'\r\n  | 'shortDate'\r\n  | 'mediumDate'\r\n  | 'longDate'\r\n  | 'fullDate'\r\n  | 'shortTime'\r\n  | 'mediumTime'\r\n  | 'longTime'\r\n  | 'fullTime'\r\n  | 'shortWithoutYear'\r\n  | 'mediumWithoutYear';\r\n\r\n@Pipe({ name: 'extendedDate' })\r\nexport class ExtendedDatePipe implements PipeTransform {\r\n  DEFAULT_FORMAT: ExtendedDateFormat = 'short';\r\n\r\n  constructor(\r\n    private translateSvc: TranslateService,\r\n    @Inject(LOCALE_ID) private locale: string\r\n  ) {}\r\n  // adding a default format in case you don't want to pass the format\r\n  // then 'yyyy-MM-dd' will be used\r\n  transform(\r\n    date: Date | string,\r\n    format: ExtendedDateFormat = this.DEFAULT_FORMAT,\r\n    forExport: boolean = false\r\n  ): string | any {\r\n    const naPipe = new NotAvailablePipe(this.translateSvc);\r\n    let datePipe = new DatePipe(this.locale);\r\n    if (date) {\r\n      try {\r\n        if (format !== 'shortWithoutYear' && format !== 'mediumWithoutYear') {\r\n          return datePipe.transform(date, format, this.locale);\r\n        } else {\r\n          if (['en-US', 'zh', 'zh-hant', 'ja', 'ko'].includes(this.locale)) {\r\n            if (format === 'shortWithoutYear')\r\n              return datePipe.transform(date, 'MM/dd', this.locale);\r\n            if (format === 'mediumWithoutYear')\r\n              return datePipe.transform(date, 'MMM d', this.locale);\r\n          } else if (['fr', 'de', 'it', 'pt', 'ru', 'es', 'th']) {\r\n            if (format === 'shortWithoutYear')\r\n              return datePipe.transform(date, 'dd/MM', this.locale);\r\n            if (format === 'mediumWithoutYear')\r\n              return datePipe.transform(date, 'd MMM', this.locale);\r\n          }\r\n        }\r\n      } catch (error) {\r\n        return forExport ? date : naPipe.transform('');\r\n      }\r\n    } else return forExport ? date : naPipe.transform('');\r\n  }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { ExtendedDatePipe } from './extended-date/extended-date.pipe';\r\nimport { NotAvailablePipe } from './not-available/not-available.pipe';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [ExtendedDatePipe, NotAvailablePipe],\r\n  imports: [\r\n    CommonModule\r\n  ],\r\n  exports: [ExtendedDatePipe, NotAvailablePipe],\r\n})\r\nexport class PipesModule { }\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { ScrollPanelModule } from 'primeng/scrollpanel';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { TableToolbarComponent } from './table-toolbar.component';\r\nimport { TableDropdownComponent } from '../table-dropdown/table-dropdown.component';\r\nimport { GlobalConfigurationsModule } from '../../global-configurations.module';\r\nimport { DialogModalModule } from '../dialog-modal/dialog-modal.module';\r\nimport { PipesModule } from '../../pipes/pipes.module';\r\nimport { IconsModule } from '../icons/icons.module';\r\n\r\n@NgModule({\r\n  declarations: [TableDropdownComponent, TableToolbarComponent],\r\n  imports: [\r\n    CommonModule,\r\n    BrowserModule,\r\n    GlobalConfigurationsModule,\r\n    BrowserAnimationsModule,\r\n    FormsModule,\r\n    NgxDatatableModule,\r\n    MatFormFieldModule,\r\n    MatInputModule,\r\n    MatCheckboxModule,\r\n    MatRadioModule,\r\n    ScrollPanelModule,\r\n    CalendarModule,\r\n    ProgressBarModule,\r\n    DialogModalModule,\r\n    PopoverModule.forRoot(),\r\n    BsDropdownModule.forRoot(),\r\n    CollapseModule.forRoot(),\r\n    PipesModule,\r\n    IconsModule,\r\n  ],\r\n  exports: [TableToolbarComponent, TableDropdownComponent],\r\n})\r\nexport class TableToolbarXcngModule {}\r\n","import {\r\n  ChangeDetectorRef,\r\n  Component,\r\n  HostBinding,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  SimpleChanges,\r\n  TemplateRef,\r\n  ViewChild,\r\n  ViewChildren,\r\n  EventEmitter,\r\n  QueryList,\r\n  OnChanges,\r\n  OnDestroy,\r\n} from '@angular/core';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport { DatatableComponent } from '@swimlane/ngx-datatable';\r\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\r\nimport { Subject } from 'rxjs';\r\nimport { NgxDatatableColumn } from '../../classes/ngxDatatableColumn';\r\nimport { SortingAndFilteringParamsBuilder } from '../../classes/sortingFilteringUtils/sortingFilteringUtils';\r\nimport { TableFilter } from '../../interfaces/tableFilter';\r\nimport { TreeNode } from '../../interfaces/treeNode';\r\nimport { LocalStorageService } from '../../services/localStorageService/localStorage.service';\r\nimport { ColumnSetting } from '../../services/localStorageService/localStorageItems';\r\nimport { DialogModalComponent } from '../dialog-modal/dialog-modal.component';\r\ndeclare var $: any;\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-ngx-datatable',\r\n  templateUrl: './ngx-datatable.component.html',\r\n  styleUrls: ['./ngx-datatable.component.scss'],\r\n})\r\nexport class NgxDatatableComponent implements OnInit, OnChanges, OnDestroy {\r\n  /** ID of the table */\r\n  @Input() public id: string;\r\n  /** Array of columns */\r\n  @Input() public columns: NgxDatatableColumn[];\r\n  /** Number of total results (this is mandatory, if not provided, the table will render no rows) */\r\n  @Input() public count: number;\r\n  /** True if server-side paging, false if client-side */\r\n  @Input() public externalPaging: boolean;\r\n  /** True if server-side sorting, false if client-side */\r\n  @Input() public externalSorting: boolean;\r\n  /** number of results to request per page (page size) */\r\n  @Input() public limit: number;\r\n  /** Height in pixels of each row, can be 'auto' */\r\n  @Input() public rowHeight: any;\r\n  /** result data returned from api */\r\n  @Input() public rows: any[] = [];\r\n  /** 'cell' single select, 'checkbox' multi select */\r\n  @Input() public selectionType: string;\r\n  /** True if checkboxes and radio buttons should be disabled */\r\n  @Input() public disableSelections: boolean;\r\n  /** Array of objects to designate the initial sort order. Example: [{ prop:'name', dir:'desc' }] */\r\n  @Input() public sorts: { prop: string; dir: string }[];\r\n  /** Function that calls to return data for the table */\r\n  @Input() public fetchDataFn: Function;\r\n  /** Column field that designates uniqueness */\r\n  @Input() public rowIdentifier: string = 'id';\r\n  /** Additional template to be used in mobile view, besides the cell templates defined for each column */\r\n  @Input() public additionalMobileTemplate: TemplateRef<any>;\r\n  /** Boolean indicating if the table should have a footer section or not */\r\n  @Input() public isFooterVisible: boolean = true;\r\n  /** Boolean indicating if the table should have a selected number of elements or not - in case we don't have checkboxes for selecting items, this parameter should be false  */\r\n  @Input() public isSelectedVisible: boolean = true;\r\n  /** Object indicating if the row expansion should be available even in desktop view (not only mobile) and the template which should be rendered */\r\n  @Input() public rowExpansion: {\r\n    enabled: boolean | undefined;\r\n    template: TemplateRef<any> | undefined;\r\n  } = { enabled: undefined, template: undefined };\r\n  /** Builder to be used to change the sortField and sortMode on external sorting and used to fetch data at onPage */\r\n  @Input() public sortingAndFilteringBuilder: SortingAndFilteringParamsBuilder;\r\n  /** Property based on which the inherited card loading indicator will be displayed */\r\n  @Input() public loadingIndicator: boolean;\r\n  /** Can see effect when changing language in servers page (if this is not undefined or true the firmware column would not resize and would appear cut out) */\r\n  @Input() public forceTableResizeOnRowsChange: boolean;\r\n  /** Programatically set this property to false if the request for fetching the rows will be done in the parent component of the ngx-datatable and the table itself will not fetch the initial data*/\r\n  @Input() public isFirstFetchActivated: boolean = true;\r\n  /**Boolean indicating whether the table should save its sort and pagination settings in local storage */\r\n  @Input() public saveTableSettingsInLocalStorage: boolean;\r\n  /**Boolean indicating whether the table should save its column settings in session storage */\r\n  @Input() public saveColumnSettingsInSessionStorage: boolean = true;\r\n  /** Actions to be displayed on right-click on rows. They have the format used in the table-toolbar **/\r\n  // @Input() public contextMenuActions: any[] = [];\r\n  /** Manually set the number of selected rows when the selected array is not accurate */\r\n  @Input() public setSelectionNumber: number;\r\n  /** True if not add export button, false if add export button */\r\n  @Input() public notExport: boolean;\r\n  /**\r\n   * Condition for adding class to specific row\r\n   *\r\n   *  return {\r\n   *   'age-is-ten': row.age % 10 === 0\r\n   * };\r\n   */\r\n  @Input() public rowClass: Function;\r\n  /** If all rows should be included */\r\n  @Input() public allRowsOption: boolean = false;\r\n  /** Percentage of loaded data inside table */\r\n  @Input() public loadedPercentage: number;\r\n  @Input() public isRowDisabled: Function = () => {\r\n    return false;\r\n  };\r\n\r\n  /** disables the table */\r\n  @HostBinding('class') @Input() public disabled: boolean;\r\n\r\n  // Treetable related fields\r\n  /** The ngx-tree-table component extends the ngx-datatable component and in order to inherit all the inputs and outputs\r\n   * it must not have any inputs but we don't use rows as the data structure for the tree table but a list of tree nodes\r\n   */\r\n  @Input() public tree: TreeNode[]; // Tree data structure\r\n  /**\r\n   * Boolean indicating if the tree structure should be static, if this is true then the tree is build using one request and no request is performed at row click\r\n   */\r\n  @Input() public staticTree: boolean = false;\r\n  // Need two way binding on the tree because the default method for sorting in the ngx-datatable creates a shallow copy of the tree and messes up indexes\r\n  @Output() public treeChange: EventEmitter<TreeNode[]> = new EventEmitter();\r\n\r\n  // Export related\r\n  /** The function to be used when fetching all data */\r\n  @Input() public exportFetchDataFunction: Function;\r\n  /** The source of the table, to be translated. E.g. 'HDR_SERVERS' */\r\n  @Input() public source: string;\r\n  /** Function to be called with data array arg in order to modify the data at export all before exporting. So this is the step between getting the data from the backend and exporting the data (maybe some properties need to be added from UI for example) */\r\n  @Input() formatDataFunc: Function;\r\n  /**\r\n   * Policy wizard tree - static tree, no need for fetching data at export all\r\n   * Job details tree - backend tree with only one root - get by id with childrenLevels=-1 in order to get all data\r\n   * Apply and activate devices - backend array converted to a tree in UI - GET requests are paginated - need to pass a format function which is the function that converts from the backend structure to a tree UI structure\r\n   * Repository management - multi root tree paginated on the UI - we get all roots and the children at request (get all means roots and there is no way to add childrenLevels param to this request so we need to perform nrOfRoots requests with childrenLevels=-1 for getting all data)\r\n   *\r\n   * treeFetchDataMethod = 'id' for repo management\r\n   * treeFetchDataMethod = 'all' for apply and activate devices\r\n   * treeFetchDataMethod = 'id' for job details\r\n   * treeFetchDataMethod unused for static trees (trees built in the UI) like policy wizard\r\n   */\r\n  @Input() treeFetchDataMethod: 'id' | 'all' = 'all';\r\n\r\n  // Table toolbar related fields\r\n  @Input() public tableToolbarActions: any[] = [];\r\n  @Input() public isTableToolbarHidden: boolean = false;\r\n  @Input() public activeFilters: TableFilter[];\r\n  @Input() public tableToolbarFilteringConfig: TableFilter[];\r\n  /**\r\n   * Custom Table toolbar icons configuration for filters\r\n   */\r\n  @Input() public tableToolbarIconsClassConfig: object;\r\n\r\n  @ViewChild(DatatableComponent, { static: true }) table: DatatableComponent;\r\n  // @ViewChild(ExportTableDataComponent, { static: true }) exportComp: ExportTableDataComponent;\r\n  @ViewChild('toggleModal', { static: true }) toggleModal: DialogModalComponent;\r\n  @ViewChildren(PopoverDirective) pop: QueryList<PopoverDirective>;\r\n\r\n  /** Outputs on all rows selection, feeds in row array */\r\n  @Output() public allRowsCheck: EventEmitter<Object> = new EventEmitter();\r\n  /** Outputs on row selection, feeds in row array */\r\n  @Output() public rowSelected: EventEmitter<Object> = new EventEmitter();\r\n  /** Outputs on row deselection, feeds in row array */\r\n  @Output() public rowDeselected: EventEmitter<Object> = new EventEmitter();\r\n  /** Outputs on click of a row */\r\n  @Output() public rowClick: EventEmitter<Object> = new EventEmitter();\r\n  /** Outputs on right-click of a row */\r\n  // @Output() public rowRightClick: EventEmitter<Object> = new EventEmitter();\r\n  /** Page selection from the heading checkbox */\r\n  @Output() public headerSelection: EventEmitter<Object> = new EventEmitter();\r\n  @Output() public loadingIndicatorChange: EventEmitter<boolean> =\r\n    new EventEmitter();\r\n  @Output() public removeFilters: EventEmitter<any> = new EventEmitter();\r\n  /** Two way binding */\r\n  @Output() public rowsChange: EventEmitter<any[]> = new EventEmitter();\r\n\r\n  /* Contextual menu */\r\n  // @HostListener('document:click', ['$event'])\r\n  /*  Need to make sure that the menu closes when clicking outside the table */\r\n  // clickedOutside($event: any) {\r\n  //   this.showContextMenu = false;\r\n  // }\r\n\r\n  toggleModalButtons: any;\r\n  // Marks if the select all option is active\r\n  allSelected = false;\r\n  deselected: any[] = [];\r\n  selected: any[] = [];\r\n  selectAllOnPage: any[] = [];\r\n  storedId: any;\r\n  mobileView: boolean;\r\n  rowsOnPage = [10, 15, 25, 50];\r\n  offset = 0;\r\n  sortField = '';\r\n  sortMode: 'asc' | 'desc';\r\n  indexOfFirstDisplayedCol: number = 0;\r\n  currentRadioCheckedValue: boolean = null;\r\n\r\n  /** Boolean indicating if a filter was applied in order not to save pagination settings in local storage\r\n   * The filtering settings are not yet saved in local storage so if the builder gets updated\r\n   * on setPage or onSort with the filter settings there will be no way to remove the filter (because it's not saved anywhere)\r\n   */\r\n  filterWasApplied: boolean = false;\r\n  initialSortingAndFilteringBuilder: SortingAndFilteringParamsBuilder;\r\n\r\n  /* Get the position of the context menu */\r\n  // contextMenuX: any;\r\n  // contextMenuY: any;\r\n  // showContextMenu: boolean = false;\r\n\r\n  /** Used to comunicate with the table toolbar child component. This can be changed to send a string value between components in order to determine which function to call */\r\n  tableToolbarEventsSubject: Subject<string> = new Subject<string>();\r\n\r\n  cdr: ChangeDetectorRef;\r\n\r\n  defaultFooterHeight: any = 'auto';\r\n  defaultRowHeight: any = 'auto';\r\n  defaultSelectionType: any = 'checkbox';\r\n  defaultSortType: any = 'single';\r\n\r\n  constructor(\r\n    private detector: ChangeDetectorRef,\r\n    private translateSvc: TranslateService,\r\n    protected localStorageSvc: LocalStorageService\r\n  ) {\r\n    this.cdr = detector;\r\n    if (this.table && (!this.getRows() || !this.getRows().length)) {\r\n      this.table.messages.emptyMessage = this.getEmptyMessage();\r\n    }\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges) {\r\n    let rowsChange = changes['rows'] ? changes['rows'] : changes['tree'];\r\n    let tableToolbarChange = changes['tableToolbarActions'];\r\n    // let columnChange = changes['columns'];\r\n    // Prevent last column's width resizing in order to prevent the double border; Not needed on ui-lib\r\n    // if (columnChange && this.columns.length > 0) {\r\n    //   this.columns[this.columns.length - 1].resizeable = false;\r\n    // }\r\n\r\n    if (\r\n      rowsChange &&\r\n      this.table &&\r\n      (!this.getRows() || !this.getRows().length) &&\r\n      this.offset == 0\r\n    ) {\r\n      this.table.messages.emptyMessage = this.getEmptyMessage();\r\n    }\r\n\r\n    // Force redraw when changing language to avoid cut-out words in cells\r\n    if (rowsChange && this.forceTableResizeOnRowsChange !== false) {\r\n      setTimeout(() => {\r\n        let event;\r\n        if (typeof Event === 'function') {\r\n          event = new Event('resize');\r\n        } else {\r\n          event = document.createEvent('Event');\r\n          event.initEvent('resize', true, true);\r\n        }\r\n        window.dispatchEvent(event);\r\n      }, 0);\r\n    }\r\n\r\n    if (rowsChange) {\r\n      // Set the global checkbox state (the checkbox in the column header) in order to reflect the current page selection\r\n      // (when a filter was applied it is possible that none of the current rows to be selected or various, in this case, the checkbox state should be 'none' or 'noop')\r\n      this.setGlobalSelectionCheckboxState();\r\n    }\r\n\r\n    if (\r\n      changes['rows'] &&\r\n      changes['loadingIndicator'] &&\r\n      changes['fetchDataFn'] &&\r\n      !this.disableSelections\r\n    ) {\r\n      if (this.allSelected) {\r\n        let header = 0;\r\n        this.selected = [];\r\n        /* When a new page comes, select all the elements that are not marked as unchecked */\r\n        this.getRows().forEach((row) => {\r\n          let index = this.findRow(this.deselected, row);\r\n          if (index === false) {\r\n            header++;\r\n            this.selected.push(row);\r\n          }\r\n        });\r\n\r\n        if (header == 0) {\r\n          this.selectAllOnPage[this.offset] = 'none';\r\n        } else if (this.getRows().length == header) {\r\n          this.selectAllOnPage[this.offset] = 'all';\r\n        } else {\r\n          this.selectAllOnPage[this.offset] = 'noop';\r\n        }\r\n      }\r\n    }\r\n\r\n    /* This condition triggers after the onInit fetch is completed, so no race conditions are possible */\r\n    if (rowsChange && rowsChange.currentValue && rowsChange.previousValue) {\r\n      // If current value is 0 and previous value is not it means that we probably are using the wrong offset.\r\n      // This does not solve the case of switching the manager\r\n      // But in case a filter is applied it does not mean that we are not using a wrong offset\r\n      if (\r\n        !rowsChange.currentValue.length &&\r\n        rowsChange.previousValue.length &&\r\n        this.offset > 0\r\n      ) {\r\n        this.checkForIncorrectResultBasedOnOffset();\r\n      }\r\n      // If there is a manager  change (from select manager or from deleting manager) and the offset was greater than 0 and now there are\r\n      // not that many results then the offset should be set to 0. We don't have any current rows or\r\n      // previous rows but we know there are some because the count is > 0\r\n      if (\r\n        !rowsChange.currentValue.length &&\r\n        !rowsChange.previousValue.length &&\r\n        this.count > 0 &&\r\n        this.offset > 0\r\n      ) {\r\n        this.checkForIncorrectResultBasedOnOffset();\r\n      }\r\n    }\r\n\r\n    // Intercept sort changing in order to change the icon in the column header\r\n    let sortChange = changes['sorts'];\r\n    if (sortChange && sortChange.currentValue[0]) {\r\n      this.sortField = sortChange.currentValue[0].prop;\r\n      this.sortMode = sortChange.currentValue[0].dir;\r\n    }\r\n\r\n    if (tableToolbarChange || !this.isTableToolbarHidden) {\r\n      // this.addExportAction();  // TODO\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.initializeToggleColumnsModalButtons();\r\n    this.setIndexOfFirstDisplayedCol();\r\n    if (window.innerWidth < 1095) {\r\n      this.mobileView = true;\r\n    }\r\n\r\n    // Local storage settings\r\n    this.localStorageSvc.initializePageSettingsInStorage(this.id, 'session');\r\n    if (this.saveColumnSettingsInSessionStorage) {\r\n      this.initializeColumnSettingsInSessionStorage();\r\n    }\r\n    if (this.id && this.fetchDataFn && this.saveTableSettingsInLocalStorage) {\r\n      if (this.isFirstFetchActivated !== false) {\r\n        this.fetchDataBasedOnSessionStorageSettings();\r\n        // Initialize local storage settings if they don't exist for the current table\r\n        this.initializePaginationInfoInSessionStorage();\r\n      }\r\n\r\n      // Apply them if they exist; only the column settings because the pagination settings should be applied in the component\r\n      this.applySessionStoragePaginationSettings();\r\n    }\r\n    if (this.saveColumnSettingsInSessionStorage) {\r\n      this.applySessionStorageColumnSettings();\r\n    }\r\n  }\r\n\r\n  ngOnDestroy() {\r\n    this.callTableToolbarFunction('resetActiveFilterInSessionStorage');\r\n  }\r\n\r\n  getEmptyMessage() {\r\n    return `<img class=\"mb-2 table-no-content\" src=\"assets/ngx-len-assets/images/no-content.svg\" alt=\"No content\" />\r\n        <div>${this.translateSvc.instant('MSG_NO_CONTENT')}</div>\r\n        `;\r\n  }\r\n\r\n  addExportAction() {\r\n    if (this.externalPaging && !this.exportFetchDataFunction)\r\n      console.error(\r\n        'The export function is not present, the export button cannot be added on table with id',\r\n        this.id\r\n      );\r\n    if (\r\n      (this.exportFetchDataFunction || !this.externalPaging) &&\r\n      !this.tableToolbarActions.find((action) =>\r\n        action.id.includes('EXPORT-')\r\n      ) &&\r\n      !this.notExport\r\n    ) {\r\n      this.tableToolbarActions.push({\r\n        id: 'EXPORT-' + this.id,\r\n        label: 'LBL_EXPORT',\r\n        img: {\r\n          src: 'assets/ngx-len-assets/images/64_export.png',\r\n          srcDisabled: 'assets/ngx-len-assets/images/64_export_inactive.png',\r\n        },\r\n        canEnable: () =>\r\n          this.getRows()?.length > 0 ||\r\n          this.rows?.length > 0 ||\r\n          this.selected?.length > 0,\r\n        onClick: () => {\r\n          if (\r\n            this.getRows()?.length > 0 ||\r\n            this.rows?.length > 0 ||\r\n            this.selected?.length > 0\r\n          ) {\r\n            // this.exportComp.showModal(); // TODO: uncomment\r\n          }\r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Returns the rows collection, it can be the tree or the simple array of rows in case of simple datatable\r\n   */\r\n  getRows(): any[] {\r\n    return this.tree ? this.tree : this.rows;\r\n  }\r\n\r\n  /**\r\n   * Scenario: the user selects a manager which gives him 5 pages results and clicks the last page\r\n   * then he selects another manager which has only one page of results but the offset for that table is 5\r\n   * he will see no data in the table but will see data in the graph, we must reset the offset.\r\n   * This also happens when the user removes an LXCA from the Resource Managers page.\r\n   */\r\n  checkForIncorrectResultBasedOnOffset() {\r\n    setTimeout(() => {\r\n      if (this.count > this.limit) {\r\n        this.offset = (this.count - this.limit) / this.limit;\r\n      } else {\r\n        this.offset = 0;\r\n      }\r\n      this.refresh();\r\n      this.saveCurrentPaginationSettingsInLocalStorage();\r\n    }, 0);\r\n  }\r\n\r\n  initializeToggleColumnsModalButtons() {\r\n    this.toggleModalButtons = [\r\n      {\r\n        id: this.id + '-closeToggleColumnsModal',\r\n        name: 'LBL_CLOSE',\r\n        action: this.closeModal.bind(this),\r\n        classes: 'btn-primary',\r\n        type: 'button',\r\n        addForm: false,\r\n      },\r\n    ];\r\n  }\r\n\r\n  fetchDataBasedOnSessionStorageSettings() {\r\n    if (!this.areActiveFiltersPending()) {\r\n      if (this.saveTableSettingsInLocalStorage) {\r\n        let retrievedPaginationInfo = undefined;\r\n        if (this.sortingAndFilteringBuilder)\r\n          retrievedPaginationInfo =\r\n            this.localStorageSvc.retrievePaginationInfoDataWithBuilder(this.id);\r\n        else\r\n          retrievedPaginationInfo =\r\n            this.localStorageSvc.retrievePaginationInfoDataWithoutBuilder(\r\n              this.id\r\n            );\r\n        if (retrievedPaginationInfo) {\r\n          this.loadingIndicatorChange.emit(true);\r\n          this.initializePaginationDataBasedOnSessionStorage();\r\n          if (this.filterWasApplied === true)\r\n            this.callTableToolbarFunction(\r\n              'applyLastActiveFilterFromSessionStorage'\r\n            );\r\n\r\n          if (this.sortingAndFilteringBuilder)\r\n            this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n          else\r\n            this.fetchDataFn(\r\n              this.offset * this.limit,\r\n              this.limit,\r\n              this.sortField,\r\n              this.sortMode\r\n            );\r\n        } else {\r\n          this.localStorageSvc.initializePageSettingsInStorage(\r\n            this.id,\r\n            'session'\r\n          );\r\n          this.initializePaginationInfoInSessionStorage();\r\n          this.fetchDataBasedOnSessionStorageSettings();\r\n        }\r\n      } else {\r\n        this.loadingIndicatorChange.emit(true);\r\n        if (this.filterWasApplied === true)\r\n          this.callTableToolbarFunction(\r\n            'applyLastActiveFilterFromSessionStorage'\r\n          );\r\n        if (this.sortingAndFilteringBuilder)\r\n          this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n        else\r\n          this.fetchDataFn(\r\n            this.offset * this.limit,\r\n            this.limit,\r\n            this.sortField,\r\n            this.sortMode\r\n          );\r\n      }\r\n    }\r\n  }\r\n\r\n  initializePaginationDataBasedOnSessionStorage() {\r\n    let retrievedPaginationInfo: any;\r\n    if (this.sortingAndFilteringBuilder) {\r\n      retrievedPaginationInfo =\r\n        this.localStorageSvc.retrievePaginationInfoDataWithBuilder(this.id);\r\n      let initialBuilder = new SortingAndFilteringParamsBuilder(\r\n        this.sortingAndFilteringBuilder\r\n      );\r\n      if (retrievedPaginationInfo) {\r\n        [\r\n          this.offset,\r\n          this.limit,\r\n          this.sortingAndFilteringBuilder,\r\n          this.sortField,\r\n          this.sortMode,\r\n        ] = retrievedPaginationInfo;\r\n        // Need to set the sorts array or otherwise the sorting arrow won't appear\r\n        this.sorts = [{ dir: this.sortMode, prop: this.sortField }];\r\n      }\r\n      if (!this.sortingAndFilteringBuilder)\r\n        this.sortingAndFilteringBuilder = initialBuilder;\r\n    } else {\r\n      retrievedPaginationInfo =\r\n        this.localStorageSvc.retrievePaginationInfoDataWithoutBuilder(this.id);\r\n      if (retrievedPaginationInfo) {\r\n        [this.offset, this.limit, this.sortField, this.sortMode] =\r\n          retrievedPaginationInfo;\r\n        this.sorts = [{ dir: this.sortMode, prop: this.sortField }];\r\n      }\r\n    }\r\n  }\r\n\r\n  closeModal() {\r\n    this.toggleModal.modal.hide();\r\n  }\r\n\r\n  onResize(evt: any) {\r\n    // recalculate table when the navigation meniu is opend on low rezolution\r\n    // so that the table text is readable\r\n    if (evt.detail && evt.detail.nav && window.innerWidth <= 1095) {\r\n      setTimeout(() => {\r\n        this.table.recalculate();\r\n      }, 500);\r\n    }\r\n\r\n    if (window.innerWidth >= 1095) {\r\n      this.mobileView = false;\r\n      if (this.table.rowDetail) {\r\n        this.table.rowDetail.collapseAllRows();\r\n      }\r\n      setTimeout(() => {\r\n        this.table.recalculate();\r\n      }, 500);\r\n    } else {\r\n      this.mobileView = true;\r\n    }\r\n  }\r\n\r\n  clickedRow(evt: any) {\r\n    if (\r\n      (this.selectionType === 'cell' ||\r\n        this.selectionType === 'checkbox' ||\r\n        this.selectionType === 'row') &&\r\n      evt.type === 'click' &&\r\n      !evt.cellElement.classList.contains('leftCellClass')\r\n    ) {\r\n      /** Male sure that the click event is not triggered by a selection in a cell or a selection in a tooltip */\r\n      if (window.getSelection()?.type !== 'Range') this.rowClick.emit(evt.row);\r\n    }\r\n  }\r\n\r\n  /* Contextual menu can be activated if needed */\r\n  // rightClickedRow(event: any) {\r\n  //   /*  A context menu can also be added for the header, if we need it  */\r\n  //   if (event.type === 'body') {\r\n  //     this.rowRightClick.emit(event.content);\r\n  //     this.contextMenuX = event.event.x;\r\n  //     this.contextMenuY = event.event.y;\r\n  //     this.showContextMenu = true;\r\n  //     event.event.preventDefault();\r\n  //     event.event.stopPropagation();\r\n  //   }\r\n  // }\r\n\r\n  checkState(btn: any, row: any) {\r\n    // Handles single select\r\n    // Set timeout of 0 needed to deselect the radio buttons\r\n    if (!this.disableSelections) {\r\n      setTimeout(() => {\r\n        if (this.storedId === row[this.rowIdentifier]) {\r\n          this.storedId = null;\r\n          this.selected.splice(0, this.selected.length);\r\n          if (btn) {\r\n            btn.checked = false;\r\n          }\r\n          this.rowDeselected.emit(row);\r\n          this.detector.detectChanges();\r\n        } else {\r\n          this.storedId = row[this.rowIdentifier];\r\n          this.selected.splice(0, this.selected.length);\r\n          this.selected[0] = row;\r\n          this.rowSelected.emit(row);\r\n          this.detector.detectChanges();\r\n        }\r\n      }, 0);\r\n    }\r\n  }\r\n\r\n  onCheckboxSelect(btn: any, row: any) {\r\n    if (btn.checked) {\r\n      this.rowDeselected.emit(row);\r\n    } else {\r\n      this.rowSelected.emit(row);\r\n    }\r\n  }\r\n\r\n  onSelect(evt: any) {\r\n    // Handle multi select\r\n    if (this.selectionType === 'cell' && evt.selected[0]) {\r\n      this.checkState(null, evt.selected[0]);\r\n    } else {\r\n      this.selected.splice(0, this.selected.length);\r\n      this.selected.push(\r\n        ...evt.selected.filter((r: any) => !this.isRowDisabled(r))\r\n      );\r\n      const selectedRowIds = this.selected.map((row) => {\r\n        return row[this.rowIdentifier];\r\n      }, this);\r\n      // const selectedRowsOnCurrentPage = this.rows.filter((row) => { return selectedRowIds.indexOf(row[this.rowIdentifier]) !== -1; }, this);\r\n\r\n      if (this.allSelected) {\r\n        let pageDeselected = this.getRows().filter((row) => {\r\n          return selectedRowIds.indexOf(row[this.rowIdentifier]) === -1;\r\n        }, this);\r\n        pageDeselected.forEach((unchecked) => {\r\n          let index = this.findRow(this.deselected, unchecked);\r\n          if (index === false) {\r\n            this.deselected.push(unchecked);\r\n          }\r\n        });\r\n        this.removeFromDeselectedArray();\r\n      }\r\n      this.setGlobalSelectionCheckboxState();\r\n    }\r\n    this.selected = [...this.selected];\r\n  }\r\n\r\n  setGlobalSelectionCheckboxState() {\r\n    let tableRows = this.getRows();\r\n    if (tableRows && Array.isArray(tableRows)) {\r\n      const selectedRowIds = this.selected.map((row) => {\r\n        return row[this.rowIdentifier];\r\n      }, this);\r\n      const selectedRowsOnCurrentPage = tableRows.filter((row) => {\r\n        return selectedRowIds.indexOf(row[this.rowIdentifier]) !== -1;\r\n      }, this);\r\n      if (selectedRowsOnCurrentPage.length > 0) {\r\n        if (selectedRowsOnCurrentPage.length === tableRows.length) {\r\n          this.selectAllOnPage[this.offset] = 'all';\r\n        } else {\r\n          this.selectAllOnPage[this.offset] = 'noop';\r\n        }\r\n      } else {\r\n        this.selectAllOnPage[this.offset] = 'none';\r\n      }\r\n    }\r\n  }\r\n\r\n  reordered(evt: any) {\r\n    if (\r\n      (this.selectionType === 'cell' || this.selectionType === 'checkbox') &&\r\n      evt.newValue === 0\r\n    ) {\r\n      this.table.onColumnReorder({\r\n        column: evt.column,\r\n        newValue: evt.prevValue,\r\n        prevValue: 0,\r\n      });\r\n    } else {\r\n      if (\r\n        (this.selectionType === 'cell' || this.selectionType === 'checkbox') &&\r\n        evt.prevValue === 0\r\n      ) {\r\n        // don't update columns in response to the undoing (above) of dragging a column over the pinned checkboxes column\r\n        return;\r\n      }\r\n\r\n      const srcColName = this.table._internalColumns[evt.newValue].name;\r\n      const tgtColName =\r\n        this.table._internalColumns[\r\n          evt.newValue < evt.prevValue ? evt.newValue + 1 : evt.newValue - 1\r\n        ].name;\r\n\r\n      let newIndex: any;\r\n      let prevIndex: any;\r\n\r\n      for (let i = 0; i < this.columns.length; i++) {\r\n        if (this.columns[i].name === srcColName) {\r\n          prevIndex = i;\r\n        } else if (this.columns[i].name === tgtColName) {\r\n          newIndex = i;\r\n        }\r\n      }\r\n\r\n      if (newIndex > prevIndex) {\r\n        const movedCol = this.columns[prevIndex];\r\n        for (let i = prevIndex; i < newIndex; i++) {\r\n          this.columns[i] = this.columns[i + 1];\r\n        }\r\n        this.columns[newIndex] = movedCol;\r\n      } else {\r\n        const movedCol = this.columns[prevIndex];\r\n        for (let i = prevIndex; i > newIndex; i--) {\r\n          this.columns[i] = this.columns[i - 1];\r\n        }\r\n        this.columns[newIndex] = movedCol;\r\n      }\r\n      // this.updateColumnSettings();\r\n      this.localStorageSvc.updateSessionStorageColumnSettings(\r\n        this.id,\r\n        this.createColumnSettingsBasedOnCurrentData()\r\n      );\r\n      this.setIndexOfFirstDisplayedCol();\r\n    }\r\n  }\r\n\r\n  toggleExpandRow(row: any) {\r\n    const hasTemplate = this.rowExpansion.template;\r\n    const isMobileView = this.mobileView;\r\n\r\n    if (hasTemplate || isMobileView) {\r\n      this.table.rowDetail.toggleExpandRow(row);\r\n    }\r\n  }\r\n\r\n  setPage(pageInfo: any) {\r\n    this.offset = pageInfo.offset;\r\n    this.limit = pageInfo.limit;\r\n    // Have to check if the fetch data function exists because on the firmware tooltip component it does not\r\n    if (this.fetchDataFn && this.externalPaging === true) {\r\n      this.loadingIndicatorChange.emit(true);\r\n      if (this.sortingAndFilteringBuilder) {\r\n        this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n          this.sortingAndFilteringBuilder\r\n        )\r\n          .removeParameter('offset')\r\n          .removeParameter('limit')\r\n          .setOffset(this.offset * this.limit)\r\n          .setLimit(this.limit);\r\n        this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n      } else\r\n        this.fetchDataFn(\r\n          this.offset * this.limit,\r\n          this.limit,\r\n          this.sortField,\r\n          this.sortMode\r\n        );\r\n      if (this.saveTableSettingsInLocalStorage && !this.filterWasApplied)\r\n        this.saveCurrentPaginationSettingsInLocalStorage();\r\n      if (this.filterWasApplied)\r\n        this.callTableToolbarFunction('saveActiveFilterInSessionStorage');\r\n    }\r\n  }\r\n\r\n  setRowsPerPage(nrOfRows: any) {\r\n    this.limit = nrOfRows;\r\n    this.offset = 0;\r\n    if (this.sortingAndFilteringBuilder) {\r\n      this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n        this.sortingAndFilteringBuilder\r\n      )\r\n        .removeParameter('offset')\r\n        .setOffset(this.offset)\r\n        .removeParameter('limit')\r\n        .setLimit(this.limit);\r\n\r\n      this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n\r\n      if (this.saveTableSettingsInLocalStorage && !this.filterWasApplied)\r\n        this.saveCurrentPaginationSettingsInLocalStorage();\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Method used to apply a filter - to fetch data based on a new sorting and filtering builder\r\n   * @param newSortingAndFilteringBuilder\r\n   */\r\n  applyFilter(\r\n    newSortingAndFilteringBuilder: SortingAndFilteringParamsBuilder,\r\n    sortField?: string,\r\n    sortMode?: 'asc' | 'desc',\r\n    limit?: number,\r\n    saveActiveFiltersBeforeFetching?: boolean\r\n  ) {\r\n    if (this.filterWasApplied) {\r\n      // Before applying a filter, get the selection in order to always retain it\r\n      this.setSelectedItems([...this.table.selected]);\r\n\r\n      this.sortingAndFilteringBuilder = newSortingAndFilteringBuilder;\r\n      this.loadingIndicatorChange.emit(true);\r\n      // Reset offset, sortfield and sortmode because they are no longer active when a filter is applied because the data changes\r\n      this.offset = 0;\r\n      limit != undefined ? (this.limit = limit) : (this.limit = this.limit);\r\n\r\n      if (this.sortingAndFilteringBuilder)\r\n        this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n          this.sortingAndFilteringBuilder\r\n        )\r\n          .removeParameter('offset')\r\n          .removeParameter('limit')\r\n          .setOffset(0)\r\n          .setLimit(this.limit);\r\n\r\n      if (sortField && sortMode) {\r\n        this.sortField = sortField;\r\n        this.sortMode = sortMode;\r\n        this.sorts = [{ prop: this.sortField, dir: this.sortMode }];\r\n        if (this.sortingAndFilteringBuilder)\r\n          this.sortingAndFilteringBuilder =\r\n            new SortingAndFilteringParamsBuilder(\r\n              this.sortingAndFilteringBuilder\r\n            )\r\n              .removeParameter('sort')\r\n              .setSorting([{ name: this.sortField, order: this.sortMode }]);\r\n      } else {\r\n        this.sortField = '';\r\n        this.sortMode = 'asc';\r\n        this.sorts = [{ prop: this.sortField, dir: this.sortMode }];\r\n      }\r\n\r\n      if (this.fetchDataFn) this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n      this.filterWasApplied = true;\r\n      this.callTableToolbarFunction('saveActiveFilterInSessionStorage');\r\n    } else {\r\n      if (saveActiveFiltersBeforeFetching)\r\n        this.callTableToolbarFunction('saveActiveFilterInSessionStorage');\r\n      // The filtering can be placed on a table which does not save its settings, therefore, in that case, we should not use the builder in local storage\r\n      if (this.id && this.fetchDataFn && this.saveTableSettingsInLocalStorage) {\r\n        this.fetchDataBasedOnSessionStorageSettings();\r\n      } else {\r\n        if (this.sortingAndFilteringBuilder)\r\n          this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n        else\r\n          this.fetchDataFn(\r\n            this.offset * this.limit,\r\n            this.limit,\r\n            this.sortField,\r\n            this.sortMode\r\n          );\r\n      }\r\n      this.setSelectedItems([...this.table.selected]);\r\n    }\r\n  }\r\n\r\n  /** Notify the table toolbar component to remove all applied filters\r\n   * This is necessary for the events table because the filters are not saved anywhere so there is no way to reconfigure them and apply them and on tab change the sorting and filtering builder is re-initialized so\r\n   * a filter is marked as applied and it appears in the UI but it does not reflect in the sorting and filtering builder\r\n   */\r\n  removeTableToolbarFilters() {\r\n    this.removeFilters.emit();\r\n  }\r\n\r\n  rowIdentity(row: any) {\r\n    return row[this.rowIdentifier];\r\n  }\r\n\r\n  getIdFunc() {\r\n    return this.rowIdentity.bind(this);\r\n  }\r\n\r\n  togglePageSelection(event: any) {\r\n    // If it's indeterminate, deselect the selected rows from that page\r\n    if (this.selectAllOnPage[this.offset] === 'noop') {\r\n      this.selectAllOnPage[this.offset] = 'none';\r\n      this.getRows().forEach((obj) => {\r\n        this.selected = this.selected.filter(\r\n          (selected) => selected[this.rowIdentifier] !== obj[this.rowIdentifier]\r\n        );\r\n      });\r\n      event.source.checked = false;\r\n      if (this.allSelected) {\r\n        this.addToDeselectedArray();\r\n      }\r\n    }\r\n    // If no rows are selected, select all rows\r\n    else if (\r\n      this.selectAllOnPage[this.offset] === 'none' ||\r\n      !this.selectAllOnPage[this.offset]\r\n    ) {\r\n      // Notify groups component when the user selects all but there is only one on page - the buttons edit and delete should be enabled\r\n      if (this.getRows().length === 1) {\r\n        this.rowSelected.emit(this.getRows()[0]);\r\n      }\r\n\r\n      this.selected.push(...this.getRows());\r\n      this.selectAllOnPage[this.offset] = 'all';\r\n\r\n      /* Not yet used, to be added with select all */\r\n      if (this.allSelected) {\r\n        this.removeFromDeselectedArray();\r\n      }\r\n    }\r\n    // If all rows are selected, deselect all rows on that page\r\n    else if (this.selectAllOnPage[this.offset] === 'all') {\r\n      // Notify groups component when the user deselects all but there is only one on page - the buttons edit and delete should be disabled\r\n      if (this.getRows().length === 1) {\r\n        this.rowDeselected.emit(this.getRows()[0]);\r\n      }\r\n\r\n      this.getRows().forEach((obj) => {\r\n        this.selected = this.selected.filter(\r\n          (selected) => selected[this.rowIdentifier] !== obj[this.rowIdentifier]\r\n        );\r\n      });\r\n      this.selectAllOnPage[this.offset] = 'none';\r\n      /* Not yet used, to be added with select all */\r\n      if (this.allSelected) {\r\n        this.addToDeselectedArray();\r\n      }\r\n    }\r\n    this.selected = this.selected.filter((r) => !this.isRowDisabled(r));\r\n    /* Already emits rowSelected if there's only one row */\r\n    if (this.getRows().length !== 1) {\r\n      this.headerSelection.emit(this.selected);\r\n    }\r\n    this.allRowsCheck.emit(this.selected);\r\n  }\r\n\r\n  /* Return the index of a row inside a rows array */\r\n  findRow(arr: any, obj: any) {\r\n    for (let i = 0; i < arr.length; i++) {\r\n      if (obj[this.rowIdentifier] === arr[i][this.rowIdentifier]) return i;\r\n    }\r\n    return false;\r\n  }\r\n\r\n  /* Remove recently selected elements from the deselected array */\r\n  removeFromDeselectedArray() {\r\n    this.selected.forEach((selectedRow) => {\r\n      let index = this.findRow(this.deselected, selectedRow);\r\n      if (index !== false) {\r\n        this.deselected.splice(index, 1);\r\n      }\r\n    });\r\n  }\r\n\r\n  /* Add recently unchecked elements to the deselected array */\r\n  addToDeselectedArray() {\r\n    this.getRows().forEach((row) => {\r\n      let index = this.findRow(this.deselected, row);\r\n      if (index === false) {\r\n        this.deselected.push(row);\r\n      }\r\n    });\r\n  }\r\n\r\n  selectPage(event: any) {\r\n    this.getRows().forEach((obj) => {\r\n      let index = this.findRow(this.selected, obj);\r\n      if (index === false) {\r\n        this.selected.push(obj);\r\n      }\r\n    });\r\n\r\n    if (this.allSelected) {\r\n      this.removeFromDeselectedArray();\r\n    }\r\n\r\n    this.selectAllOnPage[this.offset] = 'all';\r\n    this.headerSelection.emit('select page');\r\n  }\r\n\r\n  clearPage(event: any) {\r\n    this.getRows().forEach((obj) => {\r\n      this.selected = this.selected.filter(\r\n        (selected) => selected[this.rowIdentifier] !== obj[this.rowIdentifier]\r\n      );\r\n      if (this.allSelected) {\r\n        this.addToDeselectedArray();\r\n      }\r\n    });\r\n    this.selectAllOnPage[this.offset] = 'none';\r\n    this.headerSelection.emit('clear page');\r\n  }\r\n\r\n  selectAll(event: any) {\r\n    let nrOfPages = Math.ceil(this.count / this.limit);\r\n    this.allSelected = true;\r\n    this.deselected = [];\r\n    this.selected = [];\r\n    this.selected.push(...this.getRows());\r\n    for (let i = 0; i < nrOfPages; i++) this.selectAllOnPage[i] = 'all';\r\n    this.headerSelection.emit('select all');\r\n  }\r\n\r\n  clearAll(event: any) {\r\n    this.storedId = null;\r\n    let nrOfPages = Math.ceil(this.count / this.limit);\r\n    this.allSelected = false;\r\n    this.deselected = [];\r\n    this.selected = [];\r\n    for (let i = 0; i < nrOfPages; i++) {\r\n      this.selectAllOnPage[i] = 'none';\r\n    }\r\n  }\r\n\r\n  popOverShown() {\r\n    const _this = this;\r\n    $('.datatable-body-cell-label').on('mouseleave', function () {\r\n      _this.pop.forEach((el) => {\r\n        el.hide();\r\n      });\r\n      $('.datatable-body-cell-label').off();\r\n    });\r\n  }\r\n\r\n  toggleDisplay(col: NgxDatatableColumn) {\r\n    if (col.notDisplayed) {\r\n      col.notDisplayed = !col.notDisplayed;\r\n    } else {\r\n      col.notDisplayed = true;\r\n    }\r\n    this.localStorageSvc.updateSessionStorageColumnSettings(\r\n      this.id,\r\n      this.createColumnSettingsBasedOnCurrentData()\r\n    );\r\n    this.setIndexOfFirstDisplayedCol();\r\n  }\r\n\r\n  onSort(event: any) {\r\n    const sort = event.sorts[0];\r\n    this.sorts = event.sorts;\r\n    this.sortField = sort.prop;\r\n    this.sortMode = sort.dir;\r\n    if (this.externalSorting === true) {\r\n      this.loadingIndicatorChange.emit(true);\r\n      if (this.sortingAndFilteringBuilder) {\r\n        this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n          this.sortingAndFilteringBuilder\r\n        )\r\n          .removeParameter('offset')\r\n          .setOffset(this.offset * this.limit)\r\n          .removeParameter('sort')\r\n          .setSorting([{ name: this.sortField, order: this.sortMode }]);\r\n\r\n        this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n      } else\r\n        this.fetchDataFn(\r\n          this.offset * this.limit,\r\n          this.limit,\r\n          this.sortField,\r\n          this.sortMode\r\n        );\r\n    } else {\r\n      /** Internal rows represents the property that contains the sorted rows. NgxDatatable does not explicitly change the rows property */\r\n      this.rows = [...this.table._internalRows];\r\n    }\r\n    this.table.offset = this.offset;\r\n    if (this.saveTableSettingsInLocalStorage && !this.filterWasApplied)\r\n      this.saveCurrentPaginationSettingsInLocalStorage();\r\n  }\r\n\r\n  setIndexOfFirstDisplayedCol() {\r\n    this.indexOfFirstDisplayedCol = 0;\r\n    if (this.columns && this.columns.length) {\r\n      let mobileViewBaseColumn = this.columns.filter(\r\n        (c) => c.isMobileViewBaseColumn === true\r\n      );\r\n      if (mobileViewBaseColumn.length > 1)\r\n        throw new Error(\r\n          'Check array of columns. There should be only one base column for mobile view.' +\r\n            this.id\r\n        );\r\n      else if (mobileViewBaseColumn.length === 0)\r\n        throw new Error(\r\n          'There should be at least one column marked as base column for mobile view.' +\r\n            this.id\r\n        );\r\n      else {\r\n        this.indexOfFirstDisplayedCol = this.columns.indexOf(\r\n          mobileViewBaseColumn[0]\r\n        );\r\n      }\r\n    }\r\n  }\r\n\r\n  showDataErrorMessage() {\r\n    this.table.messages.emptyMessage = this.translateSvc.instant(\r\n      'MSG_DATA_REQUEST_ERROR'\r\n    );\r\n  }\r\n\r\n  refresh() {\r\n    // Need to reset selection on refresh because of the following scenario:\r\n    // User has 1 row with prop2=100 and hits refresh and the the refreshed row has prop2=50\r\n    // Then we will have in .selected a row with prop2=100 when it should be 50\r\n    this.resetSelection();\r\n    if (this.sortingAndFilteringBuilder) {\r\n      this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n        this.sortingAndFilteringBuilder\r\n      )\r\n        .removeParameter('offset')\r\n        .setOffset(this.offset * this.limit);\r\n\r\n      this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n    } else {\r\n      this.fetchDataFn(\r\n        this.offset * this.limit,\r\n        this.limit,\r\n        this.sortField,\r\n        this.sortMode\r\n      );\r\n    }\r\n    this.table.offset = this.offset;\r\n    if (this.table.bodyComponent) this.table.bodyComponent.updateOffsetY(0);\r\n  }\r\n\r\n  setSelectedItems(selectedItems: any[]) {\r\n    this.onSelect({ selected: selectedItems });\r\n  }\r\n\r\n  resetSelection() {\r\n    this.onSelect({ selected: [] });\r\n    this.storedId = undefined;\r\n    this.setGlobalSelectionCheckboxState();\r\n  }\r\n\r\n  removeAllFilters() {\r\n    this.callTableToolbarFunction('removeAllFilters');\r\n  }\r\n\r\n  callTableToolbarFunction(\r\n    functionName:\r\n      | 'removeAllFilters'\r\n      | 'applyLastActiveFilterFromSessionStorage'\r\n      | 'saveActiveFilterInSessionStorage'\r\n      | 'resetActiveFilterInSessionStorage'\r\n  ) {\r\n    this.tableToolbarEventsSubject.next(functionName);\r\n  }\r\n\r\n  // --------------- Local Storage related methods ---------------\r\n\r\n  saveCurrentPaginationSettingsInLocalStorage() {\r\n    this.localStorageSvc.updateSessionStorageTablePaginationSettings(\r\n      this.id,\r\n      this.localStorageSvc.createPaginationInfoBasedOnData(\r\n        this.offset,\r\n        this.limit,\r\n        this.sortingAndFilteringBuilder,\r\n        this.sortField,\r\n        this.sortMode\r\n      )\r\n    );\r\n  }\r\n\r\n  initializeColumnSettingsInSessionStorage() {\r\n    let currentPageSettings = this.localStorageSvc.getUiSettingsFromStorage(\r\n      this.id,\r\n      'session'\r\n    )[1];\r\n    if (!currentPageSettings.columnSettings)\r\n      this.localStorageSvc.updateSessionStorageColumnSettings(\r\n        this.id,\r\n        this.createColumnSettingsBasedOnCurrentData()\r\n      );\r\n  }\r\n\r\n  createColumnSettingsBasedOnCurrentData(): ColumnSetting[] {\r\n    let columnSettings: ColumnSetting[] = [];\r\n    if (this.columns)\r\n      this.columns.forEach((col: NgxDatatableColumn) => {\r\n        columnSettings.push({\r\n          name: col.name,\r\n          notDisplayed: col.notDisplayed ? true : false,\r\n        });\r\n      });\r\n    return columnSettings;\r\n  }\r\n\r\n  applySessionStorageColumnSettings() {\r\n    let currentPageSettings = this.localStorageSvc.getUiSettingsFromStorage(\r\n      this.id,\r\n      'session'\r\n    )[1];\r\n    if (currentPageSettings) {\r\n      let columnSettings = currentPageSettings.columnSettings;\r\n      columnSettings.forEach((cs: ColumnSetting) => {\r\n        let column = this.columns.find(\r\n          (c: NgxDatatableColumn) => c.name === cs.name\r\n        );\r\n        if (column) {\r\n          column.notDisplayed = cs.notDisplayed;\r\n        }\r\n      });\r\n    }\r\n  }\r\n\r\n  initializePaginationInfoInSessionStorage() {\r\n    let currentPageSettings = this.localStorageSvc.getUiSettingsFromStorage(\r\n      this.id,\r\n      'session'\r\n    )[1];\r\n    if (currentPageSettings && !currentPageSettings.paginationInfo)\r\n      this.localStorageSvc.updateSessionStorageTablePaginationSettings(\r\n        this.id,\r\n        this.localStorageSvc.createPaginationInfoBasedOnData(\r\n          this.offset,\r\n          this.limit,\r\n          this.sortingAndFilteringBuilder,\r\n          this.sortField,\r\n          this.sortMode\r\n        )\r\n      );\r\n  }\r\n\r\n  applySessionStoragePaginationSettings() {\r\n    let currentPageLocalStorageSettings =\r\n      this.localStorageSvc.getUiSettingsFromStorage(this.id, 'session')[1];\r\n    if (\r\n      currentPageLocalStorageSettings &&\r\n      currentPageLocalStorageSettings.paginationInfo\r\n    ) {\r\n      let paginationInfo = currentPageLocalStorageSettings.paginationInfo;\r\n      this.offset = paginationInfo.offset;\r\n      this.limit = paginationInfo.limit;\r\n      this.sortField = paginationInfo.sortField;\r\n      this.sortMode = paginationInfo.sortMode;\r\n      this.sorts = [\r\n        { prop: paginationInfo.sortField, dir: paginationInfo.sortMode },\r\n      ];\r\n    }\r\n  }\r\n\r\n  listProp(arr: any[]): string[] {\r\n    if (arr && arr.length) return arr.map((a) => a.name);\r\n    return [];\r\n  }\r\n\r\n  /**\r\n   * Method returning true if any filters must be applied by the table toolbar component BEFORE fetching data\r\n   * So we need to know if there any filters must be applied when arriving on the page, before fetching the data\r\n   *\r\n   */\r\n  private areActiveFiltersPending(): boolean {\r\n    return this.activeFilters && this.activeFilters.length ? true : false;\r\n  }\r\n\r\n  toggleSorting(value: boolean) {\r\n    this.columns.forEach((col) => (col.sortable = value));\r\n    if (!value) {\r\n      this.sorts = [];\r\n      this.sortField = '';\r\n    }\r\n  }\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n<div\r\n  [ngClass]=\"{ disableTable: disabled }\"\r\n  id=\"{{ id }}TableContainer\"\r\n  [loading]=\"loadingIndicator\"\r\n>\r\n  <!-- Toggle Columns Dialog -->\r\n  <ngx-xcng-dialog-modal\r\n    #toggleModal\r\n    id=\"{{ id }}-toggleColModal\"\r\n    modalTitle=\"{{ 'LBL_TOGGLE_COLUMNS' | translate }}\"\r\n    [buttonArray]=\"toggleModalButtons\"\r\n    class=\"modal-sm\"\r\n    buttonText=\"{{ 'LBL_CLOSE' | translate }}\"\r\n    hide=\"true\"\r\n  >\r\n    <div class=\"toggleColumns\" *ngFor=\"let col of columns; index as i\">\r\n      <label [attr.for]=\"id + '-' + col.name\">\r\n        <mat-checkbox\r\n          [id]=\"id + '-' + col.name\"\r\n          (change)=\"toggleDisplay(col)\"\r\n          [checked]=\"!col.notDisplayed\"\r\n          [disabled]=\"col.alwaysDisplayed\"\r\n        ></mat-checkbox>\r\n        {{ col.name | translate }}\r\n      </label>\r\n    </div>\r\n  </ngx-xcng-dialog-modal>\r\n\r\n  <!-- Table toolbar -->\r\n  <ngx-xcng-table-toolbar\r\n    [disabled]=\"disabled\"\r\n    *ngIf=\"table && isTableToolbarHidden !== true\"\r\n    [actions]=\"tableToolbarActions\"\r\n    [table]=\"this\"\r\n    [tableFilteringConfig]=\"tableToolbarFilteringConfig\"\r\n    [tableToolbarIconsClassConfig]=\"tableToolbarIconsClassConfig\"\r\n    [tableEvents]=\"tableToolbarEventsSubject.asObservable()\"\r\n    [(activeFilters)]=\"activeFilters\"\r\n    [showRefreshButton]=\"fetchDataFn ? true : false\"\r\n  >\r\n  </ngx-xcng-table-toolbar>\r\n  <!-- Data table -->\r\n  <ngx-datatable\r\n    #table\r\n    [id]=\"id\"\r\n    class=\"material\"\r\n    [columnMode]=\"'force'\"\r\n    [columns]=\"columns\"\r\n    [count]=\"count\"\r\n    [externalPaging]=\"externalPaging\"\r\n    [externalSorting]=\"externalSorting\"\r\n    [footerHeight]=\"defaultFooterHeight\"\r\n    [headerHeight]=\"36\"\r\n    [limit]=\"limit\"\r\n    [reorderable]=\"true\"\r\n    [swapColumns]=\"false\"\r\n    [rowHeight]=\"rowHeight\"\r\n    [rows]=\"rows\"\r\n    [selected]=\"selected\"\r\n    [selectionType]=\"defaultSelectionType\"\r\n    [sorts]=\"sorts\"\r\n    [sortType]=\"defaultSortType\"\r\n    [targetMarkerTemplate]=\"targetMarkerTemplate\"\r\n    [rowIdentity]=\"getIdFunc()\"\r\n    (sort)=\"onSort($event)\"\r\n    (page)=\"setPage($event)\"\r\n    (reorder)=\"reordered($event)\"\r\n    (window:resize)=\"onResize($event)\"\r\n    (select)=\"onSelect($event)\"\r\n    (activate)=\"clickedRow($event)\"\r\n    [offset]=\"offset\"\r\n    [rowClass]=\"rowClass\"\r\n  >\r\n    <!-- Datatable fixed left column with selection checkboxes -->\r\n    <ngx-datatable-column\r\n      [name]=\"\"\r\n      [width]=\"60\"\r\n      [minWidth]=\"60\"\r\n      [resizeable]=\"false\"\r\n      [draggable]=\"false\"\r\n      [canAutoResize]=\"false\"\r\n      [frozenLeft]=\"true\"\r\n      [sortable]=\"false\"\r\n      cellClass=\"leftCellClass\"\r\n      *ngIf=\"selectionType === 'cell' || selectionType === 'checkbox'\"\r\n    >\r\n      <ng-template ngx-datatable-header-template let-value=\"value\">\r\n        <mat-checkbox\r\n          *ngIf=\"selectionType === 'checkbox' && rows?.length > 0\"\r\n          id=\"table-select-all-{{ id }}\"\r\n          [checked]=\"selectAllOnPage[offset] === 'all'\"\r\n          [indeterminate]=\"selectAllOnPage[offset] === 'noop'\"\r\n          [disabled]=\"disableSelections || loadingIndicator\"\r\n          (change)=\"togglePageSelection($event)\"\r\n          [ngClass]=\"{ 'cursor-no-drop': disableSelections }\"\r\n        >\r\n        </mat-checkbox>\r\n        <!-- <button *ngIf=\"selectionType === 'checkbox' && rows?.length > 0\"\r\n          class=\"dropdown-toggle dropdown selectArrow\" \r\n          type=\"button\" id=\"dropdownMenuButton\"\r\n          data-toggle=\"dropdown\" aria-haspopup=\"true\"\r\n          aria-expanded=\"false\">\r\n        </button>\r\n        <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton\">\r\n          <div class=\"selectOption\" (click)='selectPage($event)' \r\n          [ngClass]=\"{'disabled': selectAllOnPage[offset] === 'all' || disableSelections}\">\r\n          {{ 'LBL_SELECT_CURRENT_PAGE' | translate }}</div>\r\n          <div class=\"selectOption\" (click)='clearPage($event)'\r\n          [ngClass]=\"{'disabled': !selectAllOnPage[offset] || selectAllOnPage[offset] === 'none' || disableSelections}\">\r\n          {{ 'LBL_CLEAR_CURRENT_PAGE' | translate }}</div>\r\n          <div class=\"selectOption\" (click)='selectAll($event)'\r\n          [ngClass]=\"{'disabled': allSelected === true && deselected?.length == 0 || disableSelections}\">\r\n          {{ 'LBL_SELECT_ALL' | translate }}</div> -->\r\n        <!-- <div class=\"selectOption\" (click)='clearAll($event) && this.headerSelection.emit(\"clear all\")'\r\n          [ngClass]=\"{'disabled': selected?.length == 0 && deselected?.length == 0 || disableSelections}\">\r\n          {{ 'LBL_CLEAR_ALL' | translate }}</div>\r\n        </div> -->\r\n      </ng-template>\r\n      <ng-template\r\n        ngx-datatable-cell-template\r\n        let-row=\"row\"\r\n        let-value=\"value\"\r\n        let-expanded=\"expanded\"\r\n        let-isSelected=\"isSelected\"\r\n        let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\r\n      >\r\n        <mat-checkbox\r\n          #checkbox\r\n          *ngIf=\"selectionType === 'checkbox'\"\r\n          id=\"{{ id }}-select-row-{{ row[rowIdentifier] }}\"\r\n          (click)=\"onCheckboxSelect(checkbox, row)\"\r\n          [checked]=\"\r\n            disableSelections || (isRowDisabled && isRowDisabled(row))\r\n              ? false\r\n              : isSelected\r\n          \"\r\n          [disabled]=\"\r\n            disableSelections || (isRowDisabled && isRowDisabled(row))\r\n          \"\r\n          [ngClass]=\"{\r\n            'cursor-no-drop':\r\n              disableSelections || (isRowDisabled && isRowDisabled(row))\r\n          }\"\r\n          (change)=\"onCheckboxChangeFn($event)\"\r\n        >\r\n        </mat-checkbox>\r\n        <mat-radio-button\r\n          #radio\r\n          *ngIf=\"selectionType === 'cell'\"\r\n          id=\"{{ id }}-select-row-{{ row[rowIdentifier] }}\"\r\n          name=\"{{ id }}-radio-group\"\r\n          [checked]=\"storedId == row[rowIdentifier] && !disableSelections\"\r\n          [disabled]=\"\r\n            disableSelections || (isRowDisabled && isRowDisabled(row))\r\n          \"\r\n          [ngClass]=\"{\r\n            'cursor-no-drop':\r\n              disableSelections || (isRowDisabled && isRowDisabled(row))\r\n          }\"\r\n          (click)=\"checkState(radio, row)\"\r\n        >\r\n        </mat-radio-button>\r\n      </ng-template>\r\n    </ngx-datatable-column>\r\n\r\n    <!-- Template for row details -->\r\n    <ngx-datatable-row-detail [rowHeight]=\"defaultRowHeight\" #myDetailRow>\r\n      <!-- Template for mobile view -->\r\n      <ng-template\r\n        let-row=\"row\"\r\n        let-expanded=\"expanded\"\r\n        ngx-datatable-row-detail-template\r\n      >\r\n        <table class=\"rowDetailTable\" *ngIf=\"mobileView\">\r\n          <tbody>\r\n            <ng-container *ngFor=\"let col of columns; index as i\">\r\n              <tr *ngIf=\"i !== indexOfFirstDisplayedCol\">\r\n                <td class=\"colName\">{{ col.name | translate }}</td>\r\n                <td class=\"colData\">\r\n                  <div\r\n                    *ngIf=\"col.mobileCellTemplate; else noMobileCellTemplate\"\r\n                  >\r\n                    <ng-container\r\n                      *ngTemplateOutlet=\"\r\n                        col.mobileCellTemplate;\r\n                        context: { row: row, column: col, value: row[col.prop] }\r\n                      \"\r\n                    >\r\n                    </ng-container>\r\n                  </div>\r\n                  <ng-template #noMobileCellTemplate>\r\n                    <div *ngIf=\"col.name != 'COL_ROLES'\">\r\n                      {{ row[col.prop] | checkNA: true }}\r\n                    </div>\r\n                    <div *ngIf=\"col.name == 'COL_ROLES'\">\r\n                      {{ listProp(row[col.prop]).join(\", \") | checkNA: true }}\r\n                    </div>\r\n                  </ng-template>\r\n                </td>\r\n              </tr>\r\n            </ng-container>\r\n          </tbody>\r\n        </table>\r\n        <!-- Additional template for mobile view -->\r\n        <div *ngIf=\"mobileView\">\r\n          <ng-container\r\n            *ngTemplateOutlet=\"additionalMobileTemplate; context: { row: row }\"\r\n          >\r\n          </ng-container>\r\n        </div>\r\n\r\n        <div *ngIf=\"!mobileView\">\r\n          <ng-container\r\n            *ngTemplateOutlet=\"rowExpansion.template; context: { row: row }\"\r\n          >\r\n          </ng-container>\r\n        </div>\r\n      </ng-template>\r\n    </ngx-datatable-row-detail>\r\n\r\n    <!-- Rest of columns iteration -->\r\n    <ng-container *ngFor=\"let col of columns; index as i\">\r\n      <!-- First col with celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i === indexOfFirstDisplayedCol &&\r\n          !col.notDisplayed &&\r\n          col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n        [cellTemplate]=\"col.cellTemplate\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n\r\n      <!-- First col without celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i === indexOfFirstDisplayedCol &&\r\n          !col.notDisplayed &&\r\n          !col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n\r\n        <ng-template\r\n          let-row=\"row\"\r\n          let-value=\"value\"\r\n          let-expanded=\"expanded\"\r\n          ngx-datatable-cell-template\r\n        >\r\n          <!-- On mobile view open row details on long press (hammerjs) -->\r\n          <ng-container *ngIf=\"mobileView\">\r\n            <div (press)=\"toggleExpandRow(row)\">\r\n              <!-- TODO: this was <div (press)=\"table.toggleExpandRow(row)\"> -->\r\n              <!-- {{ row[col.prop] | checkNA }} -->\r\n            </div>\r\n          </ng-container>\r\n          <!-- On desktp view, if row expansion is enabled show expand icon in order to show row details (it appears to be a tree but it is not, it is a row with additional details - see server inventory pages) -->\r\n          <ng-container *ngIf=\"!mobileView && rowExpansion.enabled\">\r\n            <div class=\"row-detail-arrow\">\r\n              <a\r\n                [class.datatable-icon-right]=\"!expanded\"\r\n                [class.datatable-icon-down]=\"expanded\"\r\n                title=\"{{ 'LBL_EXPAND_COLLAPSE_ROW' | translate }}\"\r\n                (click)=\"toggleExpandRow(row)\"\r\n                class=\"datatable-dropdown-icon\"\r\n              >\r\n              </a>\r\n            </div>\r\n            <!-- {{ row[col.prop] | checkNA }} -->\r\n          </ng-container>\r\n          <!-- Not mobile view and has tooltip -->\r\n          <ng-container *ngIf=\"!mobileView && col.tooltip; else other\">\r\n            <div\r\n              [popover]=\"row[col.prop] | checkNA\"\r\n              placement=\"left\"\r\n              triggers=\"mouseover\"\r\n              [popoverTitle]=\"col.name | translate\"\r\n              (onShown)=\"popOverShown()\"\r\n              class=\"pop tooltip-cell-container\"\r\n              [class.tooltip-cell-mobile-container]=\"mobileView\"\r\n            >\r\n              {{ row[col.prop] | checkNA }}\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #other>\r\n            <span class=\"col-text\" (click)=\"toggleExpandRow(row)\">{{\r\n              row[col.prop] | checkNA\r\n            }}</span>\r\n          </ng-template>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n\r\n      <!-- Not first column with celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i !== indexOfFirstDisplayedCol &&\r\n          !mobileView &&\r\n          !col.notDisplayed &&\r\n          col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n        [cellTemplate]=\"col.cellTemplate\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n\r\n      <!-- Not first column without celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i !== indexOfFirstDisplayedCol &&\r\n          !mobileView &&\r\n          !col.notDisplayed &&\r\n          !col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n        <ng-template\r\n          let-row=\"row\"\r\n          let-value=\"value\"\r\n          ngx-datatable-cell-template\r\n        >\r\n          <ng-container *ngIf=\"col.tooltip; else other\">\r\n            <div\r\n              [popover]=\"row[col.prop]\"\r\n              placement=\"left\"\r\n              triggers=\"mouseover\"\r\n              [popoverTitle]=\"col.name | translate\"\r\n              (onShown)=\"popOverShown()\"\r\n              class=\"pop tooltip-cell-container\"\r\n            >\r\n              {{ row[col.prop] | checkNA }}\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #other>\r\n            <span class=\"mobile-hidden\">{{ row[col.prop] | checkNA }}</span>\r\n          </ng-template>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n    </ng-container>\r\n\r\n    <ngx-datatable-footer *ngIf=\"isFooterVisible; else noFooter\">\r\n      <ng-template\r\n        ngx-datatable-footer-template\r\n        let-rowCount=\"rowCount\"\r\n        let-pageSize=\"pageSize\"\r\n        let-selectedCount=\"selectedCount\"\r\n        let-curPage=\"curPage\"\r\n        let-offset=\"offset\"\r\n      >\r\n        <div class=\"d-flex flex-row flex-wrap\">\r\n          <div class=\"footerContainer\" id=\"ngx-datatable-footer-text\">\r\n            <div\r\n              *ngIf=\"\r\n                selected?.length > rows?.length ||\r\n                (selected?.length && filterWasApplied)\r\n              \"\r\n              class=\"help-mouseover-icon-wrapper\"\r\n              popover=\"{{ 'STR_SELECTED_GREATER_THAN_ROWS' | translate }}\"\r\n              triggers=\"mouseenter:mouseleave\"\r\n              placement=\"right\"\r\n            >\r\n              <div class=\"help-mouseover-icon\"></div>\r\n            </div>\r\n\r\n            <div\r\n              *ngIf=\"isSelectedVisible && selectionType !== 'none'\"\r\n              style=\"display: inline-block\"\r\n            >\r\n              <span *ngIf=\"!allSelected\">\r\n                {{ setSelectionNumber || selected?.length }}\r\n                {{ \"STR_SELECTED\" | translate }}</span\r\n              >\r\n              <span *ngIf=\"allSelected\">\r\n                {{ rowCount - deselected?.length }}\r\n                {{ \"STR_SELECTED\" | translate }}</span\r\n              >\r\n            </div>\r\n\r\n            <span *ngIf=\"isSelectedVisible && selectionType !== 'none'\">\r\n              /\r\n            </span>\r\n            <span>{{ rowCount }} {{ \"STR_TOTAL\" | translate }}</span>\r\n          </div>\r\n\r\n          <div\r\n            class=\"dropdown footerContainer\"\r\n            *ngIf=\"rows && rows?.length > 0\"\r\n          >\r\n            {{ \"STR_ROWS_PER_PAGE\" | translate }}: {{ limit }}\r\n            <button\r\n              class=\"dropdown-toggle dropdown selectArrow\"\r\n              type=\"button\"\r\n              id=\"dropdownMenuButton\"\r\n              data-toggle=\"dropdown\"\r\n              aria-haspopup=\"true\"\r\n              aria-expanded=\"false\"\r\n            ></button>\r\n            <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton\">\r\n              <ng-container *ngFor=\"let value of rowsOnPage\">\r\n                <div\r\n                  *ngIf=\"value != limit\"\r\n                  class=\"selectOption\"\r\n                  (click)=\"setRowsPerPage(value)\"\r\n                >\r\n                  {{ value }}\r\n                </div>\r\n              </ng-container>\r\n              <div\r\n                *ngIf=\"allRowsOption\"\r\n                (click)=\"setRowsPerPage(count)\"\r\n                class=\"selectOption\"\r\n              >\r\n                {{ \"STR_ALL\" | translate }}\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <datatable-pager\r\n            [pagerLeftArrowIcon]=\"'datatable-icon-left'\"\r\n            [pagerRightArrowIcon]=\"'datatable-icon-right'\"\r\n            [pagerPreviousIcon]=\"'datatable-icon-prev'\"\r\n            [pagerNextIcon]=\"'datatable-icon-skip'\"\r\n            [page]=\"curPage\"\r\n            [size]=\"pageSize\"\r\n            [count]=\"rowCount\"\r\n            [hidden]=\"!(rowCount / pageSize > 1)\"\r\n            (change)=\"table.onFooterPage($event)\"\r\n          >\r\n          </datatable-pager>\r\n        </div>\r\n      </ng-template>\r\n    </ngx-datatable-footer>\r\n\r\n    <ng-template #noFooter>\r\n      <ngx-datatable-footer> </ngx-datatable-footer>\r\n    </ng-template>\r\n  </ngx-datatable>\r\n  <!-- <app-datatable-contextual-menu\r\n    [x]=\"contextMenuX\"\r\n    [y]=\"contextMenuY\"\r\n    [isShown]=\"showContextMenu\"\r\n    [actions]=\"contextMenuActions\">\r\n  </app-datatable-contextual-menu> -->\r\n\r\n  <ng-template #targetMarkerTemplate let-class=\"class\">\r\n    <div [ngClass]=\"class\">\r\n      <div class=\"datatable-target-icon datatable-icon-down\"></div>\r\n      <div class=\"datatable-target-icon datatable-icon-up\"></div>\r\n    </div>\r\n  </ng-template>\r\n</div>\r\n\r\n<!-- <export-table-data\r\n    [(rows)]=\"rows\"\r\n    [selectedRows]=\"selected\"\r\n    [tableId]=\"id\"\r\n    [columns]=\"columns\"\r\n    [exportFetchDataFunction]=\"exportFetchDataFunction\"\r\n    [builder]=\"sortingAndFilteringBuilder\"\r\n    [total]=\"count\"\r\n    [selectionType]=\"selectionType\"\r\n    [externalFetching]=\"externalPaging\"\r\n    [limit]=\"limit\"\r\n    [offset]=\"offset\"\r\n    [source]=\"source\"\r\n    [componentSource]=\"'table'\"\r\n    [formatDataFunc]=\"formatDataFunc\"\r\n    [rowIdentifier]=\"rowIdentifier\"\r\n  >\r\n  </export-table-data> -->\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { TreeNode } from '../../interfaces/treeNode';\r\n\r\n/**\r\n * Add node levels to a tree\r\n * @param root\r\n * @param level\r\n */\r\nexport function addNodeLevels(\r\n  root: TreeNode[],\r\n  level: number,\r\n  parentID: string = null,\r\n  rowIdentifier = 'id'\r\n) {\r\n  root.forEach((r) => {\r\n    if (r.level === undefined) {\r\n      r.level = level;\r\n      r['parentID'] = parentID;\r\n    }\r\n  });\r\n  for (let i = 0; i < root.length; i++)\r\n    if (root[i].children && root[i].children.length) {\r\n      addNodeLevels(root[i].children, level + 1, root[i][rowIdentifier]);\r\n    }\r\n}\r\n\r\n/**\r\n *  Pre-order tree traversal visits each node using stack.\r\n *  Checks if leaf node based on children === null otherwise\r\n *  pushes all children into stack and continues traversal.\r\n *  hashMap object literal used for deduping.\r\n *\r\n *  Bonus: Because it traverses a tree - it also adds levels to the nodes\r\n *  @param root - deserialized JSON root to begin traversal\r\n *  @returns array  - final array of nodes in order with no dups\r\n */\r\nexport function convertMultipleRootTreeToList(roots: any[]) {\r\n  addNodeLevels(roots, 0);\r\n  let res: any[] = [];\r\n  roots.forEach((root) => {\r\n    res = [...res, ...convertSingleRootTreeToList(root)];\r\n  });\r\n  return res;\r\n}\r\n\r\n/**\r\n *  Pre-order tree traversal visits each node using stack.\r\n *  Checks if leaf node based on children === null otherwise\r\n *  pushes all children into stack and continues traversal.\r\n *  hashMap object literal used for deduping.\r\n *\r\n *  Bonus: Because it traverses a tree - it also adds levels to the nodes\r\n *  @param root - deserialized JSON root to begin traversal\r\n *  @returns array  - final array of nodes in order with no dups\r\n */\r\nexport function convertSingleRootTreeToList(root: any, level = 0) {\r\n  addNodeLevels([root], level);\r\n  var stack = [],\r\n    array: any[] = [],\r\n    hashMap = {};\r\n  stack.push(root);\r\n\r\n  while (stack.length !== 0) {\r\n    var node = stack.pop();\r\n    visitNode(node, hashMap, array);\r\n    if (node.children && node.children.length)\r\n      for (var i = node.children.length - 1; i >= 0; i--) {\r\n        stack.push(node.children[i]);\r\n      }\r\n  }\r\n\r\n  return array;\r\n}\r\n\r\n/**\r\n *  For each node visit if node not a hashMap key, insert\r\n *  into array.  Then append node into end of the array.\r\n *  @params node - object to check\r\n *  @param hashMap - object literal used for deduping\r\n *  @param array - final array that nodes are inserted\r\n */\r\nexport function visitNode(node: any, hashMap: any, array: any) {\r\n  if (!hashMap[node.id]) {\r\n    hashMap[node.id] = true;\r\n    array.push(node);\r\n  }\r\n}\r\n/**\r\n * Return hashmap where key is the id of the parent and value represents the array of nodes with that parent id\r\n * @param collection - tree collection\r\n * @returns\r\n */\r\nexport function groupByParentId(collection: any[]) {\r\n  let result: Map<string, any[]> = new Map();\r\n  collection.forEach((node: TreeNode) => {\r\n    let key = node['parentID'] ? node['parentID'] : 'null';\r\n    if (!result.get(key)) {\r\n      result.set(key, [node]);\r\n    } else {\r\n      result.set(key, [...result.get(key), node]);\r\n    }\r\n  });\r\n  return result;\r\n}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n/**\r\n * \r\n * IMPORTANT NODE\r\n * \r\n * The fetchData function for the treetable must respect the following signature:\r\n * \r\n *  getData(builder: SortingAndFilteringParamsBuilder, callback?: Function, jobId?) {\r\n    this.loading = true;\r\n    this.jobsSvc.getById(jobId ? jobId : this.rootJobId, builder).subscribe(\r\n      (res) => {\r\n        if (!jobId) {\r\n          this.jobTree = [res];\r\n          this.total = this.jobTree.length;\r\n        }\r\n        if (callback) callback(res);\r\n        this.loading = false;\r\n      },\r\n      (error) => {\r\n        console.error('Get job by id error:', error);\r\n        this.jobTree = [];\r\n        this.treetable.showDataErrorMessage();\r\n        this.loading = false;\r\n        this.toasterSvc.showToaster(error, ToasterTypes.ERROR);\r\n      }\r\n    );\r\n  }\r\n * This is needed because of the treetable behavior (clicking on a row should get children) - in that case the callback is a function in the datatable which \r\n * actually adds the retrieved children to the tree. The first if is when we first get the root, and we need to initialize the tree with roots for the first time\r\n */\r\n\r\nimport {\r\n  Component,\r\n  ChangeDetectorRef,\r\n  SimpleChanges,\r\n  OnChanges,\r\n  OnInit,\r\n  Input,\r\n  Output,\r\n  EventEmitter,\r\n  ViewChild,\r\n  AfterViewInit,\r\n} from '@angular/core';\r\nimport { NgxDatatableComponent } from '../ngx-datatable/ngx-datatable.component';\r\nimport { TranslateService } from '@ngx-translate/core';\r\nimport * as _ from 'lodash-es';\r\nimport { addNodeLevels, groupByParentId } from './tree-utils';\r\nimport {\r\n  DataTableFooterComponent,\r\n  DataTablePagerComponent,\r\n} from '@swimlane/ngx-datatable';\r\nimport { TreeNode } from '../../interfaces/treeNode';\r\nimport { LocalStorageService } from '../../services/localStorageService/localStorage.service';\r\nimport { SortingAndFilteringParamsBuilder } from '../../classes/sortingFilteringUtils/sortingFilteringUtils';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-ngx-treetable',\r\n  templateUrl: './ngx-treetable.component.html',\r\n  styleUrls: [\r\n    './ngx-treetable.component.scss',\r\n    '../ngx-datatable/ngx-datatable.component.scss',\r\n  ],\r\n})\r\nexport class NgxTreetableComponent\r\n  extends NgxDatatableComponent\r\n  implements OnChanges, OnInit, AfterViewInit\r\n{\r\n  PARENT_MARGIN_PX: number = 40;\r\n\r\n  /**\r\n   * Keep track of the last selected row when the treetable has checkbox selection, using this row the parents will be checked for indeterminate selection\r\n   */\r\n  lastSelectedRow: TreeNode;\r\n  /**\r\n   * Keep track if the last selected row was being selected or deselected\r\n   */\r\n  checkboxStateForLastSelectedRow: boolean;\r\n  selectionsMap: Map<string, 'true' | 'false' | 'indeterminate'> = new Map();\r\n  /**\r\n   * When expanding a row, since we are paginating on the backend side, we don't want the children to go on the other page, we want them to remain on the first page\r\n   * We basically paginate only the roots.\r\n   * this.limit is the limit used in requests\r\n   * this.displayedLimit is actually how many items are displayed (can be greater than limit, never smaller, initialized with limit)\r\n   *\r\n   * displayedLimit is only used when externalPaging is true\r\n   */\r\n  displayedLimit: number;\r\n  /**\r\n   * The count changes at expand if we use external paging but should not influence the initial count of the roots, that is why we need to retain it, to know to what value it should come back to\r\n   * See line 389\r\n   */\r\n  initialCount: number;\r\n\r\n  @Input() public isNodeDisabled: Function = () => {\r\n    return false;\r\n  };\r\n  @Output() nodeExpanded: EventEmitter<TreeNode> = new EventEmitter();\r\n  @Output() nodeCollapsed: EventEmitter<TreeNode> = new EventEmitter();\r\n\r\n  @ViewChild(DataTablePagerComponent, { static: false })\r\n  pager: DataTablePagerComponent;\r\n  @ViewChild(DataTableFooterComponent, { static: false })\r\n  footer: DataTableFooterComponent;\r\n\r\n  selectedItemsForDisplay: any[] = [];\r\n\r\n  constructor(\r\n    detector: ChangeDetectorRef,\r\n    translateSvc: TranslateService,\r\n    localStorageSvc: LocalStorageService\r\n  ) {\r\n    super(detector, translateSvc, localStorageSvc);\r\n  }\r\n\r\n  override ngOnChanges(changes: SimpleChanges) {\r\n    let treeChange = changes['tree'];\r\n    if (treeChange) {\r\n      addNodeLevels(this.tree, 0, null, this.rowIdentifier);\r\n    }\r\n    let countChange = changes['count'];\r\n    if (countChange) this.initialCount = countChange.currentValue;\r\n    super.ngOnChanges(changes);\r\n  }\r\n\r\n  override ngOnInit() {\r\n    super.ngOnInit();\r\n    this.displayedLimit = this.limit;\r\n    if (\r\n      !this.tableToolbarActions.find((action) => action.id === 'collapseNodes')\r\n    ) {\r\n      this.tableToolbarActions.unshift({\r\n        id: 'collapseNodes',\r\n        label: 'LBL_COLLAPSE_ALL',\r\n        onClick: () => {\r\n          this.collapseAllNodes();\r\n        },\r\n        canEnable: () => {\r\n          return !this.disabled;\r\n        },\r\n        img: {\r\n          // 64_collapseAll, 64_collapseAll_inactive\r\n          src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6QjhCOUQyRTJGMjBCMTFFOEIxQ0FGMjIzRUEzNTM3REYiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6QjhCOUQyRTNGMjBCMTFFOEIxQ0FGMjIzRUEzNTM3REYiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpCOEI5RDJFMEYyMEIxMUU4QjFDQUYyMjNFQTM1MzdERiIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDpCOEI5RDJFMUYyMEIxMUU4QjFDQUYyMjNFQTM1MzdERiIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PsWK3F0AAACfSURBVHja7NjRDYAgDAVAMGzkAA7g/vPAEIiF9N6/Mbm00NLu5+3l7NSZj6+SPAAAAAAAIHPa6nv2g3QVAAAAAAAAAITNAaH39Or/awEAAAAAAGAOWJqt3xO0AAAAAAAAAAAAAAC7wB6z+d+7hxYA4AwI71kVAABArjmgqgAAALY6A2Z7sqsAAAAAAAAAwC5w4pygBQAAAAAAQOIMAQYAhIMKTWL92wQAAAAASUVORK5CYII=',\r\n          srcDisabled:\r\n            'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjg3RjQyM0UzMDM0NTExRTlCRjgxRjcxM0NBNkVFNDYzIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjg3RjQyM0U0MDM0NTExRTlCRjgxRjcxM0NBNkVFNDYzIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6ODdGNDIzRTEwMzQ1MTFFOUJGODFGNzEzQ0E2RUU0NjMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6ODdGNDIzRTIwMzQ1MTFFOUJGODFGNzEzQ0E2RUU0NjMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6fqvnEAAAAm0lEQVR42uzY0Q3AIAgFQGm6/0bOZodQi4Z7/02TCygYvffR7k7MfPy04gEAAAAAAJXz7r5nF2SoAAAAAAAAACBtDki9p3f/XwsAAAAAAABzwNYc/Z6gBQAAAAAAAAAAAADYBc6Yzf/ePbQAAGdAes+qAAAAas0BoQIAADjqDJjtyaECAAAAAAAAALvAjXOCFgAAAAAAAIXzCTAApOkLxEvQRGgAAAAASUVORK5CYII=',\r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  ngAfterViewInit() {\r\n    // Override methods which calculate number of pages, offset and emits set page only for external sorting because that is when the children are displayed on the same page as the roots and must not affect the number of pages which should be calculated considering only the roots\r\n    if (this.externalPaging) this.overridePagerGetTotalPages();\r\n  }\r\n\r\n  override addExportAction() {\r\n    if (!this.exportFetchDataFunction && !this.staticTree)\r\n      console.error(\r\n        'The export function is not present, the export button cannot be added on table with id',\r\n        this.id\r\n      );\r\n    if (\r\n      (this.exportFetchDataFunction || this.staticTree) &&\r\n      !this.tableToolbarActions.find((action) => action.id.includes('EXPORT-'))\r\n    ) {\r\n      this.tableToolbarActions.push({\r\n        id: 'EXPORT-' + this.id,\r\n        label: 'LBL_EXPORT',\r\n        img: {\r\n          // 64_export, 64_export_inactive\r\n          src: 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyJpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6NUMzNEZGQzBGMjBCMTFFODk4NERDMjYwNzNCMTQ5NDMiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6NUMzNEZGQzFGMjBCMTFFODk4NERDMjYwNzNCMTQ5NDMiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDo1QzM0RkZCRUYyMEIxMUU4OTg0REMyNjA3M0IxNDk0MyIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo1QzM0RkZCRkYyMEIxMUU4OTg0REMyNjA3M0IxNDk0MyIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PkmSzJgAAAFwSURBVHja7Ng7bsJAEAbgNfKNcgAOwAVoKFKloaGBAHnYSnh1qWjoaGi4IjizUohCwHhXAu8y/z/SdLbwfNrHDMlDs1WYuCKTzOv6sYaJL+ABbLzVhRArwAHhAxnAxsutEWIHOCB8IgPYGEtOkAFsjCSnIQCSG+erx/cOJWfaVoDd388ez9tn59q2wEKyJ+nalQ5+3lF1BnxJdj0Q+tdAiO0QXEo+Se49ENTdAivJR8kdciu8luzUgRBzH7CRbKPPAlt0AEMAAhCgapb4H+/oKyDzQdC6BZwRNJ8BTgjaD8FKBIRb4CICyjVYioDUB5xFSAN8SBEYwUaO3AkerQTUVvgXITW4kXEYklkCGcAehFkDuXjULZD/uQ6DHIJJwD7jqHi0FXBSPBLA2eJRAEqLRwC4WLx2gMriNQM4Fa8VwLn4exmGqv4/SEpmfoO6AgwBCEAAAhCAAAQgAAEIcJ1ZoOAKIAABCEAAAhBAZXwLMAA3LTZlGF96AQAAAABJRU5ErkJggg==',\r\n          srcDisabled:\r\n          'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjk3MzQ3Qzg4MDM0NDExRTk5Qjg4RUNFNUExNzNFRUVDIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOjk3MzQ3Qzg5MDM0NDExRTk5Qjg4RUNFNUExNzNFRUVDIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6OTczNDdDODYwMzQ0MTFFOTlCODhFQ0U1QTE3M0VFRUMiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6OTczNDdDODcwMzQ0MTFFOTlCODhFQ0U1QTE3M0VFRUMiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4E2Dw9AAABbElEQVR42uzYu27CQBAF0DXiI2koUtHQ0AAJL1sESLpUadKloeEX/GlgZiVAQDDelcC7mXtHms4WnqN9zJDkeV6YuCKVzOr6sYaJL+ABbEzrQogV4IgwRwawMX42QuwAR4R3ZAAbI8kFMoCNN8llCIDkyTnx+N5XyZW2FWD399Djefvsh7Yt8CnZk3TtSgeHd1SdAV+SXQ+E/iMQYjsEvyU7kjsPBHW3wI/ki+QWuRX+lWzXgRBzH7CWbKHPAht0AEMAAhCgapa4jhn6Ckh9ELRuAWcEzWeAE4L2Q7ASAeEWuIuAcg2WIiD1ATcRmgE+pAiMYCND7gQvVgJqK3xCaBrcSDkMySyBDGAPwrSBXDzqFsjOrsMgh2ASsM+4KB5tBfwpHgngZvEoAKXFIwDcLV47QGXxmgGcitcK4Fz8fxmGqv4/SEpmfoO6AgwBCEAAAhCAAAQgAAEI8JhZoOAKIAABCEAAAhBAZewFGAAYYjff6A1Z3wAAAABJRU5ErkJggg==',\r\n        },\r\n        canEnable: () =>\r\n          this.getRows()?.length > 0 ||\r\n          this.rows?.length > 0 ||\r\n          this.selected?.length > 0,\r\n        onClick: () => {\r\n          if (\r\n            this.getRows()?.length > 0 ||\r\n            this.rows?.length > 0 ||\r\n            this.selected?.length > 0\r\n          ) {\r\n            // this.exportComp.showModal();\r\n          }\r\n        },\r\n      });\r\n    }\r\n  }\r\n\r\n  /**\r\n   * In case of external paging, the calculation of the pages need to take into account the initial row count, without any expanded children, and the initial limit\r\n   * Because the displayed limit increases when the user expands a certain row but it should not influence the actual number of pages\r\n   */\r\n  overridePagerGetTotalPages() {\r\n    Object.defineProperty(this.pager, 'totalPages', {\r\n      get: () => {\r\n        // Calculate the total number of pages using initial count (roots only) and limit, not displayed limit\r\n        const count =\r\n          this.limit < 1 ? 1 : Math.ceil(this.initialCount / this.limit);\r\n        return Math.max(count || 0, 1);\r\n      },\r\n    });\r\n\r\n    Object.defineProperty(this.table, 'offset', {\r\n      get: () => {\r\n        // Calculate the offset using initial count (roots only) and limit, not displayed limit\r\n        return Math.max(\r\n          Math.min(\r\n            this.table._offset,\r\n            Math.ceil(this.initialCount / this.limit) - 1\r\n          ),\r\n          0\r\n        );\r\n      },\r\n      set: (val) => {\r\n        this.table._offset = val;\r\n      },\r\n    });\r\n\r\n    let initialOnFooterPageFunc = (event, count, pageSize) => {\r\n      this.offset = event.page - 1;\r\n      this.table.bodyComponent.updateOffsetY(this.offset);\r\n\r\n      // Emit with initial count and actual rows per page, not displayed limit\r\n      this.table.page.emit({\r\n        count: count,\r\n        pageSize: pageSize,\r\n        limit: pageSize,\r\n        offset: event.page - 1,\r\n      });\r\n\r\n      // TODO: this.selectAllRowsOnPage ?\r\n      console.log(\"this.table.selectAllRowsOnPage\", this.table.selectAllRowsOnPage)\r\n      if (this.table.selectAllRowsOnPage) {\r\n        this.selected = [];\r\n        // TODO: this.select ?\r\n      console.log(\"this.table.select\", this.table.select)\r\n        this.table.select.emit({\r\n          selected: this.selected,\r\n        });\r\n      }\r\n    };\r\n\r\n    this.table.onFooterPage = (event) => {\r\n      initialOnFooterPageFunc.call(\r\n        this.table,\r\n        event,\r\n        this.initialCount,\r\n        this.limit\r\n      );\r\n    };\r\n  }\r\n\r\n  override onResize(evt) {\r\n    //setTimeout(() => {\r\n    // this.applySorting();\r\n    //}, 0);\r\n    super.onResize(evt);\r\n  }\r\n\r\n  override toggleDisplay(col) {\r\n    setTimeout(() => {\r\n      this.applySorting();\r\n    }, 0);\r\n    super.toggleDisplay(col);\r\n  }\r\n\r\n  sortTree(event: any, childrenNodes?: TreeNode[]) {\r\n    console.time('Tree sort');\r\n    const sort = event.sorts[0];\r\n    this.sorts = event.sorts;\r\n    this.sortField = sort.prop;\r\n    this.sortMode = sort.dir;\r\n\r\n    // https://github.com/swimlane/ngx-datatable/blob/master/projects/swimlane/ngx-datatable/src/lib/utils/sort.ts\r\n    let orderByComparator = function (a: any, b: any): number {\r\n      if (a === null || typeof a === 'undefined') a = 0;\r\n      if (b === null || typeof b === 'undefined') b = 0;\r\n      if (a instanceof Date && b instanceof Date) {\r\n        if (a < b) return -1;\r\n        if (a > b) return 1;\r\n      } else if (\r\n        isNaN(parseFloat(a)) ||\r\n        !isFinite(a) ||\r\n        isNaN(parseFloat(b)) ||\r\n        !isFinite(b)\r\n      ) {\r\n        // Convert to string in case of a=0 or b=0\r\n        a = String(a);\r\n        b = String(b);\r\n        // Isn't a number so lowercase the string to properly compare\r\n        if (a.toLowerCase() < b.toLowerCase()) return -1;\r\n        if (a.toLowerCase() > b.toLowerCase()) return 1;\r\n      } else {\r\n        // Parse strings as numbers to compare properly\r\n        if (parseFloat(a) < parseFloat(b)) return -1;\r\n        if (parseFloat(a) > parseFloat(b)) return 1;\r\n      }\r\n\r\n      // equal each other\r\n      return 0;\r\n    };\r\n    function resolve(path, obj) {\r\n      return path.split('.').reduce(function (prev, curr) {\r\n        return prev ? prev[curr] : null;\r\n      }, obj || self);\r\n    }\r\n\r\n    var groupedTreeNodes = groupByParentId(\r\n      childrenNodes ? childrenNodes : this.tree\r\n    );\r\n    if (groupedTreeNodes.size) {\r\n      groupedTreeNodes.forEach((nodes: TreeNode[]) => {\r\n        nodes.sort((a: TreeNode, b: TreeNode) => {\r\n          let aValue = resolve(event.sorts[0].prop, a);\r\n          let bValue = resolve(event.sorts[0].prop, b);\r\n          if (event.sorts[0].dir === 'asc')\r\n            return orderByComparator(aValue, bValue);\r\n          else return -orderByComparator(aValue, bValue);\r\n        });\r\n      });\r\n\r\n      // Add roots\r\n      if (this.externalPaging == false) {\r\n        this.tree = [];\r\n        groupedTreeNodes\r\n          .get('null')\r\n          .forEach((node: TreeNode) => this.tree.push(node));\r\n      } else {\r\n        this.tree = this.tree.filter((n) => !n.level);\r\n      }\r\n      groupedTreeNodes.delete('null');\r\n      groupedTreeNodes.forEach((nodes: TreeNode[], parentId: string) => {\r\n        let f = this.tree.find((node) => node[this.rowIdentifier] === parentId);\r\n        if (!f) throw new Error('Could not find node to insert after sorting');\r\n        let index = this.tree.indexOf(f);\r\n        if (index !== -1) this.tree.splice(index + 1, 0, ...nodes);\r\n      });\r\n      this.tree = [...this.tree];\r\n    }\r\n    this.table.offset = this.offset;\r\n    if (this.saveTableSettingsInLocalStorage && !this.filterWasApplied)\r\n      this.saveCurrentPaginationSettingsInLocalStorage();\r\n    this.applySelectionsMap();\r\n    this.treeChange.emit(this.tree);\r\n    console.timeEnd('Tree sort');\r\n    return this.tree;\r\n  }\r\n\r\n  override onSort(event: any) {\r\n    const sort = event.sorts[0];\r\n    this.sorts = event.sorts;\r\n    this.sortField = sort.prop;\r\n    this.sortMode = sort.dir;\r\n\r\n    if (this.externalPaging) {\r\n      this.count = this.initialCount;\r\n      // Sort the roots on the backend and everything else on the UI\r\n      if (!this.fetchDataFn)\r\n        throw new Error(\r\n          'External paging is set to true and fetch data function is undefined!'\r\n        );\r\n      if (this.fetchDataFn) {\r\n        this.loadingIndicatorChange.emit(true);\r\n        if (this.sortingAndFilteringBuilder) {\r\n          this.sortingAndFilteringBuilder =\r\n            new SortingAndFilteringParamsBuilder(\r\n              this.sortingAndFilteringBuilder\r\n            ).setSorting([{ name: this.sortField, order: this.sortMode }]);\r\n          this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n        }\r\n      }\r\n    } else {\r\n      // Sort everything on UI\r\n      return this.sortTree(event);\r\n    }\r\n    this.table.offset = this.offset;\r\n    if (this.saveTableSettingsInLocalStorage && !this.filterWasApplied)\r\n      this.saveCurrentPaginationSettingsInLocalStorage();\r\n\r\n    return false; // TODO: is this return ok?\r\n  }\r\n\r\n  /**\r\n   * Method called in order to select/deselect nodes. It takes care of the state of the parents also.\r\n   *\r\n   * Quick note but important on tree selection: regardless of the tree type (static or with request per click), the selected array contains only what is expaned\r\n   *\r\n   * @param event\r\n   * @param selectedNode In case of a tree structure, the parent node may have been selected but not expanded, on expand, the 'lastSelectedNode' here should be the parent which is not the last item in the array so we need to send it explicitly\r\n   */\r\n  override onSelect(event, selectedNode?) {\r\n    // Do not trigger select if the node is disabled\r\n    if (this.selectionType === 'cell' && event.selected && event.selected[0]) {\r\n      this.checkState(null, event.selected[0]);\r\n    } else {\r\n      // Need to update the onSelect method because on multiple select, selecting a root should select all children\r\n      // Selection type can be 'checkbox' for multiple select and 'cell' for single select\r\n      let lastSelectedNode: TreeNode = !selectedNode\r\n        ? this.lastSelectedRow\r\n        : selectedNode;\r\n\r\n      if (\r\n        this.selectionType === 'checkbox' &&\r\n        ((event.selected && event.selected.length) || selectedNode)\r\n      ) {\r\n        if (this.checkboxStateForLastSelectedRow) {\r\n          // Recursive select children if no filter is applied because we know all children should be selected\r\n          // But if a filter is applied, then we mark the parent as indeterminate and select only the filtered children\r\n\r\n          if (\r\n            event.selected\r\n              .map((s) => s[this.rowIdentifier])\r\n              .includes(lastSelectedNode[this.rowIdentifier]) &&\r\n            lastSelectedNode.children\r\n          )\r\n            this.recursiveSelect(lastSelectedNode.children);\r\n          else this.recursiveSelect([lastSelectedNode]);\r\n\r\n          if (this.filterWasApplied && lastSelectedNode.children) {\r\n            //If all children are disabled, select parent, else behave normally (see apply and activate page)\r\n            if (!this.checkIfAllChildrenAreDisabled(lastSelectedNode)) {\r\n              this.deselectNode(lastSelectedNode);\r\n              this.markNodeAsIndeterminate(lastSelectedNode);\r\n            }\r\n          }\r\n        } else if (!this.checkboxStateForLastSelectedRow) {\r\n          // Recursive deselect children\r\n          if (this.filterWasApplied) {\r\n            if (lastSelectedNode.children)\r\n              this.recursiveDeselect(lastSelectedNode.children);\r\n            else\r\n              this.recursiveDeselect(\r\n                this.selected.filter(\r\n                  (n) => n.parentID === lastSelectedNode[this.rowIdentifier]\r\n                )\r\n              );\r\n            // If filter was applied we deselected only the filtered children and if the node has other children selected but those are not\r\n            // a result of the filter, then the parent node, instead of deselected, should be indeterminate\r\n            let selectedChildNotFilter = this.selected.find(\r\n              (c) => c.parentID === lastSelectedNode[this.rowIdentifier]\r\n            );\r\n            if (selectedChildNotFilter) {\r\n              this.markNodeAsIndeterminate(lastSelectedNode);\r\n            }\r\n          } else {\r\n            this.recursiveDeselect([lastSelectedNode]);\r\n          }\r\n        }\r\n        // Parent check should be done regardless if the node has children or not\r\n        if (lastSelectedNode)\r\n          this.recursiveCheckParents(lastSelectedNode, this.selected);\r\n      }\r\n    }\r\n    this.setGlobalSelectionCheckboxState();\r\n    this.buildSelectionsMap();\r\n    // If we are in filter mode and we have selected items before filtering, the checkbox of the parent should always be indeterminate, regardless if the user selects/deselects filtered children\r\n    this.applySelectionsMap();\r\n  }\r\n\r\n  override onCheckboxSelect(btn, row) {\r\n    this.lastSelectedRow = row;\r\n    this.checkboxStateForLastSelectedRow = !btn.checked;\r\n    super.onCheckboxSelect(btn, row);\r\n  }\r\n\r\n  override togglePageSelection(event) {\r\n    let limit = this.externalPaging ? this.displayedLimit : this.limit;\r\n    // Need to clone because the recursiveDeselect method calls deselectNode and this method performs a splice on this.selected\r\n    let selectedCopy = _.cloneDeep(this.selected);\r\n    this.getRows().forEach((row, index) => {\r\n      if (\r\n        (!this.externalPaging &&\r\n          index < limit * (this.offset + 1) &&\r\n          index >= limit * this.offset) ||\r\n        this.externalPaging\r\n      ) {\r\n        this.markNodeAsNotIndeterminate(row);\r\n      }\r\n    });\r\n    // TODO: Add deselected array like in the ngx datatable when we will support select all\r\n    if (this.selectAllOnPage[this.offset] === 'noop') {\r\n      // If it's indeterminate, deselect the selected rows from that page\r\n      selectedCopy.forEach((row, index) => {\r\n        // If external paging is true then the indexes should not be checked because getRows() contains all rows that should be selected/deselected\r\n        if (\r\n          (!this.externalPaging &&\r\n            index < limit * (this.offset + 1) &&\r\n            index >= limit * this.offset) ||\r\n          this.externalPaging\r\n        ) {\r\n          this.recursiveDeselect([row]);\r\n        }\r\n      });\r\n      this.selectAllOnPage[this.offset] = 'none';\r\n      event.source.checked = false;\r\n    } else if (\r\n      this.selectAllOnPage[this.offset] === 'none' ||\r\n      !this.selectAllOnPage[this.offset]\r\n    ) {\r\n      // If no rows are selected, select all rows (on this page)\r\n      this.getRows().forEach((row, index) => {\r\n        if (\r\n          (!this.externalPaging &&\r\n            index < limit * (this.offset + 1) &&\r\n            index >= limit * this.offset) ||\r\n          this.externalPaging\r\n        ) {\r\n          this.recursiveSelect([row]);\r\n        }\r\n      });\r\n      this.selectAllOnPage[this.offset] = 'all';\r\n    } else if (this.selectAllOnPage[this.offset] === 'all') {\r\n      // If all rows are selected, deselect all rows on that page\r\n      selectedCopy.forEach((row, index) => {\r\n        if (\r\n          (!this.externalPaging &&\r\n            index < limit * (this.offset + 1) &&\r\n            index >= limit * this.offset) ||\r\n          this.externalPaging\r\n        ) {\r\n          this.recursiveDeselect([row]);\r\n        }\r\n      });\r\n      this.selectAllOnPage[this.offset] = 'none';\r\n    }\r\n\r\n    this.allRowsCheck.emit(this.selected);\r\n    this.buildSelectionsMap();\r\n    this.applySelectionsMap();\r\n  }\r\n\r\n  override setPage(pageInfo: any) {\r\n    this.offset = pageInfo.offset;\r\n    this.displayedLimit = this.limit;\r\n    // Nodes are considered collapsed at set page if external paging is set to true\r\n    if (this.externalPaging) this.count = this.initialCount;\r\n\r\n    if (this.fetchDataFn && this.externalPaging === true) {\r\n      this.loadingIndicatorChange.emit(true);\r\n      if (this.sortingAndFilteringBuilder) {\r\n        this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n          this.sortingAndFilteringBuilder\r\n        )\r\n          .removeParameter('offset')\r\n          .removeParameter('limit')\r\n          .setOffset(this.offset * this.limit)\r\n          .setLimit(this.limit);\r\n        this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n      } else\r\n        this.fetchDataFn(\r\n          this.offset * this.limit,\r\n          this.limit,\r\n          this.sortField,\r\n          this.sortMode\r\n        );\r\n    }\r\n    if (this.saveTableSettingsInLocalStorage && !this.filterWasApplied)\r\n      this.saveCurrentPaginationSettingsInLocalStorage();\r\n    if (this.filterWasApplied)\r\n      this.callTableToolbarFunction('saveActiveFilterInSessionStorage');\r\n    this.setGlobalSelectionCheckboxState();\r\n  }\r\n\r\n  /**\r\n   * A cell or row was focused via keyboard or mouse click. (this is the only way to get the row click event in order to toggle children)\r\n   *\r\n   * TODO: If we have elements like mat-select inside row this event will trigger when we open up the drop-down and we don't want that\r\n   * @param evt\r\n   */\r\n  activate(evt) {\r\n    if (\r\n      evt.type === 'click' &&\r\n      !(evt.column && evt.column.cellClass === 'leftCellClass') &&\r\n      !this.mobileView\r\n    ) {\r\n      this.toggleExpandChildren(evt.row, evt.row.childrenExpansion);\r\n    }\r\n    super.clickedRow(evt);\r\n  }\r\n\r\n  /**\r\n   * Set the header checkbox state in case of tree table structure (the difference is that the rows collection for a simple table is always the same length with the limit but on a tree this is not the case)\r\n   */\r\n  override setGlobalSelectionCheckboxState() {\r\n    let limit = this.externalPaging ? this.displayedLimit : this.limit;\r\n    let rows = this.getRows();\r\n    if (rows) {\r\n      const selectedRowIds = this.selected.map((row) => {\r\n        return row[this.rowIdentifier];\r\n      });\r\n      const selectedRowsOnCurrentPage = rows.filter((row, index) => {\r\n        return (\r\n          selectedRowIds.indexOf(row[this.rowIdentifier]) !== -1 &&\r\n          ((!this.externalPaging &&\r\n            index < limit * (this.offset + 1) &&\r\n            index >= limit * this.offset) ||\r\n            this.externalPaging)\r\n        );\r\n      });\r\n      const rowsOnCurrentPage = rows.filter((row, index) => {\r\n        return (\r\n          !this.isNodeDisabled(row) &&\r\n          ((!this.externalPaging &&\r\n            index < limit * (this.offset + 1) &&\r\n            index >= limit * this.offset) ||\r\n            this.externalPaging)\r\n        );\r\n      }).length;\r\n      if (selectedRowsOnCurrentPage.length > 0) {\r\n        if (selectedRowsOnCurrentPage.length === rowsOnCurrentPage) {\r\n          this.selectAllOnPage[this.offset] = 'all';\r\n        } else {\r\n          this.selectAllOnPage[this.offset] = 'noop';\r\n        }\r\n      } else {\r\n        this.selectAllOnPage[this.offset] = 'none';\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * In the datatable component there is a new request performed on setRowsPerPage but for the tree it is not needed as the pagination is done on the UI side only\r\n   * @param nrOfRows\r\n   */\r\n  override setRowsPerPage(nrOfRows: any) {\r\n    // Nodes are considered collapsed at set page if external paging is set to true\r\n    if (this.externalPaging) this.count = this.initialCount;\r\n    // If there are roots expanded, do not lower the displayed limit in any case - it will cause the disappearance of the children and clicking on other page will trigger a request so once hidden, there is no way of seeing them back\r\n    if (!this.tree.find((n) => n.childrenExpansion === true)) {\r\n      this.collapseAllNodes();\r\n    }\r\n    this.limit = nrOfRows;\r\n    this.displayedLimit = nrOfRows;\r\n    this.offset = 0;\r\n    if (this.sortingAndFilteringBuilder && this.externalPaging) {\r\n      this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n        this.sortingAndFilteringBuilder\r\n      )\r\n        .removeParameter('offset')\r\n        .setOffset(this.offset)\r\n        .removeParameter('limit')\r\n        .setLimit(this.limit);\r\n\r\n      this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n    }\r\n    if (this.saveTableSettingsInLocalStorage && !this.filterWasApplied)\r\n      this.saveCurrentPaginationSettingsInLocalStorage();\r\n  }\r\n\r\n  override refresh() {\r\n    // Need to reset selection on refresh because of the following scenario:\r\n    // User has 1 row with prop2=100 and hits refresh and the the refreshed row has prop2=50\r\n    // Then we will have in .selected a row with prop2=100 when it should be 50\r\n    this.resetSelection();\r\n    this.selectionsMap = new Map();\r\n    if (this.sortingAndFilteringBuilder) {\r\n      this.sortingAndFilteringBuilder.removeParameter('childrenLevels');\r\n      this.fetchDataFn(this.sortingAndFilteringBuilder);\r\n    } else if (this.fetchDataFn) {\r\n      // Need to check this.fetchDataFn when exiting View compliance policy modal, for example.\r\n      this.fetchDataFn(\r\n        this.offset * this.limit,\r\n        this.limit,\r\n        this.sortField,\r\n        this.sortMode\r\n      );\r\n    }\r\n    this.table.offset = this.offset;\r\n    if (this.table.bodyComponent) this.table.bodyComponent.updateOffsetY(0);\r\n  }\r\n\r\n  /**\r\n   * Method used to apply a filter - to fetch data based on a new sorting and filtering builder\r\n   *\r\n   * Needed to overwrite for the tree table because the sorting is always applied in the UI\r\n   * @param newSortingAndFilteringBuilder\r\n   */\r\n  override applyFilter(\r\n    newSortingAndFilteringBuilder: SortingAndFilteringParamsBuilder,\r\n    sortField?: string,\r\n    sortMode?: 'asc' | 'desc',\r\n    limit?: number,\r\n    saveActiveFiltersBeforeFetching?: boolean\r\n  ) {\r\n    if (this.filterWasApplied) {\r\n      // Before applying a filter, get the selection in order to always retain it\r\n      this.buildSelectionsMap();\r\n\r\n      this.sortingAndFilteringBuilder = newSortingAndFilteringBuilder;\r\n      this.loadingIndicatorChange.emit(true);\r\n      // Reset offset, sortfield and sortmode because they are no longer active when a filter is applied because the data changes\r\n      this.offset = 0;\r\n      limit != undefined ? (this.limit = limit) : (this.limit = this.limit);\r\n\r\n      if (this.sortingAndFilteringBuilder && this.externalPaging)\r\n        this.sortingAndFilteringBuilder = new SortingAndFilteringParamsBuilder(\r\n          this.sortingAndFilteringBuilder\r\n        )\r\n          .removeParameter('offset')\r\n          .removeParameter('limit')\r\n          .setOffset(0)\r\n          .setLimit(this.limit);\r\n\r\n      if (sortField && sortMode) {\r\n        this.sortField = sortField;\r\n        this.sortMode = sortMode;\r\n        this.sorts = [{ prop: this.sortField, dir: this.sortMode }];\r\n        if (this.sortingAndFilteringBuilder)\r\n          this.sortingAndFilteringBuilder =\r\n            new SortingAndFilteringParamsBuilder(\r\n              this.sortingAndFilteringBuilder\r\n            )\r\n              .removeParameter('sort')\r\n              .setSorting([{ name: this.sortField, order: this.sortMode }]);\r\n      } else {\r\n        this.sortField = '';\r\n        this.sortMode = 'asc';\r\n        this.sorts = [{ prop: this.sortField, dir: this.sortMode }];\r\n      }\r\n\r\n      if (this.fetchDataFn)\r\n        this.fetchDataFn(\r\n          this.sortingAndFilteringBuilder,\r\n          (res) => {\r\n            this.applySorting();\r\n            this.applySelectionsMap();\r\n          }\r\n        );\r\n      this.filterWasApplied = true;\r\n      this.callTableToolbarFunction('saveActiveFilterInSessionStorage');\r\n    } else {\r\n      if (saveActiveFiltersBeforeFetching)\r\n        this.callTableToolbarFunction('saveActiveFilterInSessionStorage');\r\n      // The filtering can be placed on a table which does not save its settings, therefore, in that case, we should not use the builder in local storage\r\n\r\n      if (this.id && this.fetchDataFn && this.saveTableSettingsInLocalStorage) {\r\n        this.fetchDataBasedOnSessionStorageSettings();\r\n      } else {\r\n        this.buildSelectionsMap();\r\n        if (this.sortingAndFilteringBuilder)\r\n          this.fetchDataFn(\r\n            this.sortingAndFilteringBuilder,\r\n            (res) => {\r\n              this.applySorting();\r\n              this.applySelectionsMap();\r\n            }\r\n          );\r\n      }\r\n    }\r\n  }\r\n\r\n  override resetSelection() {\r\n    this.getRows().forEach((row) => {\r\n      this.recursiveDeselect([row]);\r\n    });\r\n    this.selected = [];\r\n  }\r\n\r\n  // The fetch data function needed to be overwritten because for the tree table, the sorting is always being made in the UI side\r\n  override fetchDataBasedOnSessionStorageSettings() {\r\n    if (this.saveTableSettingsInLocalStorage) {\r\n      let retrievedPaginationInfo = undefined;\r\n      if (this.sortingAndFilteringBuilder)\r\n        retrievedPaginationInfo =\r\n          this.localStorageSvc.retrievePaginationInfoDataWithBuilder(this.id);\r\n      else\r\n        retrievedPaginationInfo =\r\n          this.localStorageSvc.retrievePaginationInfoDataWithoutBuilder(\r\n            this.id\r\n          );\r\n      if (retrievedPaginationInfo) {\r\n        this.loadingIndicatorChange.emit(true);\r\n        this.initializePaginationDataBasedOnSessionStorage();\r\n        if (this.filterWasApplied === true)\r\n          this.callTableToolbarFunction(\r\n            'applyLastActiveFilterFromSessionStorage'\r\n          );\r\n\r\n        if (!this.sortingAndFilteringBuilder)\r\n          throw new Error('The builder is mandatory');\r\n        this.fetchDataFn(\r\n          this.sortingAndFilteringBuilder,\r\n          (res: any) => {\r\n            this.applySorting();\r\n            this.applySelectionsMap();\r\n          }\r\n        );\r\n      } else {\r\n        this.localStorageSvc.initializePageSettingsInStorage(\r\n          this.id,\r\n          'session'\r\n        );\r\n        this.initializePaginationInfoInSessionStorage();\r\n        this.fetchDataBasedOnSessionStorageSettings();\r\n      }\r\n    } else {\r\n      this.loadingIndicatorChange.emit(true);\r\n      if (this.filterWasApplied === true)\r\n        this.callTableToolbarFunction(\r\n          'applyLastActiveFilterFromSessionStorage'\r\n        );\r\n      if (!this.sortingAndFilteringBuilder)\r\n        throw new Error('The builder is mandatory');\r\n      this.fetchDataFn(\r\n        this.sortingAndFilteringBuilder,\r\n        (res: any) => {\r\n          this.applySorting();\r\n          this.applySelectionsMap();\r\n        }\r\n      );\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Recursive check all selected node's parents for no check/indeterminate check/ all check\r\n   *\r\n   * (Mark all the parents of the last selected node as checked/not checked/indeterminate depending on the selection of its children)\r\n   */\r\n  private recursiveCheckParents(\r\n    node: TreeNode,\r\n    selected: TreeNode[],\r\n    recursive = true\r\n  ) {\r\n    // Get the node's parent\r\n    let parent = this.findNode({ children: this.tree }, node['parentID']);\r\n    if (parent) {\r\n      // Check if all parent's children are selected\r\n      let selectedIds = this.selected\r\n        .filter((n) => !n.indeterminate)\r\n        .map((s) => s[this.rowIdentifier]);\r\n      // If a filter is applied, childrenIds below will contain only the filtered children\r\n      let childrenIds = [];\r\n      if (parent.children)\r\n        childrenIds = parent.children.map((c) => c[this.rowIdentifier]);\r\n      let selectedNotFilteredChildrenIds = this.selected\r\n        .filter(\r\n          (n) =>\r\n            n.parentID === parent[this.rowIdentifier] &&\r\n            !childrenIds.includes(n[this.rowIdentifier])\r\n        )\r\n        .map((n) => n[this.rowIdentifier]);\r\n      childrenIds = [...childrenIds, ...selectedNotFilteredChildrenIds];\r\n\r\n      // Reset parent.indeterminate property\r\n      this.markNodeAsNotIndeterminate(parent);\r\n\r\n      let intersection = selectedIds.filter((x) => childrenIds.includes(x));\r\n      let indeterminateChildren = [];\r\n      if (parent.children)\r\n        indeterminateChildren = parent.children\r\n          .filter(\r\n            (c) =>\r\n              c.indeterminate && !selectedIds.includes(c[this.rowIdentifier])\r\n          )\r\n          .map((c) => c[this.rowIdentifier]);\r\n\r\n      if (!intersection.length && !indeterminateChildren.length) {\r\n        // Intersection = 0 => no children selected, if the parent is selected then it must be deselected and indeterminate false\r\n        this.deselectNode(parent);\r\n      } else if (\r\n        (intersection.length + indeterminateChildren.length &&\r\n          intersection.length + indeterminateChildren.length <\r\n            childrenIds.length) ||\r\n        (indeterminateChildren.length &&\r\n          intersection.length + indeterminateChildren.length <=\r\n            childrenIds.length) ||\r\n        this.filterWasApplied\r\n      ) {\r\n        // Intersection + indeterminate < children => some children are selected, the parent must be set as indeterminate (and removed from selected if necessary, indeterminate nodes should not be selected)\r\n        this.deselectNode(parent);\r\n        this.markNodeAsIndeterminate(parent);\r\n      } else if (\r\n        intersection.length &&\r\n        !indeterminateChildren.length &&\r\n        intersection.length === childrenIds.length &&\r\n        !this.filterWasApplied\r\n      ) {\r\n        // Intersection = children => all children are selected, the parent must not be indeterminate and must be in the selected array\r\n        this.selectNode(parent);\r\n      }\r\n      if (parent['parentID'] && recursive)\r\n        this.recursiveCheckParents(parent, selected);\r\n    }\r\n  }\r\n\r\n  /** Recursive select children */\r\n  private recursiveSelect(nodes: TreeNode[]) {\r\n    nodes.forEach((node: TreeNode) => {\r\n      if (!this.disableSelections && !this.isNodeDisabled(node)) {\r\n        node.indeterminate = false;\r\n        this.selectNode(node);\r\n        if (node.children && node.children.length) {\r\n          this.recursiveSelect(node.children);\r\n        }\r\n      }\r\n    });\r\n  }\r\n\r\n  /** Recursive deselect children */\r\n  private recursiveDeselect(nodes: TreeNode[]) {\r\n    nodes.forEach((node: TreeNode) => {\r\n      node.indeterminate = false;\r\n      this.selectionsMap.set(node[this.rowIdentifier], 'false');\r\n      // Remove node from selected\r\n      this.deselectNode(node);\r\n      if (node.children && node.children.length) {\r\n        this.recursiveDeselect(node.children);\r\n      }\r\n      let selectedChildren = this.selected.filter(\r\n        (n: TreeNode) => n['parentID'] === node[this.rowIdentifier]\r\n      );\r\n      // If the node is collapsed and we deselect it, it would not have any children but we still need to remove its children from the selected array because even if they are not in node.children, they are in this.selected\r\n      if (\r\n        (!node.children || !node.children.length) &&\r\n        selectedChildren.length\r\n      ) {\r\n        this.recursiveDeselect(selectedChildren);\r\n      }\r\n    });\r\n  }\r\n\r\n  protected applySorting(nodes?: TreeNode[]) {\r\n    if (this.sortField && this.sortMode && this.sorts.length) {\r\n      this.sortTree({ sorts: this.sorts });\r\n    }\r\n  }\r\n\r\n  private markNodeAsIndeterminate(node: TreeNode) {\r\n    node.indeterminate = true;\r\n    if (\r\n      !this.selected.find(\r\n        (s) => s[this.rowIdentifier] === node[this.rowIdentifier]\r\n      ) &&\r\n      !this.isNodeDisabled(node)\r\n    ) {\r\n      this.selected.push(node);\r\n    }\r\n  }\r\n\r\n  private markNodeAsNotIndeterminate(node: TreeNode) {\r\n    node.indeterminate = false;\r\n    let i = this.selected.findIndex(\r\n      (n) => n[this.rowIdentifier] === node[this.rowIdentifier]\r\n    );\r\n    if (i > -1) {\r\n      this.selected.splice(i, 1);\r\n    }\r\n  }\r\n\r\n  private selectNode(node: TreeNode) {\r\n    // TODO: Add in datatable is node disabled\r\n    let selIds = this.selected.map((s) => s[this.rowIdentifier]);\r\n    if (\r\n      !selIds.includes(node[this.rowIdentifier]) &&\r\n      !this.isNodeDisabled(node)\r\n    ) {\r\n      if (!this.filterWasApplied) {\r\n        this.selected.push(node);\r\n      } else if (this.filterWasApplied && node.children) {\r\n        //If all children are disabled, select parent, else behave normally (see apply and activate page)\r\n        if (!this.checkIfAllChildrenAreDisabled(node)) {\r\n          node.indeterminate = true;\r\n          this.selected.push(node);\r\n        } else {\r\n          this.selected.push(node);\r\n        }\r\n      } else if (this.filterWasApplied && !node.children) {\r\n        this.selected.push(node);\r\n      }\r\n      this.selectionsMap.set(node[this.rowIdentifier], 'true');\r\n    }\r\n  }\r\n\r\n  private deselectNode(node: TreeNode) {\r\n    if (this.selected.length) {\r\n      let index = this.selected.findIndex(\r\n        (n) => n[this.rowIdentifier] === node[this.rowIdentifier]\r\n      );\r\n      if (index !== -1) {\r\n        this.selected.splice(index, 1);\r\n      }\r\n    }\r\n  }\r\n\r\n  /**\r\n   * This method builds a dictionary with pairs of row ids and as value either 'true' 'false' or 'indeterminate' in order to always maintain the selections on the tree (before and after filtering)\r\n   *\r\n   * In order to retain the selections considering that on filtering the rows collection gets replaced and we no longer have all nodes, we need to retain what is being selected when the filter is applied\r\n   * and when removing the filter apply those selections\r\n   *\r\n   * @param nodes - each item from this array will be used for getting a key and modifying that specific entry in the selections dictionary\r\n   */\r\n  private buildSelectionsMap(nodes?: TreeNode[]) {\r\n    let selIds = this.selected.map((s) => s[this.rowIdentifier]);\r\n    let arr = nodes ? nodes : this.tree;\r\n    arr.forEach((node) => {\r\n      if (selIds.includes(node[this.rowIdentifier]) && !node.indeterminate)\r\n        this.selectionsMap.set(node[this.rowIdentifier], 'true');\r\n      else if (selIds.includes(node[this.rowIdentifier]) && node.indeterminate)\r\n        this.selectionsMap.set(node[this.rowIdentifier], 'indeterminate');\r\n      else if (!selIds.includes(node[this.rowIdentifier]))\r\n        this.selectionsMap.set(node[this.rowIdentifier], 'false');\r\n    });\r\n  }\r\n\r\n  /**\r\n   * This method applies the previously built selections dictionary in order to maintain the indeterminate or full selections from filtered results to all results\r\n   */\r\n  private applySelectionsMap() {\r\n    setTimeout(() => {\r\n      if (this.selectionsMap.size) {\r\n        let selIds = this.selected.map((s) => s[this.rowIdentifier]);\r\n        this.tree.forEach((node) => {\r\n          if (\r\n            this.selectionsMap.get(node[this.rowIdentifier]) === 'true' &&\r\n            !selIds.includes(node[this.rowIdentifier])\r\n          ) {\r\n            node.indeterminate = false;\r\n            this.selected.push(node);\r\n          } else if (\r\n            this.selectionsMap.get(node[this.rowIdentifier]) === 'false' &&\r\n            selIds.includes(node[this.rowIdentifier])\r\n          ) {\r\n            node.indeterminate = false;\r\n            let i = selIds.indexOf(node[this.rowIdentifier]);\r\n            if (i > -1) this.selected.splice(i, 1);\r\n          } else if (\r\n            this.selectionsMap.get(node[this.rowIdentifier]) === 'indeterminate'\r\n          ) {\r\n            node.indeterminate = true;\r\n            if (!selIds.includes(node[this.rowIdentifier])) {\r\n              this.selected.push(node);\r\n            }\r\n          }\r\n        });\r\n      }\r\n      this.buildSelectedItemsForDisplay();\r\n      this.selected = [...this.selected];\r\n    }, 0);\r\n  }\r\n\r\n  /**\r\n   * Get selected items for a tree. Do not use the 'selected' property or the selectedItemsForDisplay array. The selected array will contain the indeterminate selections as well.\r\n   * This method filters the selected array and returns only valid items. Valid items being selected items which are not indeterminate and for those which are not indeterminate, if a root and\r\n   * all children are selected, send only the root id.\r\n   */\r\n  getSelectedItems() {\r\n    let selected = _.cloneDeep(this.selected);\r\n    let selectedRoots = this.selected.filter(\r\n      (n: TreeNode) => n.level === 0 && !n.indeterminate\r\n    );\r\n    // Remove children for full selected roots (not indeterminate)\r\n    if (selectedRoots.length)\r\n      selected = selected.filter(\r\n        (n: TreeNode) =>\r\n          !selectedRoots\r\n            .map((r: TreeNode) => r[this.rowIdentifier])\r\n            .includes(n['parentID'])\r\n      );\r\n    // Remove roots which are indeterminate because they are not selected\r\n    selected = selected.filter((n: TreeNode) => !n.indeterminate);\r\n    return selected;\r\n  }\r\n\r\n  /**\r\n   * Same as getSelectedItems() but not return the indeterminate nodes\r\n   *\r\n   * Used in HTML\r\n   */\r\n  private buildSelectedItemsForDisplay() {\r\n    this.selectedItemsForDisplay = _.cloneDeep(this.selected);\r\n    this.selectedItemsForDisplay = this.selectedItemsForDisplay.filter(\r\n      (n: TreeNode) => !n.indeterminate\r\n    );\r\n  }\r\n\r\n  // ===== Tree related methods ====\r\n  toggleExpandChildren(row: TreeNode, childrenExpansion: boolean) {\r\n    if (row.children && !childrenExpansion) {\r\n      if (!this.staticTree) {\r\n        // Make request and after that expand\r\n        this.sortingAndFilteringBuilder.setAdditionalParameters([\r\n          { param: 'childrenLevels', value: (1).toString() },\r\n        ]);\r\n        this.fetchDataFn(\r\n          this.sortingAndFilteringBuilder,\r\n          this.expandChildren.bind(this),\r\n          row[this.rowIdentifier]\r\n        );\r\n      } else this.expandChildren(row);\r\n    } else if (row.children && row.children.length && childrenExpansion) {\r\n      this.collapseChildren(row);\r\n    }\r\n    this.setGlobalSelectionCheckboxState();\r\n  }\r\n\r\n  expandChildren(row: TreeNode) {\r\n    if (row.children && row.children.length) {\r\n      row.childrenExpansion = true;\r\n      let f = this.tree.find(\r\n        (n) => n[this.rowIdentifier] === row[this.rowIdentifier]\r\n      );\r\n      if (!f)\r\n        throw new Error(\r\n          'The node which is being expanded does not exist in the tree structure!'\r\n        );\r\n      let index = this.tree.indexOf(f);\r\n      let parentIndex = index;\r\n      // If the backend does not send the row with the parent id, make sure we don't lose it\r\n      row['parentID'] = f['parentID'];\r\n      row.children.forEach((c) => {\r\n        index += 1;\r\n        c.expanded = false;\r\n        c.childrenExpansion = false;\r\n        c.level = f.level + 1;\r\n        c['parentID'] = row[this.rowIdentifier];\r\n\r\n        this.tree.splice(index, 0, c);\r\n      });\r\n\r\n      // Do not move the children on other page as the tree is paginated on the backend (only if this.displayedLimit + row.children.length > this.limit)\r\n      if (this.displayedLimit + row.children.length > this.limit)\r\n        this.displayedLimit += row.children.length;\r\n\r\n      row.level = f.level;\r\n      row.indeterminate = f.indeterminate;\r\n      this.replaceNodeInTree(row[this.rowIdentifier], row);\r\n      // Sort after expand\r\n      this.applySorting(\r\n        this.tree.slice(parentIndex + 1, parentIndex + row.children.length + 1)\r\n      );\r\n\r\n      // All children which are selected (may be or may not be resulted from filtering)\r\n      let selectedChildrenOfRow = this.selected\r\n        .filter((n: TreeNode) => n['parentID'] === row[this.rowIdentifier])\r\n        .map((n) => n[this.rowIdentifier]);\r\n      // The filtered children (all children of the row, because at filtering we have a new object - parent - and a new set of children and we don't know how many children does that parent have before filtering)\r\n      let filteredSelectedChildrenOfRow = row.children.map(\r\n        (n) => n[this.rowIdentifier]\r\n      );\r\n      // Intersection between all selected children and filtered selected children => filtered children which are also selected => if intersection's length is > 0 then we cannot select all children at expand\r\n      let intersection = selectedChildrenOfRow.filter((x) =>\r\n        filteredSelectedChildrenOfRow.includes(x)\r\n      );\r\n      // Difference between all selected children and filtered selected children => children which are selected but not search result => if difference length is > 0 then we cannot select all children at expand because it would mean to select including children which are not search result\r\n      let difference = selectedChildrenOfRow.filter(\r\n        (x) => !filteredSelectedChildrenOfRow.includes(x)\r\n      );\r\n      let indeterminateChildren: string[] = [];\r\n      let allSelectedChildrenOfRow = [\r\n        ...selectedChildrenOfRow,\r\n        ...filteredSelectedChildrenOfRow,\r\n      ];\r\n      this.selectionsMap.forEach((value, key) => {\r\n        if (value === 'indeterminate' && allSelectedChildrenOfRow.includes(key))\r\n          indeterminateChildren.push(key);\r\n      });\r\n\r\n      // If the node that is being expanded is selected also and not indeterminate, select its children\r\n      // If the node is indeterminate, filter is applied, the intersection and difference length are 0 && it has no indeterminate children, then select its children (explanations above)\r\n      if (\r\n        this.selectionType === 'checkbox' &&\r\n        row.children &&\r\n        row.children.length &&\r\n        row.childrenExpansion &&\r\n        ((!row.indeterminate &&\r\n          this.selected.find(\r\n            (s) => s[this.rowIdentifier] === row[this.rowIdentifier]\r\n          )) ||\r\n          (row.indeterminate &&\r\n            this.filterWasApplied &&\r\n            !intersection.length &&\r\n            !difference.length &&\r\n            !indeterminateChildren.length))\r\n      ) {\r\n        this.lastSelectedRow = row;\r\n        this.checkboxStateForLastSelectedRow = true;\r\n        this.onSelect({ selected: [...this.selected] }, row);\r\n      }\r\n\r\n      // Now that the tree will be paginated we will only increase the count, not changing it according to the new structure\r\n      this.count = this.count + row.children.length;\r\n      this.tree = [...this.tree];\r\n      this.treeChange.emit(this.tree);\r\n      this.nodeExpanded.emit(row);\r\n      this.setGlobalSelectionCheckboxState();\r\n      this.applySelectionsMap();\r\n\r\n      this.applySorting();\r\n\r\n      // At expand, it is possible that all children were selected from filtering, therefore, we need to check if indeed all children are selected and if they are, mark the parent as selected\r\n      setTimeout(() => {\r\n        //If all children are disabled, check parent, else behave normally (see apply and activate page)\r\n        if (!this.checkIfAllChildrenAreDisabled(row)) {\r\n          // Check only for checkbox selection type\r\n          if (\r\n            !this.filterWasApplied &&\r\n            row.children[0] &&\r\n            this.selectionType === 'checkbox'\r\n          ) {\r\n            // Only check first parent\r\n            this.recursiveCheckParents(row.children[0], this.selected, false);\r\n            this.buildSelectionsMap();\r\n          }\r\n        }\r\n      }, 0);\r\n    } else this.replaceNodeInTree(row[this.rowIdentifier], row);\r\n  }\r\n\r\n  private checkIfAllChildrenAreDisabled(row: TreeNode): boolean {\r\n    let allDisabled = true;\r\n    if (this.disableSelections) return true;\r\n    row.children.forEach((c) => {\r\n      if (!this.isNodeDisabled(c)) allDisabled = false;\r\n      return;\r\n    });\r\n    return allDisabled;\r\n  }\r\n\r\n  collapseChildren(row: TreeNode) {\r\n    if (row.children && row.children.length) {\r\n      row.childrenExpansion = false;\r\n      let f = this.tree.find(\r\n        (n) => n[this.rowIdentifier] === row[this.rowIdentifier]\r\n      );\r\n      let index = this.tree.indexOf(f);\r\n      if (index !== -1) {\r\n        row.children.forEach((childNode) => {\r\n          if (\r\n            childNode.children &&\r\n            childNode.children.length &&\r\n            childNode.childrenExpansion\r\n          ) {\r\n            this.collapseChildren(childNode);\r\n          }\r\n        });\r\n\r\n        this.tree.splice(index + 1, row.children.length);\r\n        this.displayedLimit -= row.children.length;\r\n\r\n        this.tree = [...this.tree];\r\n        // Now that the tree will be paginated we will only decrease the count with the collapsed children, not changing it according to the new structure\r\n        this.count = this.count - row.children.length;\r\n\r\n        //  If it is a static tree then we won't get the children at node click and we should not clear them every time\r\n        if (!this.staticTree) row.children = [];\r\n        this.treeChange.emit(this.tree);\r\n        this.nodeCollapsed.emit(row);\r\n      }\r\n    }\r\n  }\r\n\r\n  collapseAllNodes() {\r\n    this.tree = this.tree.filter((node: TreeNode) => {\r\n      node.childrenExpansion = false;\r\n      return node.level === 0;\r\n    });\r\n    this.displayedLimit = this.limit;\r\n  }\r\n\r\n  /**\r\n   * In order to perform live update on the jobs, we need to perform a request only to get those jobs which are visible in the UI\r\n   * This method returns all ids which are visible in the interface and which fulfill the rowRestriction condition\r\n   * @param rowRestriction function which returns true if the row should be contained in the result\r\n   */\r\n  getCurrentlyDisplayedItems(rowRestriction?: Function): TreeNode[] {\r\n    const rowsOnCurrentPage = this.getRows().filter((row, index) => {\r\n      return (\r\n        index < this.limit * (this.offset + 1) &&\r\n        index >= this.limit * this.offset &&\r\n        rowRestriction(row)\r\n      );\r\n    });\r\n    return rowsOnCurrentPage;\r\n  }\r\n\r\n  replaceNodesInTree(newNodes: TreeNode[]) {\r\n    if (newNodes && newNodes.length) {\r\n      newNodes.forEach((node: TreeNode) => {\r\n        this.replacePropertiesForNode(node['id'], node);\r\n      });\r\n      addNodeLevels(this.tree, 0, null, this.rowIdentifier);\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Instead of replacing the entire node, replace only the properties for it\r\n   * @param id\r\n   * @param node\r\n   */\r\n  private replacePropertiesForNode(id: any, node: any) {\r\n    let index = this.tree.findIndex(\r\n      (t: TreeNode) => t[this.rowIdentifier] === id\r\n    );\r\n    Object.keys(node).forEach((key) => {\r\n      if (this.tree[index]) {\r\n        this.tree[index][key] = node[key];\r\n      }\r\n    });\r\n  }\r\n  /**\r\n   * Method used for replacing node in the tree structure and also the array of rows\r\n   * \r\n   * We basically have two structures, one is the array of rows which contains the root on 0 and other expanded children on next indexes (this.tree)\r\n     And it is the root/roots which are very important because based on them we calculate the depth of the tree and we add the margins in the table!! (if we have one root it will always be tree[0])\r\n     The nodes from the tree structure (aka the roots which have children and the children have children and so on) must always be in sync with the array of nodes\r\n     \r\n     If we have a tree with one root, 3 children, and the first child has also 2 children\r\n     If the root is expanded we will have\r\n     root (has children)\r\n      child1 (has children)\r\n      child2\r\n      child3\r\n\r\n      Now, the tree property would be\r\n      this.tree = [ root (with root.children = array(3)), child1, child2, child3]\r\n      If we expand the first child also we will have\r\n      this.tree = [ root (with root.children=3 and root.children[0]=2), child1 (with child1.children = 2), child2, child3]\r\n\r\n      So we MUST have child1.children = array(2) in this.tree[0] which is the root and also this.tree[1] which is the child node\r\n   * @param id \r\n   * @param node \r\n   */\r\n  replaceNodeInTree(id: any, node: any) {\r\n    let tree = { children: this.tree };\r\n    let element = this.findNode(tree, id);\r\n\r\n    if (element) {\r\n      // Replace in array\r\n      let pf = this.tree.find((c) => c[this.rowIdentifier] === id);\r\n      let index = this.tree.indexOf(pf);\r\n      if (index == -1)\r\n        throw new Error('Could not find the node to replace in the rows array');\r\n      this.tree.splice(index, 1, node);\r\n\r\n      // Replace in tree\r\n      if (element['parentID']) {\r\n        let parent = this.findNode(tree, element['parentID']);\r\n        if (parent && parent.children) {\r\n          let pf = parent.children.find((c) => c[this.rowIdentifier] === id);\r\n          let index = parent.children.indexOf(pf);\r\n          if (index == -1)\r\n            throw new Error(\r\n              'Could not find the node to replace in the tree structure. Make sure it exists'\r\n            );\r\n          parent.children.splice(index, 1, node);\r\n        }\r\n      }\r\n    }\r\n\r\n    this.tree = [...this.tree];\r\n    this.treeChange.emit(this.tree);\r\n  }\r\n\r\n  /**\r\n   * Method used to search a node in a tree\r\n   *\r\n   * We have a tree with multiple roots so this should be called like so: findNode({children: this.tree}, identifier)\r\n   * @param element\r\n   * @param identifier\r\n   */\r\n  findNode(element: TreeNode, identifier: any): TreeNode {\r\n    if (identifier) {\r\n      if (element[this.rowIdentifier] == identifier) {\r\n        return element;\r\n      } else if (element.children != null && element.children.length) {\r\n        var i;\r\n        var result = null;\r\n        for (i = 0; result == null && i < element.children.length; i++) {\r\n          result = this.findNode(element.children[i], identifier);\r\n        }\r\n        return result;\r\n      }\r\n    }\r\n    return null;\r\n  }\r\n\r\n  // getExportExternalFetching(): boolean {\r\n  //   if (this.exportComp.itemsToExport === 'SELECTED') {\r\n  //     return !this.staticTree;\r\n  //   } else if (this.exportComp.itemsToExport === 'ALL') {\r\n  //     if (this.staticTree && this.externalPaging) return true;\r\n  //     if (!this.staticTree) return true;\r\n  //   } else if (this.exportComp.itemsToExport === 'PAGE') {\r\n  //     return this.externalPaging;\r\n  //   } else return true;\r\n  // }\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n<!-- Tree table -->\r\n<!-- <div style=\"display: flex; flex-direction: row-reverse\">\r\n  <button mat-raised-button class=\"btn btn-sm btn-primary\" (click)=\"expandAllNodes()\">Expand all</button>\r\n  <button mat-raised-button class=\"btn btn-sm btn-primary\" (click)=\"collapseAllNodes()\">Collapse all</button>\r\n</div> -->\r\n<div\r\n  [ngClass]=\"{ disableTable: disabled }\"\r\n  id=\"{{ id }}TableContainer\"\r\n  [loading]=\"loadingIndicator\"\r\n>\r\n  <!-- Toggle Columns Dialog -->\r\n  <ngx-xcng-dialog-modal\r\n    #toggleModal\r\n    id=\"{{ id }}-toggleColModal\"\r\n    modalTitle=\"{{ 'LBL_TOGGLE_COLUMNS' | translate }}\"\r\n    [buttonArray]=\"toggleModalButtons\"\r\n    class=\"modal-sm\"\r\n    buttonText=\"{{ 'LBL_CLOSE' | translate }}\"\r\n    hide=\"true\"\r\n  >\r\n    <div class=\"toggleColumns\" *ngFor=\"let col of columns; index as i\">\r\n      <label [attr.for]=\"id + '-' + col.name\">\r\n        <mat-checkbox\r\n          [id]=\"id + '-' + col.name\"\r\n          (change)=\"toggleDisplay(col)\"\r\n          [checked]=\"!col.notDisplayed\"\r\n          [disabled]=\"col.alwaysDisplayed\"\r\n        ></mat-checkbox>\r\n        {{ col.name | translate }}\r\n      </label>\r\n    </div>\r\n  </ngx-xcng-dialog-modal>\r\n\r\n  <!-- Table toolbar -->\r\n  <ngx-xcng-table-toolbar\r\n    [disabled]=\"disabled\"\r\n    *ngIf=\"table && isTableToolbarHidden !== true\"\r\n    [actions]=\"tableToolbarActions\"\r\n    [table]=\"this\"\r\n    [tableFilteringConfig]=\"tableToolbarFilteringConfig\"\r\n    [tableToolbarIconsClassConfig]=\"tableToolbarIconsClassConfig\"\r\n    [tableEvents]=\"tableToolbarEventsSubject.asObservable()\"\r\n    [(activeFilters)]=\"activeFilters\"\r\n    [showRefreshButton]=\"fetchDataFn ? true : false\"\r\n  >\r\n  </ngx-xcng-table-toolbar>\r\n\r\n  <!-- Data table -->\r\n  <ngx-datatable\r\n    #table\r\n    [id]=\"id\"\r\n    class=\"material\"\r\n    [columnMode]=\"'force'\"\r\n    [columns]=\"columns\"\r\n    [count]=\"count\"\r\n    [externalPaging]=\"externalPaging\"\r\n    [externalSorting]=\"false\"\r\n    [footerHeight]=\"defaultFooterHeight\"\r\n    [headerHeight]=\"36\"\r\n    [limit]=\"externalPaging ? displayedLimit : limit\"\r\n    [reorderable]=\"true\"\r\n    [swapColumns]=\"false\"\r\n    [rowHeight]=\"rowHeight\"\r\n    [rows]=\"tree\"\r\n    [selected]=\"selected\"\r\n    [selectionType]=\"defaultSelectionType\"\r\n    [sorts]=\"sorts\"\r\n    [sortType]=\"defaultSortType\"\r\n    [targetMarkerTemplate]=\"targetMarkerTemplate\"\r\n    [rowIdentity]=\"getIdFunc()\"\r\n    (sort)=\"onSort($event)\"\r\n    (page)=\"setPage($event)\"\r\n    (reorder)=\"reordered($event)\"\r\n    (window:resize)=\"onResize($event)\"\r\n    (select)=\"onSelect($event)\"\r\n    (activate)=\"activate($event)\"\r\n    [offset]=\"offset\"\r\n    [rowClass]=\"rowClass\"\r\n  >\r\n    <!-- Datatable fixed left column on mobile view with expand row icons -->\r\n    <!-- <ngx-datatable-column [name]=\"\" [width]=\"50\" [minWidth]=\"50\" [resizeable]=\"false\" [draggable]=\"false\"\r\n    [canAutoResize]=\"false\" [frozenLeft]=\"true\" cellClass=\"leftCellClass\" *ngIf=\"mobileView\">\r\n    <ng-template ngx-datatable-header-template let-value=\"value\"></ng-template>\r\n\r\n    <ng-template ngx-datatable-cell-template let-row=\"row\" let-value=\"value\" let-expanded=\"expanded\" let-value=\"value\">\r\n      <a (click)=\"toggleExpandRow(row)\">\r\n        <i [ngClass]=\"expanded ? 'pi pi-arrow-circle-up' : 'pi pi-arrow-circle-down'\" style=\"color:gray\"\r\n          title=\"{{'LBL_EXPAND_COLLAPSE_ROW' | translate}}\"></i>\r\n      </a>\r\n    </ng-template>\r\n  </ngx-datatable-column> -->\r\n\r\n    <!-- Datatable fixed left column with selection checkboxes -->\r\n    <ngx-datatable-column\r\n      [name]=\"\"\r\n      [width]=\"50\"\r\n      [minWidth]=\"50\"\r\n      [resizeable]=\"false\"\r\n      [draggable]=\"false\"\r\n      [canAutoResize]=\"false\"\r\n      [frozenLeft]=\"true\"\r\n      [sortable]=\"false\"\r\n      cellClass=\"leftCellClass\"\r\n      *ngIf=\"selectionType === 'cell' || selectionType === 'checkbox'\"\r\n    >\r\n      <ng-template ngx-datatable-header-template let-value=\"value\">\r\n        <mat-checkbox\r\n          *ngIf=\"selectionType === 'checkbox' && tree?.length > 0\"\r\n          id=\"table-select-all-{{ id }}\"\r\n          [checked]=\"selectAllOnPage[offset] === 'all'\"\r\n          [indeterminate]=\"selectAllOnPage[offset] === 'noop'\"\r\n          [disabled]=\"disableSelections || loadingIndicator\"\r\n          (change)=\"togglePageSelection($event)\"\r\n          [ngClass]=\"{ 'cursor-no-drop': disableSelections }\"\r\n        >\r\n        </mat-checkbox>\r\n        <!-- <button *ngIf=\"selectionType === 'checkbox' && rows.length > 0\"\r\n        class=\"dropdown-toggle dropdown selectArrow\" \r\n        type=\"button\" id=\"dropdownMenuButton\"\r\n        data-toggle=\"dropdown\" aria-haspopup=\"true\"\r\n        aria-expanded=\"false\">\r\n      </button>\r\n      <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton\">\r\n        <div class=\"selectOption\" (click)='selectPage($event)' \r\n        [ngClass]=\"{'disabled': selectAllOnPage[offset] === 'all' || disableSelections}\">\r\n        {{ 'LBL_SELECT_CURRENT_PAGE' | translate }}</div>\r\n        <div class=\"selectOption\" (click)='clearPage($event)'\r\n        [ngClass]=\"{'disabled': !selectAllOnPage[offset] || selectAllOnPage[offset] === 'none' || disableSelections}\">\r\n        {{ 'LBL_CLEAR_CURRENT_PAGE' | translate }}</div>\r\n        <div class=\"selectOption\" (click)='selectAll($event)'\r\n        [ngClass]=\"{'disabled': allSelected === true && deselected.length == 0 || disableSelections}\">\r\n        {{ 'LBL_SELECT_ALL' | translate }}</div> -->\r\n        <!-- <div class=\"selectOption\" (click)='clearAll($event) && this.headerSelection.emit(\"clear all\")'\r\n        [ngClass]=\"{'disabled': selected.length == 0 && deselected.length == 0 || disableSelections}\">\r\n        {{ 'LBL_CLEAR_ALL' | translate }}</div>\r\n      </div> -->\r\n      </ng-template>\r\n      <ng-template\r\n        ngx-datatable-cell-template\r\n        let-row=\"row\"\r\n        let-value=\"value\"\r\n        let-expanded=\"expanded\"\r\n        let-isSelected=\"isSelected\"\r\n        let-onCheckboxChangeFn=\"onCheckboxChangeFn\"\r\n      >\r\n        <mat-checkbox\r\n          #checkbox\r\n          *ngIf=\"selectionType === 'checkbox'\"\r\n          id=\"{{ id }}-select-row-{{ row[rowIdentifier] }}\"\r\n          (click)=\"onCheckboxSelect(checkbox, row)\"\r\n          [checked]=\"\r\n            disableSelections || (isNodeDisabled && isNodeDisabled(row))\r\n              ? false\r\n              : isSelected\r\n          \"\r\n          [(indeterminate)]=\"row.indeterminate\"\r\n          [disabled]=\"\r\n            disableSelections || (isNodeDisabled && isNodeDisabled(row))\r\n          \"\r\n          [ngClass]=\"{\r\n            'cursor-no-drop':\r\n              disableSelections || (isNodeDisabled && isNodeDisabled(row))\r\n          }\"\r\n          (change)=\"onCheckboxChangeFn($event)\"\r\n        ></mat-checkbox>\r\n        <mat-radio-button\r\n          #radio\r\n          *ngIf=\"selectionType === 'cell'\"\r\n          id=\"{{ id }}-select-row-{{ row[rowIdentifier] }}\"\r\n          [checked]=\"storedId == row[rowIdentifier] && !disableSelections\"\r\n          [disabled]=\"\r\n            disableSelections || (isNodeDisabled && isNodeDisabled(row))\r\n          \"\r\n          [ngClass]=\"{\r\n            'cursor-no-drop':\r\n              disableSelections || (isNodeDisabled && isNodeDisabled(row))\r\n          }\"\r\n          (click)=\"checkState(radio, row)\"\r\n        >\r\n        </mat-radio-button>\r\n      </ng-template>\r\n    </ngx-datatable-column>\r\n\r\n    <!-- Template for row details -->\r\n    <ngx-datatable-row-detail [rowHeight]=\"defaultRowHeight\" #myDetailRow>\r\n      <!-- Template for mobile view -->\r\n      <ng-template\r\n        let-row=\"row\"\r\n        let-expanded=\"expanded\"\r\n        ngx-datatable-row-detail-template\r\n      >\r\n        <table class=\"rowDetailTable\" *ngIf=\"mobileView\">\r\n          <tbody>\r\n            <!-- <tr>\r\n            <td colspan=\"2\">{{ getParentPath(row) }}</td>\r\n          </tr> -->\r\n            <ng-container *ngFor=\"let col of columns; index as i\">\r\n              <tr *ngIf=\"i !== indexOfFirstDisplayedCol\">\r\n                <td class=\"colName\">{{ col.name | translate }}</td>\r\n                <td class=\"colData\">\r\n                  <div\r\n                    *ngIf=\"col.mobileCellTemplate; else noMobileCellTemplate\"\r\n                  >\r\n                    <ng-container\r\n                      *ngTemplateOutlet=\"\r\n                        col.mobileCellTemplate;\r\n                        context: { row: row, column: col, value: row[col.prop] }\r\n                      \"\r\n                    >\r\n                    </ng-container>\r\n                  </div>\r\n                  <ng-template #noMobileCellTemplate>\r\n                    {{ row[col.prop] | checkNA: true }}\r\n                  </ng-template>\r\n                </td>\r\n              </tr>\r\n            </ng-container>\r\n          </tbody>\r\n        </table>\r\n        <!-- Additional template for mobile view -->\r\n        <div *ngIf=\"mobileView\">\r\n          <ng-container\r\n            *ngTemplateOutlet=\"additionalMobileTemplate; context: { row: row }\"\r\n          >\r\n          </ng-container>\r\n        </div>\r\n\r\n        <div *ngIf=\"!mobileView\">\r\n          <ng-container\r\n            *ngTemplateOutlet=\"rowExpansion.template; context: { row: row }\"\r\n          >\r\n          </ng-container>\r\n        </div>\r\n      </ng-template>\r\n    </ngx-datatable-row-detail>\r\n\r\n    <!-- Rest of columns iteration -->\r\n    <ng-container *ngFor=\"let col of columns; index as i\">\r\n      <!-- First col with celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i === indexOfFirstDisplayedCol &&\r\n          !col.notDisplayed &&\r\n          col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n\r\n        <ng-template\r\n          let-row=\"row\"\r\n          let-value=\"value\"\r\n          let-expanded=\"expanded\"\r\n          ngx-datatable-cell-template\r\n        >\r\n          <div\r\n            id=\"{{ id }}-firstColTree{{ row[rowIdentifier] }}\"\r\n            [ngStyle]=\"{\r\n              'margin-left':\r\n                (row.level !== undefined ? row.level : 0) * PARENT_MARGIN_PX +\r\n                'px'\r\n            }\"\r\n          >\r\n            <!-- The tree arrow -->\r\n            <div\r\n              *ngIf=\"row.children\"\r\n              class=\"row-detail-arrow\"\r\n              [ngClass]=\"{ 'row-detail-arrow-margin': row.level !== 0 }\"\r\n            >\r\n              <a\r\n                [class.datatable-icon-right]=\"!row.childrenExpansion\"\r\n                [class.datatable-icon-down]=\"row.childrenExpansion\"\r\n                title=\"{{ 'LBL_TOGGLE_ROW_EXPANSION' | translate }}\"\r\n                class=\"datatable-dropdown-icon\"\r\n                (click)=\"\r\n                  mobileView\r\n                    ? toggleExpandChildren(row, row.childrenExpansion)\r\n                    : null\r\n                \"\r\n              >\r\n              </a>\r\n            </div>\r\n            <!-- The template received through col.cellTemplate -->\r\n            <ng-container\r\n              *ngTemplateOutlet=\"\r\n                col.cellTemplate;\r\n                context: { row: row, value: row[col.prop] }\r\n              \"\r\n            >\r\n            </ng-container>\r\n          </div>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n\r\n      <!-- First col without celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i === indexOfFirstDisplayedCol &&\r\n          !col.notDisplayed &&\r\n          !col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n        <ng-template\r\n          let-row=\"row\"\r\n          let-value=\"value\"\r\n          let-expanded=\"expanded\"\r\n          ngx-datatable-cell-template\r\n        >\r\n          <ng-container *ngIf=\"col.tooltip; else other\">\r\n            <div *ngIf=\"row.children\" class=\"row-detail-arrow\">\r\n              <a\r\n                [class.datatable-icon-right]=\"!row.childrenExpansion\"\r\n                [class.datatable-icon-down]=\"row.childrenExpansion\"\r\n                title=\"{{ 'LBL_TOGGLE_ROW_EXPANSION' | translate }}\"\r\n                class=\"datatable-dropdown-icon\"\r\n              >\r\n              </a>\r\n            </div>\r\n\r\n            <div\r\n              [popover]=\"row[col.prop]\"\r\n              placement=\"auto\"\r\n              triggers=\"mouseover\"\r\n              [popoverTitle]=\"col.name | translate\"\r\n              (onShown)=\"popOverShown()\"\r\n              class=\"pop tooltip-cell-container\"\r\n              [class.tooltip-cell-mobile-container]=\"mobileView\"\r\n            >\r\n              {{ row[col.prop] }}\r\n            </div>\r\n          </ng-container>\r\n\r\n          <ng-template #other>\r\n            <div\r\n              id=\"{{ id }}-firstColTree{{ row[rowIdentifier] }}\"\r\n              [ngStyle]=\"{\r\n                'margin-left':\r\n                  (row.level !== undefined ? row.level : 0) * PARENT_MARGIN_PX +\r\n                  'px'\r\n              }\"\r\n            >\r\n              <div *ngIf=\"row.children\" class=\"row-detail-arrow\">\r\n                <a\r\n                  [class.datatable-icon-right]=\"!row.childrenExpansion\"\r\n                  [class.datatable-icon-down]=\"row.childrenExpansion\"\r\n                  title=\"{{ 'LBL_TOGGLE_ROW_EXPANSION' | translate }}\"\r\n                  (click)=\"\r\n                    mobileView\r\n                      ? toggleExpandChildren(row, row.childrenExpansion)\r\n                      : null\r\n                  \"\r\n                  class=\"datatable-dropdown-icon\"\r\n                >\r\n                </a>\r\n              </div>\r\n              <span>{{ row[col.prop] }}</span>\r\n            </div>\r\n          </ng-template>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n\r\n      <!-- Not first column with celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i !== indexOfFirstDisplayedCol &&\r\n          !mobileView &&\r\n          !col.notDisplayed &&\r\n          col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n        <ng-template\r\n          let-row=\"row\"\r\n          let-value=\"value\"\r\n          let-expanded=\"expanded\"\r\n          ngx-datatable-cell-template\r\n        >\r\n          <ng-container\r\n            *ngTemplateOutlet=\"\r\n              col.cellTemplate;\r\n              context: { row: row, value: row[col.prop], column: col }\r\n            \"\r\n          >\r\n          </ng-container>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n\r\n      <!-- Not first column without celltemplate -->\r\n      <ngx-datatable-column\r\n        *ngIf=\"\r\n          i !== indexOfFirstDisplayedCol &&\r\n          !mobileView &&\r\n          !col.notDisplayed &&\r\n          !col.cellTemplate\r\n        \"\r\n        [name]=\"col.name\"\r\n        [prop]=\"col.prop\"\r\n        [width]=\"col.width\"\r\n        [resizeable]=\"col.resizeable\"\r\n        [sortable]=\"col.sortable\"\r\n        [draggable]=\"col.draggable\"\r\n        [canAutoResize]=\"col.canAutoResize\"\r\n      >\r\n        <ng-template ngx-datatable-header-template let-sort=\"sortFn\">\r\n          <span class=\"datatable-header-cell-wrapper\">\r\n            <span\r\n              class=\"datatable-header-cell-label draggable\"\r\n              (click)=\"sort()\"\r\n              >{{ col.name | translate }}</span\r\n            >\r\n          </span>\r\n        </ng-template>\r\n        <ng-template\r\n          let-row=\"row\"\r\n          let-value=\"value\"\r\n          ngx-datatable-cell-template\r\n        >\r\n          <ng-container *ngIf=\"col.tooltip; else other\">\r\n            <div\r\n              [popover]=\"row[col.prop]\"\r\n              placement=\"left\"\r\n              triggers=\"mouseover\"\r\n              [popoverTitle]=\"col.name | translate\"\r\n              (onShown)=\"popOverShown()\"\r\n              class=\"pop tooltip-cell-container\"\r\n            >\r\n              {{ row[col.prop] }}\r\n            </div>\r\n          </ng-container>\r\n          <ng-template #other>\r\n            <span class=\"mobile-hidden\">{{ row[col.prop] }}</span>\r\n          </ng-template>\r\n        </ng-template>\r\n      </ngx-datatable-column>\r\n    </ng-container>\r\n\r\n    <ngx-datatable-footer *ngIf=\"isFooterVisible; else noFooter\">\r\n      <ng-template\r\n        ngx-datatable-footer-template\r\n        let-rowCount=\"rowCount\"\r\n        let-pageSize=\"pageSize\"\r\n        let-selectedCount=\"selectedCount\"\r\n        let-curPage=\"curPage\"\r\n        let-offset=\"offset\"\r\n      >\r\n        <div class=\"d-flex flex-row flex-wrap\">\r\n          <div class=\"footerContainer\" id=\"ngx-datatable-footer-text\">\r\n            <div\r\n              *ngIf=\"selectedItemsForDisplay.length > count\"\r\n              class=\"help-mouseover-icon-wrapper\"\r\n              popover=\"{{ 'STR_SELECTED_GREATER_THAN_ROWS_TREE' | translate }}\"\r\n              triggers=\"mouseenter:mouseleave\"\r\n              placement=\"right\"\r\n            >\r\n              <!-- <img src=\"assets/ngx-len-assets/images/help-mouseover.png\" class=\"health-accuracy-icon\" /> -->\r\n              <div class=\"help-mouseover-icon\"></div>\r\n            </div>\r\n\r\n            <div\r\n              *ngIf=\"isSelectedVisible && selectionType !== 'none'\"\r\n              style=\"display: inline-block\"\r\n            >\r\n              <span *ngIf=\"!allSelected\">\r\n                {{ setSelectionNumber || selectedItemsForDisplay.length }}\r\n                {{ \"STR_SELECTED\" | translate }}</span\r\n              >\r\n              <span *ngIf=\"allSelected\">\r\n                {{ rowCount - deselected.length }}\r\n                {{ \"STR_SELECTED\" | translate }}</span\r\n              >\r\n            </div>\r\n\r\n            <span *ngIf=\"isSelectedVisible && selectionType !== 'none'\">\r\n              /\r\n            </span>\r\n            <span>{{ rowCount }} {{ \"STR_TOTAL\" | translate }}</span>\r\n          </div>\r\n\r\n          <div class=\"footerContainer\" *ngIf=\"tree && tree.length > 0\">\r\n            {{ \"STR_ROWS_PER_PAGE\" | translate }}: {{ limit }}\r\n            <button\r\n              class=\"dropdown-toggle dropdown selectArrow\"\r\n              type=\"button\"\r\n              id=\"dropdownMenuButton\"\r\n              data-toggle=\"dropdown\"\r\n              aria-haspopup=\"true\"\r\n              aria-expanded=\"false\"\r\n            ></button>\r\n            <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton\">\r\n              <div *ngFor=\"let value of rowsOnPage\">\r\n                <div\r\n                  *ngIf=\"value != limit\"\r\n                  class=\"selectOption\"\r\n                  (click)=\"setRowsPerPage(value)\"\r\n                >\r\n                  {{ value }}\r\n                </div>\r\n              </div>\r\n            </div>\r\n          </div>\r\n          <datatable-pager\r\n            [pagerLeftArrowIcon]=\"'datatable-icon-left'\"\r\n            [pagerRightArrowIcon]=\"'datatable-icon-right'\"\r\n            [pagerPreviousIcon]=\"'datatable-icon-prev'\"\r\n            [pagerNextIcon]=\"'datatable-icon-skip'\"\r\n            [page]=\"curPage\"\r\n            [size]=\"pageSize\"\r\n            [count]=\"rowCount\"\r\n            [hidden]=\"!(rowCount / pageSize > 1)\"\r\n            (change)=\"table.onFooterPage($event)\"\r\n          >\r\n          </datatable-pager>\r\n        </div>\r\n      </ng-template>\r\n    </ngx-datatable-footer>\r\n\r\n    <ng-template #noFooter>\r\n      <ngx-datatable-footer> </ngx-datatable-footer>\r\n    </ng-template>\r\n  </ngx-datatable>\r\n\r\n  <ng-template #targetMarkerTemplate let-class=\"class\">\r\n    <div [ngClass]=\"class\">\r\n      <div class=\"datatable-target-icon datatable-icon-down\"></div>\r\n      <div class=\"datatable-target-icon datatable-icon-up\"></div>\r\n    </div>\r\n  </ng-template>\r\n</div>\r\n\r\n<!-- <export-table-data\r\n  [(rows)]=\"tree\"\r\n  [selectedRows]=\"selected\"\r\n  [tableId]=\"id\"\r\n  [columns]=\"columns\"\r\n  [exportFetchDataFunction]=\"exportFetchDataFunction\"\r\n  [builder]=\"sortingAndFilteringBuilder\"\r\n  [total]=\"count\"\r\n  [selectionType]=\"selectionType\"\r\n  [externalFetching]=\"getExportExternalFetching()\"\r\n  [limit]=\"externalPaging ? displayedLimit : limit\"\r\n  [offset]=\"offset\"\r\n  [source]=\"source\"\r\n  [componentSource]=\"'tree'\"\r\n  [formatDataFunc]=\"formatDataFunc\"\r\n  [treeFetchDataMethod]=\"treeFetchDataMethod\"\r\n  [rowIdentifier]=\"rowIdentifier\"\r\n>\r\n</export-table-data> -->\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { NgxDatatableModule } from '@swimlane/ngx-datatable';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MatFormFieldModule } from '@angular/material/form-field';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { ScrollPanelModule } from 'primeng/scrollpanel';\r\nimport { CalendarModule } from 'primeng/calendar';\r\nimport { ProgressBarModule } from 'primeng/progressbar';\r\nimport { NgxDatatableComponent } from './ngx-datatable.component';\r\nimport { DialogModalModule } from '../dialog-modal/dialog-modal.module';\r\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\nimport { CollapseModule } from 'ngx-bootstrap/collapse';\r\nimport {\r\n  BrowserModule,\r\n  HammerGestureConfig,\r\n  HammerModule,\r\n  HAMMER_GESTURE_CONFIG,\r\n} from '@angular/platform-browser';\r\nimport { LoadingDirective } from '../../directives/loading.directive';\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { GlobalConfigurationsModule } from '../../global-configurations.module';\r\nimport { TableToolbarXcngModule } from '../table-toolbar/table-toolbar-xcng.module';\r\nimport { PipesModule } from '../../pipes/pipes.module';\r\nimport { NgxTreetableComponent } from '../ngx-treetable/ngx-treetable.component';\r\n\r\n@NgModule({\r\n  declarations: [\r\n    NgxDatatableComponent,\r\n    NgxTreetableComponent,\r\n    LoadingDirective,\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    BrowserModule,\r\n    HammerModule,\r\n    GlobalConfigurationsModule,\r\n    BrowserAnimationsModule,\r\n    FormsModule,\r\n    NgxDatatableModule,\r\n    MatFormFieldModule,\r\n    MatInputModule,\r\n    MatCheckboxModule,\r\n    MatRadioModule,\r\n    ScrollPanelModule,\r\n    CalendarModule,\r\n    ProgressBarModule,\r\n    DialogModalModule,\r\n    PopoverModule.forRoot(),\r\n    BsDropdownModule.forRoot(),\r\n    CollapseModule.forRoot(),\r\n    TableToolbarXcngModule,\r\n    PipesModule,\r\n  ],\r\n  exports: [NgxDatatableComponent, NgxTreetableComponent, LoadingDirective],\r\n  providers: [\r\n    { provide: HAMMER_GESTURE_CONFIG, useClass: HammerGestureConfig },\r\n  ],\r\n})\r\nexport class NgxDatatableXcngModule {}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Injectable } from '@angular/core';\r\ndeclare var $: any;\r\n \r\n@Injectable({ providedIn: 'root' })\r\nexport class MobileService {\r\n  public isMobileMenu() {\r\n    return $(window).width() > 767 ? false : true;\r\n  }\r\n \r\n  public isMobileMenuLarger() {\r\n    return $(window).width() > 800 ? false : true;\r\n  }\r\n \r\n  public isMobileOrTabletMenu() {\r\n    return $(window).width() > 991 ? false : true;\r\n  }\r\n \r\n  public isExpandRow() {\r\n    return $(window).width() > 1094 ? false : true;\r\n  }\r\n}\r\n ","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Component, OnInit, Input } from '@angular/core';\r\nimport { Router, NavigationEnd, UrlTree } from '@angular/router';\r\nimport { MobileService } from '../../services/mobileService/mobile-service.service';\r\nimport { filter } from 'rxjs/operators';\r\ndeclare var $: any;\r\n\r\nexport type MappingsItem = { label: any; clickable: boolean };\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-breadcrumb-menu',\r\n  templateUrl: './breadcrumb-menu.component.html',\r\n  styleUrls: ['./breadcrumb-menu.component.scss']\r\n})\r\nexport class BreadcrumbMenuComponent implements OnInit {\r\n  path: string[] = [];\r\n  copyPath: string[] = [];\r\n  queryParams = {};\r\n\r\n  @Input() public MAPPINGS: {[key: string]: MappingsItem};\r\n  \r\n  constructor(public router: Router, private mobileSvc: MobileService) {}\r\n\r\n  ngOnInit() {\r\n    if (this.router.url) this.createPath();\r\n    this.router.events.pipe(filter((event) => event instanceof NavigationEnd)).subscribe(() => this.createPath());\r\n\r\n    $(window).resize(() => this.createPath());\r\n    $(window).on('load', () => this.createPath());\r\n  }\r\n\r\n  createPath() {\r\n    if (this.router.url && this.router.url != '/') {\r\n      const urlTree = this.router.parseUrl(this.router.url);\r\n      let urlWithoutParams = this.router.url;\r\n      if (urlTree.queryParamMap.keys.length) {\r\n        urlWithoutParams = urlTree.root.children['primary'].segments.map((it) => it.path).join('/');\r\n        this.queryParams = urlTree.queryParams;\r\n      } else this.queryParams = {};\r\n      this.path = urlWithoutParams.split('/');\r\n      if (!this.path[0]) this.path.shift();\r\n\r\n      this.modifyPathForDevicePages(urlTree);\r\n      this.modifyPathForJobsDetailPage(urlTree);\r\n\r\n      this.path = [...this.path];\r\n      this.copyCurrentPath();\r\n      if (this.mobileSvc.isMobileMenu() && this.path.length) {\r\n        let lastClickableItemInPath = this.getLastClickableItemInPath();\r\n        if (lastClickableItemInPath) this.path = [...[lastClickableItemInPath]];\r\n      }\r\n    }\r\n  }\r\n\r\n  goTo(link: string) {\r\n    if (this.MAPPINGS[link].clickable) {\r\n      let i = this.copyPath.indexOf(link);\r\n      let url = '';\r\n      url = this.copyPath.slice(0, i + 1).join('/');\r\n      this.router.navigate(this.copyPath.slice(0, i + 1), { queryParams: this.queryParams });\r\n    }\r\n  }\r\n\r\n  goToDashboard() {\r\n    this.router.navigateByUrl('');\r\n  }\r\n\r\n  getLastClickableItemInPath() {\r\n    this.path.pop();\r\n    let reversedPath = [...this.path].reverse();\r\n    let toReturn = reversedPath.find((el) => this.MAPPINGS[el] && this.MAPPINGS[el].clickable == true);\r\n    return toReturn;\r\n  }\r\n\r\n  copyCurrentPath() {\r\n    this.copyPath = [];\r\n    this.path.forEach((el) => this.copyPath.push(el));\r\n  }\r\n\r\n  /**\r\n   * Modify path in case of jobs detail page\r\n   *\r\n   * Modify Monitoring -> Jobs -> Id to be Monitoring -> Jobs -> Name\r\n   * @param urlTree\r\n   */\r\n  private modifyPathForJobsDetailPage(urlTree: UrlTree) {\r\n    if (['jobs'].includes(this.path[1]) && this.path.length >= 3) {\r\n      this.MAPPINGS[this.path[2]] = { label: urlTree.queryParamMap.get('name'), clickable: false };\r\n    }\r\n  }\r\n\r\n  /**\r\n   * Modify path in case of device page\r\n   *\r\n   * Modify Resources -> Servers -> Id -> Summary to be Resources -> Servers -> Name -> Summary\r\n   * @param urlTree\r\n   */\r\n  private modifyPathForDevicePages(urlTree: UrlTree) {\r\n    if (['servers', 'storage', 'switches', 'chassis', 'infrastructure'].includes(this.path[1]) && this.path.length >= 3) {\r\n      let path0 = '';\r\n      switch (this.path[1]) {\r\n        case 'servers':\r\n          path0 = 'server';\r\n          break;\r\n        case 'switches':\r\n          path0 = 'switch';\r\n          break;\r\n        default:\r\n          path0 = this.path[1];\r\n      }\r\n      this.MAPPINGS[this.path[2]] = { label: urlTree.queryParamMap.get(path0 + 'Name'), clickable: true };\r\n    }\r\n  }\r\n\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n  <nav aria-label=\"breadcrumb\">\r\n    <ol class=\"breadcrumb\">\r\n      <li *ngIf=\"router.url !== '/'\" class=\"breadcrumb-item home-link\">\r\n        <svg width=\"28\" height=\"28\" viewBox=\"3 3 26 26\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\r\n          <path d=\"M10.499 13H15.501\" stroke=\"black\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n          <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M20.8452 9.29754L14.8427 4.62859C13.7589 3.78546 12.2411 3.78546 11.1572 4.62859L5.1547 9.29754C4.42399 9.86595 3.9965 10.7398 3.99622 11.6655V19.0025C3.99622 20.66 5.33992 22.0037 6.99747 22.0037H19.0025C20.66 22.0037 22.0037 20.66 22.0037 19.0025V11.6655C22.0034 10.7398 21.5759 9.86595 20.8452 9.29754Z\" stroke=\"black\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n          <path d=\"M10.499 17.0017H15.501\" stroke=\"black\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\r\n        </svg>   \r\n        <a (click)=\"goToDashboard()\" id=\"breadcrumb-dashboard\">{{ 'Home' | translate }}</a>\r\n      </li>\r\n      <ng-container *ngFor=\"let pathItem of path; let i = index\">\r\n        <li class=\"breadcrumb-item\" *ngIf=\"MAPPINGS[pathItem]\">\r\n          <a (click)=\"goTo(pathItem)\" id=\"breadcrumb-{{ pathItem }}\" [ngClass]=\"{ clickable: MAPPINGS[pathItem].clickable }\">\r\n            {{ MAPPINGS[pathItem].label | translate }}\r\n          </a>\r\n        </li>\r\n      </ng-container>\r\n    </ol>\r\n  </nav>\r\n  ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BreadcrumbMenuComponent } from './breadcrumb-menu.component';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\nimport { RouterModule } from '@angular/router';\r\nimport { APP_BASE_HREF } from '@angular/common';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    BreadcrumbMenuComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    TranslateModule.forRoot(),\r\n    RouterModule.forRoot([]),\r\n  ],\r\n  exports: [BreadcrumbMenuComponent],\r\n  providers: [{provide: APP_BASE_HREF, useValue: 'http://localhost:6006/?path=/story/breadcrumbmenu--primary'}]\r\n})\r\nexport class BreadcrumbMenuModule { }\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\nimport { SortingAndFilteringParamsBuilder } from '../../../classes/sortingFilteringUtils/sortingFilteringUtils';\r\n// import { CustomManagerUtils } from 'src/app/shared/core/classes/customManagerUtils';\r\n\r\n@Injectable( { providedIn: 'root' } )\r\nexport class AlertsService {\r\n  constructor(private http: HttpClient) {}\r\n\r\n  getAlerts(builder: SortingAndFilteringParamsBuilder): Observable<any> {\r\n    // CustomManagerUtils.setFilterForCustomManager(builder);\r\n    return this.http.get('/api/v1/inbound/alerts' + builder.getParams());\r\n  }\r\n\r\n  getAlertsSummary(): Observable<any> {\r\n    let url = '/api/v1/inbound/alertsSummary';\r\n    // url = CustomManagerUtils.setFilterForCustomManagerNoBuilder(url);\r\n    return this.http.get(url);\r\n  }\r\n\r\n  getSummaryForOneAlert(id: string): Observable<any> {\r\n    var obj = this.http.get('/api/v1/inbound/alerts/' + id);\r\n    return obj;\r\n  }\r\n\r\n  getAlertsStatistics(\r\n    type: 'sourceType' | 'severity' | 'service' | 'resourceType',\r\n    days?: number,\r\n    builder?: SortingAndFilteringParamsBuilder\r\n  ): Observable<any> {\r\n    let builderParams = '';\r\n    if (builder) builderParams = builder.getParams();\r\n    else builder = new SortingAndFilteringParamsBuilder();\r\n\r\n    // CustomManagerUtils.setFilterForCustomManager(builder);\r\n    builderParams = builder.getParams();\r\n    builderParams = builderParams.substr(1);\r\n    let reqUrl = '';\r\n    switch (type) {\r\n      case 'sourceType':\r\n        reqUrl = '/api/v1/inbound/alertSourceStatistics';\r\n        break;\r\n      case 'service':\r\n        reqUrl = '/api/v1/inbound/alertServiceStatistics';\r\n        break;\r\n      case 'severity':\r\n        reqUrl = '/api/v1/inbound/alertSeverityStatistics';\r\n        break;\r\n      case 'resourceType':\r\n        reqUrl = '/api/v1/inbound/alertResourceStatistics';\r\n        break;\r\n    }\r\n    return this.http.get(reqUrl + (days ? '?days=' + days : '') + (builderParams ? (days ? '&' : '?') + builderParams : ''));\r\n  }\r\n}\r\n","import {\r\n  Component,\r\n  EventEmitter,\r\n  Input,\r\n  OnInit,\r\n  Output,\r\n  QueryList,\r\n  SimpleChanges,\r\n  ViewChild,\r\n  ViewChildren,\r\n} from '@angular/core';\r\nimport { PopoverDirective } from 'ngx-bootstrap/popover';\r\nimport { TableDataInput } from '../../interfaces/tableDataInput';\r\nimport { TableFilter } from '../../interfaces/tableFilter';\r\nimport { AlertsService } from './alertsService/alerts.service';\r\nimport { NgxDatatableComponent } from '../ngx-datatable/ngx-datatable.component';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-alerts-table',\r\n  templateUrl: './alerts-table.component.html',\r\n  styleUrls: ['./alerts-table.component.scss'],\r\n})\r\nexport class AlertsTableComponent implements OnInit {\r\n  @ViewChild('table', { static: true }) table: NgxDatatableComponent;\r\n\r\n  // Not \"registering\" the popover directives results in a TypeError: Cannot read property forEach of undefined in ngx-datatable.component.ts\r\n  @ViewChildren(PopoverDirective) pop: QueryList<PopoverDirective>;\r\n  @Input() tableData: TableDataInput;\r\n  @Input() fetchDataFn: Function;\r\n\r\n  // Loading indicator received from the parent element\r\n  @Input() loadingIndicator = true;\r\n  // Propagate changes on the loading indicator value from the ngx-datatable component to the parent element\r\n  @Output() loadingIndicatorChange: EventEmitter<boolean> = new EventEmitter();\r\n\r\n  columnData: any[] = [];\r\n  alertID: string;\r\n  summaryAlerts: any[];\r\n  actionsData: any[] = [];\r\n\r\n  contentFilter: string = '';\r\n\r\n  alertsEventEmitter: EventEmitter<{\r\n    refreshAlertsTable: boolean; // refresh data for main alerts/events tables (alerts-table, events-table)\r\n    addItem: boolean; // new exclusion rule created\r\n    fromModal: string; // audit or resource, in order to know which filter should be applied: filterEquals / filterNotEquals Audit\r\n    refreshModalTables: boolean; // refresh data tables for exclusion rules, excluded events, excluded alerts modals\r\n  }> = new EventEmitter();\r\n\r\n  selectedRowID: string;\r\n  eventID: string;\r\n  sourceID: string;\r\n  componentID: string;\r\n\r\n  tableToolbarFilteringConfig: any[];\r\n  tableToolbarIconsClassConfig: object;\r\n\r\n  constructor(private alertsService: AlertsService) {\r\n    this.tableToolbarFilteringConfig = this.getAlertsFilteringConfiguration();\r\n    this.tableToolbarIconsClassConfig = {\r\n      severity: {\r\n        'xc-critical': ['Critical'],\r\n        'xc-warning': ['Warning'],\r\n        'xc-informational': ['Informational'],\r\n      },\r\n    };\r\n  }\r\n\r\n  ngOnChanges(changes: SimpleChanges): void {\r\n    const tableDataChanges = changes['tableData'];\r\n    if (\r\n      tableDataChanges &&\r\n      tableDataChanges.currentValue &&\r\n      tableDataChanges.currentValue.showErrorMessage\r\n    ) {\r\n      this.table.showDataErrorMessage();\r\n    }\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.initializeTableColumnData();\r\n\r\n    this.alertsEventEmitter.subscribe((event: any) => {\r\n      if (event && event.refreshAlertsTable) {\r\n        this.table.resetSelection();\r\n        this.table.fetchDataBasedOnSessionStorageSettings();\r\n      }\r\n    });\r\n\r\n    this.actionsData = [];\r\n  }\r\n\r\n  initializeTableColumnData() {\r\n    this.columnData = [\r\n      {\r\n        name: 'COL_DATE_AND_TIME',\r\n        prop: 'raisedDate',\r\n        additionalProps: [\r\n          {\r\n            additionalProp: 'raisedDate',\r\n            propertyType: 'date',\r\n            format: 'short',\r\n          },\r\n        ],\r\n        alwaysDisplayed: true,\r\n        tooltip: true,\r\n        isMobileViewBaseColumn: true,\r\n        width: 150,\r\n      },\r\n      {\r\n        name: 'COL_SEVERITY',\r\n        prop: 'severity',\r\n        alwaysDisplayed: true,\r\n        width: 60,\r\n      },\r\n      { name: 'COL_ALERT', prop: 'msg', alwaysDisplayed: true, width: 200 },\r\n      {\r\n        name: 'COL_RESOURCE',\r\n        prop: 'resourceName',\r\n        alwaysDisplayed: true,\r\n        tooltip: true,\r\n        width: 150,\r\n      },\r\n      {\r\n        name: 'COL_SERVICEABILITY',\r\n        prop: 'service',\r\n        width: 80,\r\n      },\r\n      {\r\n        name: 'COL_SYSTEM_TYPE',\r\n        prop: 'resourceType',\r\n        tooltip: true,\r\n        width: 100,\r\n      },\r\n      {\r\n        name: 'COL_SOURCE_TYPE',\r\n        prop: 'sourceType',\r\n        tooltip: true,\r\n        width: 100,\r\n      },\r\n      {\r\n        name: 'COL_GROUPS',\r\n        prop: 'groups.name',\r\n        alwaysDisplayed: true,\r\n        tooltip: true,\r\n        width: 100,\r\n        additionalProps: [\r\n          { additionalProp: 'groups.name' },\r\n          { additionalProp: 'groups.id' },\r\n        ],\r\n      },\r\n      {\r\n        name: 'COL_EVENT_ID',\r\n        prop: 'eventID',\r\n        tooltip: true,\r\n        width: 100,\r\n        notDisplayed: true,\r\n      },\r\n    ];\r\n  }\r\n\r\n  getAlertsFilteringConfiguration(): TableFilter[] {\r\n    return [\r\n      {\r\n        properties: ['severityKey'],\r\n        label: 'COL_SEVERITY',\r\n        type: 'checkbox',\r\n        iconType: 'severity',\r\n        possibleValues: [\r\n          {\r\n            translatedValue: 'STR_CRITICAL',\r\n            value: 'Critical',\r\n            isSelected: false,\r\n            enteredPreviousSearch: false,\r\n          },\r\n          {\r\n            translatedValue: 'STR_WARNING',\r\n            value: 'Warning',\r\n            isSelected: false,\r\n            enteredPreviousSearch: false,\r\n          },\r\n          {\r\n            translatedValue: 'STR_INFORMATIONAL',\r\n            value: 'Informational',\r\n            isSelected: false,\r\n            enteredPreviousSearch: false,\r\n          },\r\n        ],\r\n        isActive: false,\r\n        id: 'alert-severity',\r\n        wasApplied: false,\r\n      },\r\n      {\r\n        properties: ['raisedDate'],\r\n        label: 'COL_DATE_AND_TIME',\r\n        type: 'date',\r\n        isActive: false,\r\n        id: 'alert-raised_date',\r\n        wasApplied: false,\r\n      },\r\n      {\r\n        properties: ['msg'],\r\n        label: 'COL_ALERT',\r\n        type: 'string',\r\n        isActive: false,\r\n        id: 'alert-message',\r\n        wasApplied: false,\r\n        searchValues: [\r\n          { currentValue: '', previousValue: '', enteredPreviousSearch: false },\r\n        ],\r\n        negation: { currentValue: true, previousValue: undefined },\r\n      },\r\n      {\r\n        properties: ['resourceName'],\r\n        label: 'COL_RESOURCE',\r\n        type: 'string',\r\n        isActive: false,\r\n        id: 'alert-resource-name',\r\n        wasApplied: false,\r\n        searchValues: [\r\n          { currentValue: '', previousValue: '', enteredPreviousSearch: false },\r\n        ],\r\n        negation: { currentValue: true, previousValue: undefined },\r\n      },\r\n      {\r\n        properties: ['serviceKey'],\r\n        label: 'COL_SERVICEABILITY',\r\n        type: 'checkbox',\r\n        iconType: 'serviceability',\r\n        possibleValues: [\r\n          {\r\n            translatedValue: 'STR_USER',\r\n            value: 'User',\r\n            isSelected: false,\r\n            enteredPreviousSearch: false,\r\n          },\r\n          {\r\n            translatedValue: 'STR_SERVICEABLE',\r\n            value: 'Serviceable',\r\n            isSelected: false,\r\n            enteredPreviousSearch: false,\r\n          },\r\n          {\r\n            translatedValue: 'STR_NONE',\r\n            value: 'None',\r\n            isSelected: false,\r\n            enteredPreviousSearch: false,\r\n          },\r\n        ],\r\n        isActive: false,\r\n        id: 'alert-serviceability',\r\n        wasApplied: false,\r\n      },\r\n      {\r\n        properties: ['resourceType'],\r\n        label: 'COL_SYSTEM_TYPE',\r\n        type: 'string',\r\n        isActive: false,\r\n        id: 'alert-resource-type',\r\n        searchValues: [\r\n          { currentValue: '', previousValue: '', enteredPreviousSearch: false },\r\n        ],\r\n        wasApplied: false,\r\n        negation: { currentValue: true, previousValue: undefined },\r\n      },\r\n      {\r\n        properties: ['sourceType'],\r\n        label: 'COL_SOURCE_TYPE',\r\n        type: 'string',\r\n        isActive: false,\r\n        id: 'alert-source-type',\r\n        searchValues: [\r\n          { currentValue: '', previousValue: '', enteredPreviousSearch: false },\r\n        ],\r\n        wasApplied: false,\r\n        negation: { currentValue: true, previousValue: undefined },\r\n      },\r\n      {\r\n        properties: ['groups.name'],\r\n        label: 'COL_GROUPS',\r\n        type: 'string',\r\n        isActive: false,\r\n        id: 'alert-groups',\r\n        searchValues: [\r\n          { currentValue: '', previousValue: '', enteredPreviousSearch: false },\r\n        ],\r\n        wasApplied: false,\r\n        negation: { currentValue: true, previousValue: undefined },\r\n      },\r\n      {\r\n        properties: ['eventID'],\r\n        label: 'COL_EVENT_ID',\r\n        type: 'string',\r\n        isActive: false,\r\n        id: 'alert-eventID',\r\n        searchValues: [\r\n          { currentValue: '', previousValue: '', enteredPreviousSearch: false },\r\n        ],\r\n        wasApplied: false,\r\n        negation: { currentValue: true, previousValue: undefined },\r\n      },\r\n    ];\r\n  }\r\n\r\n  onLoadingIndicatorChange(value: boolean) {\r\n    this.loadingIndicatorChange.emit(value);\r\n    if (this.table.mobileView) {\r\n      this.columnData.push({ name: 'COL_ALERT_SUMMARY', prop: '' });\r\n    }\r\n  }\r\n\r\n  onMobileRowClick(row: any) {\r\n    this.alertID = row.alertID;\r\n    this.getMobileAlertSummary();\r\n  }\r\n\r\n  setSelected(evt?: any) {\r\n    if (evt && evt.alertID) {\r\n      this.selectedRowID = evt.alertID;\r\n      this.alertsService\r\n        .getSummaryForOneAlert(this.selectedRowID)\r\n        .subscribe((res) => {\r\n          this.eventID = res.eventID;\r\n          this.sourceID = res.sourceID;\r\n          this.componentID = res.componentID;\r\n        });\r\n    }\r\n  }\r\n\r\n  setDeselected(evt?: any) {\r\n    this.table.resetSelection();\r\n    this.table.storedId = null;\r\n  }\r\n\r\n  getMobileAlertSummary() {\r\n    this.alertsService.getSummaryForOneAlert(this.alertID).subscribe(\r\n      (response: any) => {\r\n        let object = response;\r\n        let objectArray: any[] = [];\r\n        let summaryInfoArray = [];\r\n        objectArray.push({ 'Event ID': object.eventID });\r\n        objectArray.push({ Description: object.description });\r\n        objectArray.push({ 'User Action': object.userAction });\r\n        objectArray.push({ Action: object.action });\r\n        objectArray.push({ Source: object.device.name });\r\n        objectArray.push({ 'Source Type': object.sourceType });\r\n        objectArray.push({ IP: object.ipAddress });\r\n        objectArray.push({ 'Resource UUID': object.sourceID });\r\n        for (var prop in objectArray) {\r\n          var item = Object.keys(objectArray[prop]).map(function (k) {\r\n            return { type: k, value: objectArray[prop][k] };\r\n          });\r\n          summaryInfoArray.push(item[0]);\r\n        }\r\n        this.summaryAlerts = summaryInfoArray;\r\n      },\r\n      (error) => {\r\n        console.log('get alerts error:', error);\r\n      }\r\n    );\r\n  }\r\n}\r\n","<ngx-xcng-ngx-datatable\r\n  #table\r\n  [id]=\"tableData.tableId\"\r\n  [columns]=\"columnData\"\r\n  [count]=\"tableData.total\"\r\n  [externalPaging]=\"true\"\r\n  [limit]=\"tableData.limit\"\r\n  [rows]=\"tableData.rows\"\r\n  [externalSorting]=\"true\"\r\n  [sorts]=\"tableData.sortData\"\r\n  [fetchDataFn]=\"fetchDataFn\"\r\n  rowIdentifier=\"alertID\"\r\n  [sortingAndFilteringBuilder]=\"tableData.sortingAndFilteringBuilder\"\r\n  [loadingIndicator]=\"loadingIndicator\"\r\n  [selectionType]=\"'cell'\"\r\n  (rowSelected)=\"setSelected($event)\"\r\n  (rowDeselected)=\"setDeselected($event)\"\r\n  (loadingIndicatorChange)=\"onLoadingIndicatorChange($event)\"\r\n  [isSelectedVisible]=\"false\"\r\n  (rowClick)=\"table.mobileView ? onMobileRowClick($event) : false\"\r\n  [saveTableSettingsInLocalStorage]=\"tableData.saveTableSettingsInLocalStorage\"\r\n  [isFirstFetchActivated]=\"tableData.isFirstFetchActivated\"\r\n  [tableToolbarActions]=\"actionsData\"\r\n  [tableToolbarFilteringConfig]=\"tableToolbarFilteringConfig\"\r\n  [tableToolbarIconsClassConfig]=\"tableToolbarIconsClassConfig\"\r\n  [activeFilters]=\"tableData.activeFilters\"\r\n  [source]=\"'HDR_ALERTS'\"\r\n>\r\n</ngx-xcng-ngx-datatable>\r\n\r\n<!-- [exportFetchDataFunction]=\"alertsService.getAlerts.bind(alertsService)\" -->\r\n","import { GlobalConfigurationsModule } from '../../global-configurations.module';\r\nimport { NgModule } from '@angular/core';\r\nimport { AlertsTableComponent } from './alerts-table.component';\r\nimport { NgxDatatableXcngModule } from '../ngx-datatable/ngx-datatable-xcng.module';\r\nimport { AlertsService } from './alertsService/alerts.service';\r\nimport { PipesModule } from '../../pipes/pipes.module';\r\n\r\n@NgModule({\r\n  declarations: [AlertsTableComponent],\r\n  imports: [GlobalConfigurationsModule, NgxDatatableXcngModule, PipesModule],\r\n  exports: [AlertsTableComponent],\r\n  providers: [AlertsService],\r\n})\r\nexport class AlertsTableModule {}\r\n","import { CallHomePrivacyModalLabels } from './call-home-privacy-modal.labels';\r\nimport {\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 { ModalDialogButton } from '../../interfaces/modalDialogButton';\r\nimport { DialogModalComponent } from '../dialog-modal/dialog-modal.component';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-call-home-privacy-modal',\r\n  templateUrl: './call-home-privacy-modal.component.html',\r\n  styleUrls: ['./call-home-privacy-modal.component.scss'],\r\n})\r\nexport class CallHomePrivacyModalComponent implements OnInit {\r\n  @Input() canDecline: boolean;\r\n  @Output() isPrivacyAccepted = new EventEmitter<Boolean>();\r\n  @ViewChild('privacyModal', { static: true })\r\n  privacyModal: DialogModalComponent;\r\n\r\n  @Input() labels: CallHomePrivacyModalLabels;\r\n\r\n  modalButtons: ModalDialogButton[] = [];\r\n  isPrivacyChecked: boolean = false;\r\n  hasAgreed: boolean = false;\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit() {\r\n    if (!this.canDecline) {\r\n      this.modalButtons = [\r\n        {\r\n          name: this.labels.closeButton,\r\n          id: 'closeBtn',\r\n          action: () => {\r\n            this.privacyModal.hideModal();\r\n          },\r\n          type: 'button',\r\n          classes: 'btn btn-primary',\r\n        },\r\n      ];\r\n    } else {\r\n      this.modalButtons = [\r\n        {\r\n          id: 'disagreePrivacyButton',\r\n          name: this.labels.disagreePrivacyButton,\r\n          action: () => {\r\n            this.clickedAgreementButton(false);\r\n          },\r\n          type: 'button',\r\n          classes: 'btn btn-primary',\r\n          isDisabled: () => {\r\n            return !this.isPrivacyChecked;\r\n          },\r\n        },\r\n        {\r\n          id: 'agreePrivacyButton',\r\n          name: this.labels.agreePrivacyButton,\r\n          action: () => {\r\n            this.clickedAgreementButton(true);\r\n          },\r\n          type: 'button',\r\n          classes: 'btn btn-primary blue',\r\n          isDisabled: () => {\r\n            return !this.isPrivacyChecked;\r\n          },\r\n        },\r\n      ];\r\n    }\r\n  }\r\n\r\n  public openModal() {\r\n    this.isPrivacyChecked = false;\r\n    this.hasAgreed = false;\r\n    this.privacyModal.openModal();\r\n  }\r\n\r\n  togglePrivacyCheck() {\r\n    this.isPrivacyChecked = !this.isPrivacyChecked;\r\n  }\r\n\r\n  clickedAgreementButton(hasAgreed: boolean) {\r\n    this.isPrivacyAccepted.emit(hasAgreed);\r\n    this.hasAgreed = true;\r\n    this.privacyModal.hideModal();\r\n  }\r\n\r\n  onModalHide() {\r\n    if (this.hasAgreed === false) {\r\n      this.modalButtons[0].action();\r\n    }\r\n  }\r\n}\r\n","<ngx-xcng-dialog-modal\r\n  #privacyModal\r\n  id=\"privacyModal\"\r\n  [modalTitle]=\"labels.modalTitle\"\r\n  [class]=\"'modal-lg'\"\r\n  [onHiddenFunc]=\"onModalHide.bind(this)\"\r\n  [buttonArray]=\"modalButtons\"\r\n>\r\n  <div class=\"privacyText\">\r\n    <p>\r\n      {{ labels.privacyStatement1 }}\r\n      <a\r\n        href=\"https://www.lenovo.com/privacy/\"\r\n        rel=\"noopener noreferrer\"\r\n        target=\"_blank\"\r\n        >https://www.lenovo.com/privacy/</a\r\n      >.\r\n    </p>\r\n    <p>{{ labels.privacyStatement2 }}</p>\r\n    <p>\r\n      {{ labels.privacyStatement3 }}\r\n    </p>\r\n    <p>{{ labels.privacyStatement4 }}</p>\r\n    <p>{{ labels.privacyStatement5 }}</p>\r\n    <ul>\r\n      <li>{{ labels.privacyResponsability1 }}</li>\r\n      <li>{{ labels.privacyResponsability2 }}</li>\r\n      <li>{{ labels.privacyResponsability3 }}</li>\r\n    </ul>\r\n    <p>{{ labels.privacyStatement6 }}</p>\r\n    <p>{{ labels.privacyStatement7 }}</p>\r\n    <p>{{ labels.privacyStatement8 }}</p>\r\n\r\n    <div *ngIf=\"canDecline\">\r\n      <mat-checkbox\r\n        id=\"privacyCheck\"\r\n        (change)=\"togglePrivacyCheck()\"\r\n        [checked]=\"isPrivacyChecked\"\r\n        class=\"privacy-check-text\"\r\n      >\r\n        {{ labels.agreeCheckBox }}\r\n      </mat-checkbox>\r\n    </div>\r\n  </div>\r\n</ngx-xcng-dialog-modal>\r\n","import { Component, OnInit } from '@angular/core';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-eula',\r\n  templateUrl: './eula.component.html',\r\n  styleUrls: ['./eula.component.scss']\r\n})\r\nexport class EulaComponent implements OnInit {\r\n\r\n  constructor() { }\r\n\r\n  ngOnInit(): void {\r\n  }\r\n\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n<div>\r\n  <h1>Lenovo International Program License Agreement</h1>\r\n  <h2>Part 1 - General Terms</h2>\r\n  <h3>\r\n    BY DOWNLOADING, INSTALLING, COPYING, ACCESSING, CLICKING ON AN \"ACCEPT\"\r\n    BUTTON, OR OTHERWISE USING THE PROGRAM, LICENSEE\r\n    <a name=\"_Hlk527807997\">\r\n      , ON BEHALF OF ITSELF AND ITS ASSIGNEES AND SUCCESSORS IN TITLE,\r\n    </a>\r\n    AGREES TO THE TERMS OF THIS AGREEMENT. IF YOU ARE ACCEPTING THESE TERMS ON\r\n    BEHALF OF LICENSEE, YOU REPRESENT AND WARRANT THAT YOU HAVE FULL AUTHORITY\r\n    TO BIND LICENSEE TO THESE TERMS. IF YOU DO NOT AGREE TO THESE TERMS:\r\n  </h3>\r\n  <p>\r\n    &#9679;\r\n    <strong>\r\n      DO NOT DOWNLOAD, INSTALL, COPY, ACCESS, CLICK ON AN \"ACCEPT\" BUTTON, OR\r\n      USE THE PROGRAM; AND\r\n    </strong>\r\n  </p>\r\n  <p>\r\n    &#9679;\r\n    <strong>\r\n      PROMPTLY RETURN THE UNUSED MEDIA, DOCUMENTATION, AND PROOF OF ENTITLEMENT\r\n      TO THE PARTY FROM WHOM IT WAS OBTAINED FOR A REFUND OF THE AMOUNT PAID. IF\r\n      THE PROGRAM WAS DOWNLOADED, DESTROY ALL COPIES OF THE PROGRAM.\r\n    </strong>\r\n  </p>\r\n  <h2>1. <span class=\"headerRightPadding\">Definitions</span></h2>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      \"<strong>Authorized Use</strong>\" - the specified level at which Licensee\r\n      is authorized to execute or run the Program. That level may be measured by\r\n      number of users, millions of service units (\"MSUs\"), Processor Value Units\r\n      (\"PVUs\"), or other level of use specified by Lenovo.\r\n    </p>\r\n    <p>\r\n      \"<strong>Lenovo</strong>\" - Lenovo\r\n      <a name=\"_Hlk527810322\">Global Technology </a>HK Limited or one of its\r\n      affiliates.\r\n    </p>\r\n    <p>\r\n      \"<strong>License Information</strong>\" (\"<strong>LI</strong>\") - a\r\n      document that provides information and any additional terms specific to a\r\n      Program. If the Program has LI, it is available at\r\n      <a\r\n        href=\"http://www.lenovo.com/sla\"\r\n        rel=\"noopener noreferrer\"\r\n        target=\"_blank\"\r\n        >http://www.lenovo.com/sla</a\r\n      >. The LI, if any, can also be found in the Program's directory, by the\r\n      use of a system command, or as a booklet included with the Program.\r\n    </p>\r\n    <p>\r\n      <strong>\"Open source software\" </strong>\r\n      - means any computer program, including any modification, improvement,\r\n      derivative work, release, correction, govern by the terms and conditions\r\n      of an Open source license.\r\n    </p>\r\n    <p>\r\n      <strong>\"Open source license\" </strong>\r\n      license that gives you legal permission to freely use, modify, and share\r\n      the Open source software and is\r\n    </p>\r\n    <p>\r\n      <strong class=\"iList\">(i) </strong>\r\n      approved by the Open source Initiative (here after OSCI) principles\r\n      defined in the following website:\r\n      <a\r\n        href=\"https://opensource.org/osd\"\r\n        rel=\"noopener noreferrer\"\r\n        target=\"_blank\"\r\n        >https://opensource.org/osd</a\r\n      >\r\n      and/or\r\n    </p>\r\n    <p>\r\n      <strong class=\"iList\">(ii) </strong>\r\n      certified by the OSI (cf. list of such licenses in\r\n      <a\r\n        href=\"https://opensource.org/licenses/category\"\r\n        rel=\"noopener noreferrer\"\r\n        target=\"_blank\"\r\n      >\r\n        https://opensource.org/licenses/category\r\n      </a>\r\n      ) and/or\r\n    </p>\r\n    <p>\r\n      <strong class=\"iList\">(iii) </strong>\r\n      compliant with the free software foundation criteria\r\n    </p>\r\n    <p>\r\n      \"<strong>Program</strong>\" - the following, including the original and all\r\n      whole or partial copies: 1) machine-readable instructions and data, 2)\r\n      components, files, and modules, 3) audio-visual content (such as images,\r\n      text, recordings, or pictures), and 4) related licensed materials (such as\r\n      keys and documentation).\r\n    </p>\r\n    <p>\r\n      \"<strong>Proof of Entitlement</strong>\" (\"<strong>PoE</strong>\") -\r\n      evidence of Licensee's Authorized Use. The PoE is also evidence of\r\n      Licensee's eligibility for warranty, future update prices, if any, and\r\n      potential special or promotional opportunities. If Lenovo does not provide\r\n      Licensee with a PoE, then Lenovo may accept as the PoE the original paid\r\n      sales receipt or other sales record from the party (either Lenovo or its\r\n      reseller) from whom Licensee obtained the Program, provided that it\r\n      specifies the Program name and Authorized Use obtained.\r\n    </p>\r\n    <p>\r\n      <strong>\"Warranty Period\" </strong>\r\n      - ninety (90) days, starting on the date the original Licensee is granted\r\n      the license.\r\n    </p>\r\n  </div>\r\n  <h2>2.<span class=\"headerRightPadding\">Agreement Structure</span></h2>\r\n  <p class=\"rightPadding\">\r\n    This Agreement includes <strong>Part 1 - General Terms</strong>,\r\n    <strong>Part 2 - Country-unique Terms </strong>(if any), the LI, and the PoE\r\n    and is the complete agreement between Licensee and Lenovo regarding the use\r\n    of the Program. It replaces any prior oral or written communications between\r\n    Licensee and Lenovo concerning Licensee's use of the Program. The terms of\r\n    Part 2 may replace or modify those of Part 1. To the extent of any conflict,\r\n    the LI prevails over both Parts.\r\n  </p>\r\n  <h2>3. <span class=\"headerRightPadding\">License Grant</span></h2>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      The Program is owned by Lenovo or a Lenovo supplier, and is copyrighted\r\n      and licensed, not sold.\r\n    </p>\r\n    <p>\r\n      Lenovo grants Licensee a nonexclusive license to 1) use the Program up to\r\n      the Authorized Use specified in the PoE, 2) make and install copies to\r\n      support such Authorized Use, and 3) make a backup copy, all provided that\r\n    </p>\r\n    a.\r\n    <span class=\"rightPadding\">\r\n      Licensee has lawfully obtained the Program and complies with the terms of\r\n      this Agreement; </span\r\n    ><br />\r\n    b.\r\n    <span class=\"rightPadding\">\r\n      the backup copy does not execute unless the backed-up Program cannot\r\n      execute; </span\r\n    ><br />\r\n    c.\r\n    <span class=\"rightPadding\">\r\n      Licensee does not remove any copyright notices or other legends of\r\n      ownership from each copy or partial copy of the Program; </span\r\n    ><br />\r\n    d.\r\n    <span class=\"rightPadding\">\r\n      Licensee ensures that anyone who uses the Program (accessed either locally\r\n      or remotely) 1) does so only on Licensee's behalf and 2) complies with the\r\n      terms of this Agreement; </span\r\n    ><br />\r\n    e.\r\n    <span class=\"rightPadding\"> Licensee does not : </span><br />\r\n\r\n    <ol type=\"i\">\r\n      <li class=\"rightPadding\">\r\n        use, copy, modify, or distribute the Program except as expressly\r\n        permitted in this Agreement;\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        reverse engineer, decompile or disassemble the Program<a\r\n          name=\"_Hlk527811686\"\r\n          >or\r\n        </a>\r\n        <a name=\"_Hlk527812260\">reduce it to human-readable format</a> except as\r\n        expressly permitted by law without the possibility of contractual waiver\r\n        <a name=\"_Hlk527811869\">\r\n          or as expressly permitted by associated open source licenses\r\n        </a>\r\n        ;\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        <a name=\"_Hlk527812308\"></a>\r\n        <a name=\"_Hlk527812320\">\r\n          remove or conceal any product identification, proprietary,\r\n          intellectual property or other notices in the Program\r\n        </a>\r\n        ;\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        <a name=\"_Hlk527812358\">\r\n          use the Program to perform services for third parties in a service\r\n          bureau, managed services, commercial hosting services or similar\r\n          environment\r\n        </a>\r\n        ;\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        assign or otherwise transfer, in whole or in part, the Program licenses\r\n        to another party or Controller-based licenses to a different storage\r\n        controller;\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        install Controller-based licenses on or use them with third party\r\n        hardware or any second-hand or grey market Lenovo hardware not purchased\r\n        from Lenovo or a Lenovo Partner;\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        <a name=\"_Hlk527812432\">\r\n          modify, adapt or create a derivative work of the Program\r\n        </a>\r\n        ;\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        <a name=\"_Hlk527812448\"></a>\r\n        <a name=\"_Hlk527812463\">\r\n          publish or provide any Program benchmark or comparison test results\r\n        </a>\r\n        .\r\n      </li>\r\n      <li class=\"rightPadding\">\r\n        use any of the Program's components, files, modules, audio-visual\r\n        content, or related licensed materials separately from that Program; or\r\n        4) sublicense, rent, or lease the Program\r\n      </li>\r\n    </ol>\r\n    f.\r\n    <span class=\"rightPadding\">\r\n      if Licensee obtains this Program as a Supporting Program, Licensee uses\r\n      this Program only to support the Principal Program and subject to any\r\n      limitations in the license to the Principal Program, or, if Licensee\r\n      obtains this Program as a Principal Program, Licensee uses all Supporting\r\n      Programs only to support this Program, and subject to any limitations in\r\n      this Agreement. For purposes of this Item \"f,\" a \"Supporting Program\" is a\r\n      Program that is part of another Lenovo Program (\"Principal Program\") and\r\n      identified as a Supporting Program in the Principal Program's LI. (To\r\n      obtain a separate license to a Supporting Program without these\r\n      restrictions, Licensee should contact the party from whom Licensee\r\n      obtained the Supporting Program.) </span\r\n    ><br />\r\n    <p class=\"mt-5\">\r\n      This license applies to each copy of the Program that Licensee makes.\r\n    </p>\r\n    <div class=\"rightPadding\">\r\n      <h3>\r\n        3.1\r\n        <span class=\"rightPadding\">Trade-ups, Updates, Fixes, and Patches</span>\r\n      </h3>\r\n      <div class=\"rightPadding\">\r\n        <h4>3.1.1 <span class=\"rightPadding\">Trade-ups</span></h4>\r\n        <p class=\"rightPadding\">\r\n          If the Program is replaced by a trade-up Program, the replaced\r\n          Program's license is promptly terminated.\r\n        </p>\r\n        <h4>\r\n          3.1.2 <span class=\"rightPadding\">Updates, Fixes, and Patches </span>\r\n        </h4>\r\n        <p class=\"rightPadding\">\r\n          When Licensee receives an update, fix, or patch to a Program, Licensee\r\n          accepts any additional or different terms that are applicable to such\r\n          update, fix, or patch that are specified in its LI. If no additional\r\n          or different terms are provided, then the update, fix, or patch is\r\n          subject solely to this Agreement. If the Program is replaced by an\r\n          update, Licensee agrees to promptly discontinue use of the replaced\r\n          Program.\r\n        </p>\r\n      </div>\r\n      <h3>3.2 <span class=\"rightPadding\"> Fixed Term Licenses</span></h3>\r\n      <p class=\"rightPadding\">\r\n        If Lenovo licenses the Program for a fixed term, Licensee's license is\r\n        terminated at the end of the fixed term, unless Licensee and Lenovo\r\n        agree to renew it.\r\n      </p>\r\n      <h3>\r\n        <a name=\"_bookmark0\"></a>\r\n        3.3 <span class=\"rightPadding\">Term and Termination </span>\r\n      </h3>\r\n      <div class=\"rightPadding\">\r\n        <p>This Agreement is effective until terminated.</p>\r\n        <p>\r\n          Lenovo may terminate Licensee's license if Licensee fails to comply\r\n          with the terms of this Agreement.\r\n        </p>\r\n        <p>\r\n          If the license is terminated for any reason by either party, Licensee\r\n          agrees to promptly discontinue use of and destroy all of Licensee's\r\n          copies of the Program and the PoE. Any terms of this Agreement that by\r\n          their nature extend beyond termination of this Agreement remain in\r\n          effect until fulfilled and apply to both parties' respective\r\n          successors and assignees.\r\n        </p>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  <h2>\r\n    <a name=\"_bookmark1\"></a>\r\n    4. <span class=\"headerRightPadding\">Charges</span>\r\n  </h2>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      Charges are based on Authorized Use obtained, which is specified in the\r\n      PoE. Lenovo does not give credits or refunds for charges already due or\r\n      paid, except as specified elsewhere in this Agreement or as specified by\r\n      applicable law.\r\n    </p>\r\n    <p>\r\n      If Licensee wishes to increase its Authorized Use, Licensee must notify\r\n      Lenovo or an authorized Lenovo reseller in advance and pay any applicable\r\n      charges.\r\n    </p>\r\n  </div>\r\n  <h2>\r\n    <a name=\"_bookmark2\"></a>\r\n    5. <span class=\"headerRightPadding\">Taxes</span>\r\n  </h2>\r\n  <p class=\"rightPadding\">\r\n    If any authority imposes on the Program a duty, tax, levy, or fee, excluding\r\n    those based on Lenovo's net income, then Licensee agrees to pay that amount,\r\n    as specified in an invoice, or supply exemption documentation. Licensee is\r\n    responsible for any personal property taxes for the Program from the date\r\n    that Licensee obtains it. If any authority imposes a customs duty, tax,\r\n    levy, or fee for the import into or the export, transfer, access, or use of\r\n    the Program outside the country in which the original Licensee was granted\r\n    the license, then Licensee agrees that it is responsible for, and will pay,\r\n    any amount imposed.\r\n  </p>\r\n  <h2>6.<span class=\"headerRightPadding\">Program Transfer</span></h2>\r\n  <p class=\"rightPadding\">\r\n    Licensee may transfer the Program and all of Licensee's license rights and\r\n    obligations to another party only if that party agrees to the terms of this\r\n    Agreement. If the license is terminated for any reason by either party,\r\n    Licensee is prohibited from transferring the Program to another party and\r\n    may not transfer a portion of 1) the Program or 2) the Program's Authorized\r\n    Use. When Licensee transfers the Program, Licensee must also transfer a hard\r\n    copy of this Agreement, including the LI and PoE. Immediately after the\r\n    transfer, Licensee's license terminates.\r\n  </p>\r\n  <h2>\r\n    <a name=\"_bookmark3\"></a>\r\n    7.<span class=\"headerRightPadding\"> Open Source And Other Software</span>\r\n  </h2>\r\n  <p class=\"rightPadding\">\r\n    <a name=\"_Hlk527814057\">\r\n      Portion(s) of the Software provided hereunder may be identified as being\r\n      licensed under a particular open source license (\"Open Source License\").\r\n      To the extent that the terms of this Agreement conflict with the terms of\r\n      such Open Source License, then the terms of such Open Source License shall\r\n      control for such open source software. For clarity, in the event that all\r\n      or any portion of the Software provided hereunder does not reference, or\r\n      otherwise indicate, such Open Source License, this Agreement shall\r\n      control.\r\n    </a>\r\n  </p>\r\n  <h2>8.<span class=\"headerRightPadding\"> Warranty and Exclusions</span></h2>\r\n  <div class=\"rightPadding\">\r\n    <h2>\r\n      <a name=\"_bookmark4\"></a>\r\n      8.1. Limited Warranty\r\n    </h2>\r\n    <p>\r\n      Lenovo warrants that the Program, when used in its specified operating\r\n      environment, will substantially conform to its specifications. The\r\n      Program's specifications, and specified operating environment information,\r\n      can be found in documentation accompanying the Program (such as a read-me\r\n      file) or other information published by Lenovo (such as an announcement\r\n      letter). Licensee agrees that such documentation and other Program content\r\n      may be supplied only in the English language, unless otherwise required by\r\n      local law without the possibility of contractual waiver or limitation.\r\n    </p>\r\n    <p>\r\n      The warranty applies only to the unmodified portion of the Program. Lenovo\r\n      does not warrant uninterrupted or error-free operation of the Program, or\r\n      that Lenovo will correct all Program defects. Licensee is responsible for\r\n      the results obtained from the use of the Program.\r\n    </p>\r\n    <p>\r\n      Lenovo's sole obligation and Licensee's exclusive remedy under the limited\r\n      warranties above shall be the correction of the Program; the replacement\r\n      of the Program, if returned to Lenovo with a copy of the PoE; or, in\r\n      Lenovo's sole discretion, the refund of the amount paid for the\r\n      nonconforming Program, if returned to Lenovo with a copy of the PoE.\r\n    </p>\r\n    <h2>\r\n      <a name=\"_bookmark5\"></a>\r\n      8.2. Exclusions\r\n    </h2>\r\n    <h4>\r\n      SUBJECT TO ANY STATUTORY WARRANTIES THAT CANNOT BE EXCLUDED THESE\r\n      WARRANTIES ARE LICENSEE'S EXCLUSIVE WARRANTIES AND REPLACE ALL OTHER\r\n      WARRANTIES OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED\r\n      TO, ANY IMPLIED WARRANTIES OR CONDITIONS OF MERCHANTABILITY, SATISFACTORY\r\n      QUALITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE, AND ANY WARRANTY OR\r\n      CONDITION OF NON- INFRINGEMENT. SOME STATES OR JURISDICTIONS DO NOT ALLOW\r\n      THE EXCLUSION OF EXPRESS OR IMPLIED WARRANTIES, SO THE ABOVE EXCLUSION MAY\r\n      NOT APPLY TO LICENSEE. IN THAT EVENT, SUCH WARRANTIES ARE LIMITED IN\r\n      DURATION TO THE WARRANTY PERIOD. NO WARRANTIES APPLY AFTER THAT PERIOD.\r\n      SOME STATES OR JURISDICTIONS DO NOT ALLOW LIMITATIONS ON HOW LONG AN\r\n      IMPLIED WARRANTY LASTS, SO THE ABOVE LIMITATION MAY NOT APPLY TO LICENSEE.\r\n    </h4>\r\n    <p>\r\n      <strong>\r\n        THESE WARRANTIES GIVE LICENSEE SPECIFIC LEGAL RIGHTS. LICENSEE MAY ALSO\r\n        HAVE OTHER RIGHTS THAT VARY FROM STATE TO STATE OR JURISDICTION TO\r\n        JURISDICTION.\r\n      </strong>\r\n    </p>\r\n    <p>\r\n      <strong>\r\n        THE WARRANTIES IN THIS SECTION 8 (WARRANTY AND EXCLUSIONS) ARE PROVIDED\r\n        SOLELY BY LENOVO. THE DISCLAIMERS IN THIS SUBSECTION\r\n      </strong>\r\n      <a href=\"#_bookmark5\">\r\n        <strong>8.2</strong>\r\n      </a>\r\n      <strong>\r\n        (EXCLUSIONS), HOWEVER, ALSO APPLY TO LENOVO'S SUPPLIERS OF THIRD PARTY\r\n        CODE. THOSE SUPPLIERS PROVIDE SUCH CODE WITHOUT WARRANTIES OR CONDITION\r\n        OF ANY KIND. THIS PARAGRAPH DOES NOT NULLIFY LENOVO'S WARRANTY\r\n        OBLIGATIONS UNDER THIS AGREEMENT.\r\n      </strong>\r\n    </p>\r\n  </div>\r\n  <h2>\r\n    9. <span class=\"headerRightPadding\">Licensee Data and Databases</span>\r\n  </h2>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      To assist Licensee in isolating the cause of a problem with the Program,\r\n      Lenovo may request that Licensee 1) allow Lenovo to remotely access\r\n      Licensee's system or 2) send Licensee information or system data to\r\n      Lenovo. However, Lenovo is not obligated to provide such assistance unless\r\n      Lenovo and Licensee enter a separate written agreement under which Lenovo\r\n      agrees to provide to Licensee that type of technical support, which is\r\n      beyond Lenovo's warranty obligations in this Agreement. In any event,\r\n      Lenovo uses information about errors and problems to improve its products\r\n      and services and assist with its provision of related support offerings.\r\n      For these purposes, Lenovo may use Lenovo entities and subcontractors\r\n      (including in one or more countries other than the one in which Licensee\r\n      is located), and Licensee authorizes Lenovo to do so.\r\n    </p>\r\n    <p>\r\n      Licensee remains responsible for 1) any data and the content of any\r\n      database Licensee makes available to Lenovo, 2) the selection and\r\n      implementation of procedures and controls regarding access, security,\r\n      encryption, use, and transmission of data (including any\r\n      personally-identifiable data), and 3) backup and recovery of any database\r\n      and any stored data. Licensee will not send or provide Lenovo access to\r\n      any personally-identifiable information, whether in data or any other\r\n      form, and will be responsible for reasonable costs and other amounts that\r\n      Lenovo may incur relating to any such information mistakenly provided to\r\n      Lenovo or the loss or disclosure of such information by Lenovo, including\r\n      those arising out of any third party claims.\r\n    </p>\r\n  </div>\r\n  <h2>\r\n    <a name=\"_bookmark6\"></a>\r\n    10. <span class=\"headerRightPadding\">Limitation of Liability</span>\r\n  </h2>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      The limitations and exclusions in this Section\r\n      <a href=\"#_bookmark6\"> 10 </a>\r\n      (Limitation of Liability) apply to the full extent they are not prohibited\r\n      by applicable law without the possibility of contractual waiver.\r\n    </p>\r\n    <h3>\r\n      <a name=\"_bookmark7\"></a>\r\n      10.1. Items for Which Lenovo May Be Liable\r\n    </h3>\r\n    <div class=\"rightPadding\">\r\n      <p>\r\n        Circumstances may arise where, because of a default on Lenovo's part or\r\n        other liability, Licensee is entitled to recover damages from Lenovo.\r\n        Regardless of the basis on which Licensee is entitled to claim damages\r\n        from Lenovo (including fundamental breach, negligence,\r\n        misrepresentation, or other contract or tort claim), Lenovo's entire\r\n        liability for all claims in the aggregate arising from or related to\r\n        each Program or otherwise arising under this Agreement will not exceed\r\n        the amount of any 1) damages for bodily injury (including death) and\r\n        damage to real property and tangible personal property and 2) other\r\n        actual direct damages up to the charges (if the Program is subject to\r\n        fixed term charges, up to twelve months' charges) Licensee paid for the\r\n        Program that is the subject of the claim.\r\n      </p>\r\n      <p>\r\n        This limit also applies to any of Lenovo's Program developers and\r\n        suppliers. It is the maximum for which Lenovo and its Program developers\r\n        and suppliers are collectively responsible.\r\n      </p>\r\n    </div>\r\n    <h3>\r\n      <a name=\"_bookmark8\"></a>\r\n      10.2. Items for Which Lenovo Is Not Liable\r\n    </h3>\r\n    <div class=\"rightPadding\">\r\n      <h4>\r\n        UNDER NO CIRCUMSTANCES IS LENOVO, ITS PROGRAM DEVELOPERS OR SUPPLIERS\r\n        LIABLE FOR ANY OF THE FOLLOWING, EVEN IF INFORMED OF THEIR POSSIBILITY:\r\n      </h4>\r\n      <p>\r\n        <strong>a. </strong>\r\n        <strong class=\"rightPadding\">LOSS OF, OR DAMAGE TO, DATA;</strong>\r\n      </p>\r\n      <p>\r\n        <a name=\"_bookmark9\"></a>\r\n        <strong>b. </strong>\r\n        <strong class=\"rightPadding\">\r\n          SPECIAL, INCIDENTAL, EXEMPLARY, OR INDIRECT DAMAGES, OR FOR ANY\r\n          ECONOMIC CONSEQUENTIAL DAMAGES; OR\r\n        </strong>\r\n      </p>\r\n      <p>\r\n        <strong>c. </strong>\r\n        <strong class=\"rightPadding\">\r\n          LOST PROFITS, BUSINESS, REVENUE, GOODWILL, OR ANTICIPATED SAVINGS.\r\n        </strong>\r\n      </p>\r\n    </div>\r\n    <h3>10.3. Suppliers and Program Developers</h3>\r\n    <p class=\"rightPadding\">\r\n      <a name=\"_Hlk527814702\">\r\n        The collective liabilities of Lenovo and its suppliers and Program\r\n        developers are subject to the limitations of liability described in this\r\n        Agreement. Such parties disclaim all liability for consequential or\r\n        other indirect damages. Such parties are an intended beneficiary of\r\n        these limitations and disclaimers and the limitations of liability for\r\n        Lenovo and its suppliers and Program developers are not cumulative.\r\n      </a>\r\n    </p>\r\n  </div>\r\n  <h2>\r\n    <a name=\"_bookmark10\"></a>\r\n    11. <span class=\"headerRightPadding\">Compliance Verification</span>\r\n  </h2>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      For purposes of this Section 11 (Compliance Verification), \"IPLA Program\r\n      Terms\" means this Agreement (the \"International Product License Agreement\"\r\n      or \"IPLA\") and applicable amendments and transaction documents and\r\n      policies provided by Lenovo, including but not limited to any policies\r\n      concerning backup, sub-capacity pricing, and migration.\r\n    </p>\r\n    <p>\r\n      The rights and obligations set forth in this Section\r\n      <a href=\"#_bookmark10\"> 11 </a>\r\n      remain in effect during the period the Program is licensed to Licensee,\r\n      and for two years thereafter.\r\n    </p>\r\n    <h2>11.1. Verification Process</h2>\r\n    <div class=\"rightPadding\">\r\n      <p>\r\n        Licensee agrees to create, retain (for a period of three years following\r\n        the quarterly period to which the records relate), and provide to Lenovo\r\n        and its auditors accurate written records, system tool outputs, and\r\n        other system information sufficient to provide auditable verification\r\n        that Licensee's use of all Programs is in compliance with the IPLA\r\n        Program Terms, including, without limitation, all of Lenovo's applicable\r\n        licensing and pricing qualification terms. Licensee is responsible for\r\n        1) ensuring that it does not exceed its Authorized Use, and 2) remaining\r\n        in compliance with IPLA Program Terms.\r\n      </p>\r\n      <p>\r\n        Upon reasonable notice, Lenovo may verify Licensee's compliance with\r\n        IPLA Program Terms at all sites and for all environments in which\r\n        Licensee uses (for any purpose) Programs subject to IPLA Program Terms.\r\n        Such verification will be conducted in a manner that reasonably\r\n        minimizes disruption to Licensee's business, and may be conducted on\r\n        Licensee's premises, during normal business hours. Lenovo may use an\r\n        independent auditor to assist with such verification, provided Lenovo\r\n        has a written confidentiality agreement in place with such auditor.\r\n      </p>\r\n    </div>\r\n    <h2>11.2. Resolution</h2>\r\n    <p class=\"rightPadding\">\r\n      Lenovo will notify Licensee in writing if any such verification indicates\r\n      that Licensee has used any Program in excess of its Authorized Use or is\r\n      otherwise not in compliance with the IPLA Program Terms. Licensee agrees\r\n      to promptly pay directly to Lenovo the charges that Lenovo specifies in an\r\n      invoice for 1) any such excess use, 2) support for such excess use for the\r\n      lesser of the duration of such excess use or two years, and 3) any\r\n      additional charges and other liabilities determined as a result of such\r\n      verification.\r\n    </p>\r\n  </div>\r\n  <h2>\r\n    <a name=\"_bookmark11\"></a>\r\n    12.<span class=\"headerRightPadding\"> General</span>\r\n  </h2>\r\n  <ol type=\"a\">\r\n    <li class=\"rightPadding\">\r\n      Nothing in this Agreement affects any statutory rights of consumers that\r\n      cannot be waived or limited by contract.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      For Programs Lenovo provides to Licensee in tangible form, Lenovo fulfills\r\n      its shipping and delivery obligations upon the delivery of such Programs\r\n      to the Lenovo-designated carrier, unless otherwise agreed to in writing by\r\n      Licensee and Lenovo.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      If any provision of this Agreement is held to be invalid or unenforceable,\r\n      the remaining provisions of this Agreement remain in full force and\r\n      effect.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      <a name=\"_bookmark12\"></a>\r\n      Licensee agrees to comply with all applicable export and import laws and\r\n      regulations, including U.S. embargo and sanctions regulations and\r\n      prohibitions on export for certain end uses or to certain users.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      <a name=\"_bookmark13\"></a>\r\n      Licensee authorizes Lenovo Global Technology HK Limited and its affiliates\r\n      (and their successors and assigns, contractors and Lenovo Business\r\n      Partners) to store and use Licensee's business contact information\r\n      wherever they do business, in connection with Lenovo products and\r\n      services, or in furtherance of Lenovo's business relationship with\r\n      Licensee.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      <a name=\"_bookmark14\"></a>\r\n      Each party will allow the other reasonable opportunity to comply before it\r\n      claims that the other has not met its obligations under this Agreement.\r\n      The parties will attempt in good faith to resolve all disputes,\r\n      disagreements, or claims between the parties relating to this Agreement.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      <a name=\"_bookmark15\"></a>\r\n      Unless otherwise required by applicable law without the possibility of\r\n      contractual waiver or limitation: 1) neither party will bring a legal\r\n      action, regardless of form, for any claim arising out of or related to\r\n      this Agreement more than two years after the cause of action arose; and 2)\r\n      upon the expiration of such time limit, any such claim and all respective\r\n      rights related to the claim lapse.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      Neither Licensee nor Lenovo is responsible for failure to fulfill any\r\n      obligations due to causes beyond its control.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      Lenovo may assign this Agreement on written notice to Licensee;\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      <a name=\"_bookmark16\"></a>\r\n      No right or cause of action for any third party is created by this\r\n      Agreement, except as permitted under Subsection 10.3 (Suppliers and\r\n      Program Developers) for purposes of giving Lenovo's suppliers and Program\r\n      developers the benefit of the limitation on liability, nor is Lenovo\r\n      responsible for any third party claims against Licensee, except as\r\n      permitted in Subsection\r\n      <a href=\"#_bookmark7\"> 10.1 </a>\r\n      (Items for Which Lenovo May Be Liable) above for bodily injury (including\r\n      death) or damage to real or tangible personal property for which Lenovo is\r\n      legally liable to that third party.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      In entering into this Agreement, neither party is relying on any\r\n      representation not specified in this Agreement, including but not limited\r\n      to any representation concerning: 1) the performance or function of the\r\n      Program, other than as expressly warranted in Section\r\n      <a href=\"#_bookmark3\"> 8 </a>\r\n      (Warranty and Exclusions) above; 2) the experiences or recommendations of\r\n      other parties; or 3) any results or savings that Licensee may achieve.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      Lenovo has signed agreements with certain organizations (called \"Lenovo\r\n      Business Partners\") to promote, market, and support certain Programs.\r\n      Lenovo Business Partners remain independent and separate from Lenovo.\r\n      Lenovo is not responsible for the actions or statements of Lenovo Business\r\n      Partners or obligations they have to Licensee.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      The license and intellectual property indemnification terms of Licensee's\r\n      other agreements with Lenovo (such as the Lenovo Customer Agreement) do\r\n      not apply to Program licenses granted under this Agreement.\r\n    </li>\r\n    <li class=\"rightPadding\">\r\n      Both parties agree that all information exchanged is nonconfidential. If\r\n      either party requires the exchange of confidential information, it will be\r\n      made under a signed confidentiality agreement;\r\n    </li>\r\n  </ol>\r\n\r\n  <h2>\r\n    <a name=\"_bookmark17\"></a>\r\n    <a name=\"_Governing_Law_and\"></a>\r\n    13. <span class=\"headerRightPadding\">Governing Law and Jurisdiction</span>\r\n  </h2>\r\n  <div class=\"rightPadding\">\r\n    <h3>\r\n      <a name=\"_bookmark18\"></a>\r\n      13.1 Governing Law\r\n    </h3>\r\n    <div class=\"rightPadding\">\r\n      <p>\r\n        Both parties agree to the application of the laws of the country in\r\n        which Licensee obtained the Program license to govern, interpret, and\r\n        enforce all of Licensee's and Lenovo's respective rights, duties, and\r\n        obligations arising from, or relating in any manner to, the subject\r\n        matter of this Agreement, without regard to conflict of law principles.\r\n      </p>\r\n      <p>\r\n        The United Nations Convention on Contracts for the International Sale of\r\n        Goods does not apply.\r\n      </p>\r\n    </div>\r\n    <h3>\r\n      <a name=\"_bookmark19\"></a>\r\n      13.2 Jurisdiction\r\n    </h3>\r\n    <p class=\"rightPadding\">\r\n      All rights, duties, and obligations are subject to the courts of the\r\n      country in which Licensee obtained the Program license.\r\n    </p>\r\n  </div>\r\n</div>\r\n<hr />\r\n\r\n<br clear=\"all\" />\r\n<h1>\r\n  <br clear=\"ALL\" />\r\n  Lenovo International Program License Agreement\r\n</h1>\r\n<h2>\r\n  <span class=\"headerRightPadding\">Part 2 - Country-unique Terms</span>\r\n</h2>\r\n<div class=\"rightPadding\">\r\n  <p>\r\n    For licenses granted in the countries specified below, the following terms\r\n    replace or modify the referenced terms in Part 1. All terms in Part 1 that\r\n    are not changed by these amendments remain unchanged and in effect. This\r\n    Part 2 is organized as follows:\r\n  </p>\r\n  <p>\r\n    &#9679;\r\n    <span class=\"rightPadding\"\r\n      >Multiple country amendments to Part 1, Section 13 (Governing Law and\r\n      Jurisdiction);</span\r\n    >\r\n  </p>\r\n  <p>\r\n    &#9679;<span class=\"rightPadding\">\r\n      Americas country amendments to other Agreement terms;</span\r\n    >\r\n  </p>\r\n  <p>\r\n    &#9679;<span class=\"rightPadding\">\r\n      Asia Pacific country amendments to other Agreement terms; and</span\r\n    >\r\n  </p>\r\n  <p>\r\n    &#9679;<span class=\"rightPadding\">\r\n      Europe, Middle East, and Africa country amendments to other Agreement\r\n      terms.</span\r\n    >\r\n  </p>\r\n  <br /><br />\r\n</div>\r\n<h3>\r\n  Multiple country amendments to Part 1, Section <a name=\"_Hlk527818329\"></a>\r\n  <a href=\"#_bookmark17\"> 13 </a>\r\n  (Governing Law and Jurisdiction)\r\n</h3>\r\n<div class=\"rightPadding\">\r\n  <h3>13.1 Governing Law</h3>\r\n  <p>\r\n    <em>\r\n      The phrase \"the laws of the country in which Licensee obtained the Program\r\n      license\" in the first paragraph of\r\n    </em>\r\n    <a href=\"#_bookmark18\">\r\n      <em>13.1</em>\r\n    </a>\r\n    <em>\r\n      Governing Law is replaced by the following phrases in the countries below:\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <h4>AMERICAS</h4>\r\n  <ul class=\"squareList\">\r\n    <li>in <strong>Canada</strong>: the laws in the Province of Ontario;</li>\r\n    <li>\r\n      in <strong>Mexico</strong>: the federal laws of the Republic of Mexico;\r\n    </li>\r\n    <li>\r\n      in the <strong>United States</strong>: the laws of the State of New York,\r\n      United States;\r\n    </li>\r\n    <li>\r\n      in <strong>Venezuela</strong>: the laws of the Bolivarian Republic of\r\n      Venezuela;<a name=\"_Hlk527817472\"></a>\r\n    </li>\r\n    <li>\r\n      in <strong>Brazil</strong>, the laws of the Federative Republic of Brazil;\r\n    </li>\r\n  </ul>\r\n  <h4>ASIA PACIFIC</h4>\r\n  <ul class=\"squareList\">\r\n    <li>\r\n      in <a name=\"_Hlk527817232\"><strong>Brunei</strong></a>\r\n      <strong>\r\n        , Cambodia, Indonesia,\r\n        <a name=\"_Hlk527817291\">\r\n          Korea, Laos, Myanmar, Singapore, and Vietnam\r\n        </a>\r\n      </strong>\r\n      : the laws of Singapore;\r\n    </li>\r\n    <li>\r\n      in <strong>Australia</strong>: the laws of the State or Territory in which\r\n      the transaction is performed;\r\n    </li>\r\n    <li>\r\n      in <strong>Hong Kong S.A.R </strong>and <strong>Macau S.A.R</strong>: the\r\n      laws of Hong Kong Special Administrative Region (\"S.A.R\");\r\n    </li>\r\n    <li>in <strong>Taiwan</strong>: the laws of Taiwan;</li>\r\n  </ul>\r\n\r\n  <h4>EUROPE, MIDDLE EAST, AND AFRICA</h4>\r\n  <ul class=\"squareList\">\r\n    <li>\r\n      in\r\n      <strong>\r\n        Albania, Armenia, Azerbaijan, Belarus, Bosnia-Herzegovina, Bulgaria,\r\n        Croatia, Former Yugoslav Republic of Macedonia, Georgia, Hungary,\r\n        Kazakhstan, Kyrgyzstan, Moldova, Montenegro, Poland, Romania, Russia,\r\n        Serbia, Slovakia, Tajikistan, Turkmenistan, Ukraine, the United Kingdom,\r\n        and Uzbekistan Algeria, Andorra, Benin, Burkina Faso, Cameroon, Cape\r\n        Verde, Central African Republic, Chad, Comoros, Congo Republic,\r\n        Djibouti, Democratic Republic of Congo, Equatorial Guinea, French\r\n        Guiana, French Polynesia, Gabon, Gambia, Guinea, Guinea-Bissau, Ivory\r\n        Coast, Lebanon, Lesotho, Madagascar, Mali, Mauritania, Mauritius,\r\n        Mayotte, Morocco, Namibia, New Caledonia, Niger, Reunion, Senegal,\r\n        Seychelles, South Africa, Swaziland, Togo, Tunisia, Vanuatu, and Wallis\r\n        and Futuna: the laws of Hong Kong, in Angola, Bahrain, Botswana,\r\n        Burundi, Egypt, Eritrea, Ethiopia, Ghana, Jordan, Kenya, Kuwait,\r\n        Liberia, Malawi, Malta, Mozambique, Nigeria, Oman, Pakistan, Qatar,\r\n        Rwanda, Sao Tome and Principe, Saudi Arabia, Sierra Leone, Somalia,\r\n        Tanzania, Uganda, United Arab Emirates, West Bank/Gaza, Yemen, Zambia,\r\n        and Zimbabwe:\r\n      </strong>\r\n      This Agreement shall be governed by and interpreted in accordance with the\r\n      laws of Hong Kong S.A.R., without regard to its or any other\r\n      jurisdiction's conflict of laws principles. All claims or disputes arising\r\n      out of or in connection with this Agreement shall be brought exclusively\r\n      in a court located in Hong Kong,S.A.R. To that end, each party irrevocably\r\n      consents to the exclusive jurisdiction of, and venue in, such a court, and\r\n      waives any: (i) objection it may have to any proceedings brought in any\r\n      such court, (ii) claim that the proceedings have been brought in an\r\n      inconvenient forum, and (iii) right to object (with respect to such\r\n      proceedings) that such court does not have jurisdiction over such party.\r\n      Without limiting the generality of the forgoing, each party specifically\r\n      and irrevocably consents to personal and subject matter jurisdiction for\r\n      such claims or disputes in a court sitting in Hong Kong, S.A.R., and to\r\n      the service of process in connection with any such claims or disputes by\r\n      the mailing thereof by registered or certified mail, postage prepaid to\r\n      such party, at the address set forth in, or designated pursuant to, this\r\n      Agreement. To the fullest extent permitted by law, each party hereby\r\n      expressly waives (on behalf of itself and on behalf of any person or\r\n      entity claiming through such party) any right to a trial by jury in any\r\n      action, suit, proceeding, or counterclaim of any kind arising out of or in\r\n      any manner connected with this Agreement or the subject matter hereof. The\r\n      \"United Nations Convention on Contracts for the International Sale of\r\n      Goods\" does not apply to this Agreement.\r\n    </li>\r\n    <li>\r\n      <strong>in Estonia, Latvia, and Lithuania:</strong> the laws of Finland.\r\n    </li>\r\n  </ul>\r\n  <br />\r\n  <h3>13.2 Jurisdiction</h3>\r\n  <p>\r\n    <strong><em></em></strong>\r\n  </p>\r\n  <p>\r\n    <em>\r\n      The following paragraph pertains to jurisdiction and replaces Subsection\r\n    </em>\r\n    <a href=\"#_bookmark19\">\r\n      <em>13.2</em>\r\n    </a>\r\n    <em>\r\n      (Jurisdiction) as it applies for those countries identified in bold below:\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p>\r\n    All rights, duties, <strong>and obl</strong>ig<strong>ations </strong>are s\r\n    <strong>ubject to </strong>the courts of the country in which Licensee\r\n    obtained the Program license except that in the countries identified below\r\n    all disputes arising out of or related to this Agreement, including summary\r\n    proceedings, will be brought before and subject to the exclusive\r\n    jurisdiction of the following courts of competent jurisdiction:\r\n  </p>\r\n  <p>\r\n    <strong>AMERICAS</strong>\r\n  </p>\r\n\r\n  <ul class=\"squareList\">\r\n    <li>\r\n      in <strong>Argentina</strong>: the Ordinary Commercial Court of the city\r\n      of Buenos Aires,\r\n    </li>\r\n    <li>\r\n      in <strong>Bolivia</strong>: the courts located in the city of Santa Cruz\r\n      de la Sierra;\r\n    </li>\r\n    <li>in <strong>Brazil</strong>: the court of Sao Paulo, SP;</li>\r\n    <li>\r\n      in <strong>Chile</strong>: the Civil Courts of Justice of Santiago;\r\n      <a name=\"_Hlk527818375\"></a>\r\n    </li>\r\n    <li>\r\n      In <strong>Colombia</strong>: the courts located in Bogot&#225;, D.C.;\r\n    </li>\r\n    <li>\r\n      in <strong>Ecuador</strong>: the civil judges of Quito for executory or\r\n      summary proceedings (as applicable);\r\n    </li>\r\n    <li>\r\n      in <strong>Mexico</strong>: the courts located in Mexico City, Federal\r\n      District;<a name=\"_Hlk527818427\"></a>\r\n    </li>\r\n    <li>\r\n      in <strong>Paraguay</strong>: the courts located in the city of\r\n      Asunci&#243;n;\r\n    </li>\r\n    <li>\r\n      in <strong>Peru</strong>: the judges and tribunals of the judicial\r\n      district of Lima, Cercado;\r\n    </li>\r\n    <li>in <strong>Uruguay</strong>: the courts of the city of Montevideo;</li>\r\n    <li>\r\n      in <strong>Venezuela</strong>: the courts of the metropolitan area of the\r\n      city of Caracas;\r\n    </li>\r\n  </ul>\r\n\r\n  <h4>\r\n    <a name=\"_Hlk527818611\">ASIA PACIFIC</a>\r\n  </h4>\r\n\r\n  <ul class=\"squareList\">\r\n    <li>in <strong>Thailand</strong>: the courts of Bangkok;</li>\r\n    <li>in <strong>Taiwan</strong>: the courts of Taipei;</li>\r\n    <li>in <strong>Korea</strong>: the courts of Seoul;</li>\r\n  </ul>\r\n  <p>\r\n    <em></em>\r\n  </p>\r\n  <p>\r\n    <em>\r\n      The following paragraph pertains to jurisdiction and replaces Subsection\r\n    </em>\r\n    <a href=\"#_bookmark19\">\r\n      <em>13.2</em>\r\n    </a>\r\n    <em>\r\n      (Jurisdiction) as it applies for those countries identified below. The\r\n      provisions of this paragraph prevail over those of Subsection 13.2\r\n      (Jurisdiction) to the extent permitted by the applicable governing law and\r\n      rules of procedure:\r\n    </em>\r\n  </p>\r\n  <p>\r\n    <em></em>\r\n  </p>\r\n  <p>\r\n    <a name=\"_Hlk527819435\">\r\n      This Agreement shall be governed by and interpreted in accordance with the\r\n      laws of Hong Kong S.A.R., without regard to its or any other\r\n      jurisdiction's conflict of laws principles. All claims or disputes arising\r\n      out of or in connection with this Agreement shall be brought exclusively\r\n      in a court located in Hong Kong, S.A.R.\r\n    </a>\r\n    To that end, each party irrevocably consents to the exclusive jurisdiction\r\n    of, and venue in, such a court, and waives any: (i) objection it may have to\r\n    any proceedings brought in any such court, (ii) claim that the proceedings\r\n    have been brought in an inconvenient forum, and (iii) right to object (with\r\n    respect to such proceedings) that such court does not have jurisdiction over\r\n    such party. Without limiting the generality of the forgoing, each party\r\n    specifically and irrevocably consents to personal and subject matter\r\n    jurisdiction for such claims or disputes in a court sitting in Hong Kong,\r\n    S.A.R., and to the service of process in connection with any such claims or\r\n    disputes by the mailing thereof by registered or certified mail, postage\r\n    prepaid to such party, at the address set forth in, or designated pursuant\r\n    to, this Agreement. To the fullest extent permitted by law, each party\r\n    hereby expressly waives (on behalf of itself and on behalf of any person or\r\n    entity claiming through such party) any right to a trial by jury in any\r\n    action, suit, proceeding, or counterclaim of any kind arising out of or in\r\n    any manner connected with this Agreement or the subject matter hereof. The\r\n    \"United Nations Convention on Contracts for the International Sale of Goods\"\r\n    does not apply to this Agreement.\r\n  </p>\r\n  <h4>ASIA PACIFIC</h4>\r\n  <ul class=\"squareList lh-1-2\">\r\n    <li>\r\n      <p>\r\n        In\r\n        <strong>\r\n          Brunei, Cambodia, Korea, Indonesia, Laos, Myanmar, Philippines\r\n        </strong>\r\n        , and <strong>Vietnam</strong> :\r\n      </p>\r\n      <p>\r\n        Disputes arising out of or in connection with this Agreement will be\r\n        finally settled by arbitration which will be held in Singapore in\r\n        accordance with the Arbitration Rules of Singapore International\r\n        Arbitration Center (\"SIAC Rules\") then in effect. The arbitration award\r\n        will be final and binding for the parties without appeal and will be in\r\n        writing and set forth the findings of fact and the conclusions of law.\r\n      </p>\r\n      <p>\r\n        The number of arbitrators will be three, with each side to the dispute\r\n        being entitled to appoint one arbitrator. The two arbitrators appointed\r\n        by the parties will appoint a third arbitrator who will act as chairman\r\n        of the proceedings. Vacancies in the post of chairman will be filled by\r\n        the president of the SIAC. Other vacancies will be filled by the\r\n        respective nominating party. Proceedings will continue from the stage\r\n        they were at when the vacancy occurred.\r\n      </p>\r\n      <p>\r\n        If one of the parties refuses or otherwise fails to appoint an\r\n        arbitrator within 30 days of the date the other party appoints its, the\r\n        first appointed arbitrator will be the sole arbitrator, provided that\r\n        the arbitrator was validly and properly appointed.\r\n      </p>\r\n      <p>\r\n        All proceedings will be conducted, including all documents presented in\r\n        such proceedings, in the English language. The English language version\r\n        of this Agreement prevails over any other language version.\r\n      </p>\r\n    </li>\r\n    <li>\r\n      <p>In the <strong>People's Republic of China</strong>:</p>\r\n      <p>\r\n        In case no settlement can be reached, the disputes will be submitted to\r\n        China International Economic and Trade Arbitration Commission for\r\n        arbitration according to the then effective rules of the said\r\n        Arbitration Commission. The arbitration will take place in Beijing and\r\n        be conducted in Chinese. The arbitration award will be final and binding\r\n        on both parties. During the course of arbitration, this agreement will\r\n        continue to be performed except for the part which the parties are\r\n        disputing and which is undergoing arbitration.\r\n      </p>\r\n    </li>\r\n    <li>\r\n      <p>In <strong>India</strong>:</p>\r\n      <p>\r\n        Disputes arising out of or in connection with this Agreement shall be\r\n        finally settled by arbitration which shall be held in Bangalore, India\r\n        in accordance with the laws of India then in effect. The arbitration\r\n        award shall be final and binding for the parties without appeal and\r\n        shall be in writing and set forth the findings of fact and the\r\n        conclusions of law.\r\n      </p>\r\n      <p>\r\n        The number of arbitrators shall be three, with each side to the dispute\r\n        being entitled to appoint one arbitrator. The two arbitrators appointed\r\n        by the parties shall appoint a third arbitrator who shall act as\r\n        chairman of the proceedings. Vacancies in the post of chairman shall be\r\n        filled by the president of the Bar Council of India. Other vacancies\r\n        shall be filled by the respective nominating party. Proceedings shall\r\n        continue from the stage they were at when the vacancy occurred.\r\n      </p>\r\n      <p>\r\n        If one of the parties refuses or otherwise fails to appoint an\r\n        arbitrator within 30 days of the date the other party appoints its, the\r\n        first appointed arbitrator shall be the sole arbitrator, provided that\r\n        the arbitrator was validly and properly appointed.\r\n      </p>\r\n      <p>\r\n        All proceedings shall be conducted, including all documents presented in\r\n        such proceedings, in the English language. The English language version\r\n        of this Agreement prevails over any other language version.\r\n      </p>\r\n    </li>\r\n  </ul>\r\n\r\n  <br /><br /><br />\r\n</div>\r\n<h4>AMERICAS COUNTRY AMENDMENTS <a name=\"_Hlk527821952\"></a></h4>\r\n<div class=\"rightPadding\">\r\n  <h4>BRAZIL<a name=\"_Hlk527821936\"></a></h4>\r\n  <p>\r\n    <em>\r\n      The following paragraph replaces the paragraph of Section 5 (Taxes):\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p align=\"left\">\r\n    If any authority imposes on the Program a duty, tax, levy, or fee, excluding\r\n    those based on Lenovo's net income, then Licensee agrees to pay that amount,\r\n    as specified in an invoice and/or added in the Charges\r\n  </p>\r\n  <p>\r\n    -Charges may be grossed up in order to include the duty, tax, levy or\r\n    fee-Licensee shall make available to Lenovo any documentation regarding the\r\n    withholding or payment of any duty, tax, levy, or fee, including those based\r\n    on Lenovo's net income. Licensee shall hold Lenovo entirely harmless of any\r\n    dispute of any duty, tax, levy, or fee charged or imposed, in any way, by\r\n    any authority. Licensee is responsible for any personal property taxes for\r\n    the Program from the date that Licensee obtains it. If any authority imposes\r\n    a customs duty, tax, levy, or fee for the import into or the export,\r\n    transfer, access, or use of the Program outside the country in which the\r\n    original Licensee was granted the license, then Licensee agrees that it is\r\n    responsible for, and will pay, any amount imposed.\r\n  </p>\r\n  <p>\r\n    <em>\r\n      The following is added to the end of this Section 10 (Limitation of\r\n      Liability):\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p>\r\n    Except as expressly required by law without the possibility of contractual\r\n    waiver, Licensee and Lenovo intend that the limitation of liability in this\r\n    Limitation of Liability section shall apply to damages caused by all types\r\n    of claims and causes of action. If any limitation on or exclusion from\r\n    liability in this section is held by a court of competent jurisdiction to be\r\n    unenforceable with respect to a particular claim or cause of action, the\r\n    parties intend that it nonetheless apply to the maximum extent permitted by\r\n    applicable law to all other claims and causes of action.\r\n  </p>\r\n  <h4>CANADA</h4>\r\n  <h4></h4>\r\n  <p>\r\n    <em>\r\n      The following replaces Item 1 in the first paragraph of this Subsection\r\n      10.1 (Items for Which Lenovo May be Liable):\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p align=\"left\">\r\n    damages for bodily injury (including death) and physical harm to real\r\n    property and tangible personal property caused by Lenovo's negligence; and\r\n  </p>\r\n  <h4></h4>\r\n  <p>\r\n    <em>The following replaces Item </em>\r\n    <a href=\"#_bookmark12\">\r\n      <em>12.d:</em>\r\n    </a>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Licensee agrees to comply with all applicable export and import laws and\r\n    regulations, including those of that apply to goods of United States origin\r\n    and that prohibit or limit export for certain uses or to certain users.\r\n  </p>\r\n  <p>\r\n    <em>The following replaces Item </em>\r\n    <a href=\"#_bookmark16\">\r\n      <em>12.j:</em>\r\n    </a>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    No right or cause of action for any third party is created by this Agreement\r\n    or any transaction under it, nor is Lenovo responsible for any third party\r\n    claims against Licensee except as permitted by the Limitation of Liability\r\n    section above for bodily injury (including death) or physical harm to real\r\n    or tangible personal property caused by Lenovo's negligence for which Lenovo\r\n    is legally liable to that third party.\r\n  </p>\r\n  <p>\r\n    <em>The following is added as Item 12.m:</em>\r\n    <em></em>\r\n  </p>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      For purposes of this Item 12.m, \"Personal Data\" refers to information\r\n      relating to an identified or identifiable individual made available by one\r\n      of the parties, its personnel or any other individual to the other in\r\n      connection with this Agreement. The following provisions apply in the\r\n      event that one party makes Personal Data available to the other:\r\n    </p>\r\n    <p>(1) <span class=\"rightPadding\">General</span></p>\r\n    <div class=\"rightPadding\">\r\n      <p>\r\n        (a)\r\n        <span class=\"rightPadding\">\r\n          Each party is responsible for complying with any obligations applying\r\n          to it under applicable Canadian data privacy laws and regulations\r\n          (\"Laws\").</span\r\n        >\r\n      </p>\r\n      <p>\r\n        (b)\r\n        <span class=\"rightPadding\"\r\n          >Neither party will request Personal Data beyond what is necessary to\r\n          fulfill the purpose(s) for which it is requested. The purpose(s) for\r\n          requesting Personal Data must be reasonable. Each party will agree in\r\n          advance as to the type of Personal Data that is required to be made\r\n          available.</span\r\n        >\r\n      </p>\r\n    </div>\r\n    <p>(2)<span class=\"rightPadding\"> Security Safeguards</span></p>\r\n    <div class=\"rightPadding\">\r\n      <p>\r\n        (a)\r\n        <span class=\"rightPadding\"\r\n          >Each party acknowledges that it is solely responsible for determining\r\n          and communicating to the other the appropriate technological, physical\r\n          and organizational security measures required to protect Personal\r\n          Data.</span\r\n        >\r\n      </p>\r\n      <p>\r\n        (b)\r\n        <span class=\"rightPadding\"\r\n          >Each party will ensure that Personal Data is protected in accordance\r\n          with the security safeguards communicated and agreed to by the\r\n          other.</span\r\n        >\r\n      </p>\r\n      <p>\r\n        (c)\r\n        <span class=\"rightPadding\"\r\n          >Each party will ensure that any third party to whom Personal Data is\r\n          transferred is bound by the applicable terms of this section.</span\r\n        >\r\n      </p>\r\n      <p>\r\n        (d)\r\n        <span class=\"rightPadding\"\r\n          >Additional or different services required to comply with the Laws\r\n          will be deemed a request for new services.</span\r\n        >\r\n      </p>\r\n    </div>\r\n    <p>(3) <span class=\"rightPadding\">Use</span></p>\r\n    <p class=\"rightPadding\">\r\n      Each party agrees that Personal Data will only be used, accessed, managed,\r\n      transferred, disclosed to third parties or otherwise processed to fulfill\r\n      the purpose(s) for which it was made available.\r\n    </p>\r\n    <p>(4) <span class=\"rightPadding\"> Access Requests </span></p>\r\n    <div class=\"rightPadding\">\r\n      <p>\r\n        (a)<span class=\"rightPadding\">\r\n          Each party agrees to reasonably cooperate with the other in connection\r\n          with requests to access or amend Personal Data.</span\r\n        >\r\n      </p>\r\n      <p>\r\n        (b)\r\n        <span class=\"rightPadding\"\r\n          >Each party agrees to reimburse the other for any reasonable charges\r\n          incurred in providing each other assistance.</span\r\n        >\r\n      </p>\r\n      <p>\r\n        (c)\r\n        <span class=\"rightPadding\"\r\n          >Each party agrees to amend Personal Data only upon receiving\r\n          instructions to do so from the other party or its personnel.</span\r\n        >\r\n      </p>\r\n    </div>\r\n    <p>(5) <span class=\"rightPadding\"> Retention </span></p>\r\n    <p class=\"rightPadding\">\r\n      Each party will promptly return to the other or destroy all Personal Data\r\n      that is no longer necessary to fulfill the purpose(s) for which it was\r\n      made available, unless otherwise instructed by the other or its personnel\r\n      or required by law.\r\n    </p>\r\n    <p>\r\n      (6)\r\n      <span class=\"rightPadding\"\r\n        >Public Bodies Who Are Subject to Public Sector Privacy\r\n        Legislation</span\r\n      >\r\n    </p>\r\n    <p class=\"rightPadding\">\r\n      For Licensees who are public bodies subject to public sector privacy\r\n      legislation, this Item 12.m applies only to Personal Data made available\r\n      to Licensee in connection with this Agreement, and the obligations in this\r\n      section apply only to Licensee, except that: 1) section (2)(a) applies\r\n      only to Lenovo; 2) sections (1)(a) and (4)(a) apply to both parties; and\r\n      3) section (4)(b) and the last sentence in (1)(b) do not apply.\r\n      <a href=\"#_bookmark6\"> 9. </a>\r\n      Limitation of Liability\r\n    </p>\r\n  </div>\r\n  <h4>PERU</h4>\r\n  <p>\r\n    <strong></strong>\r\n  </p>\r\n  <p>\r\n    <em>\r\n      The following is added to the end of this Section 10 (Limitation of\r\n      Liability):\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Except as expressly required by law without the possibility of contractual\r\n    waiver, Licensee and Lenovo intend that the limitation of liability in this\r\n    Limitation of Liability section applies to damages caused by all types of\r\n    claims and causes of action. If any limitation on or exclusion from\r\n    liability in this section is held by a court of competent jurisdiction to be\r\n    unenforceable with respect to a particular claim or cause of action, the\r\n    parties intend that it nonetheless apply to the maximum extent permitted by\r\n    applicable law to all other claims and causes of action.\r\n  </p>\r\n  <h4></h4>\r\n  <p>\r\n    <em>The following is added at the end of this Subsection 10.1:</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    In accordance with Article 1328 of the Peruvian Civil Code, the limitations\r\n    and exclusions specified in this section will not apply to damages caused by\r\n    Lenovo's willful misconduct (\"dolo\") or gross negligence (\"culpa\r\n    inexcusable\").\r\n  </p>\r\n  <br /><br />\r\n</div>\r\n<h4>UNITED STATES OF AMERICA:</h4>\r\n<div class=\"rightPadding\">\r\n  <p>\r\n    <em>The following is added at the end of this Section 5 (Taxes)</em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    For Programs delivered electronically in the United States for which\r\n    Licensee claims a state sales and use tax exemption, Licensee agrees not to\r\n    receive any tangible personal property (e.g., media and publications)\r\n    associated with the electronic program.\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Licensee agrees to be responsible for any sales and use tax liabilities that\r\n    may arise as a result of Licensee's subsequent redistribution of Programs\r\n    after delivery by Lenovo.\r\n  </p>\r\n  <p>\r\n    <em>The following is added to Section 12 as Item 12.o:</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    U.S. Government Users Restricted Rights - Use, duplication or disclosure is\r\n    restricted by the GSA IT Schedule 70 Contract with the Lenovo Corporation.\r\n  </p>\r\n  <p>\r\n    <em>The following is added to Item </em>\r\n    <a href=\"#_bookmark14\">\r\n      <em>12.f:</em>\r\n    </a>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Each party waives any right to a jury trial in any proceeding arising out of\r\n    or related to this Agreement.\r\n  </p>\r\n  <br /><br />\r\n</div>\r\n<h4>ASIA PACIFIC COUNTRY AMENDMENTS AUSTRALIA:</h4>\r\n<div class=\"rightPadding\">\r\n  <p>\r\n    <em>\r\n      The following sentences replace the first two sentences of Section 5\r\n      (Taxes):\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    If any government or authority imposes a duty, tax (other than income tax),\r\n    levy, or fee, on this Agreement or on the Program itself, that is not\r\n    otherwise provided for in the amount payable, Licensee agrees to pay it when\r\n    Lenovo invoices Licensee. If the rate of GST changes, Lenovo may adjust the\r\n    charge or other amount payable to take into account that change from the\r\n    date the change becomes effective.\r\n  </p>\r\n  <h4></h4>\r\n  <p>\r\n    <em>The following is added to Subsection 8.1 (Limited Warranty):</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    The warranties specified this Section are in addition to any rights Licensee\r\n    may have under the Competition and Consumer Act 2010 or other legislation\r\n    and are only limited to the extent permitted by the applicable legislation.\r\n  </p>\r\n  <p>\r\n    <em>\r\n      The first two paragraphs of Subsection 8.2 are deleted and replaced with\r\n      the following:\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    THE BENEFITS GIVEN BY THIS WARRANTY ARE IN ADDITION TO YOUR RIGHTS AND\r\n    REMEDIES AT LAW, INCLUDING THOSE UNDER THE AUSTRALIAN CONSUMER LAW.\r\n  </p>\r\n  <p class=\"rightPadding font-14\">\r\n    We are required by the Australian Consumer Law to include the following\r\n    statement:\r\n  </p>\r\n  <p align=\"left\" class=\"rightPadding\">\r\n    <i class=\"font-14\">\r\n      Our goods come with guarantees that cannot be excluded under the\r\n      Australian Consumer Law. You are entitled to a replacement of refund for a\r\n      major failure and compensation for any reasonably foreseeable loss or\r\n      damage. You are also entitled to have the goods repaired or replaced if\r\n      the goods fail to be of acceptable quality and the failure does not amount\r\n      to a major failure.\r\n    </i>\r\n  </p>\r\n  <p>\r\n    <em></em>\r\n  </p>\r\n  <p>\r\n    <em>\r\n      The following is added to Subsection 10.1 (Items for Which Lenovo May be\r\n      Liable):\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Where Lenovo is in breach of a condition, warranty or consumer guarantee\r\n    implied by the Competition and Consumer Act 2010, and Lenovo's liability is\r\n    capable of being limited, then Lenovo's liability is limited to the repair\r\n    or replacement of the goods, or the supply of equivalent goods.\r\n  </p>\r\n  <br />\r\n  <h4>HONG KONG S.A.R, MACAU S.A.R, AND TAIWAN</h4>\r\n  <p>\r\n    <em>\r\n      As applies to licenses obtained in Taiwan and the special administrative\r\n      regions, phrases throughout this Agreement containing the word \"country\"\r\n      (for example, \"the country in which the original Licensee was granted the\r\n      license\" and \"the country in which Licensee obtained the Program license\")\r\n      are replaced with the following:\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n\r\n  <ul class=\"squareList\">\r\n    <li>In <strong>Hong Kong S.A.R</strong>: \"Hong Kong S.A.R\"</li>\r\n    <li>\r\n      In <strong>Macau S.A.R</strong>: \"Macau S.A.R\" except in the Governing Law\r\n      clause (Section 12.1)\r\n    </li>\r\n    <li>In <strong>Taiwan</strong>: \"Taiwan.\"</li>\r\n  </ul>\r\n  <br /><br />\r\n\r\n  <h4>INDIA</h4>\r\n  <p>\r\n    <em>\r\n      The following replaces the terms of Items 1 and 2 of the first paragraph\r\n      <a name=\"_Hlk527824823\">\r\n        of Subsection 10.1 (Items for Which Lenovo May be Liable)\r\n      </a>\r\n      ::\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    1) liability for bodily injury (including death) or damage to real property\r\n    and tangible personal property will be limited to that caused by Lenovo's\r\n    negligence; and 2) as to any other actual damage arising in any situation\r\n    involving nonperformance by Lenovo pursuant to, or in any way related to the\r\n    subject of this Agreement, Lenovo's liability will be limited to the charge\r\n    paid by Licensee for the individual Program that is the subject of the\r\n    claim.\r\n  </p>\r\n  <p>\r\n    <em>The following replaces the terms of Item </em>\r\n    <a href=\"#_bookmark15\">\r\n      <em>12.g of Subsection 12 (General)</em>\r\n      <em>:</em>\r\n    </a>\r\n    <a name=\"_Hlk527824958\"></a>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    If no suit or other legal action is brought, within three years after the\r\n    cause of action arose, in respect of any claim that either party may have\r\n    against the other, the rights of the concerned party in respect of such\r\n    claim will be forfeited and the other party will stand released from its\r\n    obligations in respect of such claim.\r\n  </p>\r\n  <br />\r\n  <h4>INDONESIA</h4>\r\n  <p>\r\n    <em>\r\n      The following is added to the last\r\n      <a name=\"_Hlk527825102\">\r\n        paragraph of Subsection 3.3 (Term and Termination)\r\n      </a>\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Both parties waive the provision of article 1266 of the Indonesian Civil\r\n    Code, to the extent the article provision requires such court decree for the\r\n    termination of an agreement creating mutual obligations.\r\n  </p>\r\n  <p>\r\n    <em>The following is added to Subsection 12 (General):</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    All notices, requests, reports or other communications shall be made in\r\n    English language. If this Agreement is translated into any language other\r\n    than English, unless required otherwise by applicable law, the English\r\n    language text shall prevail.\r\n  </p>\r\n  <br />\r\n  <h4>JAPAN</h4>\r\n  <p>\r\n    <a name=\"_Hlk527825593\">\r\n      <em>The following is added to Subsection 12 (General)</em>\r\n    </a>\r\n    <em>:</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Any doubts concerning this Agreement will be initially resolved between us\r\n    in good faith and in accordance with the principle of mutual trust.\r\n  </p>\r\n  <br />\r\n  <h4>MALAYSIA</h4>\r\n  <p>\r\n    <a name=\"_Hlk527825889\"><em>The word \"SPECIAL\" in Item </em></a>\r\n    <a href=\"#_bookmark6\">\r\n      <em>10.2b</em>\r\n    </a>\r\n    <em>\r\n      of Subsection 10.2 (Items for Which Lenovo is Not Liable) is deleted\r\n    </em>\r\n  </p>\r\n  <br />\r\n  <h4>NEW ZEALAND</h4>\r\n  <p>\r\n    <em>The following is added to Subsection 8.1 (Limited Warranty):</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    The warranties specified in this Section are in addition to any rights\r\n    Licensee may have under the Consumer Guarantees Act 1993 or other\r\n    legislation which cannot be excluded or limited. The Consumer Guarantees Act\r\n    1993 will not apply in respect of any goods which Lenovo provides, if\r\n    Licensee requires the goods for the purposes of a business as defined in\r\n    that Act.\r\n  </p>\r\n  <p>\r\n    <em>The following is added to Subsection 10 (Limitation of Liability):</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Where Programs are not obtained for the purposes of a business as defined in\r\n    the Consumer Guarantees Act 1993, the limitations in this Section are\r\n    subject to the limitations in that Act.\r\n  </p>\r\n  <br />\r\n  <h4>PEOPLE'S REPUBLIC OF CHINA</h4>\r\n  <p>\r\n    <em>The following is added to Subsection 4 (Charges)</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    All banking charges incurred in the People's Republic of China will be borne\r\n    by Licensee and those incurred outside the People's Republic of China will\r\n    be borne by Lenovo.\r\n  </p>\r\n  <br />\r\n  <h4>PHILIPPINES</h4>\r\n  <p>\r\n    <em>\r\n      The following replaces the terms of Item 10.2b of Subsection 10.2 (Items\r\n      for Which Lenovo is Not Liable)\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    special (including nominal and exemplary damages), moral, incidental, or\r\n    indirect damages or for any economic consequential damages; or\r\n  </p>\r\n  <br />\r\n  <h4>SINGAPORE</h4>\r\n  <p>\r\n    <em>\r\n      The words \"<strong>SPECIAL</strong>\" and \"<strong>ECONOMIC</strong>\" are\r\n      deleted from Item\r\n    </em>\r\n    <a href=\"#_bookmark6\">\r\n      <em>10.2b </em>\r\n      <em>of Subsection 10.2 (Items for Which Lenovo is Not Liable).</em>\r\n    </a>\r\n    <em></em>\r\n  </p>\r\n  <p>\r\n    <em>\r\n      The following replaces the terms of Item 12.j of Subsection 12 (General):\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    Subject to the rights provided to Lenovo's suppliers and Program developers\r\n    as provided in Section\r\n    <a href=\"#_bookmark6\"> 9 </a>\r\n    above (Limitation of Liability), a person who is not a party to this\r\n    Agreement will have no right under the Contracts (Right of Third Parties)\r\n    Act to enforce any of its terms.\r\n  </p>\r\n  <h4>TAIWAN</h4>\r\n  <p>\r\n    <em>\r\n      The last paragraph of Subsection 8.1 (Limited Warranty) is deleted.\r\n    </em>\r\n    <em></em>\r\n  </p>\r\n  <br /><br />\r\n  <h4>\r\n    EUROPE, MIDDLE EAST, AFRICA (EMEA) COUNTRY AMENDMENTS EUROPEAN UNION MEMBER\r\n    STATES\r\n  </h4>\r\n  <p>\r\n    <a class=\"black\" href=\"#_bookmark3\">\r\n      <strong>7.</strong>\r\n    </a>\r\n    <strong> Warranty and Exclusions</strong>\r\n  </p>\r\n  <p>\r\n    <em>The following is added to Section </em>\r\n    <a href=\"#_bookmark3\">\r\n      <em>8</em>\r\n    </a>\r\n    <em> (Warranty and Exclusion):</em>\r\n    <em></em>\r\n  </p>\r\n  <p class=\"rightPadding\">\r\n    In the European Union (\"EU\"), consumers have legal rights under applicable\r\n    national legislation governing the sale of consumer goods. Such rights are\r\n    not affected by the provisions set out in this Section 7 Warranty and\r\n    Exclusions. The territorial scope of the Limited Warranty is worldwide.\r\n  </p>\r\n  <br />\r\n\r\n  <h4>EU MEMBER STATES AND THE COUNTRIES IDENTIFIED BELOW</h4>\r\n  <p>\r\n    Iceland, Liechtenstein, Norway, Switzerland, Turkey, and any other European\r\n    country that has enacted local data privacy or protection legislation\r\n    similar to the EU model.\r\n  </p>\r\n  <p>\r\n    <em>The following replaces Item </em>\r\n    <a href=\"#_bookmark13\">\r\n      <em>12.e:</em>\r\n    </a>\r\n    <em></em>\r\n  </p>\r\n  <div class=\"rightPadding\">\r\n    <p>\r\n      (1) <strong class=\"rightPadding\">Definitions </strong>- For the purposes\r\n      of this Item\r\n      <a href=\"#_bookmark13\"> 12.e, </a>\r\n      the following additional definitions apply:\r\n    </p>\r\n    <div class=\"rightPadding\">\r\n      <p>\r\n        (a) <strong class=\"rightPadding\">Business Contact Information </strong>-\r\n        business-related contact information disclosed by Licensee to Lenovo,\r\n        including names, job titles, business addresses, telephone numbers and\r\n        email addresses of Licensee's employees and contractors.\r\n        <strong>Business Contact Personnel - </strong>Licensee employees and\r\n        contractors to whom the Business Contact Information relates.\r\n      </p>\r\n      <p>\r\n        (b) <strong class=\"rightPadding\">Data Protection Authority </strong>-\r\n        the authority established by the Data Protection and Electronic\r\n        Communications Legislati <strong>on in the applicable count</strong>ry\r\n        or, for non-EU countries, the authority responsible for supervising the\r\n        protection of personal data in that country, or (for any of the\r\n        foregoing) any duly appointed successor entity thereto.\r\n      </p>\r\n      <p>\r\n        (c)\r\n        <strong class=\"rightPadding\">\r\n          Data Protection &amp; Electronic Communications Legislation\r\n        </strong>\r\n        - (i) the applicable local legislation and regulations in force\r\n        implementing the requirements of EU Directive 95/46/EC (on the\r\n        protection of individuals with regard to the processing of personal data\r\n        and on the free movement of such data) and of EU Directive 2002/58/EC\r\n        (concerning the processing of personal data and the protection of\r\n        privacy in the electronic communications sector); or (ii) for non-EU\r\n        countries, the legislation and/or regulations passed in the applicable\r\n        country relating to the protection of personal data and the regulation\r\n        of electronic communications involving personal data, including (for any\r\n        of the foregoing) any statutory replacement or modification thereof.\r\n      </p>\r\n      <p>\r\n        (d) <strong class=\"rightPadding\">Lenovo Group </strong>- Lenovo Global\r\n        Technology HK Limited, its affiliates, and their respective Business\r\n        Partners and subcontractors.\r\n      </p>\r\n    </div>\r\n    <p>(2) <span class=\"rightPadding\">Licensee authorizes Lenovo:</span></p>\r\n    <p class=\"rightPadding\">\r\n      to process and use Business Contact Information within Lenovo Group in\r\n      support of Licensee including the provision of support services, and for\r\n      the purpose of furthering the business relationship between Licensee and\r\n      Lenovo Group, including, without limitation, contacting Business Contact\r\n      Personnel (by email or otherwise) and marketing Lenovo Group products and\r\n      services (the \"Specified Purpose\"); and\r\n    </p>\r\n    <p>\r\n      (a)\r\n      <span class=\"rightPadding\"\r\n        >to disclose Business Contact Information to other members of Lenovo\r\n        Group in pursuit of the Specified Purpose only.</span\r\n      >\r\n    </p>\r\n    <p>\r\n      (3)\r\n      <span class=\"rightPadding\"\r\n        >Lenovo agrees that all Business Contact Information will be processed\r\n        in accordance with the Data Protection &amp; Electronic Communications\r\n        Legislation and will be used only for the Specified Purpose.</span\r\n      >\r\n    </p>\r\n    <p>\r\n      (4)<span class=\"rightPadding\"\r\n        >Licensee authorizes Lenovo to transfer Business Contact Information\r\n        outside the European Economic Area to any place it does business,\r\n        provided that the transfer is made on contractual terms approved by the\r\n        Data Protection Authority or the transfer is otherwise permitted under\r\n        the Data Protection &amp; Electronic Communications Legislation.</span\r\n      >\r\n    </p>\r\n  </div>\r\n</div>\r\n","import { Component, Input, OnInit, ViewChild } from '@angular/core';\r\nimport { ModalDialogButton } from '../../interfaces/modalDialogButton';\r\nimport { CallHomePrivacyModalComponent } from '../call-home-privacy-modal/call-home-privacy-modal.component';\r\nimport { CallHomePrivacyModalLabels } from '../call-home-privacy-modal/call-home-privacy-modal.labels';\r\nimport { DialogModalComponent } from '../dialog-modal/dialog-modal.component';\r\nimport { AboutModalLabels } from './about-modal.labels';\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-about-modal',\r\n  templateUrl: './about-modal.component.html',\r\n  styleUrls: ['./about-modal.component.scss'],\r\n})\r\nexport class AboutModalComponent implements OnInit {\r\n  @Input() labels: AboutModalLabels;\r\n  @Input() callHomePrivacyLabels: CallHomePrivacyModalLabels;\r\n\r\n  @Input() openSourcesLink: string = '/LXCO-Legal-1.5.pdf';\r\n  @Input() aplicationUUID: string = 'E4DCFCFBD4BAECA4BFEA9583A9B96D08';\r\n  @Input() build: string = '152';\r\n  @Input() version: string = '1.2.3';\r\n  @Input() productLogo: string = 'assets/logos/LXCO-small_dcg_color.png';\r\n\r\n  @ViewChild('aboutModal', { static: true }) aboutModal: DialogModalComponent;\r\n  @ViewChild('eulaModal', { static: true }) eulaModal: DialogModalComponent;\r\n  @ViewChild(CallHomePrivacyModalComponent, { static: true })\r\n  privacyModalComponent: CallHomePrivacyModalComponent;\r\n\r\n  public eulaModalButtons: ModalDialogButton[];\r\n\r\n  constructor() {}\r\n\r\n  ngOnInit(): void {\r\n    this.eulaModalButtons = [\r\n      {\r\n        name: this.labels.eulaModal.close,\r\n        action: () => {\r\n          this.eulaModal.hideModal();\r\n        },\r\n        type: 'button',\r\n        classes: 'btn btn-primary',\r\n      },\r\n    ];\r\n  }\r\n\r\n  openAbout() {\r\n    this.aboutModal.openModal();\r\n  }\r\n\r\n  openEULA() {\r\n    this.eulaModal.openModal();\r\n  }\r\n}\r\n","<!-- about modal -->\r\n\r\n<ngx-xcng-dialog-modal\r\n  #aboutModal\r\n  [id]=\"'modalAbout'\"\r\n  [modalTitle]=\"labels.modalTitle\"\r\n  [class]=\"'modal-lg'\"\r\n>\r\n  <div id=\"aboutModalContent\">\r\n    <div id=\"logo-img\">\r\n      <img src=\"assets/logos/LenovoLogo2.png\" class=\"lenLogoText\" />\r\n      <img src=\"{{ productLogo }}\" class=\"lxcoLogoText\" />\r\n    </div>\r\n\r\n    <span> {{ labels.version }}: {{ version }} </span>\r\n    <span>{{ labels.build }}: {{ build }} </span>\r\n    <br />\r\n    <span> {{ labels.aplicationUUID }}: {{ aplicationUUID }} </span>\r\n    <br />\r\n\r\n    <span>\r\n      <a class=\"hyperlinked\" (click)=\"openEULA()\">{{ labels.eula }} </a>\r\n    </span>\r\n\r\n    <span>\r\n      <a\r\n        class=\"hyperlinked\"\r\n        href=\"{{ openSourcesLink }}\"\r\n        rel=\"noopener noreferrer\"\r\n        target=\"_blank\"\r\n        >{{ labels.openSourceLicenses }}\r\n      </a>\r\n    </span>\r\n\r\n    <span>\r\n      <a class=\"hyperlinked\" (click)=\"privacyModalComponent.openModal()\"\r\n        >{{ labels.privacyStatement }}\r\n      </a>\r\n    </span>\r\n\r\n    <br />\r\n\r\n    <span\r\n      >Licensed Materials - Property of Lenovo. <br />\r\n      © Copyright Lenovo and others 2020. All Rights Reserved.</span\r\n    >\r\n  </div>\r\n</ngx-xcng-dialog-modal>\r\n\r\n<!-- eula modal -->\r\n\r\n<ngx-xcng-dialog-modal\r\n  #eulaModal\r\n  id=\"eulaModalAbout\"\r\n  [modalTitle]=\"labels.eulaModal.modalTitle\"\r\n  [class]=\"'modal-lg'\"\r\n  class=\"black-text\"\r\n  [buttonArray]=\"eulaModalButtons\"\r\n>\r\n  <div id=\"licenseContainer\">\r\n    <ngx-xcng-eula></ngx-xcng-eula>\r\n  </div>\r\n</ngx-xcng-dialog-modal>\r\n\r\n<ngx-xcng-call-home-privacy-modal\r\n  [labels]=\"callHomePrivacyLabels\"\r\n></ngx-xcng-call-home-privacy-modal>\r\n","import { BrowserModule } from '@angular/platform-browser';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { CallHomePrivacyModalComponent } from './call-home-privacy-modal.component';\r\nimport { DialogModalModule } from '../dialog-modal/dialog-modal.module';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\n@NgModule({\r\n  declarations: [CallHomePrivacyModalComponent],\r\n  imports: [DialogModalModule, MatCheckboxModule, CommonModule, BrowserModule],\r\n  exports: [CallHomePrivacyModalComponent],\r\n})\r\nexport class CallHomePrivacyModalModule {}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { EulaComponent } from './eula.component';\r\n\r\n@NgModule({\r\n  declarations: [EulaComponent],\r\n  imports: [CommonModule],\r\n  exports: [EulaComponent],\r\n})\r\nexport class EulaModule {}\r\n","import { CallHomePrivacyModalModule } from './../call-home-privacy-modal/call-home-privacy-modal.module';\r\nimport { EulaModule } from './../eula/eula.module';\r\n\r\nimport { NgModule } from '@angular/core';\r\nimport { AboutModalComponent } from './about-modal.component';\r\nimport { CommonModule } from '@angular/common';\r\nimport { BrowserModule } from '@angular/platform-browser';\r\nimport { DialogModalModule } from '../dialog-modal/dialog-modal.module';\r\n\r\n@NgModule({\r\n  declarations: [AboutModalComponent],\r\n  imports: [\r\n    DialogModalModule,\r\n    CommonModule,\r\n    EulaModule,\r\n    BrowserModule,\r\n    CallHomePrivacyModalModule,\r\n  ],\r\n  exports: [AboutModalComponent],\r\n})\r\nexport class AboutModalModule {}\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n import { Component, Input, OnInit } from '@angular/core';\r\n import { Alert } from '../../interfaces/alert';\r\n \r\n @Component({\r\n   selector: 'ngx-xcng-mock-warning',\r\n   templateUrl: './mock-warning.component.html',\r\n   styleUrls: ['./mock-warning.component.scss'],\r\n })\r\n export class MockWarningComponent implements OnInit {\r\n   @Input() additionalText: string;\r\n \r\n   mockComponentAlert: Alert[];\r\n   constructor() {}\r\n \r\n   ngOnInit() {\r\n     this.additionalText = this.additionalText ? this.additionalText : '';\r\n     this.mockComponentAlert = [\r\n       {\r\n         text: '[WIP] This is a mock component and it should not be tested',\r\n         explanation:\r\n           'This story was designed only in terms of templates and contains only mock data. The actions are not bound to any backend functionality yet.' +\r\n           '\\n' +\r\n           this.additionalText,\r\n         type: 'danger',\r\n         dismissible: false,\r\n       },\r\n     ];\r\n   }\r\n }\r\n ","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n<ngx-xcng-inline-alerts [alerts]=\"mockComponentAlert\"></ngx-xcng-inline-alerts>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MockWarningComponent } from './mock-warning.component';\r\nimport { InlineAlertsModule } from '../inline-alerts/inline-alerts.module'\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    MockWarningComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    InlineAlertsModule\r\n  ],\r\n  exports: [MockWarningComponent]\r\n})\r\nexport class MockWarningModule { }\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\nimport { Component, OnInit, Input, AfterViewInit } from '@angular/core';\r\nimport { MobileService } from '../../services/mobileService/mobile-service.service';\r\ndeclare var $: any;\r\n\r\nexport class QuickAccessListItem {\r\n  /** Title for the shortcut */\r\n  title: string;\r\n  /** Id of the item for the shortcut to point towards. Make sure this is an actual element in the page */\r\n  referenceId: string;\r\n}\r\n\r\n@Component({\r\n  selector: 'ngx-xcng-quick-access-list',\r\n  templateUrl: './quick-access-list.component.html',\r\n  styleUrls: ['./quick-access-list.component.scss'],\r\n})\r\nexport class QuickAccessListComponent implements OnInit, AfterViewInit {\r\n  @Input() spacerId: string;\r\n  @Input() items: QuickAccessListItem[];\r\n  @Input() isPatternDetails: boolean = false;\r\n\r\n  constructor(protected mobileSvc: MobileService) {}\r\n\r\n  ngOnInit() {}\r\n\r\n  ngAfterViewInit(): void {\r\n    this.handleOnScroll();\r\n    this.activateListItemCorrespondingToItemIntoView(this.items);\r\n    this.modifySpacerHeight();\r\n    this.modifySpacerHeightOnResize();\r\n  }\r\n\r\n  scrollToItem(itemId: string) {\r\n    let element = document.getElementById(itemId);\r\n    if (!element) throw new Error('Cannot scroll to a ' + element + ' element');\r\n    document.getElementById(itemId).scrollIntoView();\r\n  }\r\n\r\n  scrollToTop() {\r\n    if (!document.getElementById(this.items[0].referenceId))\r\n      throw new Error(\r\n        'First item of list does not exist. Put something in place in order to be able to scroll to the top of the list.'\r\n      );\r\n    this.scrollToItem(this.items[0].referenceId);\r\n  }\r\n\r\n  handleOnScroll() {\r\n    if (!this.mobileSvc.isMobileMenu()) {\r\n      // if (!document.getElementsByClassName('content')[0])\r\n      //   throw new Error(\r\n      //     \"Cannot spy on scroll on the content element because it does not exist. Replace the id with the main content's wrapper id\"\r\n      //   );\r\n      (<any>document).onscroll = (\r\n        ev: Event\r\n      ) => {\r\n        this.removeActiveClassForListItems();\r\n        this.activateListItemCorrespondingToItemIntoView(this.items);\r\n      };\r\n    }\r\n  }\r\n\r\n  removeActiveClassForListItems() {\r\n    this.items.forEach((item) => {\r\n      let link = document.getElementById(item.referenceId + '-link');\r\n      if (link) link.classList.remove('scroll-link-active');\r\n    });\r\n  }\r\n\r\n  activateListItemCorrespondingToItemIntoView(items: QuickAccessListItem[]) {\r\n    if (!this.mobileSvc.isMobileMenu()) {\r\n      let maxVisibilityItemId = getMaxVisibility(\r\n        items.map((i) => {\r\n          return i.referenceId;\r\n        })\r\n      );\r\n      if (maxVisibilityItemId) {\r\n        let maxItem = items.find(\r\n          (item) => item.referenceId === maxVisibilityItemId\r\n        );\r\n        let index = items.indexOf(maxItem);\r\n        let quickAccessItem = document.getElementById(\r\n          items[index].referenceId + '-link'\r\n        );\r\n        if (quickAccessItem)\r\n          quickAccessItem.classList.add('scroll-link-active');\r\n      }\r\n    }\r\n  }\r\n\r\n  modifySpacerHeightOnResize() {\r\n    window.addEventListener('resize', () => {\r\n      this.modifySpacerHeight();\r\n      this.removeActiveClassForListItems();\r\n      this.activateListItemCorrespondingToItemIntoView(this.items);\r\n    });\r\n  }\r\n\r\n  modifySpacerHeight() {\r\n    if (document.getElementById(this.spacerId)) {\r\n      let lastButOneId;\r\n      let lastId;\r\n      if (this.isPatternDetails) {\r\n        lastButOneId = 'item-1';\r\n        lastId = 'item-2';\r\n      } else {\r\n        lastButOneId = this.items[this.items.length - 2].referenceId;\r\n        lastId = this.items[this.items.length - 1].referenceId;\r\n      }\r\n      let lastCardElement = $('#' + lastId + ' ' + 'div.card');\r\n      let lastButOneCardElement = $('#' + lastButOneId + ' ' + 'div.card');\r\n      if (!lastCardElement || !lastButOneCardElement)\r\n        throw new Error(\r\n          'All elements which are subjects for the quick access list must be divs with unique ids which contain a div with class card which holds the content (see server inventory page)'\r\n        );\r\n      let lastCardElementBottomMargin = lastCardElement\r\n        .css('marginBottom')\r\n        .toString()\r\n        .split('px')[0];\r\n      let lastCardElementBottomPadding = lastCardElement\r\n        .css('paddingBottom')\r\n        .toString()\r\n        .split('px')[0];\r\n      let lastCardElementTopMargin = lastCardElement\r\n        .css('marginTop')\r\n        .toString()\r\n        .split('px')[0];\r\n      let lastCardElementTopPadding = lastCardElement\r\n        .css('paddingTop')\r\n        .toString()\r\n        .split('px')[0];\r\n      let lastButOneCardElementBottomMargin = lastButOneCardElement\r\n        .css('marginBottom')\r\n        .toString()\r\n        .split('px')[0];\r\n      let lastButOneCardElementBottomPadding = lastButOneCardElement\r\n        .css('paddingBottom')\r\n        .toString()\r\n        .split('px')[0];\r\n      let lastButOneCardElementTopMargin = lastButOneCardElement\r\n        .css('marginTop')\r\n        .toString()\r\n        .split('px')[0];\r\n      let lastButOneCardElementTopPadding = lastButOneCardElement\r\n        .css('paddingTop')\r\n        .toString()\r\n        .split('px')[0];\r\n\r\n      document.getElementById(this.spacerId).style.height =\r\n        window.innerHeight -\r\n        document.getElementById(lastId).offsetHeight -\r\n        +lastCardElementBottomMargin -\r\n        +lastCardElementBottomPadding -\r\n        +lastCardElementTopMargin -\r\n        +lastCardElementTopPadding -\r\n        +lastButOneCardElementBottomMargin -\r\n        +lastButOneCardElementBottomPadding -\r\n        +lastButOneCardElementTopMargin -\r\n        +lastButOneCardElementTopPadding +\r\n        'px';\r\n    }\r\n  }\r\n}\r\n\r\nexport function getMaxVisibility(ids: string[]) {\r\n  let data: any[] = [];\r\n  ids.forEach((id) => data.push(calculateVisibilityForDiv(id)));\r\n  data = data.filter((n) => !isNaN(n));\r\n  let max = data.filter((n) => n >= 99)[0];\r\n  if (!max) max = Math.max(...data);\r\n  let indexOfMax = data.indexOf(max);\r\n  return ids[indexOfMax];\r\n}\r\n\r\nexport function calculateVisibilityForDiv(id: string) {\r\n  var div$ = $('#' + id);\r\n  if (div$ && div$.length) {\r\n    // throw new Error(\"The element with the id \" + id + \" does not exist and its height cannot be calculated. Please provide actual ids for the quick access list\");\r\n    var windowHeight = $(window).height(),\r\n      docScroll = $(document).scrollTop(),\r\n      divPosition = div$.offset().top,\r\n      divHeight = div$.height(),\r\n      hiddenBefore = docScroll - divPosition,\r\n      hiddenAfter = divPosition + divHeight - (docScroll + windowHeight);\r\n\r\n    if (\r\n      docScroll > divPosition + divHeight ||\r\n      divPosition > docScroll + windowHeight\r\n    )\r\n      return 0;\r\n    else {\r\n      var result = 100;\r\n      if (hiddenBefore > 0) result -= (hiddenBefore * 100) / divHeight;\r\n      if (hiddenAfter > 0) result -= (hiddenAfter * 100) / divHeight;\r\n      return result;\r\n    }\r\n  }\r\n  return 0;\r\n}\r\n","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n-------------------------------------------------------------------------------->\r\n\r\n<div class=\"card quick-access-list\" *ngIf=\"items && items.length\">\r\n  <div *ngIf=\"!isPatternDetails\" class=\"card-title-centered\">\r\n    <h5>{{ 'Quick Access' | translate }}</h5>\r\n  </div>\r\n  <ng-container *ngFor=\"let item of items\">\r\n    <div id=\"{{ item.referenceId }}-link\" (click)=\"scrollToItem(item.referenceId)\">\r\n      <div>\r\n        <div class=\"circle-icon\"></div>\r\n        <div class=\"vl\"></div>\r\n      </div>\r\n      <span>{{ item.title | translate }}</span>\r\n    </div>\r\n  </ng-container>\r\n\r\n  <div id=\"scrollTopContainer\">\r\n    <button class=\"btn go-to-top\">\r\n      <img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIAAAACACAIAAABMXPacAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA25pVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuMy1jMDExIDY2LjE0NTY2MSwgMjAxMi8wMi8wNi0xNDo1NjoyNyAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iIHhtbG5zOnN0UmVmPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VSZWYjIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iIHhtcE1NOk9yaWdpbmFsRG9jdW1lbnRJRD0ieG1wLmRpZDo0MTVjOThkZC1lZGU0LTNmNDUtYjhhNi00MmI4YzQ0YWNiN2MiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MzkyNUY4RTZDNDVFMTFFNzlDOTRFRUJDNTEwRDIxNDAiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MzkyNUY4RTVDNDVFMTFFNzlDOTRFRUJDNTEwRDIxNDAiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENTNiAoV2luZG93cykiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDpEM0QxQzQ4NTUxQzJFNzExOUU4NkM3RkI4QTc4MzFFOSIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDo0MTVjOThkZC1lZGU0LTNmNDUtYjhhNi00MmI4YzQ0YWNiN2MiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz4iPcfqAAACAklEQVR42uzdMU4CURCAYRk5hZWVnYkJ9trrCaystLX1KlZWnsADeABNTLwQVBYmrCgLb+bt94cYC6L75mNXeBqcLS6uDtSuMAIAAAQAgAAAEAAAAgBAAAAIAAABACAAALS75mN9ofe310kN7vzy2hngEiQAAAQAgABUbeZvQ50BAAQAgAAAEAAAAgBAAAAIAAABAJC6u9ub1a30EuZ9TP/p+aXoKg6Pjk+qT39xdrr6+PH5BaDZlaeuQT2Addf9ogbFAIZ/6lY0qASwyXOecgZlADZ/xlnLoAbAX5/vFzIoAPC/V1tVDLIDbPNat4RBaoDtdxryG+QFGGufJ7lBUoBxd9kyG2QE2MUeZ1qDdAC722HOaRDlpj+w8/zrpnTC3x8kOgM2nP7qtu5u9w+P34/0KudBlJv+9vdJdR5ET9OvaBCdTb+cQfQ3/VoG0eX0CxlEr9OvYhAdT7+EQfQ9/fwG0f30kxvEFKaf2SAmMv20BjGd6ec0yLIXtJ/p7/97ZQEYXvP+J5LneKL5mls9HpMcT7Rdc9urQYbjiYZrznAtbn488yZr/vFJc4OGx1PyPePWvU/1WO/n3PMlSAAACAAAAQAgAAAAGAEAAAIAQAAACAAAAQAgAAAEAIAAABCArvP/hJ0BAAQAgAAAEAAAAgBAAAAIAAABACAAAASg35YCDAD4S07VkDofJgAAAABJRU5ErkJggg==\" class=\"scroll-top-img\" \r\n      (click)=\"scrollToTop()\" title=\"{{ 'Go to Top' | translate }}\"/>\r\n    </button>\r\n  </div>\r\n</div>\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { QuickAccessListComponent } from './quick-access-list.component';\r\nimport { TranslateModule } from '@ngx-translate/core';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [QuickAccessListComponent],\r\n  imports: [\r\n    CommonModule,\r\n    TranslateModule.forRoot()\r\n  ],\r\n  exports: [QuickAccessListComponent]\r\n})\r\nexport class QuickAccessListModule { }","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n import { Component, OnInit, Input, ViewChildren, QueryList } from '@angular/core';\r\n import { PopoverDirective } from 'ngx-bootstrap/popover';\r\n import { LoadingDirective } from '../../directives/loading.directive';\r\n\r\n export interface SubLabel {\r\n   label: string;\r\n   count: number;\r\n }\r\n \r\n @Component({\r\n   selector: 'ngx-xcng-mini-card',\r\n   templateUrl: './mini-card.component.html',\r\n   styleUrls: ['./mini-card.component.scss'],\r\n })\r\n export class MiniCardComponent implements OnInit {\r\n   @ViewChildren(PopoverDirective) pop: QueryList<PopoverDirective>;\r\n \r\n   @Input() title: string;\r\n   @Input() cardCount: number;\r\n   @Input() cardLabel: string;\r\n   @Input() subLabels: SubLabel[];\r\n   /** Boolean property to be used by the loading directive, it is needed as input because it has to be placed on the card element */\r\n   @Input() loadingStatus: boolean;\r\n   @Input() notAvailable: boolean;\r\n   @Input() isHyperLinked?: boolean;\r\n   @Input() redirectTo?: Function;\r\n \r\n   ngOnInit() {}\r\n }\r\n ","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n  <div class=\"card mini-card\">\r\n    <h4 class=\"card-title-centered\">\r\n      {{ title }}\r\n    </h4>\r\n    <ng-container *ngIf=\"!loadingStatus && !notAvailable\">\r\n      <div class=\"row\">\r\n        <div class=\"col-sm-6 col-md-6 col-lg-6\">\r\n          <div class=\"miniCardMain\">\r\n            <div class=\"miniCardCount\">\r\n              <span *ngIf=\"!isHyperLinked || cardCount === 0\">\r\n                {{ cardCount === 0 ? cardCount : cardCount }}\r\n                <br />\r\n                {{ cardLabel }}\r\n              </span>\r\n  \r\n              <a *ngIf=\"isHyperLinked && cardCount !== 0\" class=\"hyperlinked\" (click)=\"redirectTo(cardLabel)\">\r\n                {{ cardCount === 0 ? cardCount : cardCount }}\r\n                <br />\r\n                {{ cardLabel }}\r\n              </a>\r\n            </div>\r\n          </div>\r\n        </div>\r\n        <div class=\"col-sm-6 col-md-6 col-lg-6\">\r\n          <div *ngFor=\"let val of subLabels\">\r\n            <div class=\"miniCardSubLabel\">\r\n              <span class=\"count\" *ngIf=\"!isHyperLinked || val.count === 0\">\r\n                {{ val.count }}\r\n                {{ val.label }}\r\n              </span>\r\n  \r\n              <a class=\"hyperlinked\" *ngIf=\"isHyperLinked && val.count !== 0\" (click)=\"redirectTo(val.label)\">\r\n                {{ val.count }}\r\n                {{ val.label }}\r\n              </a>\r\n            </div>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </ng-container>\r\n  \r\n    <ng-container *ngIf=\"notAvailable\">\r\n      <div class=\"centerContent\">Not Available</div>\r\n    </ng-container>\r\n  </div>\r\n  ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { MiniCardComponent } from './mini-card.component';\r\nimport { PopoverModule } from 'ngx-bootstrap/popover';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    MiniCardComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    PopoverModule\r\n  ],\r\n  exports: [\r\n    MiniCardComponent\r\n  ]\r\n})\r\nexport class MiniCardModule { }\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n import { Component, Input } from '@angular/core';\r\n import { Output, EventEmitter } from '@angular/core';\r\n import DeviceInformationCardLabels from './device-information-card-labels';\r\n\r\n @Component({\r\n   selector: 'device-information',\r\n   templateUrl: './device-information-card.component.html',\r\n   styleUrls: ['./device-information-card.component.scss'],\r\n })\r\n export class DeviceInformationCardComponent {\r\n   @Input() deviceId: string;\r\n   @Input() switchType: string;\r\n   @Input() accurateHealth: boolean;\r\n   @Input() showHostname = true;\r\n   @Input() showPowerState = true;\r\n   @Input() labels: DeviceInformationCardLabels;\r\n   @Input() deviceInformation;\r\n\r\n   @Output() redirectToManager = new EventEmitter();\r\n   @Output() redirectIPv4 = new EventEmitter();\r\n   @Output() redirectIPv6 = new EventEmitter();\r\n   @Output() redirectIPv4Manager = new EventEmitter();\r\n   @Output() redirectIPv6Manager = new EventEmitter();\r\n\r\n\r\n\r\n   loading = true;\r\n \r\n   status: string;\r\n   managerIPV4Adresses: string[] = [];\r\n   managerIPV6Adresses: string[] = [];\r\n   serialNumber: string;\r\n\r\n   deviceInfoCardIconConfig: any = {\r\n    severity: {\r\n      'xc-critical': ['Critical'],\r\n      'xc-warning': ['Warning'],\r\n      'xc-normal': ['Normal'],\r\n      'xc-unknown': ['Unknown'],\r\n    },\r\n    power: {\r\n      'xc-power-on': ['On'],\r\n      'xc-power-off': ['Off']\r\n    }\r\n   }\r\n\r\n \r\n   constructor() {\r\n   }\r\n \r\n   ngOnChanges() {\r\n      this.checkStatusManager();\r\n      this.checkIpStatusManager();\r\n      this.checkSerialNumber();\r\n   }\r\n \r\n\r\n \r\n   externalRedirectToIpv4Address(ip: string, path?: string) {\r\n    let redirectObject = {\r\n      ip,\r\n      path\r\n    }\r\n    this.redirectIPv4.emit(redirectObject);\r\n   }\r\n \r\n   externalRedirectToIpv6Address(ip: string, path?: string) {\r\n    let redirectObject = {\r\n      ip,\r\n      path\r\n    }\r\n    this.redirectIPv6.emit(redirectObject);\r\n   }\r\n \r\n   externalRedirectToManager() {\r\n     if (this.status) {\r\n       this.redirectToManager.emit();\r\n     }\r\n   }\r\n \r\n   externalIpv4RedirectToManager(ip: string, inContextHref?: string) {\r\n     let redirectObject = {\r\n       ip,\r\n       context: this.deviceInformation.manager.inContextHref\r\n     }\r\n     this.redirectIPv4Manager.emit(redirectObject);\r\n   }\r\n \r\n   externalIpv6RedirectToManager(ip: string, inContextHref?: string) {\r\n    let redirectObject = {\r\n      ip,\r\n      context: this.deviceInformation.manager.inContextHref\r\n    }\r\n    this.redirectIPv6Manager.emit(redirectObject);  \r\n  }\r\n \r\n   checkStatusManager() {\r\n     if (\r\n       this.deviceInformation &&\r\n       this.deviceInformation.manager &&\r\n       this.deviceInformation.manager.hostname &&\r\n       this.deviceInformation.manager.domainName\r\n     ) {\r\n       this.status = this.deviceInformation.manager.hostname + '.' + this.deviceInformation.manager.domainName;\r\n     } else {\r\n       if (\r\n         this.deviceInformation &&\r\n         this.deviceInformation.manager &&\r\n         this.deviceInformation.manager.hostname &&\r\n         !this.deviceInformation.manager.domainName\r\n       ) {\r\n         this.status = this.deviceInformation.manager.hostname;\r\n       }\r\n     }\r\n     return this.status;\r\n   }\r\n \r\n   checkIpStatusManager() {\r\n     if (this.deviceInformation && this.deviceInformation.manager) {\r\n       if (this.deviceInformation.manager.ipv4Addresses.length > 0) {\r\n         this.managerIPV4Adresses = this.deviceInformation.manager.ipv4Addresses.slice(0);\r\n       }\r\n       if (this.deviceInformation.manager.ipv6Addresses.length > 0) {\r\n         this.managerIPV6Adresses = this.deviceInformation.manager.ipv6Addresses.slice(0);\r\n       }\r\n     }\r\n     return [...this.managerIPV4Adresses, ...this.managerIPV6Adresses];\r\n   }\r\n \r\n   checkSerialNumber() {\r\n     if (\r\n       this.switchType &&\r\n       this.switchType.toLowerCase() === 'switch' &&\r\n       this.deviceInformation &&\r\n       this.deviceInformation.entitleSerialNumber &&\r\n       this.deviceInformation.entitleSerialNumber !== null\r\n     ) {\r\n       this.serialNumber = this.deviceInformation.entitleSerialNumber;\r\n     } else {\r\n       this.serialNumber = this.deviceInformation.serialNumber;\r\n     }\r\n   }\r\n }\r\n ","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n\r\n  <div class=\"card\">\r\n    <div class=\"card-title-centered\">\r\n      <h5>{{ labels.title }}</h5>\r\n    </div>\r\n    <ng-content></ng-content>\r\n    <div *ngIf=\"deviceInformation\" class=\"d-flex flex-column add-margin\">\r\n      <!-- Only for proper display, can be removed -->\r\n      <div class=\"p-1\"></div>\r\n      <div class=\"p-1\"></div>\r\n      <div class=\"p-1\"></div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.product }}</b>\r\n        </div>\r\n        <div class=\"p-1\">\r\n          {{ deviceInformation.productName }}\r\n        </div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.userDefinedName }}</b>\r\n        </div>\r\n        <div class=\"p-1\">{{ deviceInformation.userDefinedName }}</div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.healthStatus }}</b>\r\n        </div>\r\n        <div class=\"p-1\">{{ deviceInformation.healthStatus }}</div>\r\n        <div class=\"p-1\">\r\n          <ngx-len-icon\r\n            [classConfig]=\"deviceInfoCardIconConfig\"\r\n            [iconType]=\"'severity'\"\r\n            [value]=\"deviceInformation.healthStatus\"\r\n          ></ngx-len-icon>\r\n        </div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\" *ngIf=\"showPowerState\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.powerState }}</b>\r\n        </div>\r\n        <div class=\"p-1\">{{ deviceInformation.powerStatus }}</div>\r\n        <div class=\"p-1\">\r\n          <ngx-len-icon\r\n            [classConfig]=\"deviceInfoCardIconConfig\"\r\n            [iconType]=\"'power'\"\r\n            [value]=\"deviceInformation.powerStatus\"\r\n          ></ngx-len-icon>        \r\n        </div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\" *ngIf=\"showHostname\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.hostName }}</b>\r\n        </div>\r\n        <div class=\"p-1\">{{ deviceInformation.hostname }}</div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.rackName }}</b>\r\n        </div>\r\n        <div class=\"p-1\">\r\n          {{ deviceInformation.location ? (deviceInformation.location.rack) : (labels.notAvailable)}}\r\n          / {{ labels.unit }}\r\n          {{ deviceInformation.location ? (deviceInformation.location.lowestRackUnit) : (labels.notAvailable) }}\r\n        </div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.ipAddress }}</b>\r\n        </div>\r\n        <div\r\n          class=\"ipContainer\"\r\n          *ngIf=\"\r\n            (deviceInformation.ipv4Addresses && deviceInformation.ipv4Addresses.length) ||\r\n              (deviceInformation.ipv6Addresses && deviceInformation.ipv6Addresses.length);\r\n            else noIps\r\n          \"\r\n          style=\"height: 100px; overflow-y: auto\"\r\n        >\r\n          <div class=\"d-flex flex-column\">\r\n            <ng-container *ngFor=\"let ipAddress of deviceInformation.ipv4Addresses\">\r\n              <a class=\"p-1 hyperlinked\" (click)=\"externalRedirectToIpv4Address(ipAddress)\">{{ ipAddress }}</a>\r\n            </ng-container>\r\n            <ng-container *ngFor=\"let ipAddress of deviceInformation.ipv6Addresses\">\r\n              <a class=\"p-1 hyperlinked\" (click)=\"externalRedirectToIpv6Address(ipAddress)\">{{ ipAddress  }}</a>\r\n            </ng-container>\r\n          </div>\r\n        </div>\r\n  \r\n        <ng-template #noIps>\r\n          <div class=\"p-1\">\r\n            {{ labels.notAvailable }}\r\n          </div>\r\n        </ng-template>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b> {{ labels.machineType }} </b>\r\n        </div>\r\n        <div class=\"p-1\">{{ deviceInformation.machineType }}</div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.machineModel }}</b>\r\n        </div>\r\n        <div class=\"p-1\">{{ deviceInformation.model }}</div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.serialNumber }}</b>\r\n        </div>\r\n        <div class=\"p-1\">{{ serialNumber }}</div>\r\n      </div>\r\n  \r\n      <div>\r\n        <span class=\"p-1\">\r\n          <b>{{ labels.manager }}</b>\r\n        </span>\r\n        <span *ngIf=\"status\">\r\n          <a class=\"p-1 hyperlinked\" (click)=\"externalRedirectToManager()\">\r\n            {{ status }} <span *ngIf=\"managerIPV4Adresses.length > 0 || managerIPV6Adresses.length > 0\">,</span></a\r\n          >\r\n        </span>\r\n        <span *ngFor=\"let ipAddress of managerIPV4Adresses; let lastItem = last\">\r\n          <a class=\"p-1 hyperlinked\" (click)=\"externalIpv4RedirectToManager(ipAddress)\"\r\n            >{{ ipAddress }} <span *ngIf=\"!lastItem || managerIPV6Adresses.length >= 0\">,</span></a\r\n          >\r\n        </span>\r\n        <span *ngFor=\"let ipAddress of managerIPV6Adresses; let lastItem = last\">\r\n          <a class=\"p-1 hyperlinked\" (click)=\"externalIpv6RedirectToManager(ipAddress)\">{{ ipAddress }} <span *ngIf=\"!lastItem\">,</span> </a>\r\n        </span>\r\n  \r\n        <div class=\"p-1\" *ngIf=\"!status && !managerIPV4Adresses && !managerIPV6Adresses\">{{ labels.notAvailable }}</div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.configurationStatus }}</b>\r\n        </div>\r\n        <div class=\"p-1\">{{ deviceInformation.patterncomplianceStatus }}</div>\r\n      </div>\r\n  \r\n      <div class=\"d-flex flex-row\">\r\n        <div class=\"p-1\">\r\n          <b>{{ labels.serverPattern }}</b>\r\n        </div>\r\n        <div class=\"p-1\">\r\n          {{ deviceInformation.patternId === null ? (labels.noAssignement) : (deviceInformation.patternName ) }}\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { DeviceInformationCardComponent } from './device-information-card.component';\r\nimport { IconsModule } from '../icons/icons.module';\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    DeviceInformationCardComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    IconsModule\r\n  ],\r\n  exports: [\r\n    DeviceInformationCardComponent\r\n  ]\r\n})\r\nexport class DeviceInformationCardModule { }\r\n","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n/** This is the default request timeout.\r\n *\r\n * To be used together with subscribe like so:\r\n *\r\n * `service.getItems().pipe(timeout(DEFAULT_REQUEST_TIMEOUT)).subscribe(result => { console.log(result) }, error => { console.log(error) });`\r\n *\r\n * If the request is not solved in the default timeout, force to throw an error and handle it on the error branch.\r\n *\r\n * The error will look like this: `Error: Timeout has occurred`\r\n */\r\n export var DEFAULT_REQUEST_TIMEOUT = 15000;\r\n\r\n export var LANGUAGES = [\r\n   'en-US',\r\n   'zh', // Chinese (chinese simplified is zh-hans)\r\n   'zh-hant', // Chinese traditional\r\n   'fr', // french\r\n   'de', // german\r\n   'it', // italian\r\n   'ja', // japanese\r\n   'ko', // korean\r\n   'pt', // portuguese\r\n   'ru', // russian\r\n   'es', // spanish\r\n   'th', // thai\r\n ];\r\n \r\n // The same font family should be used in all graphs\r\n export var DEFAULT_FONT_FAMILY = 'Calibri, Arial, Helvetica, sans-serif';\r\n \r\n // minimum required LXCA version for SMARTData\r\n export var SMARTDATA_LXCA_MIN_VER = 330;\r\n ","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n import { DEFAULT_FONT_FAMILY } from './constants';\r\n\r\n export const lenovo_colors = [\r\n   '#E1140A', // red\r\n   '#3E8DDD', // blue\r\n   '#6AC346', // green\r\n   '#8246AF', // purple\r\n   '#FEE600', // yellow\r\n   '#F04187', // pink\r\n   '#C4BEB6', // lightGray\r\n   '#333F48', // darkGray\r\n   '#FF6A00', // orange\r\n   '#46C8E1', // lightBlue\r\n   '#6F7170', // mediumGray\r\n ];\r\n \r\n export var pieRadius = ['60%', '70%'];\r\n \r\n export var borderWidth = 2;\r\n export var borderColor = 'white';\r\n \r\n export var unlabeledSeriesEntry = {\r\n   name: 'Unlabeled',\r\n   hoverAnimation: false,\r\n   hoverOffset: 0,\r\n   tooltip: {\r\n     trigger: 'none',\r\n   },\r\n   cursor: 'auto',\r\n   itemStyle: {\r\n     color: 'rgba(230, 230, 230, 1)',\r\n     borderColor: borderColor,\r\n     borderWidth: borderWidth,\r\n     emphasis: {\r\n       color: 'rgba(230, 230, 230, 1)',\r\n     },\r\n   },\r\n };\r\n \r\n export var dcgBlueColorCode = 'rgba(00, 121, 186, 1)';\r\n export var dcgBlueItemStyle = {\r\n   color: dcgBlueColorCode,\r\n   borderColor: borderColor,\r\n   borderWidth: borderWidth,\r\n };\r\n \r\n export var dcgGrayColorCode = 'rgba(51, 63, 72, 1)';\r\n export var dcgGrayItemStyle = {\r\n   color: dcgGrayColorCode,\r\n   borderColor: borderColor,\r\n   borderWidth: borderWidth,\r\n };\r\n \r\n export var defaultRedColorCode = 'rgba(255, 20, 10, 1)';\r\n export var defaultRedItemStyle = {\r\n   color: defaultRedColorCode,\r\n   borderColor: borderColor,\r\n   borderWidth: borderWidth,\r\n };\r\n \r\n export var defaultOrangeColorCode = 'rgba(255, 184, 0, 1)';\r\n export var defaultOrangeItemStyle = {\r\n   color: defaultOrangeColorCode,\r\n   borderColor: borderColor,\r\n   borderWidth: borderWidth,\r\n };\r\n \r\n export var lightDcgGrayColorCode = 'rgba(105, 129, 150, 1)';\r\n export var lightDcgGrayItemStyle = {\r\n   color: lightDcgGrayColorCode,\r\n   borderColor: borderColor,\r\n   borderWidth: borderWidth,\r\n };\r\n \r\n export var defaultShadowColor = 'rgba(170, 170, 170, 0.1)';\r\n \r\n /**\r\n  * In case of languages like Russian, the subtext of the doughnut which represents the title is exceeding the bounds of the doughnut chart.\r\n  * For those languages, modify the text size from the initial value to 14 or 15 and if the text contains spaces, modify it and add newlines.\r\n  *\r\n  * This function can be used for all doughnut type graphs in order to match their styling\r\n  * @param options The graph option's\r\n  */\r\n export function modifySubtextAccordingToLanguage(options: any) {\r\n   let language = localStorage.getItem('language');\r\n   let languagesCausingTextOverlapping = ['ru', 'th', 'fr', 'ja', 'es', 'it'];\r\n \r\n   if (options.title) {\r\n     if (!options.title.subtextStyle) options.title.subtextStyle = {};\r\n     if (!options.title.textStyle) options.title.textStyle = {};\r\n     options.title.subtextStyle.verticalAlign = 'middle';\r\n     options.title.subtextStyle.align = 'center';\r\n     options.title.textStyle.verticalAlign = 'middle';\r\n     options.title.textStyle.align = 'center';\r\n     // This is the default font family from variables.scss\r\n     options.title.subtextStyle.fontFamily = DEFAULT_FONT_FAMILY;\r\n     options.title.textStyle.fontFamily = DEFAULT_FONT_FAMILY;\r\n \r\n     let addNewline = function (text, options) {\r\n       let newlines = 0;\r\n       if (text.trim().includes(' ')) {\r\n         newlines = text.split(' ').length;\r\n         text = text.split(' ').join('\\n');\r\n       }\r\n       if (newlines) {\r\n         options.title.padding -= 5 * newlines;\r\n       }\r\n       return text;\r\n     };\r\n \r\n     if (languagesCausingTextOverlapping.includes(language)) {\r\n       options.title.subtextStyle.fontSize = language === 'ru' ? '13' : '15';\r\n       options.title.textStyle.fontSize = language === 'ru' ? '13' : '15';\r\n       if (options.title.subtext) {\r\n         options.title.subtext = addNewline(options.title.subtext, options);\r\n       }\r\n       if (options.title.text) {\r\n         options.title.text = addNewline(options.title.text, options);\r\n       }\r\n     }\r\n \r\n     if (language === 'ja' || language === 'th') {\r\n       options.title.textStyle.fontSize = '12';\r\n       options.title.subtextStyle.fontSize = '12';\r\n     }\r\n   }\r\n }\r\n \r\n export function setMaxValueForBarChartBasedOnSeries(chartOptions) {\r\n   if (chartOptions && chartOptions.series) {\r\n     let series = chartOptions.series;\r\n     if (series) {\r\n       // Set max value for yAxis in order to not show decimal numbers\r\n       let max = 0;\r\n       let maxValues = [];\r\n       series.forEach((s) => {\r\n         if (chartOptions.legend && chartOptions.legend.selected) {\r\n           if (chartOptions.legend.selected[s.key]) {\r\n             if (s.data) maxValues.push(Math.max(...s.data.filter((v) => !isNaN(v))));\r\n           }\r\n         } else {\r\n           if (s.data) maxValues.push(Math.max(...s.data.filter((v) => !isNaN(v))));\r\n         }\r\n       });\r\n       max = Math.max(...maxValues);\r\n \r\n       if (max < 5) max = 5;\r\n \r\n       let getNearestMultipleOfTen = function (toRound) {\r\n         if (toRound % 10 == 0) return toRound;\r\n         return 10 - (toRound % 10) + toRound;\r\n       };\r\n \r\n       // If max is 33 and the n-1 last label on the yAxis is 30 then 33 label won't be displayed due to the lack of space\r\n       // Set the max value to a specific value greater than initial max (33) in order to leave space to display the last label\r\n       if (max > 5) max = getNearestMultipleOfTen(max);\r\n \r\n       chartOptions.yAxis.max = max;\r\n       return max;\r\n     }\r\n   }\r\n   return null;\r\n }\r\n ","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n import {\r\n    pieRadius,\r\n    dcgBlueItemStyle,\r\n    defaultOrangeItemStyle,\r\n    defaultRedItemStyle,\r\n    unlabeledSeriesEntry,\r\n    dcgGrayItemStyle,\r\n    lightDcgGrayItemStyle,\r\n    lenovo_colors,\r\n    defaultShadowColor,\r\n    defaultOrangeColorCode,\r\n    dcgBlueColorCode,\r\n    defaultRedColorCode,\r\n    dcgGrayColorCode,\r\n    lightDcgGrayColorCode,\r\n    borderColor,\r\n    borderWidth,\r\n  } from '../../classes/echartsConstants';\r\n  \r\n  var pieCenteredTitleSetting = {\r\n    textStyle: {\r\n      fontSize: 15,\r\n      lineHeight: 20,\r\n      align: 'center',\r\n    },\r\n    padding: 75,\r\n    left: 'center',\r\n    top: 'middle',\r\n    subtextStyle: {\r\n      color: '#333F48',\r\n      lineHeight: 20,\r\n      fontSize: 15,\r\n    },\r\n    z: 0,\r\n    itemGap: 0,\r\n  };\r\n  \r\n  var pieLabelSetting = {\r\n    normal: {\r\n      show: false,\r\n      position: 'center',\r\n    },\r\n    emphasis: {\r\n      show: false,\r\n      width: 1,\r\n    },\r\n  };\r\n  \r\n  var pieLabelLineSetting = {\r\n    normal: {\r\n      show: false,\r\n    },\r\n  };\r\n  \r\n  var pieToolTipSetting = {\r\n    trigger: 'item',\r\n    confine: 'true',\r\n  };\r\n  \r\n  // Doughnut chart options\r\n  export function getSeverityDoughnutPieChartOptions(labels: any) {\r\n    return {\r\n      tooltip: pieToolTipSetting,\r\n      title: pieCenteredTitleSetting,\r\n      series: [\r\n        {\r\n          type: 'pie',\r\n          radius: pieRadius,\r\n          avoidLabelOverlap: false,\r\n          label: pieLabelSetting,\r\n          labelLine: pieLabelLineSetting,\r\n          data: [\r\n            {\r\n              name: labels.informational,\r\n              key: 'Informational',\r\n              itemStyle: dcgBlueItemStyle,\r\n            },\r\n            {\r\n              name: labels.warning,\r\n              key: 'Warning',\r\n              itemStyle: defaultOrangeItemStyle,\r\n            },\r\n            {\r\n              name: labels.critical,\r\n              key: 'Critical',\r\n              itemStyle: defaultRedItemStyle,\r\n            },\r\n            unlabeledSeriesEntry,\r\n          ],\r\n        },\r\n      ],\r\n    };\r\n  }\r\n  \r\n  export function getGeneratorTypePieChartOptions(labels) {\r\n    return {\r\n      tooltip: pieToolTipSetting,\r\n      title: pieCenteredTitleSetting,\r\n      series: [\r\n        {\r\n          type: 'pie',\r\n          radius: pieRadius,\r\n          avoidLabelOverlap: false,\r\n          label: pieLabelSetting,\r\n          labelLine: pieLabelLineSetting,\r\n          data: [\r\n            {\r\n              name: labels.analytics,\r\n              key: 'Analytics',\r\n              itemStyle: dcgBlueItemStyle,\r\n            },\r\n            {\r\n              name: labels.device,\r\n              key: 'Device',\r\n              itemStyle: dcgGrayItemStyle,\r\n            },\r\n            {\r\n              name: labels.management,\r\n              key: 'Management',\r\n              itemStyle: lightDcgGrayItemStyle,\r\n            },\r\n            unlabeledSeriesEntry,\r\n          ],\r\n        },\r\n      ],\r\n    };\r\n  }\r\n  \r\n  export function getServicePieChartOptions(labels: any) {\r\n    return {\r\n      tooltip: pieToolTipSetting,\r\n      title: pieCenteredTitleSetting,\r\n      series: [\r\n        {\r\n          type: 'pie',\r\n          radius: pieRadius,\r\n          avoidLabelOverlap: false,\r\n          label: pieLabelSetting,\r\n          labelLine: pieLabelLineSetting,\r\n          data: [\r\n            {\r\n              name: labels.none,\r\n              key: 'None',\r\n              itemStyle: dcgBlueItemStyle,\r\n            },\r\n            {\r\n              name: labels.user,\r\n              key: 'User',\r\n              itemStyle: lightDcgGrayItemStyle,\r\n            },\r\n            {\r\n              name: labels.serviceable,\r\n              key: 'Serviceable',\r\n              itemStyle: dcgGrayItemStyle,\r\n            },\r\n            unlabeledSeriesEntry,\r\n          ],\r\n        },\r\n      ],\r\n    };\r\n  }\r\n  \r\n  export function getSystemTypePieChartOptions(properties: { type: string; typeStr: string }[]) {\r\n    let data = [];\r\n    properties.forEach((property) => {\r\n      data.push({\r\n        name: property.typeStr,\r\n        key: property.type,\r\n        itemStyle: {\r\n          borderColor: borderColor,\r\n          borderWidth: borderWidth,\r\n          color: lenovo_colors[properties.indexOf(property)],\r\n        },\r\n      });\r\n    });\r\n    data.push(unlabeledSeriesEntry);\r\n  \r\n    return {\r\n      tooltip: pieToolTipSetting,\r\n      title: pieCenteredTitleSetting,\r\n      series: [\r\n        {\r\n          type: 'pie',\r\n          radius: pieRadius,\r\n          avoidLabelOverlap: false,\r\n          label: pieLabelSetting,\r\n          labelLine: pieLabelLineSetting,\r\n          data: data,\r\n        },\r\n      ],\r\n    };\r\n  }\r\n  \r\n  // History chart options\r\n  \r\n  var historyXAxisSetting = {\r\n    type: 'category',\r\n    nameLocation: 'middle',\r\n    nameGap: 25,\r\n  };\r\n  \r\n  var historyYAxisSetting = {\r\n    type: 'value',\r\n    name: 'Number',\r\n    nameLocation: 'end',\r\n    nameGap: 20,\r\n  };\r\n  \r\n  var historyTooltipAxisPointerSetting = {\r\n    animation: true,\r\n    type: 'shadow',\r\n    shadowStyle: {\r\n      color: defaultShadowColor,\r\n    },\r\n  };\r\n  \r\n  var lastEmittedFormatterFunctionDataIndex: number;\r\n  \r\n  export function getSeverityHistoryChartOptions(formatterFunction: Function, labels: any) {\r\n    return {\r\n      xAxis: historyXAxisSetting,\r\n      yAxis: historyYAxisSetting,\r\n      tooltip: {\r\n        trigger: 'axis',\r\n        axisPointer: historyTooltipAxisPointerSetting,\r\n        formatter: (params) => {\r\n          if (lastEmittedFormatterFunctionDataIndex === undefined) lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          if (lastEmittedFormatterFunctionDataIndex !== params[0].dataIndex) {\r\n            formatterFunction(params[0].dataIndex);\r\n            lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          }\r\n        },\r\n      },\r\n      legend: {\r\n        bottom: 0,\r\n        type: 'scroll',\r\n        itemGap: 20,\r\n        selected: {\r\n          Critical: true,\r\n          Warning: true,\r\n          Informational: true,\r\n        },\r\n      },\r\n      grid: {\r\n        left: '20%',\r\n      },\r\n      series: [\r\n        {\r\n          name: labels.warning,\r\n          key: 'Warning',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: defaultOrangeColorCode,\r\n          },\r\n        },\r\n        {\r\n          name: labels.informational,\r\n          key: 'Informational',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: dcgBlueColorCode,\r\n          },\r\n        },\r\n        {\r\n          name: labels.critical,\r\n          key: 'Critical',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: defaultRedColorCode,\r\n          },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n  \r\n  export function getGeneratorTypeHistoryChartOptions(formatterFunction: Function, labels: any) {\r\n    return {\r\n      xAxis: historyXAxisSetting,\r\n      yAxis: historyYAxisSetting,\r\n      tooltip: {\r\n        trigger: 'axis',\r\n        axisPointer: historyTooltipAxisPointerSetting,\r\n        formatter: (params) => {\r\n          if (lastEmittedFormatterFunctionDataIndex === undefined) lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          if (lastEmittedFormatterFunctionDataIndex !== params[0].dataIndex) {\r\n            formatterFunction(params[0].dataIndex);\r\n            lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          }\r\n        },\r\n      },\r\n      series: [\r\n        {\r\n          name: labels.analytics,\r\n          key: 'Analytics',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: dcgBlueColorCode,\r\n          },\r\n        },\r\n        {\r\n          name: labels.device,\r\n          key: 'Device',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: dcgGrayColorCode,\r\n          },\r\n        },\r\n        {\r\n          name: labels.management,\r\n          key: 'Management',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: lightDcgGrayColorCode,\r\n          },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n  \r\n  export function getSystemTypeHistoryChartOptions(properties: { type: string; typeStr: string }[], formatterFunction: Function) {\r\n    let series = [];\r\n    properties.forEach((property) => {\r\n      series.push({\r\n        name: property.typeStr,\r\n        key: property.type,\r\n        type: 'line',\r\n        smooth: true,\r\n        itemStyle: {\r\n          color: lenovo_colors[properties.indexOf(property)],\r\n        },\r\n      });\r\n    });\r\n  \r\n    return {\r\n      xAxis: historyXAxisSetting,\r\n      yAxis: historyYAxisSetting,\r\n      tooltip: {\r\n        trigger: 'axis',\r\n        axisPointer: historyTooltipAxisPointerSetting,\r\n        formatter: (params) => {\r\n          if (lastEmittedFormatterFunctionDataIndex === undefined) lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          if (lastEmittedFormatterFunctionDataIndex !== params[0].dataIndex) {\r\n            formatterFunction(params[0].dataIndex);\r\n            lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          }\r\n        },\r\n      },\r\n      series: series,\r\n    };\r\n  }\r\n  \r\n  export function getServiceHistoryChartOptions(formatterFunction: Function, labels: any) {\r\n    return {\r\n      xAxis: historyXAxisSetting,\r\n      yAxis: historyYAxisSetting,\r\n      tooltip: {\r\n        trigger: 'axis',\r\n        axisPointer: historyTooltipAxisPointerSetting,\r\n        formatter: (params) => {\r\n          if (lastEmittedFormatterFunctionDataIndex === undefined) lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          if (lastEmittedFormatterFunctionDataIndex !== params[0].dataIndex) {\r\n            formatterFunction(params[0].dataIndex);\r\n            lastEmittedFormatterFunctionDataIndex = params[0].dataIndex;\r\n          }\r\n        },\r\n      },\r\n      series: [\r\n        {\r\n          name: labels.none,\r\n          key: 'None',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: dcgBlueColorCode,\r\n          },\r\n        },\r\n        {\r\n          name: labels.user,\r\n          key: 'User',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: lightDcgGrayColorCode,\r\n          },\r\n        },\r\n        {\r\n          name: labels.serviceable,\r\n          key: 'Serviceable',\r\n          type: 'line',\r\n          smooth: true,\r\n          itemStyle: {\r\n            color: dcgGrayColorCode,\r\n          },\r\n        },\r\n      ],\r\n    };\r\n  }\r\n  ","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n export function convertDateToUTC(date: Date) {\r\n    return new Date(\r\n      date.getUTCFullYear(),\r\n      date.getUTCMonth(),\r\n      date.getUTCDate(),\r\n      date.getUTCHours(),\r\n      date.getUTCMinutes(),\r\n      date.getUTCSeconds()\r\n    );\r\n  }\r\n  ","/*******************************************************************************\r\n * Copyright (c) Lenovo 2020.\r\n *\r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n ******************************************************************************/\r\n\r\n import { Component, Input, ChangeDetectorRef, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\r\n import {\r\n   getSeverityDoughnutPieChartOptions,\r\n   getGeneratorTypePieChartOptions,\r\n   getServicePieChartOptions,\r\n   getSystemTypePieChartOptions,\r\n   getSeverityHistoryChartOptions,\r\n   getServiceHistoryChartOptions,\r\n   getSystemTypeHistoryChartOptions,\r\n   getGeneratorTypeHistoryChartOptions,\r\n } from './alerts-analytics-charts-options';\r\n import { SortingAndFilteringParamsBuilder } from '../../classes/sortingFilteringUtils/sortingFilteringUtils';\r\n import { setMaxValueForBarChartBasedOnSeries } from '../../classes/echartsConstants';\r\n import { ExtendedDatePipe } from '../../pipes/extended-date/extended-date.pipe';\r\n import { convertDateToUTC } from '../../classes/datesHelper';\r\n import { Subscription } from 'rxjs';\r\nimport AlertAnalyticsCardLabels from './alert-analytics-card-labels';\r\n \r\n /** Variable used in case of no items analyzed in order to display the chart completely gray */\r\n const UNLABELED_NO = 100;\r\n \r\n @Component({\r\n   selector: 'alerts-analytics-card',\r\n   templateUrl: './alerts-analytics-card.component.html',\r\n   styleUrls: ['./alerts-analytics-card.component.scss'],\r\n })\r\n export class AlertsAnalyticsCardComponent implements OnChanges {\r\n   /** Data received from server */\r\n   data: any;\r\n \r\n   historyChartOptions;\r\n   doughnutChartOptions;\r\n   historyChartInstance: any;\r\n   doughnutChartInstance: any;\r\n   analyticsLicense;\r\n \r\n   dates: Date[] = [];\r\n   selectedDayStatistics: { day: string; states: { type: string; count: number; statisticsCount: number; typeStr: string }[] };\r\n \r\n   loading: boolean = true;\r\n \r\n   noDaysPossibleValues: number[] = [1, 2, 3, 4, 5, 6, 7];\r\n   selectedNoOfDays: number = 7;\r\n   subscription: Subscription;\r\n\r\n   analyticsCardIconConfig: any = {\r\n    severity: {\r\n      'xc-critical': ['Critical'],\r\n      'xc-warning': ['Warning'],\r\n      'xc-normal': ['Normal'],\r\n      'xc-unknown': ['Unknown'],\r\n    }\r\n  }\r\n \r\n   @Input() labels: AlertAnalyticsCardLabels;\r\n   @Input() chartData: any;\r\n   @Output() noData: EventEmitter<boolean> = new EventEmitter();\r\n   @Output() onStatisticsTypeChange: EventEmitter<any> = new EventEmitter();\r\n   @Output() onNoDaysChange: EventEmitter<any> = new EventEmitter();\r\n\r\n   STATISTICS_TYPES: { value: 'severity' | 'sourceType' | 'service' | 'resourceType'; label: string }[]; \r\n   selectedStatisticsType: { value: 'severity' | 'sourceType' | 'service' | 'resourceType'; label: string }\r\n   constructor(\r\n     private cdr: ChangeDetectorRef,\r\n     private extendedDatePipe: ExtendedDatePipe\r\n   ) {\r\n    console.log(this.labels);\r\n   }\r\n \r\n   ngOnChanges(changes: SimpleChanges) {\r\n    console.log(changes); \r\n    if(this.selectedStatisticsType && this.STATISTICS_TYPES) {\r\n      this.getStatistics();\r\n    }  \r\n\r\n   }\r\n\r\n   ngOnInit(){\r\n    this.STATISTICS_TYPES = [\r\n      { value: 'severity', label: this.labels.severity },\r\n      { value: 'sourceType', label: this.labels.sourceType },\r\n      { value: 'resourceType', label: this.labels.resourceType },\r\n      { value: 'service', label: this.labels.serviceability },\r\n    ];\r\n    this.selectedStatisticsType= {\r\n      value: 'severity',\r\n      label: this.labels.severity,\r\n    };\r\n\r\n    this.initializeData();\r\n   }\r\n \r\n   getAnalyticsLicense() {\r\n     this.analyticsLicense = localStorage.getItem('analyticsLicense');\r\n     return this.analyticsLicense;\r\n   }\r\n \r\n   getStatistics() {\r\n      if (this.chartData && this.chartData.total > 0) {\r\n        this.data = this.chartData;\r\n        let criteria = ['Critical', 'Warning', 'Informational'];\r\n        console.log(this.data);\r\n        this.data.states.sort((a, b) => {\r\n          return criteria.indexOf(a.type) < criteria.indexOf(b.type) ? -1 : 1;\r\n        });\r\n        this.renderLayout();\r\n        this.onChartMouseOver({ dataIndex: this.chartData.history.length - 1 });\r\n        this.data.oldestTimestamp = convertDateToUTC(new Date(this.data.oldestTimestamp));\r\n        this.noData.emit(false);\r\n      } else {\r\n        this.noData.emit(true);\r\n      }\r\n      this.loading = false;\r\n   }\r\n \r\n   initializeData() {\r\n     let currentDate = new Date();\r\n     this.data = {\r\n       total: 0,\r\n       oldestTimestamp: currentDate.toString(),\r\n       states: [],\r\n       history: [{ timestamp: currentDate.toString(), states: [], statistics: [], total: 0 }],\r\n     };\r\n     this.selectedDayStatistics = {\r\n       day: this.extendedDatePipe.transform(currentDate, 'shortWithoutYear'),\r\n       states: [],\r\n     };\r\n     this.getStatistics();\r\n\r\n     this.historyChartOptions.yAxis.name = this.labels.noOfAlerts;\r\n     this.historyChartOptions.xAxis.name = this.labels.time;\r\n\r\n   }\r\n \r\n   onHistoryChartInit(ec: any) {\r\n     // Initialize the echarts instance\r\n     this.historyChartInstance = ec;\r\n   }\r\n \r\n   onDoughnutChartInit(ec: any) {\r\n     // Initialize the echarts instance\r\n     this.doughnutChartInstance = ec;\r\n   }\r\n \r\n   /**\r\n    * Display the details for the hovered day on the right side of the card\r\n    */\r\n   onChartMouseOver(ev: any) {\r\n     let historyEntryForSelectedDay = this.data.history.find((historyEntry) => historyEntry.timestamp === this.dates[ev.dataIndex]);\r\n     this.selectedDayStatistics.day = this.extendedDatePipe.transform(this.dates[ev.dataIndex], 'shortWithoutYear');\r\n \r\n     switch (this.selectedStatisticsType.value) {\r\n       case 'service':\r\n         this.getDayAggregatedInformation(this.getPropertiesFromStates(), historyEntryForSelectedDay);\r\n         break;\r\n       case 'sourceType':\r\n         this.getDayAggregatedInformation(this.getPropertiesFromStates(), historyEntryForSelectedDay);\r\n         break;\r\n       case 'severity':\r\n         this.getDayAggregatedInformation(this.getPropertiesFromStates(), historyEntryForSelectedDay);\r\n         break;\r\n       case 'resourceType':\r\n         this.getDayAggregatedInformation(this.getPropertiesFromStates(), historyEntryForSelectedDay);\r\n         break;\r\n     }\r\n   }\r\n \r\n   getDayAggregatedInformation(properties: { type: string; typeStr: string }[], historyEntry: any) {\r\n     this.selectedDayStatistics.states = [];\r\n     properties.forEach((prop) => {\r\n       let stateEquivalent = historyEntry?.states?.find((s) => s.type === prop.type);\r\n       let statisticsStateEquivalent = historyEntry?.statistics.states.find((s) => s.type === prop.type);\r\n       this.selectedDayStatistics.states.push({\r\n         type: prop.type,\r\n         typeStr: prop.typeStr,\r\n         count: stateEquivalent ? stateEquivalent.count : 0,\r\n         statisticsCount: statisticsStateEquivalent ? statisticsStateEquivalent.count : 0,\r\n       });\r\n     });\r\n     this.cdr.detectChanges();\r\n   }\r\n \r\n   setSelectedNoDays(noDays: number) {\r\n     this.loading = true;\r\n     this.selectedNoOfDays = noDays;\r\n     this.onNoDaysChange.emit(this.selectedNoOfDays);\r\n   }\r\n \r\n   setStatisticsType(statisticsType: { value: 'severity' | 'sourceType' | 'service' | 'resourceType'; label: string }) {\r\n     this.loading = true;\r\n     this.selectedStatisticsType = statisticsType;\r\n     this.onStatisticsTypeChange.emit(this.selectedStatisticsType);\r\n   }\r\n \r\n   getPropertiesFromStates(): { type: string; typeStr: string }[] {\r\n     let properties: { type: string; typeStr: string }[] = [];\r\n     this.data.states.forEach((state) => properties.push({ type: state.type, typeStr: state.typeStr }));\r\n     return properties;\r\n   }\r\n \r\n   renderLayout() {\r\n     this.createCharts();\r\n     if (this.historyChartInstance) this.historyChartInstance.setOption(this.historyChartOptions);\r\n     if (this.doughnutChartInstance) this.doughnutChartInstance.setOption(this.doughnutChartOptions);\r\n   }\r\n \r\n   createCharts() {\r\n     switch (this.selectedStatisticsType.value) {\r\n       case 'severity':\r\n         this.configureDoughnutChartSeries(this.getPropertiesFromStates(), 3, getSeverityDoughnutPieChartOptions(this.labels));\r\n         this.createHistoryChart(\r\n           this.getPropertiesFromStates(),\r\n           getSeverityHistoryChartOptions(this.tooltipFormatterFunction.bind(this), this.labels)\r\n         );\r\n \r\n         let severitiesAvailability = {\r\n           Critical: false,\r\n           Warning: false,\r\n           Informational: false,\r\n         };\r\n         this.data.history.forEach((historyEntry) => {\r\n           if (historyEntry.states && historyEntry.states.length > 0) {\r\n             historyEntry.states.forEach((state) => {\r\n               if (state.type == 'Critical') {\r\n                 severitiesAvailability['Critical'] = true;\r\n               }\r\n               if (state.type == 'Warning') {\r\n                 severitiesAvailability['Warning'] = true;\r\n               }\r\n               if (state.type == 'Informational') {\r\n                 severitiesAvailability['Informational'] = true;\r\n               }\r\n             });\r\n           }\r\n           this.historyChartOptions.legend.selected = severitiesAvailability;\r\n         });\r\n         break;\r\n       case 'service':\r\n         this.configureDoughnutChartSeries(this.getPropertiesFromStates(), 3, getServicePieChartOptions(this.labels));\r\n         this.createHistoryChart(\r\n           this.getPropertiesFromStates(),\r\n           getServiceHistoryChartOptions(this.tooltipFormatterFunction.bind(this), this.labels)\r\n         );\r\n         break;\r\n       case 'resourceType':\r\n         this.configureDoughnutChartSeries(\r\n           this.getPropertiesFromStates(),\r\n           this.getPropertiesFromStates().length ? this.getPropertiesFromStates().length : 0,\r\n           getSystemTypePieChartOptions(this.getPropertiesFromStates())\r\n         );\r\n         this.createHistoryChart(\r\n           this.getPropertiesFromStates(),\r\n           getSystemTypeHistoryChartOptions(this.getPropertiesFromStates(), this.tooltipFormatterFunction.bind(this))\r\n         );\r\n         break;\r\n       case 'sourceType':\r\n         this.configureDoughnutChartSeries(this.getPropertiesFromStates(), 3, getGeneratorTypePieChartOptions(this.labels));\r\n         this.createHistoryChart(\r\n           this.getPropertiesFromStates(),\r\n           getGeneratorTypeHistoryChartOptions(this.tooltipFormatterFunction.bind(this), this.labels)\r\n         );\r\n         break;\r\n     }\r\n   }\r\n \r\n   tooltipFormatterFunction(index: number) {\r\n     this.onChartMouseOver({ dataIndex: index });\r\n   }\r\n \r\n   /**\r\n    * Configure the chart data series based on the statistics type\r\n    * @param properties array of properties which matches the states type properties\r\n    *\r\n    * severity = `['Critical', 'Warning', 'Informational']`\r\n    *\r\n    * service = `['None', 'User', 'Serviceable']`\r\n    *\r\n    * resourceType = `['Chassis', 'Server', 'LXCA', 'LXCO', 'Storage', 'Switch', 'Rack PDU']`\r\n    *\r\n    * sourceType = `['Analytics', 'Device', 'Management']`\r\n    *\r\n    *\r\n    * @param unlabeledSeriesEntryIndex in order to emphasize the gray area in the chart in case of unknown values the unlabeled series index is used\r\n    * @param doughnutChartOptions chart options containing title options and colour options for each property (see `doughnut-charts-options.ts`)\r\n    */\r\n   configureDoughnutChartSeries(\r\n     properties: { type: string; typeStr: string }[],\r\n     unlabeledSeriesEntryIndex: number,\r\n     doughnutChartOptions: any\r\n   ) {\r\n     this.doughnutChartOptions = doughnutChartOptions;\r\n     this.doughnutChartOptions.title.text = this.data.total;\r\n     this.doughnutChartOptions.title.subtext =\r\n       this.doughnutChartOptions.title.text !== 1 ? this.labels.hdrAlerts : this.labels.hdrAlert;\r\n \r\n     if (!this.data.states.find((s) => s.count > 0))\r\n       this.doughnutChartOptions.series[0].data[unlabeledSeriesEntryIndex].value = UNLABELED_NO;\r\n     else this.doughnutChartOptions.series[0].data[unlabeledSeriesEntryIndex].value = 0;\r\n \r\n     // Sum to be extracted from total in case the total is greater than the Critical, Warning and Informational alerts\r\n     let sum: number = 0;\r\n \r\n     properties.forEach((el) => {\r\n       // Find the series entry which is already defined by name and color in the doughnut chart options (for example Warning which has the orange color)\r\n       let seriesEntry = this.doughnutChartOptions.series[0].data.find((d) => d.key === el.type);\r\n       if (seriesEntry) {\r\n         // Find the state in the retrieved data which matches the type Warning, get the count property and based on that set the value to be used in the chart\r\n         let state = this.data.states.find((s) => s.type === el.type);\r\n         state ? (seriesEntry.value = state.count) : (seriesEntry.value = 0);\r\n         state ? (sum += state.count) : (sum += 0);\r\n       }\r\n     });\r\n \r\n     if (sum < this.data.total) this.doughnutChartOptions.series[0].data[unlabeledSeriesEntryIndex].value = this.data.total - sum;\r\n   }\r\n \r\n   /**\r\n    * Create the history chart data series and options based on the statistics type\r\n    * @param properties array of properties which matches the states type properties\r\n    *\r\n    * severity = `['Critical', 'Warning', 'Informational']`\r\n    *\r\n    * service = `['None', 'User', 'Serviceable']`\r\n    *\r\n    * resourceType = `['Chassis', 'Server', 'LXCA', 'LXCO', 'Storage', 'Switch']`\r\n    *\r\n    * sourceType = `['Analytics', 'Device', 'Management']`\r\n    *\r\n    */\r\n   createHistoryChart(properties: { type: string; typeStr: string }[], chartOptions: any) {\r\n     // xAxis days\r\n     let days: string[] = [];\r\n     this.dates = [];\r\n    console.log(this.data);\r\n     this.data.history.forEach((historyEntry) => {\r\n       historyEntry.timestamp = historyEntry.timestamp.slice(0, -1); // This is already converted to local timezone, remove the 'Z' in isoString in order to not convert twice\r\n       let date = new Date(historyEntry.timestamp);\r\n       this.dates.push(historyEntry.timestamp);\r\n       days.push(this.extendedDatePipe.transform(date, 'shortWithoutYear'));\r\n       properties.forEach((prop) => {\r\n         // State retrieved from server (states array)\r\n         let correspondingState = historyEntry.states.find((s) => s.type === prop.type);\r\n         // Corresponding chart series (see `doughnut-charts-options.ts`)\r\n \r\n         let chartSeriesForState = chartOptions.series.find((h) => h.key === prop.type);\r\n         if (!chartSeriesForState.data) chartSeriesForState.data = [];\r\n         // Create the array of data for the timeline chart\r\n         chartSeriesForState.data.push(correspondingState ? correspondingState.count : 0);\r\n       });\r\n     });\r\n \r\n     chartOptions.xAxis.data = days;\r\n     this.historyChartOptions = chartOptions;\r\n     setMaxValueForBarChartBasedOnSeries(this.historyChartOptions);\r\n   }\r\n }\r\n ","<!--------------------------------------------------------------------------------\r\n * Copyright (c) Lenovo 2020.\r\n * \r\n *  LIMITED AND RESTRICTED RIGHTS NOTICE: If data or software is delivered\r\n *  pursuant a General Services Administration (GSA) contract, use, reproduction, or\r\n *  disclosure is subject to restrictions set forth in Contract No. GS-35F-05925.\r\n  -------------------------------------------------------------------------------->\r\n  <div class=\"card no-bottom-border\">\r\n    <div class=\"card-header\">\r\n      <h4 class=\"card-title-centered\">{{ labels.alertAnalytics }}</h4>\r\n    </div>\r\n  \r\n    <div class=\"row\">\r\n      <div class=\"header-dropdown\">\r\n        <span>{{ labels.analyseBy }}</span>\r\n        <div class=\"btn-group\">\r\n          <button\r\n            class=\"btn btn-secondary btn-sm dropdown-toggle rounded-toggle-button\"\r\n            type=\"button\"\r\n            id=\"analyzeSelector\"\r\n            data-toggle=\"dropdown\"\r\n            aria-haspopup=\"true\"\r\n            aria-expanded=\"false\"\r\n          >\r\n            <span>{{ selectedStatisticsType.label }}</span>\r\n          </button>\r\n          <div class=\"dropdown-menu\">\r\n            <button\r\n              id=\"{{ statisticsType ? statisticsType.value + 'Option' : '' }}\"\r\n              type=\"button\"\r\n              class=\"dropdown-item\"\r\n              *ngFor=\"let statisticsType of STATISTICS_TYPES\"\r\n              (click)=\"setStatisticsType(statisticsType)\"\r\n            >\r\n              {{ statisticsType.label }}\r\n            </button>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  \r\n    <div class=\"row\">\r\n      <div class=\"col-sm-9 col-md-9 col-lg-9 col-xl-2\">\r\n        <!-- Doughnut chart -->\r\n        <div\r\n          id=\"alertsAnalyticsDoughnutChart\"\r\n          echarts\r\n          *ngIf=\"doughnutChartOptions\"\r\n          [options]=\"doughnutChartOptions\"\r\n          style=\"height: 200px;\"\r\n          (chartInit)=\"onDoughnutChartInit($event)\"\r\n        ></div>\r\n      </div>\r\n      <div class=\"col-sm-3 col-md-3 col-lg-3 col-xl-2 doughnutStatesText\">\r\n        <div class=\"mb-4 ml-4\">\r\n          <!-- Doughnut chart metadata -->\r\n          <div class=\"row\" *ngFor=\"let state of data.states\">\r\n            <span class=\"state-alerts\">\r\n              <b>{{ state.count }} </b>\r\n              {{ state.typeStr }}\r\n            </span>\r\n            <ngx-len-icon\r\n            *ngIf=\"selectedStatisticsType.value === 'severity'\"\r\n            [classConfig]=\"analyticsCardIconConfig\"\r\n            [iconType]=\"'severity'\"\r\n            [value]=\"selectedStatisticsType.value\"\r\n            ></ngx-len-icon>          \r\n          </div>\r\n          <div class=\"row\">\r\n            <b>{{ (labels.oldest) + ': ' }} {{ data.oldestTimestamp }}</b>\r\n          </div>\r\n        </div>\r\n      </div>\r\n      <div class=\"col-sm-9 col-md-9 col-lg-9 col-xl-5\">\r\n        <div class=\"btn-group history-chart-dropdown\">\r\n          <button\r\n            class=\"btn btn-secondary btn-sm dropdown-toggle rounded-toggle-button\"\r\n            type=\"button\"\r\n            id=\"daysSelector\"\r\n            data-toggle=\"dropdown\"\r\n            aria-haspopup=\"true\"\r\n            aria-expanded=\"false\"\r\n          >\r\n            <span\r\n              >{{ labels.last }} {{ selectedNoOfDays }}\r\n              {{ selectedNoOfDays > 1 ? labels.days : labels.day }}</span\r\n            >\r\n          </button>\r\n          <div class=\"dropdown-menu\">\r\n            <button\r\n              id=\"lastDayOption{{ noDay ? '-' + noDay : '' }}\"\r\n              type=\"button\"\r\n              class=\"dropdown-item\"\r\n              *ngFor=\"let noDay of noDaysPossibleValues\"\r\n              (click)=\"setSelectedNoDays(noDay)\"\r\n            >\r\n              {{ labels.last }}\r\n              {{ noDay }} {{ noDay > 1 ? labels.days : labels.day }}\r\n            </button>\r\n          </div>\r\n        </div>\r\n        <!-- History chart -->\r\n        <div\r\n          echarts\r\n          id=\"alertsAnalyticsHistoryChart\"\r\n          [options]=\"historyChartOptions\"\r\n          id=\"alerts-history\"\r\n          style=\"height: 250px;\"\r\n          (chartInit)=\"onHistoryChartInit($event)\"\r\n          (chartMouseOver)=\"onChartMouseOver($event)\"\r\n        ></div>\r\n      </div>\r\n      <div *ngIf=\"selectedDayStatistics.states.length\" class=\"col-sm-3 col-md-3 col-lg-3 col-xl-3 dayStatesText\">\r\n        <div class=\"mb-4 ml-4\">\r\n          <!-- Status -->\r\n          <h6>\r\n            <b>{{ labels.statusOn }}</b> {{ selectedDayStatistics.day }}\r\n          </h6>\r\n  \r\n          <div *ngFor=\"let state of selectedDayStatistics.states\">\r\n            <span [ngClass]=\"{ green: state.statisticsCount <= 0, red: state.statisticsCount > 0 }\">\r\n              <!-- ({{ state.statisticsCount < 0 ? -state.statisticsCount : state.statisticsCount}}) -->\r\n              <span *ngIf=\"state.statisticsCount < 0\">({{ '-' + state.statisticsCount }})</span>\r\n              <span *ngIf=\"state.statisticsCount > 0\">({{ '+' + state.statisticsCount }})</span>\r\n              <span *ngIf=\"state.statisticsCount == 0\">({{ state.statisticsCount }})</span>\r\n            </span>\r\n            <span [class]=\"state.type\">\r\n              {{ state.count }} -\r\n              {{ state.typeStr }}\r\n            </span>\r\n            <ngx-len-icon\r\n            *ngIf=\"selectedStatisticsType.value === 'severity'\"\r\n            [classConfig]=\"analyticsCardIconConfig\"\r\n            [iconType]=\"'severity'\"\r\n            [value]=\"selectedStatisticsType.value\"\r\n          ></ngx-len-icon>\r\n          </div>\r\n        </div>\r\n      </div>\r\n    </div>\r\n  </div>\r\n  ","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { AlertsAnalyticsCardComponent } from './alerts-analytics-card.component';\r\nimport { NgxEchartsModule } from 'ngx-echarts';\r\nimport * as echarts from 'echarts';\r\nimport { IconsModule } from '../icons/icons.module';\r\n\r\n\r\n\r\n@NgModule({\r\n  declarations: [\r\n    AlertsAnalyticsCardComponent\r\n  ],\r\n  imports: [\r\n    CommonModule,\r\n    IconsModule,\r\n    NgxEchartsModule.forRoot({ echarts: { init: echarts.init } }),\r\n  ],\r\n  exports: [\r\n    AlertsAnalyticsCardComponent\r\n  ]\r\n})\r\nexport class AlertAnalyticsCardModule { }\r\n","/*\r\n * Public API Surface of ngx-len-xcng-component-library\r\n */\r\n\r\nexport * from './lib/components/material-bootstrap-test/material-bootstrap-test.component';\r\nexport * from './lib/components/material-bootstrap-test/material-bootstrap-test.module';\r\n\r\nexport * from './lib/interfaces/alert';\r\nexport * from './lib/interfaces/modalDialogButton';\r\n\r\nexport * from './lib/directives/loading.directive';\r\n\r\nexport * from './lib/classes/sortingFilteringUtils/sortingFilteringUtils';\r\n\r\nexport * from './lib/components/inline-alerts/inline-alerts.component';\r\nexport * from './lib/components/inline-alerts/inline-alerts.module';\r\n\r\nexport * from './lib/components/dialog-modal/dialog-modal.component';\r\nexport * from './lib/components/dialog-modal/dialog-modal.module';\r\n\r\nexport * from './lib/components/icons/icons.component';\r\nexport * from './lib/components/icons/icons.module';\r\n\r\nexport * from './lib/components/table-dropdown/table-dropdown.component';\r\nexport * from './lib/components/table-toolbar/table-toolbar.component';\r\nexport * from './lib/components/table-toolbar/table-toolbar-xcng.module';\r\n\r\nexport * from './lib/components/ngx-datatable/ngx-datatable.component';\r\nexport * from './lib/components/ngx-treetable/ngx-treetable.component';\r\nexport * from './lib/components/ngx-datatable/ngx-datatable-xcng.module';\r\n\r\nexport * from './lib/components/breadcrumb-menu/breadcrumb-menu.component';\r\nexport * from './lib/components/breadcrumb-menu/breadcrumb-menu.module';\r\n\r\nexport * from './lib/components/alerts-table/alerts-table.component';\r\nexport * from './lib/components/alerts-table/alerts-table.module';\r\n\r\nexport * from './lib/pipes/extended-date/extended-date.pipe';\r\nexport * from './lib/pipes/not-available/not-available.pipe';\r\nexport * from './lib/pipes/pipes.module';\r\n\r\nexport * from './lib/components/about-modal/about-modal.component';\r\nexport * from './lib/components/about-modal/about-modal.module';\r\nexport * from './lib/components/about-modal/about-modal.labels';\r\n\r\nexport * from './lib/components/eula/eula.component';\r\nexport * from './lib/components/eula/eula.module';\r\n\r\nexport * from './lib/components/mock-warning/mock-warning.component';\r\nexport * from './lib/components/mock-warning/mock-warning.module';\r\n\r\nexport * from './lib/components/quick-access-list/quick-access-list.component';\r\nexport * from './lib/components/quick-access-list/quick-access-list.module';\r\n\r\nexport * from './lib/components/call-home-privacy-modal/call-home-privacy-modal.component';\r\nexport * from './lib/components/call-home-privacy-modal/call-home-privacy-modal.module';\r\n\r\nexport * from './lib/components/mini-card/mini-card.component';\r\nexport * from './lib/components/mini-card/mini-card.module';\r\n\r\nexport * from './lib/components/device-information-card/device-information-card.component';\r\nexport * from './lib/components/device-information-card/device-information-card.module';\r\n\r\nexport * from './lib/components/alerts-analytics-card/alerts-analytics-card.component';\r\nexport * from './lib/components/alerts-analytics-card/alerts-analytics-card.module';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i3","i1.TableFilteringConfigurationsService","i2.CalendarLocaleService","i3.LocalStorageService","i4","i6.TableDropdownComponent","i8","i10.IconsComponent","i14","i15","i18","i2.LocalStorageService","i3.DialogModalComponent","i5.TableToolbarComponent","i7","i9.LoadingDirective","i11.NotAvailablePipe","i2.MobileService","i1.AlertsService","i2.NgxDatatableComponent","i1.DialogModalComponent","i2","i2.EulaComponent","i3.CallHomePrivacyModalComponent","i1.InlineAlertsComponent","i1.MobileService","i1.IconsComponent","i1.ExtendedDatePipe","i2.IconsComponent"],"mappings":"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"}