{"version":3,"file":"c8y-ngx-components-operations-status-filter.mjs","sources":["../../operations/status-filter/status-filter.component.ts","../../operations/status-filter/status-filter.component.html","../../operations/status-filter/status-filter.module.ts","../../operations/status-filter/c8y-ngx-components-operations-status-filter.ts"],"sourcesContent":["import { coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Component, EventEmitter, forwardRef, HostBinding, Input, Output } from '@angular/core';\nimport {\n  ProductExperienceEvent,\n  ProductExperienceEventSource,\n  PRODUCT_EXPERIENCE_EVENT_SOURCE\n} from '@c8y/ngx-components';\nimport { ACTIONS_OPERATIONS } from '@c8y/ngx-components/operations/product-experience';\nimport {\n  OperationStatusOptionsMapShared,\n  OperationStatusOption\n} from '@c8y/ngx-components/operations/shared';\n\n@Component({\n  selector: 'c8y-status-filter',\n  templateUrl: './status-filter.component.html',\n  providers: [\n    {\n      provide: PRODUCT_EXPERIENCE_EVENT_SOURCE,\n      useExisting: forwardRef(() => StatusFilterComponent)\n    }\n  ]\n})\nexport class StatusFilterComponent implements ProductExperienceEventSource {\n  ACTIONS = ACTIONS_OPERATIONS;\n  productExperienceEvent: ProductExperienceEvent;\n  statusOptions: Array<{ selected: boolean; option: OperationStatusOption }> = [];\n\n  /** List of filter options to be displayed */\n  @Input() set options(options: OperationStatusOptionsMapShared) {\n    this.statusOptions = (Object.values(options) || []).map(option => ({\n      selected: false,\n      option\n    }));\n  }\n\n  /**\n   * Allows multiple options to be active simultaneosly.\n   */\n  @Input('multiple') set _multiple(multiple: boolean) {\n    this.multiple = coerceBooleanProperty(multiple);\n  }\n\n  /** Display the filter as a small button group */\n  @Input('small') set _small(small: boolean) {\n    this.small = coerceBooleanProperty(small);\n  }\n\n  @HostBinding('class.btn-group-sm') get displaySmall() {\n    return this.small;\n  }\n\n  @Output() onFilterChanged: EventEmitter<OperationStatusOption[]> = new EventEmitter();\n\n  isAllButtonSelected = true;\n\n  private multiple: boolean;\n  private small: boolean;\n\n  changeFilter(option: { selected: boolean; option: OperationStatusOption }) {\n    this.isAllButtonSelected = false;\n    let emitNeeded = false;\n\n    if (this.multiple) {\n      option.selected = !option.selected;\n      emitNeeded = true;\n    } else if (!option.selected) {\n      option.selected = true;\n      this.statusOptions.filter(op => op !== option).forEach(op => (op.selected = false));\n      emitNeeded = true;\n    }\n\n    if (emitNeeded) {\n      this.emitSelectedOptions();\n    }\n  }\n\n  removeFilter() {\n    this.isAllButtonSelected = true;\n    this.statusOptions.forEach(op => (op.selected = false));\n\n    this.emitSelectedOptions();\n  }\n\n  /**\n   * Allows the filter to be initalliy displayed with some preset filters.\n   *\n   * @param filters An `StatusOption` array defining filter options to be preset.\n   * @param emit  (optional) If `true` component will emit `onFilterChanged` event.\n   */\n  preset(filters: OperationStatusOption[], emit = true) {\n    let firstSelected = false;\n\n    this.statusOptions.forEach(option => (option.selected = false));\n\n    this.statusOptions\n      .filter(option => (filters || []).map(o => o.label).includes(option.option.label))\n      .filter(() => {\n        // only first option passed will be set in single selection mode\n        const include: boolean = this.multiple || !firstSelected;\n        if (include) {\n          firstSelected = true;\n        }\n\n        return include;\n      })\n      .forEach(option => (option.selected = true));\n\n    this.isAllButtonSelected = !(filters && filters.length);\n\n    if (emit) {\n      this.emitSelectedOptions();\n    }\n  }\n\n  reset() {\n    this.removeFilter();\n  }\n\n  activeFilters(): OperationStatusOption[] {\n    return this.statusOptions.filter(option => option.selected).map(option => option.option);\n  }\n\n  isFilterApplied(): boolean {\n    return this.statusOptions.some(option => option.selected);\n  }\n\n  private emitSelectedOptions() {\n    this.onFilterChanged.emit(\n      this.statusOptions.filter(option => option.selected).map(option => option.option)\n    );\n  }\n}\n","<div dropdown placement=\"bottom left\" class=\"dropdown c8y-child-assets-selector\">\n  <button\n    class=\"btn dropdown-toggle d-flex a-i-center c8y-dropdown\"\n    type=\"button\"\n    title=\"{{ 'Status filter' | translate }}\"\n    dropdownToggle\n  >\n    <span *ngFor=\"let option of statusOptions\" class=\"d-contents\">\n      <span class=\"text-truncate\" *ngIf=\"option.selected\">\n        <i [c8yIcon]=\"option.option.icon\" [ngClass]=\"option.option.styleClass\"></i>\n        <span class=\"m-l-4\">{{ option.option.label | translate }}</span>\n      </span>\n    </span>\n    <span class=\"text-truncate\" *ngIf=\"isAllButtonSelected\">\n      <i c8yIcon=\"c8y-energy\" class=\"m-r-4 text-info\"></i>\n      {{ 'All statuses' | translate }}\n    </span>\n  </button>\n  <ul\n    id=\"dropdown-status-filter\"\n    *dropdownMenu\n    class=\"dropdown-menu\"\n    role=\"menu\"\n    aria-labelledby=\"status-filter\"\n  >\n    <li *ngFor=\"let option of statusOptions\" [ngClass]=\"{ active: option.selected }\">\n      <button\n        type=\"button\"\n        [title]=\"option.option.label | translate\"\n        (click)=\"changeFilter(option)\"\n        c8yProductExperience\n        inherit\n        [actionData]=\"{\n          action: ACTIONS.FILTER,\n          filterBy: 'status',\n          filterValue: option.option.label\n        }\"\n      >\n        <i [c8yIcon]=\"option.option.icon\" [ngClass]=\"option.option.styleClass\"></i>\n        <span class=\"m-l-4\">{{ option.option.label | translate }}</span>\n      </button>\n    </li>\n    <li [ngClass]=\"{ active: isAllButtonSelected }\">\n      <button\n        type=\"button\"\n        title=\"{{ 'All statuses' | translate }}\"\n        (click)=\"removeFilter()\"\n        c8yProductExperience\n        inherit\n        [actionData]=\"{\n          action: ACTIONS.FILTER,\n          filterBy: 'status'\n        }\"\n      >\n        <i c8yIcon=\"c8y-energy\" class=\"m-r-4 text-info\"></i>\n        {{ 'All statuses' | translate }}\n      </button>\n    </li>\n  </ul>\n</div>\n","import { NgModule } from '@angular/core';\nimport { TooltipModule } from 'ngx-bootstrap/tooltip';\nimport { BsDropdownModule } from 'ngx-bootstrap/dropdown';\nimport { CoreModule } from '@c8y/ngx-components';\nimport { StatusFilterComponent } from './status-filter.component';\n\n/**\n * This module provides a component for selecting status filter.\n */\n@NgModule({\n  imports: [CoreModule, TooltipModule, BsDropdownModule],\n  declarations: [StatusFilterComponent],\n  exports: [StatusFilterComponent]\n})\nexport class StatusFilterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;MAuBa,qBAAqB,CAAA;AAVlC,IAAA,WAAA,GAAA;QAWE,IAAO,CAAA,OAAA,GAAG,kBAAkB,CAAC;QAE7B,IAAa,CAAA,aAAA,GAAgE,EAAE,CAAC;AA0BtE,QAAA,IAAA,CAAA,eAAe,GAA0C,IAAI,YAAY,EAAE,CAAC;QAEtF,IAAmB,CAAA,mBAAA,GAAG,IAAI,CAAC;AA8E5B,KAAA;;IAvGC,IAAa,OAAO,CAAC,OAAwC,EAAA;QAC3D,IAAI,CAAC,aAAa,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,MAAM,KAAK;AACjE,YAAA,QAAQ,EAAE,KAAK;YACf,MAAM;AACP,SAAA,CAAC,CAAC,CAAC;KACL;AAED;;AAEG;IACH,IAAuB,SAAS,CAAC,QAAiB,EAAA;AAChD,QAAA,IAAI,CAAC,QAAQ,GAAG,qBAAqB,CAAC,QAAQ,CAAC,CAAC;KACjD;;IAGD,IAAoB,MAAM,CAAC,KAAc,EAAA;AACvC,QAAA,IAAI,CAAC,KAAK,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;KAC3C;AAED,IAAA,IAAuC,YAAY,GAAA;QACjD,OAAO,IAAI,CAAC,KAAK,CAAC;KACnB;AASD,IAAA,YAAY,CAAC,MAA4D,EAAA;AACvE,QAAA,IAAI,CAAC,mBAAmB,GAAG,KAAK,CAAC;QACjC,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjB,YAAA,MAAM,CAAC,QAAQ,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC;YACnC,UAAU,GAAG,IAAI,CAAC;SACnB;AAAM,aAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE;AAC3B,YAAA,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC;AACvB,YAAA,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;YACpF,UAAU,GAAG,IAAI,CAAC;SACnB;QAED,IAAI,UAAU,EAAE;YACd,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;KACF;IAED,YAAY,GAAA;AACV,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;QAExD,IAAI,CAAC,mBAAmB,EAAE,CAAC;KAC5B;AAED;;;;;AAKG;AACH,IAAA,MAAM,CAAC,OAAgC,EAAE,IAAI,GAAG,IAAI,EAAA;QAClD,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B,QAAA,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC;AAEhE,QAAA,IAAI,CAAC,aAAa;AACf,aAAA,MAAM,CAAC,MAAM,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;aACjF,MAAM,CAAC,MAAK;;YAEX,MAAM,OAAO,GAAY,IAAI,CAAC,QAAQ,IAAI,CAAC,aAAa,CAAC;YACzD,IAAI,OAAO,EAAE;gBACX,aAAa,GAAG,IAAI,CAAC;aACtB;AAED,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAC;AACD,aAAA,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC;QAE/C,IAAI,CAAC,mBAAmB,GAAG,EAAE,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;QAExD,IAAI,IAAI,EAAE;YACR,IAAI,CAAC,mBAAmB,EAAE,CAAC;SAC5B;KACF;IAED,KAAK,GAAA;QACH,IAAI,CAAC,YAAY,EAAE,CAAC;KACrB;IAED,aAAa,GAAA;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;KAC1F;IAED,eAAe,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC3D;IAEO,mBAAmB,GAAA;AACzB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAClF,CAAC;KACH;+GA5GU,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,qBAAqB,EAPrB,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,SAAA,EAAA,CAAA,UAAA,EAAA,WAAA,CAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,CAAA,EAAA,EAAA,OAAA,EAAA,EAAA,eAAA,EAAA,iBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,oBAAA,EAAA,mBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,+BAA+B;AACxC,gBAAA,WAAW,EAAE,UAAU,CAAC,MAAM,qBAAqB,CAAC;AACrD,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECrBH,4gEA4DA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,aAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,WAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,kBAAA,EAAA,MAAA,EAAA,CAAA,SAAA,EAAA,cAAA,EAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,IAAA,EAAA,QAAA,EAAA,QAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,0BAAA,EAAA,QAAA,EAAA,wBAAA,EAAA,MAAA,EAAA,CAAA,YAAA,EAAA,YAAA,EAAA,SAAA,EAAA,wBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,uBAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,QAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,yBAAA,EAAA,QAAA,EAAA,qCAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,EAAA,CAAA,mBAAA,EAAA,QAAA,EAAA,0BAAA,EAAA,MAAA,EAAA,CAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,WAAA,EAAA,YAAA,EAAA,aAAA,EAAA,YAAA,EAAA,QAAA,CAAA,EAAA,OAAA,EAAA,CAAA,cAAA,EAAA,SAAA,EAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,aAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,IAAA,EAAA,WAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;4FDrCa,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBAVjC,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,mBAAmB,EAElB,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,+BAA+B;AACxC,4BAAA,WAAW,EAAE,UAAU,CAAC,2BAA2B,CAAC;AACrD,yBAAA;AACF,qBAAA,EAAA,QAAA,EAAA,4gEAAA,EAAA,CAAA;8BAQY,OAAO,EAAA,CAAA;sBAAnB,KAAK;gBAUiB,SAAS,EAAA,CAAA;sBAA/B,KAAK;uBAAC,UAAU,CAAA;gBAKG,MAAM,EAAA,CAAA;sBAAzB,KAAK;uBAAC,OAAO,CAAA;gBAIyB,YAAY,EAAA,CAAA;sBAAlD,WAAW;uBAAC,oBAAoB,CAAA;gBAIvB,eAAe,EAAA,CAAA;sBAAxB,MAAM;;;AE9CT;;AAEG;MAMU,kBAAkB,CAAA;+GAAlB,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA,EAAA;gHAAlB,kBAAkB,EAAA,YAAA,EAAA,CAHd,qBAAqB,CAD1B,EAAA,OAAA,EAAA,CAAA,UAAU,EAAE,aAAa,EAAE,gBAAgB,CAAA,EAAA,OAAA,EAAA,CAE3C,qBAAqB,CAAA,EAAA,CAAA,CAAA,EAAA;AAEpB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,kBAAkB,EAJnB,OAAA,EAAA,CAAA,UAAU,EAAE,aAAa,EAAE,gBAAgB,CAAA,EAAA,CAAA,CAAA,EAAA;;4FAI1C,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAL9B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,gBAAgB,CAAC;oBACtD,YAAY,EAAE,CAAC,qBAAqB,CAAC;oBACrC,OAAO,EAAE,CAAC,qBAAqB,CAAC;AACjC,iBAAA,CAAA;;;ACbD;;AAEG;;;;"}