@obliczeniowo/elementary
Version:
Library made in Angular version 20
1 lines • 43.9 kB
Source Map (JSON)
{"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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"}