{"version":3,"file":"obliczeniowo-elementary-filters.mjs","sources":["../../../../projects/components/filters/services/filters.service.ts","../../../../projects/components/filters/components/filter/filter.component.ts","../../../../projects/components/filters/components/filter/filter.component.html","../../../../projects/components/filters/components/filters/filters.component.ts","../../../../projects/components/filters/components/filters/filters.component.html","../../../../projects/components/filters/filters.module.ts","../../../../projects/components/filters/obliczeniowo-elementary-filters.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-unsafe-argument */\nimport { Injectable } from '@angular/core';\nimport { Filter } from '../interfaces/filter';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class FiltersService {\n  checkItemCondition(item: { [key: string]: any }, filters: Filter): boolean {\n    let condition: any;\n\n    if (filters?.filters?.length) {\n      filters.filters.forEach((filter) => {\n        const checked = filter.filters?.length\n          ? this.checkItemCondition(item, filter)\n          : this.operation(filter, item);\n\n        if (filters?.filterType === 'or') {\n          condition = condition !== undefined ? condition || checked : checked;\n        } else if (filters?.filterType === 'and') {\n          condition = condition !== undefined ? condition && checked : checked;\n        } else {\n          condition = checked;\n        }\n      });\n      return condition;\n    } else {\n      return true;\n    }\n  }\n\n  operation(filter: Filter, item: { [key: string]: any }): boolean {\n    const value = item[filter.valueName];\n    const filterValue = filter.filterValue;\n    switch (filter.filterType) {\n      case 'less':\n        return value < +filterValue;\n      case 'more':\n        return value > +filterValue;\n      case 'more-eq':\n        return value >= +filterValue;\n      case 'less-eq':\n        return value <= +filterValue;\n      case 'eq':\n        return value.toString() === filterValue.toString();\n      case 'not-eq':\n        return value.toString() !== filterValue.toString();\n      case 'like':\n        return value?.includes(filterValue) || false;\n      case 'regex':\n        {\n          const reg = new RegExp(filterValue.toString(), 'g');\n          return !!value?.toString().match(reg);\n        }\n      case 'not-regex':\n        {\n          const reg = new RegExp(filterValue.toString(), 'g');\n          return !value?.toString().match(reg);\n        }\n      default:\n        return false;\n    }\n  }\n\n  filter(input: { [key: string]: any }, filters: Filter) {\n    return input.filter((item: any) => this.checkItemCondition(item, filters));\n  }\n}\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport {\n  Component,\n  computed,\n  EventEmitter,\n  input,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n} from '@angular/core';\nimport { DropdownSelectItem } from '@obliczeniowo/elementary/dropdown-select';\nimport { Filter } from '../../interfaces/filter';\nimport { FilterNameItem } from '../../interfaces/filter-name-item';\n\n@Component({\n    selector: 'obl-filter',\n    templateUrl: './filter.component.html',\n    styleUrl: './filter.component.scss',\n    standalone: false\n})\nexport class FilterComponent {\n  filter = input<Partial<Filter>>({});\n\n  names = input<FilterNameItem[]>([]);\n\n  haveParent = input<boolean>(true);\n\n  mode = input<'adding' | 'removing'>('removing');\n\n  translations = input<{ [en: string]: string }>({});\n\n  suffix = input<TemplateRef<any>>();\n\n  labelAnimation = input<boolean>(false);\n\n  filtersType = input<'full' | 'no-regex'>('full');\n\n  /** filters changed */\n  @Output() changed = new EventEmitter<Filter>();\n  /** filter added */\n  @Output() add = new EventEmitter<Filter>();\n  /** filter remove */\n  @Output() remove = new EventEmitter<Filter>();\n\n  expanded = true;\n\n  protected nameItems: DropdownSelectItem<FilterNameItem>[] = [];\n  protected filtersItems: DropdownSelectItem<any>[] = [];\n  protected group = ['and', 'or'];\n  protected numeric = ['less', 'less-eq', 'eq', 'not-eq', 'more-eq', 'more'];\n  protected text = computed(() => {\n    switch (this.filtersType()) {\n      case 'no-regex': {\n        return ['like', 'eq', 'not-eq'];\n      }\n      default: {\n        return ['like', 'eq', 'not-eq', 'regex', 'not-regex']\n      }\n    }\n  });\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.names && this.names()) {\n      this.nameItems = this.names().map((name) => ({\n        id: name.name,\n        text: name.text,\n        templateData: name,\n      }));\n\n      if (this.nameItems.length) {\n        const selected = this.nameItems.find(\n          (name) => name.id === this.filter().valueName\n        );\n        if (selected) {\n          const map = {\n            number: this.numeric,\n            text: this.text(),\n            group: this.group,\n          };\n          this.filtersItems = map[selected.templateData?.type || 'group'].map(\n            (type: string) => ({\n              id: type,\n              text: this.translations()[type] || type,\n            })\n          );\n        }\n      }\n    }\n  }\n\n  setName(name: DropdownSelectItem<FilterNameItem>) {\n    this.filter().valueName = name.id as string;\n    const map = {\n      number: this.numeric,\n      text: this.text(),\n      group: this.group,\n    };\n    const nameItem = this.nameItems.find(\n      (item) => item.id === this.filter().valueName\n    );\n\n    if (name.templateData?.type === 'number') {\n      this.filter().filterValue = 0;\n    }\n\n    this.filtersItems = map[nameItem?.templateData?.type || 'group'].map(\n      (type: string) => ({\n        id: type,\n        text: this.translations()[type] || type,\n      })\n    );\n    if (\n      this.filter().valueName &&\n      this.filter().filterType &&\n      this.filter().filterValue\n    ) {\n      this.changed.emit(this.filter() as Filter);\n    }\n  }\n\n  setFilter(filter: DropdownSelectItem<any>) {\n    this.filter().filterType = filter.id as any;\n    if (\n      this.filter().valueName &&\n      this.filter().filterType &&\n      this.filter().filterValue\n    ) {\n      this.changed.emit(this.filter() as Filter);\n    }\n  }\n\n  setValue = (value: string | number) => {\n    const nameItem = this.nameItems.find(\n      (item) => item.id === this.filter().valueName\n    );\n    if (\n      nameItem?.templateData?.type === 'number' &&\n      typeof value === 'string'\n    ) {\n      value = parseFloat(value);\n    }\n    this.filter().filterValue = value;\n    this.changed.emit();\n  };\n\n  action() {\n    if (\n      this.filter().valueName &&\n      this.filter()?.filterType &&\n      this.filter().filterValue !== null\n    ) {\n      if (this.mode() === 'adding') {\n        this.add.emit({ ...this.filter() } as Filter);\n      } else {\n        this.remove.emit({ ...this.filter() } as Filter);\n      }\n    }\n  }\n\n  onRemove(filter: Filter) {\n    this.filter().filters = (this.filter().filters || []).filter(\n      (f) => f.id !== filter.id\n    );\n    this.filter().filters?.forEach((filter, index) => (filter.id = index));\n    this.changed.emit(this.filter() as Filter);\n  }\n\n  onAdd(filter: Filter) {\n    if (filter.id === undefined) {\n      filter.id = new Date().getTime();\n    }\n    this.filter().filters = [...(this.filter().filters || []), filter];\n    this.changed.emit(this.filter() as Filter);\n  }\n\n  addGroup() {\n    this.filter().filters?.unshift({\n      id: this.filter().filters?.length || 0,\n      valueName: `group ${this.filter().filters?.length}`,\n      filterValue: 0,\n      filterType: 'and',\n      filters: [],\n    });\n    this.filter().filters?.forEach((f, i) => (f.id = i));\n    this.changed.emit();\n  }\n\n  setGroupType(orAnd: boolean) {\n    this.filter().filterType = orAnd ? 'and' : 'or';\n    this.changed.emit();\n  }\n\n  removeGroup() {\n    this.remove.emit(this.filter() as Filter);\n  }\n}\n","@if (!filter().filters) {\n  <div class=\"row record\">\n    <div class=\"row\">\n      <obl-dropdown-select\n        [label]=\"'Filter by' | oblTranslation : translations()\"\n        [labelAnimation]=\"labelAnimation()\"\n        [items]=\"nameItems\"\n        [select]=\"filter().valueName || ''\"\n        (changed)=\"setName($event)\"\n        #name\n      ></obl-dropdown-select>\n\n      <obl-dropdown-select\n        [label]=\"'Filter type' | oblTranslation : translations()\"\n        [labelAnimation]=\"labelAnimation()\"\n        [items]=\"filtersItems\"\n        [select]=\"filter().filterType || ''\"\n        (changed)=\"setFilter($event)\"\n      ></obl-dropdown-select>\n\n      @if (name.selected) {\n        <obl-input-wrapper\n          [label]=\"'Value' | oblTranslation : translations()\"\n          [labelAnimation]=\"labelAnimation()\"\n          [step]=\"name.selected.templateData.options?.step\"\n        >\n          <input\n            oblInput\n            [type]=\"name.selected.templateData.type\"\n            [min]=\"name.selected.templateData.options?.min\"\n            [max]=\"name.selected.templateData.options?.max\"\n            [value]=\"\n              filter().filterValue ??\n              (name.selected.templateData.type === 'text' ? '' : 0)\n            \"\n            (change)=\"setValue(value.value)\"\n            #value\n          />\n          @if(suffix()) {\n            <ng-container\n              suffix\n              *ngTemplateOutlet=\"\n                suffix()!;\n                context: {\n                  value:\n                    (filter().filterValue ??\n                    name.selected.templateData.options?.default) ||\n                      (name.selected.templateData.type === 'text' ? '' : 0),\n                  type: name.selected.templateData.type,\n                  valueName: filter().valueName,\n                  setValue\n                }\n              \"\n            ></ng-container>\n          }\n        </obl-input-wrapper>\n      }\n    </div>\n\n    <button\n      oblButton\n      [icon]=\"mode() === 'adding' ? 'add' : 'subtract'\"\n      (click)=\"action()\"\n    ></button>\n  </div>\n} @else {\n  <div>\n    <div class=\"head\">\n      <span\n        >{{ 'Start of group name:' | oblTranslation : translations() }}\n        {{ filter().valueName }}</span\n      >\n      <div class=\"row\">\n        <obl-switcher\n          on=\"And\"\n          off=\"Or\"\n          [value]=\"filter().filterType === 'and'\"\n          (valueChanged)=\"setGroupType($event)\"\n        ></obl-switcher>\n        <button\n          oblButton\n          icon=\"add\"\n          [title]=\"'Add group' | oblTranslation : translations()\"\n          (click)=\"addGroup()\"\n        ></button>\n        @if (haveParent()) {\n          <button\n            oblButton\n            icon=\"subtract\"\n            [title]=\"'Remove group' | oblTranslation : translations()\"\n            title=\"Remove group\"\n            (click)=\"removeGroup()\"\n          ></button>\n        }\n        <obl-expand-button\n          [isOpen]=\"expanded\"\n          (click)=\"expanded = !expanded\"\n        ></obl-expand-button>\n      </div>\n    </div>\n\n    @if (filter().filters) {\n      <div class=\"filters\" [class.expanded]=\"expanded\">\n        @for (filter of filter().filters; track filter.id) {\n          <obl-filter\n            [filter]=\"filter\"\n            [names]=\"names()\"\n            [translations]=\"translations()\"\n            [suffix]=\"suffix()\"\n            [labelAnimation]=\"labelAnimation()\"\n            [filtersType]=\"filtersType()\"\n            (remove)=\"onRemove($event)\"\n            (changed)=\"changed.emit(filter)\"\n          ></obl-filter>\n        }\n\n        <obl-filter\n          class=\"adding\"\n          [names]=\"names()\"\n          [translations]=\"translations()\"\n          [suffix]=\"suffix()\"\n          [labelAnimation]=\"labelAnimation()\"\n          [filtersType]=\"filtersType()\"\n          mode=\"adding\"\n          (add)=\"onAdd($event)\"\n        ></obl-filter>\n\n        <div class=\"head\">\n          {{ 'End of group name:' | oblTranslation : translations() }}\n          {{ filter().valueName }}\n        </div>\n      </div>\n    }\n  </div>\n}\n","import {\n  Component,\n  effect,\n  ElementRef,\n  EventEmitter,\n  HostBinding,\n  input,\n  Input,\n  Output,\n  SimpleChanges,\n  TemplateRef,\n  ViewChild,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { cloneDeep } from 'lodash';\n\nimport { Filter } from '../../interfaces/filter';\nimport { FilterNameItem } from '../../interfaces/filter-name-item';\n\nimport {\n  DropdownSelectComponent,\n  DropdownSelectItem,\n} from '@obliczeniowo/elementary/dropdown-select';\nimport { keys, keysValues } from '@obliczeniowo/elementary/objects';\nimport { FiltersService } from '../../services/filters.service';\nimport { InputWrappersDefaultSettingsService } from '@obliczeniowo/elementary/input';\n\n@Component({\n    selector: 'obl-filters',\n    templateUrl: './filters.component.html',\n    styleUrl: './filters.component.scss',\n    providers: [\n        {\n            provide: NG_VALUE_ACCESSOR,\n            multi: true,\n            useExisting: FiltersComponent,\n        },\n    ],\n    standalone: false\n})\nexport class FiltersComponent implements ControlValueAccessor {\n  protected touchedDragBar = false;\n\n  protected settingsItems: DropdownSelectItem<Filter>[] = [];\n\n  protected errors: { [key: string]: { [key: string]: boolean } | null } = {};\n\n  /** define if list is opened */\n  isOpen = false;\n  /** define if element is touched */\n  touched = false;\n\n  @Input() filters?: Filter;\n\n  @Input() settings?: { [name: string]: Filter };\n\n  translations = input<{ [en: string]: string }>({});\n\n  names = input<FilterNameItem[]>([]);\n\n  input = input<{ [key: string]: any }[]>();\n\n  suffix = input<TemplateRef<any>>();\n\n  /**\n   * Enable type text animation for label\n   */\n  @Input() labelAnimation = false;\n\n  @Input()\n  @HostBinding('class.disabled')\n  disabled = false;\n\n  filtersType = input<'full' | 'no-regex'>('full');\n\n  @Output() settingsChanged = new EventEmitter<{ [name: string]: Filter }>();\n\n  @Output() changed = new EventEmitter<Filter>();\n\n  @Output() output = new EventEmitter<{ [key: string]: any }[]>();\n\n  @ViewChild('selectedSetting') selected?: DropdownSelectComponent;\n  @ViewChild('settingsName') settingsName?: ElementRef<HTMLInputElement>;\n\n  constructor(\n    protected filtersService: FiltersService,\n    protected readonly globalSettings: InputWrappersDefaultSettingsService\n  ) {\n    effect(() => {\n      this.filterInput();\n    })\n    this.labelAnimation = this.globalSettings.labelAnimation.filters;\n  }\n\n  ngOnChanges(changes: SimpleChanges): void {\n    if (changes.settings) {\n      if (this.settings) {\n        this.updateSettingsItems();\n      } else {\n        this.settingsItems = [];\n      }\n    }\n  }\n\n  toggle(event: any, touched = this.touchedDragBar): void {\n    if (touched) {\n      return;\n    }\n    event.stopPropagation();\n    this.touchedDragBar = false;\n    if (this.isOpen) {\n      this.isOpen = false;\n    } else {\n      this.open();\n    }\n  }\n\n  close(touched = this.touchedDragBar): void {\n    if (!touched) {\n      this.isOpen = false;\n      this.touchedDragBar = false;\n    } else {\n      this.touchedDragBar = touched;\n    }\n  }\n\n  open(): void {\n    if (!this.isOpen) {\n      this.isOpen = true;\n      this.touchedDragBar = false;\n\n      setTimeout(() => {\n        this.checkSettingSelection();\n      });\n    }\n  }\n\n  onChange = (value: Filter) => {};\n\n  onTouched = () => {};\n\n  onTouchedDragBar(touched: boolean, element: any): void {\n    this.touchedDragBar = touched;\n    element.parentElement.style.width = 0;\n  }\n\n  checkSettingSelection() {\n    if (\n      this.selected?.selected &&\n      JSON.stringify(this.selected.selected.templateData) !==\n        JSON.stringify(this.filters)\n    ) {\n      this.selected.selected = undefined;\n    }\n  }\n\n  writeValue(value: Filter): void {\n    this.filters = value;\n  }\n\n  registerOnChange(onChange: any): void {\n    this.onChange = onChange;\n  }\n\n  registerOnTouched(onTouched: any): void {\n    this.onTouched = onTouched;\n  }\n\n  setDisabledState(disabled: boolean): void {\n    this.disabled = disabled;\n  }\n\n  saveSettings(input: HTMLInputElement) {\n    const name = input.value;\n    if (name && name !== '' && this.filters) {\n      if (!keys(this.settings || {}).find((key) => key === name)) {\n        this.settings = {\n          ...(this.settings || {}),\n          [name]: cloneDeep(this.filters),\n        };\n      } else {\n        if (this.settings) {\n          this.settings[name] = cloneDeep(this.filters);\n        }\n      }\n      this.updateSettingsItems();\n      this.settingsChanged.emit(this.settings);\n      setTimeout(() => {\n        if (this.selected) {\n          this.selected.selected = this.selected.items.find(\n            (item) => item.id === name\n          );\n        }\n      });\n    } else {\n      this.errors.settingsName = {\n        settingsNameError: !name || name === '',\n      };\n      input.classList.add('ng-touched');\n    }\n  }\n\n  check() {\n    const value = this.settingsName?.nativeElement.value;\n    const err = !value || value === '';\n    this.errors.settingsName =\n      (err && {\n        settingsNameError: !value || value === '',\n      }) ||\n      null;\n  }\n\n  onChanged() {\n    this.checkSettingSelection();\n    this.changed.emit(this.filters);\n\n    this.filterInput();\n  }\n\n  protected setSettings(item: DropdownSelectItem<Filter>) {\n    if (item.templateData) {\n      this.filters = cloneDeep(item.templateData);\n      if (this.settingsName) {\n        this.settingsName.nativeElement.value = item.id.toString();\n      }\n\n      this.changed.emit(this.filters);\n    }\n  }\n\n  protected removeSettings(name?: string | number) {\n    if (name && this.settings?.[name]) {\n      // eslint-disable-next-line @typescript-eslint/no-dynamic-delete\n      delete this.settings[name];\n      this.updateSettingsItems();\n      this.settingsChanged.emit(this.settings);\n    }\n  }\n\n  protected filterInput() {\n    const input = this.input();\n    if (input) {\n      const filtered = this.filters\n        ? this.filtersService.filter(input, this.filters)\n        : input;\n      this.output.emit(filtered);\n    }\n  }\n\n  protected updateSettingsItems() {\n    this.settingsItems = keysValues(this.settings || {}).map(\n      ([key, value]) => ({\n        id: key,\n        text: key,\n        templateData: value,\n      })\n    );\n    this.filterInput();\n  }\n}\n","<button\n  oblButton\n  icon=\"filter\"\n  cdkOverlayOrigin\n  [disabled]=\"disabled\"\n  oblBadge\n  [show]=\"!!filters?.filters?.length\"\n  #dropDown=\"cdkOverlayOrigin\"\n  (click)=\"toggle($event, false)\"\n  #parent\n></button>\n\n<ng-template\n  cdkConnectedOverlay\n  [cdkConnectedOverlayOrigin]=\"dropDown\"\n  [cdkConnectedOverlayOpen]=\"isOpen\"\n  [cdkConnectedOverlayOffsetX]=\"2\"\n  (overlayOutsideClick)=\"toggle($event)\"\n>\n  <div\n    class=\"dropdown-list\"\n    [style.min-width.px]=\"647\"\n    [style.max-width]=\"'100vw'\"\n    #list\n    cdkDrag\n  >\n    <obl-drag-bar\n      (onTouched)=\"onTouchedDragBar($event, list)\"\n      (onClose)=\"close(false)\"\n      cdkDragHandle\n      #dragbar\n    ></obl-drag-bar>\n    @if (filters) {\n      <div class=\"list\">\n        @if (settings) {\n          <div class=\"row\">\n            @if (settingsItems.length) {\n              <obl-dropdown-select\n                [label]=\"'Saved filters:' | oblTranslation : translations()\"\n                [labelAnimation]=\"labelAnimation\"\n                [items]=\"settingsItems\"\n                (changed)=\"setSettings($event)\"\n                #selectedSetting\n              >\n                @if (selectedSetting.selected) {\n                  <ng-container suffix>\n                    <button\n                      oblButton\n                      icon=\"subtract\"\n                      (click)=\"removeSettings(selectedSetting?.selected?.id)\"\n                    ></button>\n                  </ng-container>\n                }\n              </obl-dropdown-select>\n            }\n            <obl-input-wrapper\n              [label]=\"'Setting name:' | oblTranslation : translations()\"\n              [labelAnimation]=\"labelAnimation\"\n              [errors]=\"errors['settingsName']\"\n              [translations]=\"translations()\"\n            >\n              <input\n                oblInput\n                type=\"text\"\n                [required]=\"errors['settingsName']\"\n                (change)=\"check()\"\n                #settingsName\n              />\n              <button\n                suffix\n                oblButton\n                icon=\"save\"\n                (click)=\"saveSettings(settingsName)\"\n              ></button>\n            </obl-input-wrapper>\n          </div>\n        }\n        <obl-filter\n          [filter]=\"filters\"\n          [labelAnimation]=\"labelAnimation\"\n          [names]=\"names()\"\n          [haveParent]=\"false\"\n          [translations]=\"translations()\"\n          [suffix]=\"suffix()\"\n          [filtersType]=\"filtersType()\"\n          (changed)=\"onChanged()\"\n        ></obl-filter>\n      </div>\n    }\n  </div>\n</ng-template>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { DropdownSelectModule } from '@obliczeniowo/elementary/dropdown-select';\nimport { InputModule } from '@obliczeniowo/elementary/input';\n\nimport { FiltersComponent } from './components/filters/filters.component';\nimport { FilterComponent } from './components/filter/filter.component';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\nimport { ButtonsModule } from '@obliczeniowo/elementary/buttons';\nimport { SwitcherModule } from '@obliczeniowo/elementary/switcher';\nimport { TextPipesModule } from '@obliczeniowo/elementary/text-pipes';\nimport { BadgeDirective } from '@obliczeniowo/elementary/badge';\n\n\n@NgModule({\n  declarations: [\n    FiltersComponent,\n    FilterComponent\n  ],\n  imports: [\n    CommonModule,\n    DropdownSelectModule,\n    InputModule,\n    ButtonsModule,\n    SwitcherModule,\n    OverlayModule,\n    DragDropModule,\n    TextPipesModule,\n    BadgeDirective\n  ],\n  exports: [\n    FiltersComponent\n  ]\n})\nexport class FiltersModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i2","i3","i1.FiltersService","i5","i6","i8.FilterComponent","i9"],"mappings":"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"}