{"version":3,"file":"imng-kendo-grid-filtering.mjs","sources":["../../../../libs/imng-kendo-grid-filtering/src/lib/multi-select-filter/multi-select-filter.component.ts","../../../../libs/imng-kendo-grid-filtering/src/lib/uuid-filter/uuid-filter.component.ts","../../../../libs/imng-kendo-grid-filtering/src/lib/imng-kendo-grid-filtering.module.ts","../../../../libs/imng-kendo-grid-filtering/src/imng-kendo-grid-filtering.ts"],"sourcesContent":["import {\n  Component,\n  AfterViewInit,\n  Input,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  inject,\n  ElementRef,\n} from '@angular/core';\nimport { FilterService } from '@progress/kendo-angular-grid';\nimport {\n  CompositeFilterDescriptor,\n  distinct,\n  filterBy,\n  FilterDescriptor,\n} from '@progress/kendo-data-query';\nimport { IdType } from 'imng-nrsrx-client-utils';\nimport { ICompositeFilter, ODataState } from 'imng-kendo-odata';\nimport { CommonModule } from '@angular/common';\nimport { IFilter } from 'imng-odata-client';\n\n@Component({\n  selector: 'imng-multi-select-filter',\n  imports: [CommonModule],\n  template: `\n    <ul>\n      @if (showTextFilter) {\n        <li>\n          <input class=\"k-textbox\" (input)=\"onInput($event)\" />\n        </li>\n      }\n      @for (item of currentData; track item; let i = $index) {\n        <li\n          #itemElement\n          (click)=\"onSelectionChange(valueAccessor(item), itemElement)\"\n          [ngClass]=\"{ 'k-state-selected': isItemSelected(item) }\">\n          <input\n            type=\"checkbox\"\n            id=\"chk-{{ valueAccessor(item) }}\"\n            (focus)=\"onFocus(itemElement)\"\n            class=\"k-checkbox\"\n            [checked]=\"isItemSelected(item)\" />\n          <label\n            class=\"k-multiselect-checkbox k-checkbox-label\"\n            for=\"chk-{{ valueAccessor(item) }}\">\n            {{ textAccessor(item) }}\n          </label>\n        </li>\n      }\n    </ul>\n  `,\n  styles: [\n    `\n      ul {\n        list-style-type: none;\n        height: 200px;\n        overflow-y: scroll;\n        padding-left: 0;\n        padding-right: 12px;\n      }\n\n      ul > li {\n        padding: 8px 12px;\n        border: 1px solid rgba(0, 0, 0, 0.08);\n        border-bottom: none;\n      }\n\n      ul > li:last-of-type {\n        border-bottom: 1px solid rgba(0, 0, 0, 0.08);\n      }\n\n      .k-multiselect-checkbox {\n        pointer-events: none;\n      }\n      .k-checkbox {\n        width: 14px;\n        height: 15px;\n      }\n    `,\n  ],\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IMNG_KENDO_GRID_MULTISELECT_FILTER implements AfterViewInit {\n  readonly filterService = inject(FilterService);\n  readonly changeDetectorRef = inject(ChangeDetectorRef);\n  readonly elementRef = inject(ElementRef);\n  @Input() public isPrimitive = false;\n  @Input() public odataState: ODataState | null = {};\n  @Input() public data: unknown[] = [];\n  @Input() public textField: string | undefined = undefined;\n  @Input() public valueField: string | undefined = undefined;\n  @Input() public field = '';\n  @Input() public showTextFilter = true;\n\n  public currentData: unknown[] = [];\n  public value: unknown[] = [];\n\n  public textAccessor = (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    dataItem: any, //NOSONAR\n  ) =>\n    this.isPrimitive || !this.textField ? dataItem : dataItem[this.textField];\n  public valueAccessor = (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    dataItem: any, //NOSONAR\n  ) =>\n    this.isPrimitive || !this.valueField ? dataItem : dataItem[this.valueField];\n\n  public ngAfterViewInit() {\n    const submitButton = this.elementRef.nativeElement.parentNode.querySelector(\n      '.k-actions > button[type=\"submit\"]',\n    );\n    if (submitButton) {\n      submitButton.style.display = 'none';\n    }\n    this.currentData = this.data;\n    const tempValue = this.odataState?.filter?.filters.map(\n      (f: ICompositeFilter | IFilter) =>\n        (f as ICompositeFilter).filters\n          .filter(\n            (x: IFilter | ICompositeFilter) =>\n              (x as IFilter).field === this.field,\n          )\n          .map((x: IFilter | ICompositeFilter) => (x as IFilter).value),\n    );\n    this.value = tempValue?.length ? tempValue?.flat() || [] : [];\n\n    this.showTextFilter =\n      this.showTextFilter &&\n      typeof this.textAccessor(this.currentData[0]) === 'string';\n    this.changeDetectorRef.markForCheck();\n  }\n\n  public isItemSelected(item: unknown) {\n    return this.value.includes(this.valueAccessor(item));\n  }\n\n  public onSelectionChange(item: unknown, li: HTMLLIElement) {\n    if (this.value.includes(item)) {\n      this.value = this.value.filter((x) => x !== item);\n    } else {\n      this.value.push(item);\n    }\n    const currentFilter: CompositeFilterDescriptor = {\n      logic: this.odataState?.filter?.logic ?? 'and',\n      filters:\n        (this.odataState?.filter?.filters as\n          | CompositeFilterDescriptor[]\n          | FilterDescriptor[]) ?? [],\n    };\n    if (\n      currentFilter.filters.some(\n        (x: CompositeFilterDescriptor | FilterDescriptor) =>\n          (x as CompositeFilterDescriptor).filters.some(\n            (f: FilterDescriptor | CompositeFilterDescriptor) =>\n              (f as FilterDescriptor).field === this.field,\n          ),\n      )\n    ) {\n      currentFilter.filters = currentFilter.filters.filter(\n        (x: CompositeFilterDescriptor | FilterDescriptor) =>\n          !(x as CompositeFilterDescriptor).filters.some(\n            (f: FilterDescriptor | CompositeFilterDescriptor) =>\n              (f as FilterDescriptor).field === this.field,\n          ),\n      );\n    }\n    if (this.value.length > 0) {\n      currentFilter.filters = [\n        ...currentFilter.filters,\n        {\n          logic: 'or',\n          filters: this.value.map((value) => ({\n            field: this.field,\n            operator: 'eq',\n            value,\n          })),\n        },\n      ];\n    }\n    this.filterService.filter(currentFilter);\n\n    this.onFocus(li);\n  }\n\n  public onInput(\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    e: { target: { value: IdType } } | any, //NOSONAR\n  ): void {\n    this.currentData = distinct(\n      [\n        ...this.currentData.filter((dataItem: unknown) =>\n          this.value.includes(this.valueAccessor(dataItem)),\n        ),\n        ...filterBy(this.data, {\n          operator: 'contains',\n          field: this.textField,\n          value: e.target.value,\n        }),\n      ],\n      this.textField,\n    );\n    this.changeDetectorRef.markForCheck();\n  }\n\n  public onFocus(li: HTMLLIElement): void {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    const ul = li.parentNode as any; //NOSONAR\n    const below =\n      ul.scrollTop + ul.offsetHeight < li.offsetTop + li.offsetHeight;\n    const above = li.offsetTop < ul.scrollTop;\n\n    // Scroll to focused checkbox\n    if (below || above) {\n      ul.scrollTop = li.offsetTop;\n    }\n    this.changeDetectorRef.markForCheck();\n  }\n}\n","import {\n  Component,\n  ChangeDetectionStrategy,\n  Input,\n  inject,\n} from '@angular/core';\nimport {\n  ColumnComponent,\n  FilterService,\n  KENDO_GRID,\n} from '@progress/kendo-angular-grid';\nimport { CompositeFilterDescriptor } from '@progress/kendo-data-query';\nimport { Subscriptions } from 'imng-ngrx-utils';\n\n/**\n * How To Use:\n * <kendo-grid-column ...>\n *  <ng-template kendoGridFilterMenuTemplate let-filter>\n      <imng-uuid-filter [filter]=\"filter\"></imng-uuid-filter>\n    </ng-template>\n   <kendo-grid-column>\n */\n@Component({\n  selector: 'imng-uuid-filter',\n  imports: [KENDO_GRID],\n  template: `\n    <kendo-grid-string-filter-menu\n      [column]=\"column\"\n      [filter]=\"filter\"\n      [filterService]=\"filterService\"\n      [extra]=\"false\"\n      operator=\"eq\">\n      <kendo-filter-eq-operator />\n    </kendo-grid-string-filter-menu>\n  `,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IMNG_KENDO_GRID_UUID_FILTER {\n  filterService = inject<FilterService>(FilterService);\n  column = inject<ColumnComponent>(ColumnComponent);\n\n  /**\n   * The current menu filter.\n   * @type {CompositeFilterDescriptor}\n   */\n  @Input()\n  filter: CompositeFilterDescriptor;\n\n  public allSubscriptions = new Subscriptions();\n  constructor() {\n    this.filter = null as never;\n  }\n}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { IMNG_KENDO_GRID_MULTISELECT_FILTER } from './multi-select-filter/multi-select-filter.component';\nimport { IMNG_KENDO_GRID_UUID_FILTER } from './uuid-filter/uuid-filter.component';\n\n@NgModule({\n  imports: [\n    CommonModule,\n    IMNG_KENDO_GRID_MULTISELECT_FILTER,\n    IMNG_KENDO_GRID_UUID_FILTER,\n  ],\n  exports: [IMNG_KENDO_GRID_MULTISELECT_FILTER, IMNG_KENDO_GRID_UUID_FILTER],\n})\nexport class ImngKendoGridFilteringModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":"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"}