@mediusinc/mng-commons 5.1.0 → 5.2.0-rc.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/core/components/notification/notification-wrapper.component.d.ts +3 -1
- package/core/error/error-helpers.d.ts +5 -0
- package/core/error/error.model.d.ts +6 -0
- package/core/helpers/route.d.ts +1 -1
- package/core/models/menu.model.d.ts +2 -1
- package/core/router/route-builder.d.ts +0 -1
- package/core/security/permission.service.d.ts +13 -5
- package/core/security/permissions.model.d.ts +27 -2
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +6 -5
- package/esm2022/core/error/error-helpers.mjs +8 -1
- package/esm2022/core/error/error.model.mjs +2 -1
- package/esm2022/core/models/menu.model.mjs +1 -1
- package/esm2022/core/router/route-builder.mjs +1 -24
- package/esm2022/core/rxjs/map-data-list-result-operator.mjs +4 -1
- package/esm2022/core/security/permission.guard.mjs +2 -2
- package/esm2022/core/security/permission.service.mjs +65 -15
- package/esm2022/core/security/permissions.model.mjs +1 -1
- package/esm2022/form/components/date-range/date-range.component.mjs +9 -3
- package/esm2022/form/components/number-range/number-range.component.mjs +106 -0
- package/esm2022/form/index.mjs +2 -1
- package/esm2022/model/helpers/i18n.mjs +2 -2
- package/esm2022/table/api/descriptors/table.descriptor.mjs +11 -1
- package/esm2022/table/components/column-filter-full/column-filter-full.component.mjs +72 -10
- package/esm2022/table/components/table/table.component.mjs +15 -12
- package/esm2022/table/helpers/notification.mjs +2 -2
- package/esm2022/table/services/data-list.service.mjs +9 -3
- package/esm2022/tableview/action/components/action/action.component.mjs +6 -7
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +7 -3
- package/esm2022/tableview/action/components/table/action-table.component.mjs +8 -3
- package/esm2022/tableview/action/helpers/i18n.mjs +4 -4
- package/esm2022/tableview/action/models/execution/action-context.model.mjs +9 -1
- package/esm2022/tableview/action/services/action-executor.service.mjs +74 -14
- package/esm2022/tableview/api/action/descriptors/action-descriptor.factory.mjs +2 -2
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +2 -1
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +1 -1
- package/esm2022/tableview/api/action/models/action-descriptor.types.mjs +1 -1
- package/esm2022/tableview/api/editor/descriptors/field-base.descriptor.mjs +2 -3
- package/esm2022/tableview/api/editor/models/form-editor.event.mjs +2 -1
- package/esm2022/tableview/api/editor/models/form-editor.interface.mjs +1 -1
- package/esm2022/tableview/api/editor/models/formly-options.model.mjs +1 -1
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +16 -10
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +2 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +2 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +2 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +2 -3
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +3 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +21 -9
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +17 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +18 -3
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +12 -4
- package/esm2022/tableview/editor/services/form-editor.service.mjs +3 -3
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +2 -2
- package/fesm2022/mediusinc-mng-commons-core.mjs +82 -42
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +109 -3
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +10 -0
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +94 -23
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +4 -3
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +172 -62
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/form/components/date-range/date-range.component.d.ts +4 -2
- package/form/components/number-range/number-range.component.d.ts +30 -0
- package/form/index.d.ts +1 -0
- package/i18n/en.json +1 -1
- package/i18n/sl.json +1 -1
- package/package.json +7 -7
- package/table/api/descriptors/table.descriptor.d.ts +3 -0
- package/table/components/column-filter-full/column-filter-full.component.d.ts +3 -2
- package/table/components/table/table.component.d.ts +7 -2
- package/table/services/data-list.service.d.ts +5 -2
- package/tableview/action/components/action/action.component.d.ts +1 -2
- package/tableview/action/components/editor/action-editor.component.d.ts +1 -1
- package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +7 -5
- package/tableview/action/components/localization/data-language-dropdown.component.d.ts +1 -1
- package/tableview/action/components/table/action-table.component.d.ts +8 -4
- package/tableview/action/models/execution/action-context.model.d.ts +7 -0
- package/tableview/action/services/action-executor.service.d.ts +1 -1
- package/tableview/action/services/view-container.service.d.ts +1 -1
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +2 -2
- package/tableview/api/action/descriptors/action.descriptor.d.ts +38 -38
- package/tableview/api/action/models/action-descriptor.types.d.ts +2 -2
- package/tableview/api/editor/descriptors/field-many.descriptor.d.ts +1 -1
- package/tableview/api/editor/models/form-editor.event.d.ts +4 -0
- package/tableview/api/editor/models/form-editor.interface.d.ts +4 -1
- package/tableview/api/editor/models/formly-options.model.d.ts +4 -4
- package/tableview/editor/components/editor/form-editor.component.d.ts +6 -2
- package/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.d.ts +0 -1
- package/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.d.ts +0 -1
- package/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.d.ts +0 -1
- package/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.d.ts +0 -1
- package/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.d.ts +0 -1
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.d.ts +3 -1
- package/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.d.ts +3 -1
- package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +5 -1
- package/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.d.ts +1 -0
- package/tableview/editor/services/form-editor.service.d.ts +2 -2
- package/tableview/tableview/components/tableview/tableview.component.d.ts +4 -4
- package/version-info.json +6 -6
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediusinc-mng-commons-table.mjs","sources":["../../table/src/services/data-list.service.ts","../../table/src/components/column-filter-full/column-filter-full.component.ts","../../table/src/components/column-filter-full/column-filter-full.component.html","../../table/src/components/column-value/column-value.component.ts","../../table/src/components/column-value/column-value.component.html","../../table/src/helpers/notification.ts","../../table/src/helpers/table-layout-prefs.ts","../../table/src/pipes/locale-default-row-class.pipe.ts","../../table/src/pipes/table-column-filter-class.pipe.ts","../../table/src/components/table/table.component.ts","../../table/src/components/table/table.component.html","../../table/src/index.ts","../../table/src/mediusinc-mng-commons-table.ts"],"sourcesContent":["import {Injectable, signal} from '@angular/core';\n\nimport {FilterMetadata, SortMeta} from 'primeng/api';\n\n@Injectable()\nexport class DataListService<Item> {\n // pagination\n public sortMeta = signal<SortMeta[] | null>(null);\n public filterMeta = signal<Record<string, FilterMetadata>>({});\n public rowsPerPageOptions = signal([25, 50, 100]);\n public rows = signal(this.rowsPerPageOptions()[0]);\n public offset = signal(0);\n public globalFilterFields = signal<string[]>([]);\n\n // data\n public data = signal<Item[]>([]);\n public count = signal(0);\n public loading = signal(true);\n}\n","import {animate, style, transition, trigger} from '@angular/animations';\nimport {NgClass} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {FormsModule} from '@angular/forms';\n\nimport {TranslateModule} from '@ngx-translate/core';\nimport {OverlayService, FilterMetadata as PrimeFilterMetadata, PrimeNGConfig, SelectItem, TranslationKeys} from 'primeng/api';\nimport {CalendarModule} from 'primeng/calendar';\nimport {ConnectedOverlayScrollHandler, DomHandler} from 'primeng/dom';\nimport {FilterIcon} from 'primeng/icons/filter';\nimport {FilterSlashIcon} from 'primeng/icons/filterslash';\nimport {InputNumberModule} from 'primeng/inputnumber';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {Table, TableModule} from 'primeng/table';\nimport {TriStateCheckboxModule} from 'primeng/tristatecheckbox';\nimport {Nullable, VoidListener} from 'primeng/ts-helpers';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {Subject, Subscription, debounceTime, distinctUntilChanged} from 'rxjs';\n\nimport {COMMONS_MODULE_CONFIG_IT, FilterMatchMode, FilterMatchModeExtendedType, dateToIsoString} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterLookupDescriptor, FilterLookupTypeEnum, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective} from '@mediusinc/mng-commons/form';\n\nimport {DataListService} from '../../services/data-list.service';\n\n/**\n * Cannot be on push change detection strategy because of filter updates triggered from route which causes to force update values in force metadata\n * and these must be propagated through to this component and beyond to primeNG.\n */\n@Component({\n standalone: true,\n selector: 'mng-table-column-filter-full',\n imports: [\n TableModule,\n TranslateModule,\n DateRangeComponent,\n CalendarModule,\n FormsModule,\n AutocompleteComponent,\n DropdownComponent,\n TriStateCheckboxModule,\n InputNumberModule,\n InputTextModule,\n FilterIcon,\n FilterSlashIcon,\n NgClass,\n InputTrimDirective\n ],\n templateUrl: './column-filter-full.component.html',\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [style({opacity: 0, transform: 'scaleY(0.8)'}), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]),\n transition(':leave', [animate('.1s linear', style({opacity: 0}))])\n ])\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableColumnFilterFullComponent implements OnInit, OnDestroy {\n public readonly lookupTypeDropdown: FilterLookupTypeEnum = FilterLookupTypeEnum.Dropdown;\n public readonly lookupTypeAutocomplete: FilterLookupTypeEnum = FilterLookupTypeEnum.Autocomplete;\n private readonly el = inject(ElementRef);\n private readonly primeTable = inject(Table);\n private readonly dataListService = inject(DataListService<any>);\n private readonly moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, {optional: true});\n private readonly renderer = inject(Renderer2);\n private readonly primeConfig = inject(PrimeNGConfig);\n private readonly overlayService = inject(OverlayService);\n private readonly cd = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly document: Document = window.document;\n\n @Input({required: true}) descriptor!: FilterDescriptor<any, any>;\n\n @ViewChild('icon') icon: Nullable<ElementRef>;\n\n // change only on init!\n public primeField!: string;\n public primeType = 'text';\n public lookupDescriptor?: FilterLookupDescriptor<any, any>;\n\n // public matchModes: SelectItem[] = [];\n public matchModes = signal<SelectItem[]>([]);\n public filterConstraint = signal<FilterMetadata | undefined>(undefined);\n public isFilterSet = computed(\n () =>\n this.filterConstraint()?.matchMode === FilterMatchMode.Exists ||\n this.filterConstraint()?.matchMode === FilterMatchMode.DoesNotExist ||\n !this.primeTable.isFilterBlank(this.filterConstraint()?.value)\n );\n public isInputDisabled = computed(() => this.filterConstraint()?.matchMode === FilterMatchMode.Exists || this.filterConstraint()?.matchMode === FilterMatchMode.DoesNotExist);\n public overlayVisible = signal(false);\n\n private overlaySubscription?: Subscription;\n private overlay: HTMLElement | undefined | null;\n private scrollHandler?: ConnectedOverlayScrollHandler | null;\n private documentClickListener: VoidListener;\n private documentResizeListener: VoidListener;\n private translationSubscription?: Subscription;\n private resetSubscription?: Subscription;\n private selfClick?: boolean;\n private overlayEventListener: any;\n private tableFilterMetadataSubscription?: Subscription;\n\n private readonly window = this.document.defaultView as Window;\n\n private dateDebounceSubject = new Subject<Date | Date[] | null>();\n private dateTimeInUtc = false;\n private dateTimeWithTimezone = true;\n private dateTimeWithMillis = true;\n private dateOnlyDisabled = false;\n\n constructor() {\n this.dateDebounceSubject.pipe(debounceTime(500), distinctUntilChanged(), takeUntilDestroyed()).subscribe(v => {\n if (this.filterConstraint()?.displayMatchMode === FilterMatchMode.Equals && this.filterConstraint()?.matchMode === FilterMatchMode.Between && v !== null) {\n const dateValue: Date | undefined = Array.isArray(v) ? v[0] : v; // could have empty array\n\n if (dateValue) {\n const fromDate = new Date(dateValue);\n const toDate = new Date(dateValue);\n\n if (this.descriptor.datePickerShowTime) {\n if (this.descriptor.datePickerShowSeconds) {\n fromDate.setMilliseconds(0);\n toDate.setMilliseconds(999);\n } else {\n fromDate.setSeconds(0, 0);\n toDate.setSeconds(59, 0);\n }\n } else {\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n }\n // adjust to settings\n v = [fromDate, toDate];\n } else {\n v = null;\n }\n }\n const convertDateType = this.descriptor.datePickerValueNoTime || (!this.dateOnlyDisabled && !this.descriptor.datePickerShowTime) ? 'date' : 'date-time';\n const convertDateTimeOpts = {\n utc: this.descriptor.datePickerValueUtc ?? this.dateTimeInUtc,\n noMillis: !this.dateTimeWithMillis,\n noTimezone: this.descriptor.datePickerValueNoTimezone ?? !this.dateTimeWithTimezone\n };\n this.updateFilterValue(\n v == null\n ? v\n : Array.isArray(v)\n ? v.filter(i => i != null).map(i => dateToIsoString(i, convertDateType, convertDateTimeOpts))\n : dateToIsoString(v, convertDateType, convertDateTimeOpts)\n );\n });\n\n effect(\n () => {\n const fieldFilterMeta = this.dataListService.filterMeta()[this.primeField];\n if (\n fieldFilterMeta &&\n (!this.filterConstraint() || this.filterConstraint()!.value !== fieldFilterMeta.value || this.filterConstraint()!.matchMode !== fieldFilterMeta.matchMode)\n ) {\n this.setFilterConstraint(fieldFilterMeta);\n }\n },\n {allowSignalWrites: true}\n );\n }\n\n ngOnInit() {\n if (this.moduleConfig?.serialization) {\n if (this.moduleConfig.serialization.dateTimeInUtc !== undefined) this.dateTimeInUtc = this.moduleConfig.serialization.dateTimeInUtc;\n if (this.moduleConfig.serialization.dateTimeWithTimezone !== undefined) this.dateTimeWithTimezone = this.moduleConfig.serialization.dateTimeWithTimezone;\n if (this.moduleConfig.serialization.dateTimeWithMillis !== undefined) this.dateTimeWithMillis = this.moduleConfig.serialization.dateTimeWithMillis;\n if (this.moduleConfig.serialization.filtersDateOnlyDisabled !== undefined) this.dateOnlyDisabled = this.moduleConfig.serialization.filtersDateOnlyDisabled;\n }\n\n this.primeField = this.descriptor.property;\n\n switch (this.descriptor.filterType) {\n case FilterTypeEnum.Boolean:\n this.primeType = 'boolean';\n break;\n case FilterTypeEnum.Number:\n this.primeType = 'numeric';\n break;\n case FilterTypeEnum.Date:\n this.primeType = 'date';\n break;\n case FilterTypeEnum.Lookup:\n case FilterTypeEnum.LookupEnum:\n this.primeType = 'lookup';\n this.lookupDescriptor = this.descriptor as FilterLookupDescriptor<any, any>;\n break;\n case FilterTypeEnum.String:\n this.primeType = 'text';\n break;\n }\n\n // generate match mode options\n this.translationSubscription = this.primeConfig.translationObserver.subscribe(() => {\n this.generateMatchModeOptions();\n });\n this.generateMatchModeOptions();\n\n this.initFilterConstraint();\n }\n\n ngOnDestroy() {\n if (this.overlay) {\n this.renderer.appendChild(this.el.nativeElement, this.overlay);\n ZIndexUtils.clear(this.overlay);\n this.onOverlayHide();\n }\n\n this.translationSubscription?.unsubscribe();\n this.resetSubscription?.unsubscribe();\n this.overlaySubscription?.unsubscribe();\n this.tableFilterMetadataSubscription?.unsubscribe();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onTextModelChange(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n if (value === '') {\n this.updateFilterValue(value);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onTextInputEnterKeyDown(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.updateFilterValue(value);\n event.preventDefault();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onNumericModelChange(value: number | null) {\n if (value === null) {\n this.updateFilterValue(value);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onNumericInputKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n const value = (event?.target as HTMLInputElement | undefined)?.value ?? null;\n this.updateFilterValue(value !== null ? +value : null);\n event.preventDefault();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onTristateModelChange(value: boolean | null) {\n this.updateFilterValue(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n dateFilter(value: Date | Date[] | null) {\n if (this.filterConstraint()?.displayMatchMode === FilterMatchMode.Between && Array.isArray(value)) {\n const dateValues = value.filter(v => v instanceof Date);\n if (dateValues.length !== 2) {\n return;\n }\n }\n this.dateDebounceSubject.next(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n autocompleteFilter(value: any) {\n this.updateFilterValue(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any\n dropdownFilter(value: any) {\n if (Array.isArray(value) && value.length === 0) {\n value = undefined;\n }\n this.updateFilterValue(value);\n }\n\n onMatchModeChange(matchMode: string) {\n this.setFilterConstraint({...this.filterConstraint(), matchMode: matchMode});\n this.updateDtFilter();\n this.hideOverlay();\n }\n\n onMatchModeKeyDown(event: KeyboardEvent) {\n const item = <HTMLLIElement>event.target;\n\n switch (event.key) {\n case 'ArrowDown':\n // eslint-disable-next-line no-case-declarations\n const nextItem = this.findNextMenuModeItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n\n event.preventDefault();\n break;\n\n case 'ArrowUp':\n // eslint-disable-next-line no-case-declarations\n const prevItem = this.findPrevMenuModeItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n\n event.preventDefault();\n break;\n }\n }\n\n onRowClearItemClick() {\n this.clearFilter();\n this.hideOverlay();\n }\n\n toggleMenu(event: Event) {\n this.overlayVisible.set(!this.overlayVisible());\n event.stopPropagation();\n }\n\n onToggleButtonKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible.set(false);\n break;\n\n case 'ArrowDown':\n if (this.overlayVisible()) {\n const focusable = DomHandler.getFocusableElements(<HTMLElement>this.overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n } else if (event.altKey) {\n this.overlayVisible.set(true);\n event.preventDefault();\n }\n break;\n }\n }\n\n onEscape() {\n this.overlayVisible.set(false);\n }\n\n onContentClick() {\n this.selfClick = true;\n }\n\n // onOverlayAnimationStart(event: AnimationEvent) {\n onOverlayAnimationStart(event: any) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n this.renderer.appendChild(this.document.body, this.overlay);\n ZIndexUtils.set('overlay', this.overlay, this.primeConfig.zIndex.overlay);\n DomHandler.absolutePosition(this.overlay, this.icon?.nativeElement);\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n\n this.overlayEventListener = (e: any) => {\n if (this.overlay && this.overlay.contains(e.target)) {\n this.selfClick = true;\n }\n };\n\n this.overlaySubscription = this.overlayService.clickObservable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.overlayEventListener);\n break;\n\n case 'void':\n this.onOverlayHide();\n this.overlaySubscription?.unsubscribe();\n break;\n }\n }\n\n // onOverlayAnimationEnd(event: AnimationEvent) {\n onOverlayAnimationEnd(event: any) {\n switch (event.toState) {\n case 'void':\n ZIndexUtils.clear(event.element);\n break;\n }\n }\n\n get noFilterLabel(): string {\n return this.primeConfig.getTranslation(TranslationKeys.NO_FILTER);\n }\n\n clearFilter() {\n this.initFilterConstraint(true);\n this.primeTable._filter();\n this.hideOverlay();\n }\n\n private generateMatchModeOptions() {\n let options: SelectItem[] | undefined = undefined;\n if (this.descriptor.filterType === FilterTypeEnum.String) {\n options = [\n {value: FilterMatchMode.Contains, label: this.primeConfig.getTranslation(FilterMatchMode.Contains)},\n {value: FilterMatchMode.NotContains, label: this.primeConfig.getTranslation(FilterMatchMode.NotContains)},\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.StartsWith, label: this.primeConfig.getTranslation(FilterMatchMode.StartsWith)},\n {value: FilterMatchMode.EndsWith, label: this.primeConfig.getTranslation(FilterMatchMode.EndsWith)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n } else if (this.descriptor.filterType === FilterTypeEnum.Boolean) {\n options = [{value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)}];\n } else if (this.descriptor.filterType === FilterTypeEnum.Number) {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThan, label: this.primeConfig.getTranslation(FilterMatchMode.LessThan)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThan, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThan)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n } else if (this.descriptor.filterType === FilterTypeEnum.Lookup || this.descriptor.filterType === FilterTypeEnum.LookupEnum) {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n\n if (this.lookupDescriptor?.multiselect) {\n options = [\n {value: FilterMatchMode.In, label: this.primeConfig.getTranslation(FilterMatchMode.In)},\n {value: FilterMatchMode.NotIn, label: this.primeConfig.getTranslation(FilterMatchMode.NotIn)}\n ];\n }\n } else if (this.descriptor.filterType === FilterTypeEnum.Date) {\n if (!this.descriptor.datePickerShowTime && !this.descriptor.datePickerValueNoTime && !this.dateOnlyDisabled) {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: this.primeConfig.getTranslation(FilterMatchMode.Between)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n } else {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: this.primeConfig.getTranslation(FilterMatchMode.Between)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n }\n }\n\n if (this.descriptor.matchModes) {\n options = this.descriptor.matchModes.map(mm => <SelectItem>{value: mm, label: this.primeConfig.getTranslation(mm)});\n }\n\n if (!options) {\n let primeMathcModeOptionByType: string[] | undefined = undefined;\n if (this.primeType === 'text') {\n primeMathcModeOptionByType = this.primeConfig.filterMatchModeOptions.text;\n } else if (this.primeType === 'numeric') {\n primeMathcModeOptionByType = this.primeConfig.filterMatchModeOptions.numeric;\n } else if (this.primeType === 'date') {\n primeMathcModeOptionByType = this.primeConfig.filterMatchModeOptions.date;\n }\n\n if (primeMathcModeOptionByType) {\n options = primeMathcModeOptionByType.map(key => ({label: this.primeConfig.getTranslation(key), value: key}));\n }\n }\n\n this.matchModes.set(options || []);\n }\n\n private getDefaultMatchMode(): string {\n let defaultMatchMode: FilterMatchModeExtendedType = FilterMatchMode.Contains;\n if (this.primeType === 'text') defaultMatchMode = FilterMatchMode.StartsWith;\n else if (this.primeType === 'numeric') defaultMatchMode = FilterMatchMode.Equals;\n else if (this.primeType === 'date') defaultMatchMode = FilterMatchMode.Equals;\n else if (this.primeType === 'lookup') defaultMatchMode = this.lookupDescriptor?.multiselect ? FilterMatchMode.In : FilterMatchMode.Equals;\n\n // overwrite type default set in descriptor\n if (this.descriptor.defaultMatchMode) {\n defaultMatchMode = this.descriptor.defaultMatchMode;\n }\n\n // check if default mode exists!\n if (this.matchModes().length > 0 && !this.matchModes().some(m => m.value === defaultMatchMode)) {\n defaultMatchMode = this.matchModes()[0].value;\n }\n\n return defaultMatchMode;\n }\n\n private findNextMenuModeItem(item: HTMLLIElement): any {\n const nextItem = <HTMLLIElement>item.nextElementSibling;\n\n if (nextItem) return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextMenuModeItem(nextItem) : nextItem;\n else return item.parentElement?.firstElementChild;\n }\n\n private findPrevMenuModeItem(item: HTMLLIElement): any {\n const prevItem = <HTMLLIElement>item.previousElementSibling;\n\n if (prevItem) return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevMenuModeItem(prevItem) : prevItem;\n else return item.parentElement?.lastElementChild;\n }\n\n private isOutsideClicked(event: any): boolean {\n return !(\n this.overlay?.isSameNode(event.target) ||\n this.overlay?.contains(event.target) ||\n this.icon?.nativeElement.isSameNode(event.target) ||\n this.icon?.nativeElement.contains(event.target) ||\n DomHandler.hasClass(event.target, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target, 'p-column-filter-remove-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button')\n );\n }\n\n private bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'click', event => {\n if (this.overlayVisible() && !this.selfClick && this.isOutsideClicked(event)) {\n this.hideOverlay();\n }\n\n this.selfClick = false;\n });\n }\n }\n\n private unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n this.selfClick = false;\n }\n }\n\n private bindDocumentResizeListener() {\n if (!this.documentResizeListener) {\n this.documentResizeListener = this.renderer.listen(this.window, 'resize', () => {\n if (this.overlayVisible() && !DomHandler.isTouchDevice()) {\n this.hideOverlay();\n }\n });\n }\n }\n\n private unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = null;\n }\n }\n\n private bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon?.nativeElement, () => {\n if (this.overlayVisible()) {\n this.hideOverlay();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n private unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n private hideOverlay() {\n this.overlayVisible.set(false);\n this.cd.markForCheck();\n }\n\n private onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n }\n\n private updateFilterValue(value: any) {\n this.filterConstraint.set({...this.filterConstraint(), value: value});\n this.updateDtFilter();\n }\n\n private updateDtFilter() {\n this.primeTable.filters[this.primeField] = this.filterConstraint()!;\n this.primeTable._filter();\n }\n\n private initFilterConstraint(reset = false) {\n if (reset) {\n const defaultMatchMode = this.getDefaultMatchMode();\n this.primeTable.filters[this.primeField] = {value: null, matchMode: defaultMatchMode};\n }\n\n // set internal filter constraint\n const metadata = this.primeTable.filters[this.primeField];\n if (Array.isArray(metadata)) {\n this.setFilterConstraint(metadata[0]);\n } else {\n this.setFilterConstraint(metadata);\n }\n }\n\n private setFilterConstraint(metadata?: PrimeFilterMetadata) {\n let matchMode = metadata?.matchMode ?? this.getDefaultMatchMode();\n let displayValue = metadata?.value;\n let displayMatchMode = matchMode;\n\n if (this.descriptor.filterType === FilterTypeEnum.Date && (this.descriptor.datePickerShowTime || this.descriptor.datePickerValueNoTime || this.dateOnlyDisabled)) {\n if (\n matchMode === FilterMatchMode.Between &&\n Array.isArray(metadata?.value) &&\n metadata?.value.length === 2 &&\n metadata?.value.every(v => v instanceof Date || typeof v === 'string' || typeof v === 'number')\n ) {\n const startDate = dateToIsoString(metadata.value[0] as Date | string | number);\n const endDate = dateToIsoString(metadata.value[1] as Date | string | number);\n\n // 2020-11-02T11:12:12.000\n const cmpLength = this.descriptor.datePickerShowTime ? (this.descriptor.datePickerShowSeconds ? 19 : 16) : 10;\n\n if (startDate.substring(0, cmpLength) === endDate.substring(0, cmpLength)) {\n displayMatchMode = FilterMatchMode.Equals;\n displayValue = new Date(metadata.value[0]);\n }\n } else if (matchMode === FilterMatchMode.Equals && !metadata?.value) {\n matchMode = FilterMatchMode.Between;\n }\n }\n\n this.filterConstraint.set({\n matchMode,\n value: metadata?.value,\n displayMatchMode,\n displayValue: displayValue ?? null\n });\n this.primeTable.filters[this.primeField] = this.filterConstraint()!;\n }\n}\n\ninterface FilterMetadata extends PrimeFilterMetadata {\n /**\n * The value used for display.\n */\n displayValue?: any;\n /**\n * The match mode for display.\n */\n displayMatchMode?: string;\n}\n","<div class=\"p-column-filter p-column-filter-row\">\n @switch (primeType) {\n @case ('text') {\n <input\n type=\"text\"\n pInputText\n class=\"mng-column-filter-string-input\"\n [value]=\"filterConstraint()?.displayValue\"\n [disabled]=\"isInputDisabled()\"\n (input)=\"onTextModelChange($event)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\"\n [attr.placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [mngInputTrim]=\"descriptor.trimOption\" />\n }\n @case ('numeric') {\n <p-inputNumber\n inputStyleClass=\"mng-column-filter-number-input\"\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"onNumericModelChange($event)\"\n (onKeyDown)=\"onNumericInputKeyDown($event)\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [useGrouping]=\"descriptor.numberUseGrouping\"\n [minFractionDigits]=\"descriptor.numberMinFractionDigits\"\n [maxFractionDigits]=\"descriptor.numberMaxFractionDigits\"\n [disabled]=\"isInputDisabled()\"></p-inputNumber>\n }\n\n @case ('boolean') {\n <p-triStateCheckbox [ngModel]=\"filterConstraint()?.displayValue\" (ngModelChange)=\"onTristateModelChange($event)\"></p-triStateCheckbox>\n }\n @case ('date') {\n @if (filterConstraint()?.displayMatchMode === 'between') {\n <mng-date-range\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"dateFilter($event)\"\n [showTime]=\"descriptor.datePickerShowTime\"\n [dateFormat]=\"descriptor.datePickerFormat\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [disabled]=\"isInputDisabled()\"></mng-date-range>\n } @else {\n <p-calendar\n appendTo=\"body\"\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"dateFilter($event)\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [showIcon]=\"true\"\n [dateFormat]=\"descriptor.datePickerFormat ?? 'dd.mm.yy'\"\n [showTime]=\"descriptor.datePickerShowTime\"\n [firstDayOfWeek]=\"1\">\n </p-calendar>\n }\n }\n @case ('lookup') {\n @if (lookupDescriptor) {\n @switch (lookupDescriptor.lookupType) {\n @case (lookupTypeAutocomplete) {\n <mng-autocomplete\n [ngModel]=\"filterConstraint()?.displayValue\"\n [dataProvider]=\"lookupDescriptor.dataProvider\"\n [optionsTrackProperty]=\"lookupDescriptor.optionsValueProperty\"\n [optionsValueProperty]=\"lookupDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupDescriptor.optionsLabelTranslate\"\n [multiselect]=\"lookupDescriptor.multiselect\"\n [autoClear]=\"lookupDescriptor.autocompleteAutoClear ?? false\"\n [openOnFocus]=\"lookupDescriptor.autocompleteAutoClear ?? true\"\n [inlineSearch]=\"lookupDescriptor.autocompleteInlineSearch ?? false\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.searchToFilter' | translate\"\n [className]=\"lookupDescriptor.className\"\n [dropdownClassName]=\"lookupDescriptor.dropdownClassName\"\n [disabled]=\"isInputDisabled()\"\n (valueChange)=\"autocompleteFilter($event)\"\n [searchTrim]=\"descriptor.trimOption\">\n </mng-autocomplete>\n }\n @case (lookupTypeDropdown) {\n <mng-dropdown\n [ngModel]=\"filterConstraint()?.displayValue\"\n [dataProvider]=\"lookupDescriptor.dataProvider\"\n [optionsValueProperty]=\"lookupDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupDescriptor.optionsLabelTranslate\"\n [multiselect]=\"lookupDescriptor.multiselect\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.selectToFilter' | translate\"\n [className]=\"lookupDescriptor.className\"\n [dropdownClassName]=\"lookupDescriptor.dropdownClassName\"\n [showClear]=\"false\"\n [changeValueOnBlur]=\"lookupDescriptor.multiselect\"\n [disabled]=\"isInputDisabled()\"\n (valueChange)=\"dropdownFilter($event)\">\n </mng-dropdown>\n }\n }\n }\n }\n }\n\n @if (matchModes().length > 1) {\n <button\n #icon\n type=\"button\"\n class=\"p-column-filter-menu-button p-link\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"overlayVisible()\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible(), 'p-column-filter-menu-button-active': isFilterSet()}\"\n (click)=\"toggleMenu($event)\"\n (keydown)=\"onToggleButtonKeyDown($event)\">\n <FilterIcon [styleClass]=\"'pi-filter-icon'\" />\n </button>\n }\n <button #icon [ngClass]=\"{'p-hidden-space': !isFilterSet()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\">\n <FilterSlashIcon />\n </button>\n @if (overlayVisible()) {\n <div\n class=\"p-column-filter-overlay p-component p-fluid\"\n (click)=\"onContentClick()\"\n [@overlayAnimation]=\"'visible'\"\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\n (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\"\n (keydown.escape)=\"onEscape()\">\n <ul class=\"p-column-filter-row-items\">\n @for (matchMode of matchModes(); track matchMode; let i = $index) {\n <li\n class=\"p-column-filter-row-item\"\n (click)=\"onMatchModeChange(matchMode.value)\"\n (keydown)=\"onMatchModeKeyDown($event)\"\n (keydown.enter)=\"this.onMatchModeChange(matchMode.value)\"\n [ngClass]=\"{'p-highlight': matchMode.value === filterConstraint()?.displayMatchMode}\"\n [attr.tabindex]=\"i === 0 ? '0' : null\">\n {{ matchMode.label }}\n </li>\n }\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">\n {{ noFilterLabel }}\n </li>\n </ul>\n </div>\n }\n</div>\n","import {CurrencyPipe, DatePipe, DecimalPipe} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, computed, inject, input} from '@angular/core';\n\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {MessageService} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {RippleModule} from 'primeng/ripple';\nimport {TooltipModule} from 'primeng/tooltip';\n\nimport {BooleanPipe, ComponentDirective, EnumPipe, GetterPipe, TemplatePipe} from '@mediusinc/mng-commons/core';\nimport {ColumnDescriptor, ColumnDisplayTypeEnum} from '@mediusinc/mng-commons/table/api';\n\n@Component({\n standalone: true,\n selector: 'mng-table-column-value',\n templateUrl: './column-value.component.html',\n styleUrls: ['./column-value.component.scss'],\n imports: [TooltipModule, TranslateModule, BooleanPipe, EnumPipe, ComponentDirective, ButtonModule, RippleModule, DecimalPipe, CurrencyPipe, DatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {'[class]': 'className()', '[style.max-width.px]': 'styleMaxWidth()'}\n})\nexport class TableColumnValueComponent<T, TT> {\n public readonly columnDisplayTypeString: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.String;\n public readonly columnDisplayTypeNumber: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Number;\n public readonly columnDisplayTypeCurrency: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Currency;\n public readonly columnDisplayTypeBoolean: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Boolean;\n public readonly columnDisplayTypeDate: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Date;\n public readonly columnDisplayTypeEnum: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Enum;\n public readonly columnDisplayTypeComponent: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Component;\n public readonly columnDisplayTypeHtml: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Html;\n\n private readonly elementRef = inject(ElementRef);\n private readonly messageService = inject(MessageService);\n private readonly translate = inject(TranslateService);\n\n private readonly getterPipe = new GetterPipe();\n private readonly templatePipe = new TemplatePipe();\n\n public descriptor = input.required<ColumnDescriptor<T, TT>>();\n public item = input.required<any>();\n\n public styleMaxWidth = computed(() => this.descriptor().maxWidth ?? null);\n public className = computed(() => {\n let className = 'nowrap';\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.String && this.descriptor().isMultiline) {\n className += ' multiline';\n }\n return className;\n });\n\n public value = computed<any>(() => {\n let value = this.item()?.[this.descriptor().property as keyof object];\n if (typeof this.descriptor().getter === 'function') {\n value = this.getterPipe.transform(this.item(), this.descriptor().getter, value);\n }\n if (this.descriptor().template) {\n value = this.templatePipe.transform(value, this.descriptor().template);\n }\n return value;\n });\n\n public currency = computed<string | undefined>(() => {\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.Currency) {\n return this.descriptor().currencyProperty ? this.item()[this.descriptor().currencyProperty!] : this.descriptor().currencyCode ?? 'EUR';\n }\n return;\n });\n\n public copyToClipboard(event: Event) {\n event.stopPropagation();\n let value = this.elementRef.nativeElement.innerText.trim();\n const clipboardValueGetter = this.descriptor().clipboardValueGetter;\n if (clipboardValueGetter) {\n value = clipboardValueGetter(this.value(), this.item());\n }\n navigator.clipboard.writeText(value);\n const title = this.translate.instant('mngTable.copyNotificationTitle');\n const message = this.translate.instant('mngTable.copyNotificationMessage', {value});\n this.messageService.add({severity: 'info', summary: title, detail: message});\n }\n}\n","@if (descriptor().localizationExistsProperty && !item()[descriptor().localizationExistsProperty!]) {\n <i class=\"pi pi-exclamation-circle\" [pTooltip]=\"'mngTable.translationMissing' | translate\"></i>\n}\n@switch (descriptor().columnDisplayType) {\n @case (columnDisplayTypeString) {\n @if (descriptor().hasValueAsTooltip) {\n <span [pTooltip]=\"value()\" tooltipPosition=\"left\">{{ value() }}</span>\n } @else {\n {{ value() }}\n }\n }\n @case (columnDisplayTypeHtml) {\n <span [innerHTML]=\"value()\"></span>\n }\n @case (columnDisplayTypeNumber) {\n {{ value() | number: descriptor().displayFormat : descriptor().locale }}\n }\n @case (columnDisplayTypeCurrency) {\n {{ value() | currency: currency() : descriptor().currencyDisplay : descriptor().displayFormat : descriptor().locale }}\n }\n @case (columnDisplayTypeDate) {\n {{ value() | date: descriptor().displayFormat }}\n }\n @case (columnDisplayTypeBoolean) {\n @if (descriptor().booleanAsIcon) {\n <i [class]=\"value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo : true\"></i>\n } @else {\n {{ value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo | translate }}\n }\n }\n @case (columnDisplayTypeEnum) {\n {{ value() | mngEnum: descriptor().enum | translate }}\n }\n @case (columnDisplayTypeComponent) {\n <ng-container\n [mngComponent]=\"descriptor().customComponentType!\"\n [inputs]=\"{\n value: value(),\n item: item(),\n descriptor: descriptor()\n }\"></ng-container>\n }\n}\n@if (descriptor().hasCopyToClipboard) {\n <div class=\"help-buttons\">\n <button pButton pRipple type=\"button\" icon=\"pi pi-copy\" class=\"p-button-rounded p-button-info p-button-sm\" (click)=\"copyToClipboard($event)\"></button>\n </div>\n}\n","import {TranslateService} from '@ngx-translate/core';\nimport {Message, MessageService} from 'primeng/api';\n\nimport {toastMessage} from '@mediusinc/mng-commons/core';\nimport {getI18nForModel} from '@mediusinc/mng-commons/model';\nimport {TableDescriptorInst} from '@mediusinc/mng-commons/table/api';\n\nexport function tableNotificationError(translate: TranslateService, table: TableDescriptorInst<any>, error: any, messageService: MessageService): Message {\n const params: any = {};\n if (error?.message) {\n params.errorMessage = `: ${error.message}`;\n } else {\n params.errorMessage = '.';\n }\n const tableErrorTitle = getI18nForModel(translate, table.model, 'table.error.title', undefined, undefined, 'general.error', params) ?? undefined;\n const tableErrorMessage = getI18nForModel(translate, table.model, 'table.error.message', undefined, undefined, 'general.errorMessage', params) ?? undefined;\n return toastMessage(messageService, tableErrorTitle, tableErrorMessage, 'error', 'pi-exclamation-triangle');\n}\n","/**\n * generates table layout preferences key used when saving preferences to localstorage\n * @param typeName string, required\n * @param url string, required\n * @param trackProperty string, not required\n */\nexport function generateTableLayoutPrefsKey(typeName: string, url: string, trackProperty?: string): string {\n return `commonsTableLayoutPrefs~~${typeName}~~${trackProperty ?? url.split('?')[0].split('#')[0]}`;\n}\n","import {Injector, Pipe, PipeTransform} from '@angular/core';\n\nimport {CommonsService} from '@mediusinc/mng-commons/core';\nimport {TableDescriptorInst} from '@mediusinc/mng-commons/table/api';\n\n@Pipe({\n standalone: true,\n name: 'mngLocaleDefaultRowClass',\n pure: true\n})\nexport class LocaleDefaultRowClassPipe<T> implements PipeTransform {\n constructor(private injector: Injector) {}\n\n transform(value?: any, descriptor?: TableDescriptorInst<T>, item?: T): string {\n if (descriptor?.isLocalized) {\n if ((item as any)[descriptor.localizationLocaleProperty!] === this.injector.get(CommonsService).getDefaultLocale()) {\n return value + ' all-translations-default-value';\n }\n }\n return value ?? '';\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nimport {FilterDescriptor, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\n\n@Pipe({\n standalone: true,\n pure: true,\n name: 'mngTableColumnFilterClass'\n})\nexport class TableColumnFilterClassPipe implements PipeTransform {\n transform(value: unknown, filter: FilterDescriptor<any, any> | undefined, isEnabled: boolean): string {\n const strValue = typeof value === 'string' ? value : '';\n if (isEnabled && filter?.filterType !== undefined) {\n return `${strValue} mng-column-filter-${FilterTypeEnum[filter.filterType].toLowerCase()}`;\n } else {\n return strValue;\n }\n }\n}\n","import {AsyncPipe, NgClass, NgStyle, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n OnDestroy,\n Signal,\n TemplateRef,\n Type,\n afterNextRender,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {outputFromObservable, toObservable} from '@angular/core/rxjs-interop';\nimport {FormsModule} from '@angular/forms';\nimport {ActivatedRoute, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Params, Router} from '@angular/router';\n\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {FilterMetadata, MessageService, SortMeta} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {MultiSelectChangeEvent, MultiSelectModule} from 'primeng/multiselect';\nimport {Table, TableColumnReorderEvent, TableLazyLoadEvent, TableModule} from 'primeng/table';\nimport {TooltipModule} from 'primeng/tooltip';\nimport {NEVER, Subject, Subscription, combineLatest, of, switchMap} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\nimport {\n ClassMapPipe,\n CommonsService,\n ComponentDirective,\n DataListParams,\n DataListResult,\n FilterMatchMode,\n I18nPropertyPipe,\n LocalStorageService,\n LoggerService,\n TemplateDirective,\n booleanOrUndefinedAttribute,\n toObservable as commonsToObservable,\n dataListParamsToUrlQuery,\n findTemplateByName,\n fromSubscribeError,\n fromTableLoadToDataListParams,\n fromUrlQueryToDataListParams,\n getErrorLogLevel,\n mergeDataListParamsWithDefaults\n} from '@mediusinc/mng-commons/core';\nimport {FilterLookupDescriptor, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {\n ColumnDescriptor,\n ITableDataProvider,\n TableCellClickEvent,\n TableDescriptorInst,\n TableDynamicDescriptorInst,\n TableLayoutPreferences,\n TableLoadEvent,\n TablePaginationModeEnum,\n TableSizeEnum,\n tableDescriptor\n} from '@mediusinc/mng-commons/table/api';\n\nimport {tableNotificationError} from '../../helpers/notification';\nimport {generateTableLayoutPrefsKey} from '../../helpers/table-layout-prefs';\nimport {ColumnWithPreferences} from '../../models/column-preferences.model';\nimport {LocaleDefaultRowClassPipe} from '../../pipes/locale-default-row-class.pipe';\nimport {TableColumnFilterClassPipe} from '../../pipes/table-column-filter-class.pipe';\nimport {DataListService} from '../../services/data-list.service';\nimport {TableColumnFilterFullComponent} from '../column-filter-full/column-filter-full.component';\nimport {TableColumnValueComponent} from '../column-value/column-value.component';\n\n@Component({\n standalone: true,\n selector: 'mng-table',\n templateUrl: './table.component.html',\n imports: [\n AsyncPipe,\n ComponentDirective,\n I18nPropertyPipe,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n TableColumnValueComponent,\n ClassMapPipe,\n LocaleDefaultRowClassPipe,\n TableColumnFilterFullComponent,\n TableColumnFilterClassPipe,\n TableModule,\n MultiSelectModule,\n ButtonModule,\n TooltipModule,\n TranslateModule,\n FormsModule\n ],\n providers: [DataListService],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent<Item = any, Service = undefined, Sorts = any, Filters extends keyof any = any> implements OnDestroy {\n public readonly cmpTypeName = 'TableComponent';\n\n private readonly logger = inject(LoggerService).create(this.cmpTypeName);\n private readonly injector = inject(Injector);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly translate = inject(TranslateService);\n private readonly messageService = inject(MessageService);\n private readonly commons = inject(CommonsService);\n private readonly localStorageService = inject(LocalStorageService);\n public readonly dataListService = inject(DataListService<Item>);\n\n // metadata input\n public descriptorInput = input.required<TableDescriptorInst<Item, Sorts, Filters>>({alias: 'descriptor'});\n\n // data source inputs\n public items = input<Item[]>();\n public result = input<DataListResult<Item>>();\n public loadingInput = input(undefined, {alias: 'loading', transform: booleanOrUndefinedAttribute});\n public dataProvider = input<ITableDataProvider<Item, Service, Sorts, Filters>>();\n\n // extra features input\n public useQueryParamsInput = input(false, {alias: 'useQueryParams'});\n public cellClickEnabled = input(true);\n public selectionMode = input<'single' | 'multiple'>('multiple');\n public selectionEnabled = input(false);\n\n // styling\n public columnLastMinWidth = input<number>();\n\n // component inputs\n public captionComponent = input<Type<any>>();\n public columnCustomLastComponent = input<Type<any>>();\n public globalFilterFieldsInput = input<string[] | undefined>(undefined, {alias: 'globalFilterFields'});\n\n // cell click\n private cellClickSubject = new Subject<TableCellClickEvent<Item>>();\n public isCellClickObserved = signal(this.cellClickSubject.observed);\n public isCellClickEnabled = computed(() => this.cellClickEnabled() && this.isCellClickObserved());\n\n // event outputs\n public tableLoad = output<TableLoadEvent>();\n public cellClick = outputFromObservable(this.cellClickSubject);\n public selectionChange = output<Array<Item>>();\n public captionComponentInstance = output<any>();\n public columnCustomLastComponentInstance = output<any>();\n\n // content and view queries\n public templates = contentChildren(TemplateDirective);\n public components = viewChildren(ComponentDirective<any>);\n public primeTable = viewChild.required(Table);\n\n // templates\n public captionTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'caption'));\n public columnCustomLastTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'columnCustomLast'));\n public footerTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'footer'));\n public rowExpandTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'rowExpandContent'));\n\n // data provider and items\n public useQueryParams = computed(() => (this.paginationMode() === TablePaginationModeEnum.InfiniteScroll ? false : this.useQueryParamsInput()));\n public isLazy = computed(() => this.dataProvider()?.isLazy === true);\n public isPagination = computed(() => this.paginationMode() === TablePaginationModeEnum.Pagination);\n public useQueryParamsInitialized = signal(false);\n\n // visual\n private paginationMode = computed(() => {\n if (typeof this.descriptor().paginationMode !== 'undefined') {\n // descriptor choice is the most strong - if defined, use this value\n return this.descriptor().paginationMode;\n } else if (typeof this.dataProvider() !== 'undefined') {\n // when data provider is used, use pagination\n return TablePaginationModeEnum.Pagination;\n } else {\n return TablePaginationModeEnum.None;\n }\n });\n public infiniteScroll = computed(() => this.paginationMode() === TablePaginationModeEnum.InfiniteScroll);\n public className = computed(() => {\n let className = this.descriptor().className ?? '';\n switch (this.descriptor().size) {\n case TableSizeEnum.Small:\n className += ' p-datatable-sm';\n break;\n case TableSizeEnum.Large:\n className += ' p-datatable-lg';\n break;\n }\n if (this.descriptor().hasGridlines) {\n className += ' p-datatable-gridlines';\n }\n return className;\n });\n public tableFullHeightOffset = computed(() => (this.paginationMode() === TablePaginationModeEnum.InfiniteScroll ? this.descriptor().tableFullHeightOffset ?? 315 : undefined));\n public rowHeight = computed(() => (this.paginationMode() === TablePaginationModeEnum.InfiniteScroll ? this.descriptor().rowHeight ?? 45 : undefined));\n\n // data provider\n private dataProviderService = computed(() => {\n const dataProvider = this.dataProvider();\n return dataProvider?.serviceType ? this.injector.get<any>(dataProvider.serviceType) : null;\n });\n private dataProviderLatestLazyLoadEvent?: TableLazyLoadEvent;\n private latestLazyLoadEventVersion = 0;\n private latestParamsWithDefaults?: DataListParams;\n private latestParamsWithDefaultsVersion = 0;\n private dataProviderSubscription?: Subscription;\n\n // descriptors\n public descriptor = signal<TableDescriptorInst<any, any, any>>(tableDescriptor<string, string, string>());\n private localstorageKey = computed(() => {\n const descriptor = this.descriptor();\n return descriptor.model.typeName || descriptor.model.i18nBaseKey\n ? generateTableLayoutPrefsKey(descriptor.model.typeName ?? descriptor.model.i18nBaseKey, this.router.url, descriptor.identifier)\n : null;\n });\n private layoutPrefsSaveCnt = signal(0);\n private layoutPreferences = computed(() => {\n const lsKey = this.localstorageKey();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const cnt = this.layoutPrefsSaveCnt(); // needed to force updates on user changes\n const layoutPrefs = lsKey ? this.localStorageService.getItem<TableLayoutPreferences>(this.cmpTypeName, lsKey) : undefined;\n return layoutPrefs ?? {columnWidths: {}};\n });\n public columns = computed<ColumnWithPreferences[]>(() => this.computColumnsWithLayout());\n public visibleColumns = computed(() => this.columns().filter(col => col.isVisible));\n\n // filter, sort\n public hasColumnFilters = computed(() => this.filterDescriptors().length > 0);\n private filterDescriptors = computed(() => this.descriptor().filters);\n private defaultParams = computed(() => this.computeDefaultDataListParams());\n private isFilterChanged = false;\n private isSortChanged = false;\n\n public anyColumnVisible = computed(() => this.visibleColumns().length > 0);\n public hasCustomLastColumn = computed(() => this.columnCustomLastComponent || this.columnCustomLastTemplate());\n public hasLastColumn = computed(() => this.hasCustomLastColumn() || this.areColumnsToggleable() || this.areColumnsReorderable());\n\n // layout prefs\n public areColumnsReorderable = computed(() => this.descriptor().columns.some(value => value.isReorderable));\n public areColumnsToggleable = computed(() => this.descriptor().columns.some(value => value.isToggleable));\n\n // other\n private routerIsNavigationOutsideInProgress = false;\n\n constructor() {\n effect(\n () => {\n const descriptor = this.descriptor();\n if (Array.isArray(descriptor.rowsPerPageOptions) && descriptor.rowsPerPageOptions.length > 0) {\n this.dataListService.rowsPerPageOptions.set(descriptor.rowsPerPageOptions);\n }\n if (descriptor.defaultNumRows) {\n this.dataListService.rows.set(\n this.dataListService.rowsPerPageOptions().includes(descriptor.defaultNumRows) ? descriptor.defaultNumRows : this.dataListService.rowsPerPageOptions()[0]\n );\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const loading = this.loadingInput();\n if (loading !== undefined) {\n this.dataListService.loading.set(loading);\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const result = this.result();\n if (result !== undefined) {\n this.dataListService.data.set(result.data);\n this.dataListService.count.set(result.totalCount ?? result.data.length);\n const loading = this.loadingInput();\n if (loading == undefined) {\n // only set if input is not defined\n this.dataListService.loading.set(false);\n }\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const result = this.result();\n const items = this.items();\n if (result == undefined && items !== undefined) {\n this.dataListService.data.set(items);\n this.dataListService.count.set(items.length);\n const loading = this.loadingInput();\n if (loading == undefined) {\n // only set if input is not defined\n this.dataListService.loading.set(false);\n }\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n this.dataListService.globalFilterFields.set(this.globalFilterFieldsInput() ?? this.columns().map(c => c.descriptor.property));\n },\n {allowSignalWrites: true}\n );\n\n afterNextRender(() => {\n this.isCellClickObserved.set(this.cellClickSubject.observed);\n });\n\n toObservable(this.dataProvider)\n .pipe(switchMap(dp => dp?.getAllReload$ ?? of({})))\n .subscribe({\n next: () => {\n this.reload();\n }\n });\n\n combineLatest([toObservable(this.descriptorInput), toObservable(this.dataProvider), toObservable(this.useQueryParams)])\n .pipe(\n // dataProvider is needed to ensure correct order of execution and reload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n switchMap(([descriptorInput, dataProvider, useQueryParams]) => {\n if (descriptorInput !== this.descriptor()) {\n this.descriptor.set(descriptorInput);\n }\n if (useQueryParams) {\n // trigger table loads from route updates\n return this.route.queryParams;\n } else {\n return of(null);\n }\n })\n )\n .subscribe(qp => {\n if (qp === null) {\n // load data immediately by creating default sorts and filters (primeng will trigger onLazyLoad event on sort&filter metadata change)\n const defaultSort = this.createSortMeta(this.defaultParams());\n if (!defaultSort || defaultSort.length > 0) {\n this.dataListService.sortMeta.set(defaultSort);\n }\n\n const defaultFilter = this.createFilterMeta();\n if (defaultFilter) {\n this.dataListService.filterMeta.set(defaultFilter);\n }\n this.loadTableWithDataProvider({});\n } else {\n this.loadTableFromRouteUpdate(qp);\n }\n });\n\n toObservable(this.useQueryParams)\n .pipe(\n switchMap(useQp => (useQp ? this.router.events : NEVER)),\n filter(\n e =>\n (e instanceof NavigationStart && e.url.split('?')[0].split('#')[0] !== this.router.url.split('?')[0].split('#')[0]) ||\n e instanceof NavigationEnd ||\n e instanceof NavigationCancel ||\n e instanceof NavigationError\n )\n )\n .subscribe(e => {\n this.routerIsNavigationOutsideInProgress = e instanceof NavigationStart;\n });\n }\n\n public ngOnDestroy() {\n this.dataProviderSubscription?.unsubscribe();\n }\n\n public reload(emitEvent = false, resetParams = false) {\n const paramsWithDefaults: DataListParams =\n resetParams || !this.latestParamsWithDefaults ? this.defaultParams() : mergeDataListParamsWithDefaults(this.latestParamsWithDefaults, this.defaultParams());\n this.loadTableWithDataProvider(paramsWithDefaults, emitEvent);\n }\n\n public onTableLazyLoad(event: TableLazyLoadEvent) {\n this.dataProviderLatestLazyLoadEvent = event;\n this.latestLazyLoadEventVersion++;\n\n const params = fromTableLoadToDataListParams(event);\n\n if (this.useQueryParams()) {\n if (!this.routerIsNavigationOutsideInProgress) {\n // this check is necessary: from some reason, primeNG commits one last lazy load event whenever any angular router navigation occurs\n this.router.navigate([], {\n relativeTo: this.route,\n replaceUrl: true,\n queryParams: dataListParamsToUrlQuery(params, this.defaultParams())\n });\n }\n } else {\n this.loadTableWithDataProvider(mergeDataListParamsWithDefaults(params, this.defaultParams()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onTableSort(event: any) {\n this.isSortChanged = true;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onTableFilter(event: any) {\n this.isFilterChanged = true;\n }\n\n public onCellClick(event: Event, col: ColumnDescriptor<any, Item>, item: Item, idx: number) {\n if (!this.isCellClickEnabled()) {\n return;\n }\n const tableEvent: TableCellClickEvent<Item> = {\n column: col,\n rowItem: item,\n rowIndex: idx,\n event: event\n };\n this.cellClickSubject.next(tableEvent);\n }\n\n public onSelectionChange(event: Array<Item>) {\n this.selectionChange.emit(event);\n }\n\n /**\n * Method is called on column resize\n * @param element event's element\n */\n public onTableColumnResize({element}: any): void {\n const fieldId: string = element.id;\n const width: number = element.offsetWidth;\n\n const layoutPrefs = this.layoutPreferences();\n const col = this.columns().find(el => el.descriptor.property === fieldId);\n if (col) col.width = width;\n if (!layoutPrefs.columnWidths) layoutPrefs.columnWidths = {};\n\n layoutPrefs.columnWidths[fieldId] = width;\n this.saveLayoutPreferences(layoutPrefs);\n }\n\n private loadTableWithDataProvider(paramsWithDefaults: DataListParams, emitEvent = true) {\n const dataProvider = this.dataProvider();\n if (!dataProvider || paramsWithDefaults.limit === 0) {\n return;\n }\n\n this.dataProviderSubscription?.unsubscribe();\n this.dataListService.loading.set(true);\n\n this.latestParamsWithDefaults = paramsWithDefaults;\n this.latestParamsWithDefaultsVersion++;\n\n this.dataProviderSubscription = commonsToObservable(\n dataProvider.getAll(\n paramsWithDefaults as DataListParams<Sorts, Filters>,\n this.dataProviderService(),\n this.descriptor().isLocalized ? this.commons.appDataLocale() ?? undefined : undefined\n )\n ).subscribe({\n next: res => {\n const descriptorInput = this.descriptorInput();\n if (descriptorInput instanceof TableDynamicDescriptorInst) {\n this.descriptor.set(descriptorInput.toTableDescriptorFromData(res));\n }\n\n if (this.infiniteScroll()) {\n let items = this.dataListService.data();\n if (this.isFilterChanged || this.isSortChanged) {\n items = [];\n }\n items.splice(paramsWithDefaults!.offset ?? 0, paramsWithDefaults!.limit ?? this.dataListService.rows(), ...(res?.data ?? []));\n this.dataListService.data.set(items);\n } else {\n this.dataListService.data.set(res?.data ?? []);\n }\n\n this.dataListService.count.set(res?.totalCount ?? 0); // count is not really important here\n\n this.isFilterChanged = false;\n this.isSortChanged = false;\n this.dataListService.loading.set(false);\n },\n error: err => {\n tableNotificationError(this.translate, this.descriptor(), err, this.messageService);\n this.dataListService.data.set([]);\n this.dataListService.count.set(0);\n this.dataListService.loading.set(false);\n\n const error = fromSubscribeError(err, 'TableComponentError', {\n queryParam: paramsWithDefaults\n });\n this.logger.log(error, getErrorLogLevel(error));\n }\n });\n\n if (emitEvent) {\n const tableEvent: TableLoadEvent = {\n originalEvent: this.dataProviderLatestLazyLoadEvent,\n params: paramsWithDefaults\n };\n this.tableLoad.emit(tableEvent);\n }\n }\n\n private loadTableFromRouteUpdate(urlParams: Params) {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(fromUrlQueryToDataListParams(urlParams), this.defaultParams());\n if (this.latestLazyLoadEventVersion < this.latestParamsWithDefaultsVersion + 1) {\n // update only if new version from query params will be higher\n this.updatePrimeSortAndFilter(paramsWithDefaults);\n }\n this.useQueryParamsInitialized.set(true);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n\n private updatePrimeSortAndFilter(paramsWithDefaults: DataListParams) {\n this.dataListService.sortMeta.set(this.createSortMeta(paramsWithDefaults));\n this.dataListService.filterMeta.set(this.createFilterMeta(paramsWithDefaults));\n this.dataListService.rows.set(paramsWithDefaults?.limit ?? this.dataListService.rows());\n this.dataListService.offset.set(paramsWithDefaults?.offset ?? 0);\n }\n\n private createFilterMeta(paramsWithDefaults?: DataListParams) {\n const primeFilterMeta: {[s: string]: FilterMetadata} = {};\n // if any filter is present, no default filters should be applied!\n if (paramsWithDefaults?.filters) {\n Object.entries(paramsWithDefaults.filters).forEach(([key, value]) => {\n primeFilterMeta[key] = {\n value: value.value,\n matchMode: value.matchMode\n };\n });\n }\n\n return primeFilterMeta;\n }\n\n private createSortMeta(paramsWithDefaults?: DataListParams): SortMeta[] | null {\n if (paramsWithDefaults?.sort !== undefined && Array.isArray(paramsWithDefaults?.sort) && paramsWithDefaults?.sort.length > 0) {\n return paramsWithDefaults?.sort.map(\n s =>\n <SortMeta>{\n field: s.property,\n order: s.ascending ? 1 : -1\n }\n );\n }\n\n return null;\n }\n\n public onColumnToggle(event: MultiSelectChangeEvent) {\n const layoutPrefs = this.layoutPreferences();\n const selectedColumns = (event.value as ColumnWithPreferences[]).map(v => v.descriptor.property);\n const hiddenColumns = this.columns()\n .filter(c => selectedColumns.indexOf(c.descriptor.property) < 0)\n .map(c => c.descriptor.property);\n layoutPrefs.columnHidden = hiddenColumns;\n this.saveLayoutPreferences(layoutPrefs);\n }\n\n public onColumnToggleAll() {\n const layoutPrefs = this.layoutPreferences();\n const columns = [...this.columns()];\n const isVisible = !this.columns().some(c => c.isVisible);\n for (const col of columns) {\n if (isVisible !== col.isVisible) {\n col.isVisible = isVisible;\n }\n }\n layoutPrefs.columnHidden = columns.filter(c => !c.isVisible).map(c => c.descriptor.property);\n this.saveLayoutPreferences(layoutPrefs);\n }\n\n public onColumnReorder(event: TableColumnReorderEvent) {\n if (event.dropIndex !== undefined && event.dropIndex >= 0 && event.dragIndex !== undefined && event.dragIndex >= 0 && event.dropIndex !== event.dragIndex) {\n const eventDropIndex = event.dropIndex;\n const eventDragIndex = event.dragIndex;\n const prevVisibleColumns = this.columns().filter(c => c.isVisible);\n const colAtDrop = prevVisibleColumns[eventDropIndex];\n const colAtDrag = prevVisibleColumns[eventDragIndex];\n const colAtDropIndex = this.columns().findIndex(el => el.id === colAtDrop.id);\n const colAtDragIndex = this.columns().findIndex(el => el.id === colAtDrag.id);\n\n if (colAtDropIndex > -1 && colAtDragIndex > -1) {\n let columns = [...this.columns()];\n columns.splice(colAtDragIndex, 1);\n const dropIndex = columns.findIndex(el => el.id === colAtDrop.id) + (eventDropIndex > eventDragIndex ? 1 : 0);\n columns = [...columns.slice(0, dropIndex), colAtDrag, ...columns.slice(dropIndex)];\n const layoutPrefs = this.layoutPreferences();\n layoutPrefs.columnOrder = columns.map(el => el.descriptor.property);\n this.saveLayoutPreferences(layoutPrefs);\n }\n }\n }\n\n private saveLayoutPreferences(layoutPrefs: TableLayoutPreferences) {\n const key = this.localstorageKey();\n if (key) {\n this.localStorageService.setItem(this.cmpTypeName, key, layoutPrefs);\n this.layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n\n private computeDefaultDataListParams() {\n const params: DataListParams = {\n offset: 0,\n limit: this.dataListService.rowsPerPageOptions()[0],\n sort: this.descriptor()\n .sorts.filter(s => s.defaultIsEnabled)\n .map(s => ({\n property: s.property,\n ascending: s.defaultIsAscending\n })),\n filters: {}\n };\n\n this.filterDescriptors()\n .filter(d => d.hasDefaultValue)\n .forEach(f => {\n let matchMode: string | undefined = f.defaultMatchMode;\n if (!matchMode) {\n switch (f.filterType) {\n case FilterTypeEnum.String:\n matchMode = FilterMatchMode.Contains;\n break;\n case FilterTypeEnum.Lookup:\n case FilterTypeEnum.LookupEnum: {\n const lookupFilter = f as FilterLookupDescriptor<any, Item>;\n if (lookupFilter.multiselect) {\n matchMode = FilterMatchMode.In;\n }\n break;\n }\n default:\n break;\n }\n }\n if (!matchMode) {\n matchMode = FilterMatchMode.Equals;\n }\n\n if (f.matchModes && !f.matchModes?.includes(matchMode)) {\n matchMode = f.matchModes[0];\n }\n\n let value: any | any[] | undefined = undefined;\n if (Array.isArray(value)) {\n value = [...value];\n } else {\n value = f.defaultValue;\n }\n\n const property = f.property;\n params.filters![property] = {\n value: value,\n matchMode: matchMode\n };\n });\n\n return params;\n }\n\n private computColumnsWithLayout() {\n const descriptor = this.descriptor();\n const layoutPrefs = this.layoutPreferences();\n\n // initialize columns with additional properties\n const timestamp = new Date().getTime();\n const columns: ColumnWithPreferences[] = descriptor.columns.map(col => ({\n id: `${col.property}-${timestamp}`,\n descriptor: col,\n filter: descriptor.filters.find(f => f.showOnColumn === col.property),\n sort: descriptor.sorts.find(f => f.showOnColumn === col.property),\n disabled: !col.isToggleable,\n isVisible: layoutPrefs.columnHidden ? !layoutPrefs.columnHidden.includes(col.property) : col.isVisible,\n width: layoutPrefs.columnWidths?.[col.property]\n }));\n\n if (layoutPrefs.columnOrder) {\n for (let i = 0; i < layoutPrefs.columnOrder.length; i++) {\n const colName = layoutPrefs.columnOrder[i];\n const colWithPrefs = columns.find(el => el.descriptor.property === colName);\n if (colWithPrefs) {\n colWithPrefs.orderIdx = i;\n }\n }\n }\n\n return columns.sort((a, b) => (a.orderIdx !== undefined && b.orderIdx !== undefined ? a.orderIdx - b.orderIdx : 0));\n }\n\n /**\n * Reset column order and column visibility to default settings\n */\n public resetDefaultLayout() {\n const key = this.localstorageKey();\n if (key) {\n this.localStorageService.removeItem(this.cmpTypeName, key);\n this.layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n}\n","<div [style.height]=\"tableFullHeightOffset() ? 'calc(100vh - ' + tableFullHeightOffset() + 'px)' : null\">\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\n @if (!useQueryParams() || useQueryParamsInitialized()) {\n <p-table\n [value]=\"dataListService.data()\"\n [dataKey]=\"descriptor().trackProperty\"\n [lazy]=\"isLazy()\"\n [loading]=\"dataListService.loading()\"\n [paginator]=\"isPagination() && !infiniteScroll()\"\n [rows]=\"infiniteScroll() ? 20 : dataListService.rows()\"\n [first]=\"infiniteScroll() ? 0 : dataListService.offset()\"\n [totalRecords]=\"dataListService.count()\"\n [rowsPerPageOptions]=\"infiniteScroll() ? undefined : dataListService.rowsPerPageOptions()\"\n [showCurrentPageReport]=\"!infiniteScroll()\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"dataListService.sortMeta()\"\n [filters]=\"dataListService.filterMeta()\"\n [globalFilterFields]=\"dataListService.globalFilterFields()\"\n sortMode=\"multiple\"\n [selection]=\"[]\"\n (selectionChange)=\"onSelectionChange($event)\"\n [selectionMode]=\"selectionEnabled() ? selectionMode() : null\"\n [scrollable]=\"true\"\n [virtualScroll]=\"infiniteScroll()\"\n [virtualScrollItemSize]=\"rowHeight()\"\n scrollHeight=\"flex\"\n [rowHover]=\"descriptor().hasHover\"\n [styleClass]=\"className()\"\n [resizableColumns]=\"descriptor().hasResizableColumns\"\n [columnResizeMode]=\"descriptor().columnResizeMode ?? 'expand'\"\n [reorderableColumns]=\"areColumnsReorderable()\"\n paginatorDropdownAppendTo=\"body\"\n [columns]=\"visibleColumns()\"\n (onColResize)=\"onTableColumnResize($event)\"\n (onColReorder)=\"onColumnReorder($event)\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n (onSort)=\"onTableSort($event)\"\n (onFilter)=\"onTableFilter($event)\">\n @if (captionTemplate() || captionComponent() || descriptor().title) {\n <ng-template pTemplate=\"caption\">\n @if (captionTemplate()) {\n <ng-container *ngTemplateOutlet=\"captionTemplate()\"></ng-container>\n } @else if (captionComponent()) {\n <div [mngComponent]=\"captionComponent()\" (instanceCreated)=\"captionComponentInstance.emit($event)\"></div>\n } @else {\n <h5 class=\"p-0 m-0\">{{ descriptor().title }}</h5>\n }\n </ng-template>\n }\n <ng-template pTemplate=\"header\">\n @if (!descriptor().hideHeader) {\n <tr class=\"mng-table-header\" [class]=\"descriptor().headerClassName\">\n @if (selectionEnabled()) {\n @if (selectionMode() === 'multiple') {\n <th style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n } @else {\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\"></th>\n }\n }\n @if (descriptor().rowExpandable) {\n <th scope=\"col\" class=\"col-1\" pFrozenColumn [frozen]=\"true\"></th>\n }\n @for (col of visibleColumns(); track col.id) {\n <ng-template #sortableColumnTHTemplate>\n <div class=\"flex justify-content-between align-items-center\">\n {{ col.descriptor.title ?? (col.descriptor.property | mngI18nProperty: descriptor().model) | translate }}\n <p-sortIcon [field]=\"col.descriptor.property\"></p-sortIcon>\n </div>\n </ng-template>\n <ng-template #nonSortableColumnTHTemplate>\n {{ col.descriptor.title ?? (col.descriptor.property | mngI18nProperty: descriptor().model) | translate }}\n </ng-template>\n @if (col.descriptor.isReorderable) {\n <th\n pResizableColumn\n pReorderableColumn\n [id]=\"col.descriptor.property\"\n [pSortableColumn]=\"col.sort?.property\"\n [pSortableColumnDisabled]=\"!col.sort\"\n [style.width]=\"col.width ? col.width + 'px' : col.descriptor.width + '%'\"\n [style.min-width.px]=\"col.width ? null : col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\"\n [class]=\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\">\n <ng-container *ngTemplateOutlet=\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\"></ng-container>\n </th>\n } @else {\n <th\n pResizableColumn\n [id]=\"col.descriptor.property\"\n [pSortableColumn]=\"col.sort?.property\"\n [pSortableColumnDisabled]=\"!col.sort\"\n [style.width]=\"col.width ? col.width + 'px' : col.descriptor.width + '%'\"\n [style.min-width.px]=\"col.width ? null : col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\"\n [class]=\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\">\n <ng-container *ngTemplateOutlet=\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\"></ng-container>\n </th>\n }\n }\n @if (hasLastColumn()) {\n <th\n [style.min-width.px]=\"columnLastMinWidth()\"\n pFrozenColumn\n [frozen]=\"descriptor().actionColumnFrozen ?? areColumnsToggleable()\"\n alignFrozen=\"right\"\n class=\"column-custom-last text-right\">\n @if (descriptor().hasResizableColumns) {\n <p-multiSelect\n #columnToggleMultiselect\n styleClass=\"p-button-primary mng-table-columns-multiselect\"\n appendTo=\"body\"\n dataKey=\"id\"\n tooltipPosition=\"left\"\n placeholder=\"\"\n dropdownIcon=\"pi pi-sliders-h\"\n [filter]=\"false\"\n [options]=\"columns()\"\n [ngModel]=\"visibleColumns()\"\n [pTooltip]=\"'mngTable.adjustTable' | translate\"\n [displaySelectedLabel]=\"false\"\n (onChange)=\"onColumnToggle($event)\">\n <ng-template pTemplate=\"filter\">\n <div class=\"p-checkbox p-component ml-1\" [ngClass]=\"{'p-checkbox-disabled': !areColumnsToggleable}\">\n <div class=\"p-hidden-accessible\">\n <input\n type=\"checkbox\"\n readonly=\"readonly\"\n [checked]=\"columnToggleMultiselect.allSelected\"\n (focus)=\"columnToggleMultiselect.onHeaderCheckboxFocus()\"\n (blur)=\"columnToggleMultiselect.onHeaderCheckboxBlur()\"\n (keydown.space)=\"columnToggleMultiselect.onToggleAll($event)\"\n [disabled]=\"!areColumnsToggleable\" />\n </div>\n <div\n class=\"p-checkbox-box\"\n role=\"checkbox\"\n [attr.aria-checked]=\"columnToggleMultiselect.allSelected\"\n [ngClass]=\"{\n 'p-highlight': anyColumnVisible()\n }\"\n (click)=\"onColumnToggleAll()\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check': anyColumnVisible()}\"></span>\n </div>\n </div>\n <p-button\n icon=\"pi pi-replay\"\n styleClass=\"p-button-secondary\"\n [pTooltip]=\"'mngTable.resetLayout' | translate\"\n tooltipPosition=\"left\"\n (click)=\"resetDefaultLayout()\"></p-button>\n </ng-template>\n <ng-template let-item pTemplate=\"item\">\n {{ item.descriptor.title ?? (item.descriptor.property | mngI18nProperty: descriptor().model) | translate }}\n </ng-template>\n </p-multiSelect>\n }\n </th>\n }\n </tr>\n }\n @if (hasColumnFilters()) {\n <tr class=\"mng-column-filter-row\">\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n @if (selectionEnabled()) {\n <th style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\"></th>\n }\n @for (col of visibleColumns(); track col.id) {\n <th\n [class]=\"col.filter?.columnClassName | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\"\n [style.width.px]=\"col.width\"\n [style.width.%]=\"col.width ? null : col.filter?.columnWidth ?? col.descriptor.width ?? null\"\n [style.min-width.px]=\"col.width ? null : col.filter?.columnMinWidth ?? col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\">\n @if (col.filter) {\n <mng-table-column-filter-full [descriptor]=\"col.filter\"></mng-table-column-filter-full>\n }\n </th>\n }\n @if (hasLastColumn()) {\n <th class=\"column-custom-last\" [style.min-width.px]=\"columnLastMinWidth()\"></th>\n }\n </tr>\n }\n </ng-template>\n <ng-template pTemplate=\"body\" let-item let-idx=\"rowIndex\" let-expanded=\"expanded\">\n <tr\n [style.height.px]=\"rowHeight()\"\n [ngClass]=\"descriptor().rowClassName | mngClassMap: descriptor().rowClassNameMapFn : item | mngLocaleDefaultRowClass: descriptor() : item\">\n @if (selectionEnabled()) {\n @if (selectionMode() === 'multiple') {\n <td style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n } @else {\n <td style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n }\n }\n @if (descriptor().rowExpandable) {\n <td class=\"col-1\">\n @if (!descriptor().rowExpandableProperty || item[descriptor().rowExpandableProperty!]) {\n <button\n pButton\n type=\"button\"\n [pRowToggler]=\"item\"\n class=\"p-button-text p-button-rounded p-button-plain\"\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></button>\n }\n </td>\n }\n @for (col of visibleColumns(); track col.id) {\n <td\n (click)=\"onCellClick($event, col.descriptor, item, idx)\"\n [class]=\"\n col.descriptor.className\n | mngClassMap: col.descriptor.classNameMapFn : item\n | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\n \"\n [class.clickable]=\"isCellClickEnabled()\"\n [style.width]=\"col.width ? col.width + 'px' : col.descriptor.width + '%'\"\n [style.min-width.px]=\"col.width ? null : col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\">\n <span class=\"p-column-title\">{{ col.descriptor.title ?? (col.descriptor.property | mngI18nProperty: descriptor().model) | translate }}</span>\n <mng-table-column-value [descriptor]=\"col.descriptor\" [item]=\"item\"></mng-table-column-value>\n </td>\n }\n @if (hasLastColumn()) {\n <td\n class=\"column-custom-last justify-content-end text-right\"\n [style.min-width.px]=\"columnLastMinWidth()\"\n pFrozenColumn\n [frozen]=\"descriptor().actionColumnFrozen ?? true\"\n alignFrozen=\"right\">\n @if (columnCustomLastTemplate()) {\n <ng-container *ngTemplateOutlet=\"columnCustomLastTemplate(); context: {rowItem: item, rowIndex: idx}\"></ng-container>\n } @else if (columnCustomLastComponent()) {\n <div [mngComponent]=\"columnCustomLastComponent()\" (instanceCreated)=\"columnCustomLastComponentInstance.emit($event)\"></div>\n }\n </td>\n }\n </tr>\n </ng-template>\n @if (descriptor().rowExpandable) {\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td class=\"col-1\"></td>\n <td [colSpan]=\"descriptor().rowExpandableColSpan\">\n <ng-container *ngTemplateOutlet=\"rowExpandTemplate(); context: {rowItem: item}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n }\n <ng-template pTemplate=\"loadingicon\">\n <div class=\"flex flex-column align-items-center\">\n @if (descriptor().loadingIcon) {\n <i [class]=\"'text-white text-4xl pi-spin ' + descriptor().loadingIcon\"></i>\n }\n @if (descriptor().loadingText) {\n <div class=\"text text-white text-lg font-semibold\" [ngClass]=\"{'mt-3': descriptor().loadingIcon}\">\n {{ descriptor().loadingText ?? '' | translate }}\n </div>\n }\n </div>\n </ng-template>\n <ng-template pTemplate=\"loadingbody\">\n <tr [style.height.px]=\"rowHeight()\">\n <td [attr.colspan]=\"visibleColumns().length + (hasLastColumn() ? 1 : 0) + (selectionEnabled() ? 1 : 0)\">\n <div class=\"loading-text\"></div>\n <p-skeleton [ngStyle]=\"{width: '100%'}\"></p-skeleton>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr [style.height.px]=\"rowHeight()\">\n <td [attr.colspan]=\"visibleColumns().length + (hasLastColumn() ? 1 : 0) + (selectionEnabled() ? 1 : 0)\">\n {{ 'mngTable.noItems' | translate }}\n </td>\n </tr>\n </ng-template>\n @if (footerTemplate()) {\n <ng-template pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"footerTemplate(); context: {data: dataListService.data(), totalCount: dataListService.count()}\"></ng-container>\n </ng-template>\n }\n </p-table>\n }\n</div>\n","// components\nexport * from './components/column-filter-full/column-filter-full.component';\nexport * from './components/column-value/column-value.component';\nexport * from './components/table/table.component';\n\n// helpers\nexport * from './helpers/notification';\nexport * from './helpers/table-layout-prefs';\n\n// pipes\nexport * from './pipes/locale-default-row-class.pipe';\nexport * from './pipes/table-column-filter-class.pipe';\n\n// services\nexport * from './services/data-list.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","commonsToObservable","i1","i5","i6","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mediusinc-mng-commons-table.mjs","sources":["../../table/src/services/data-list.service.ts","../../table/src/components/column-filter-full/column-filter-full.component.ts","../../table/src/components/column-filter-full/column-filter-full.component.html","../../table/src/components/column-value/column-value.component.ts","../../table/src/components/column-value/column-value.component.html","../../table/src/helpers/notification.ts","../../table/src/helpers/table-layout-prefs.ts","../../table/src/pipes/locale-default-row-class.pipe.ts","../../table/src/pipes/table-column-filter-class.pipe.ts","../../table/src/components/table/table.component.ts","../../table/src/components/table/table.component.html","../../table/src/index.ts","../../table/src/mediusinc-mng-commons-table.ts"],"sourcesContent":["import {Injectable, signal} from '@angular/core';\n\nimport {FilterMetadata, SortMeta} from 'primeng/api';\n\n@Injectable()\nexport class DataListService<Item> {\n // pagination\n public sortMeta = signal<SortMeta[] | null>(null);\n public filterMeta = signal<Record<string, FilterMetadata>>({});\n public rowsPerPageOptions = signal([25, 50, 100]);\n public rows = signal(this.rowsPerPageOptions()[0]);\n public offset = signal(0);\n public globalFilterFields = signal<string[]>([]);\n\n // data\n private _data = signal<Item[]>([]);\n private _count = signal(0);\n public data = this._data.asReadonly();\n public count = this._count.asReadonly();\n public loading = signal(true);\n\n public setData(data: Item[], count?: number) {\n this._data.set([...data]);\n this._count.set(count ?? data.length);\n }\n}\n","import {animate, style, transition, trigger} from '@angular/animations';\nimport {NgClass} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n Input,\n OnDestroy,\n OnInit,\n Renderer2,\n ViewChild,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n signal\n} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\nimport {FormsModule} from '@angular/forms';\n\nimport {TranslateModule} from '@ngx-translate/core';\nimport {OverlayService, FilterMetadata as PrimeFilterMetadata, PrimeNGConfig, SelectItem, TranslationKeys} from 'primeng/api';\nimport {CalendarModule} from 'primeng/calendar';\nimport {ConnectedOverlayScrollHandler, DomHandler} from 'primeng/dom';\nimport {FilterIcon} from 'primeng/icons/filter';\nimport {FilterSlashIcon} from 'primeng/icons/filterslash';\nimport {InputNumberModule} from 'primeng/inputnumber';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {Table, TableModule} from 'primeng/table';\nimport {TriStateCheckboxModule} from 'primeng/tristatecheckbox';\nimport {Nullable, VoidListener} from 'primeng/ts-helpers';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {Subject, Subscription, debounceTime, distinctUntilChanged} from 'rxjs';\n\nimport {COMMONS_MODULE_CONFIG_IT, FilterMatchMode, FilterMatchModeExtendedType, dateToIsoString} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterLookupDescriptor, FilterLookupTypeEnum, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective, NumberRangeComponent} from '@mediusinc/mng-commons/form';\n\nimport {DataListService} from '../../services/data-list.service';\n\n/**\n * Cannot be on push change detection strategy because of filter updates triggered from route which causes to force update values in force metadata\n * and these must be propagated through to this component and beyond to primeNG.\n */\n@Component({\n standalone: true,\n selector: 'mng-table-column-filter-full',\n imports: [\n TableModule,\n TranslateModule,\n DateRangeComponent,\n CalendarModule,\n FormsModule,\n AutocompleteComponent,\n DropdownComponent,\n TriStateCheckboxModule,\n InputNumberModule,\n InputTextModule,\n FilterIcon,\n FilterSlashIcon,\n NgClass,\n InputTrimDirective,\n NumberRangeComponent\n ],\n templateUrl: './column-filter-full.component.html',\n animations: [\n trigger('overlayAnimation', [\n transition(':enter', [style({opacity: 0, transform: 'scaleY(0.8)'}), animate('.12s cubic-bezier(0, 0, 0.2, 1)')]),\n transition(':leave', [animate('.1s linear', style({opacity: 0}))])\n ])\n ],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableColumnFilterFullComponent implements OnInit, OnDestroy {\n public readonly lookupTypeDropdown: FilterLookupTypeEnum = FilterLookupTypeEnum.Dropdown;\n public readonly lookupTypeAutocomplete: FilterLookupTypeEnum = FilterLookupTypeEnum.Autocomplete;\n private readonly el = inject(ElementRef);\n private readonly primeTable = inject(Table);\n private readonly dataListService = inject(DataListService<any>);\n private readonly moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, {optional: true});\n private readonly renderer = inject(Renderer2);\n private readonly primeConfig = inject(PrimeNGConfig);\n private readonly overlayService = inject(OverlayService);\n private readonly cd = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly document: Document = window.document;\n\n @Input({required: true}) descriptor!: FilterDescriptor<any, any>;\n\n @ViewChild('icon') icon: Nullable<ElementRef>;\n\n // change only on init!\n public primeField!: string;\n public primeType = 'text';\n public lookupDescriptor?: FilterLookupDescriptor<any, any>;\n\n // public matchModes: SelectItem[] = [];\n public matchModes = signal<SelectItem[]>([]);\n public filterConstraint = signal<FilterMetadata | undefined>(undefined);\n public isFilterSet = computed(\n () =>\n this.filterConstraint()?.matchMode === FilterMatchMode.Exists ||\n this.filterConstraint()?.matchMode === FilterMatchMode.DoesNotExist ||\n !this.primeTable.isFilterBlank(this.filterConstraint()?.value)\n );\n public isInputDisabled = computed(() => this.filterConstraint()?.matchMode === FilterMatchMode.Exists || this.filterConstraint()?.matchMode === FilterMatchMode.DoesNotExist);\n public overlayVisible = signal(false);\n\n private overlaySubscription?: Subscription;\n private overlay: HTMLElement | undefined | null;\n private scrollHandler?: ConnectedOverlayScrollHandler | null;\n private documentClickListener: VoidListener;\n private documentResizeListener: VoidListener;\n private translationSubscription?: Subscription;\n private resetSubscription?: Subscription;\n private selfClick?: boolean;\n private overlayEventListener: any;\n private tableFilterMetadataSubscription?: Subscription;\n\n private readonly window = this.document.defaultView as Window;\n\n private numericValueFromModelChange: number | number[] | null = null;\n\n private dateDebounceSubject = new Subject<Date | Date[] | null>();\n private dateTimeInUtc = false;\n private dateTimeWithTimezone = true;\n private dateTimeWithMillis = true;\n private dateOnlyDisabled = false;\n\n constructor() {\n this.dateDebounceSubject.pipe(debounceTime(500), distinctUntilChanged(), takeUntilDestroyed()).subscribe(v => {\n if (this.filterConstraint()?.displayMatchMode === FilterMatchMode.Equals && this.filterConstraint()?.matchMode === FilterMatchMode.Between && v !== null) {\n const dateValue: Date | undefined = Array.isArray(v) ? v[0] : v; // could have empty array\n\n if (dateValue) {\n const fromDate = new Date(dateValue);\n const toDate = new Date(dateValue);\n\n if (this.descriptor.datePickerShowTime) {\n if (this.descriptor.datePickerShowSeconds) {\n fromDate.setMilliseconds(0);\n toDate.setMilliseconds(999);\n } else {\n fromDate.setSeconds(0, 0);\n toDate.setSeconds(59, 0);\n }\n } else {\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n }\n // adjust to settings\n v = [fromDate, toDate];\n } else {\n v = null;\n }\n }\n const convertDateType = this.descriptor.datePickerValueNoTime || (!this.dateOnlyDisabled && !this.descriptor.datePickerShowTime) ? 'date' : 'date-time';\n const convertDateTimeOpts = {\n utc: this.descriptor.datePickerValueUtc ?? this.dateTimeInUtc,\n noMillis: !this.dateTimeWithMillis,\n noTimezone: this.descriptor.datePickerValueNoTimezone ?? !this.dateTimeWithTimezone\n };\n this.updateFilterValue(\n v == null\n ? v\n : Array.isArray(v)\n ? v.filter(i => i != null).map(i => dateToIsoString(i, convertDateType, convertDateTimeOpts))\n : dateToIsoString(v, convertDateType, convertDateTimeOpts)\n );\n });\n\n effect(\n () => {\n const fieldFilterMeta = this.dataListService.filterMeta()[this.primeField];\n if (\n fieldFilterMeta &&\n (!this.filterConstraint() || this.filterConstraint()!.value !== fieldFilterMeta.value || this.filterConstraint()!.matchMode !== fieldFilterMeta.matchMode)\n ) {\n this.setFilterConstraint(fieldFilterMeta);\n }\n },\n {allowSignalWrites: true}\n );\n }\n\n ngOnInit() {\n if (this.moduleConfig?.serialization) {\n if (this.moduleConfig.serialization.dateTimeInUtc !== undefined) this.dateTimeInUtc = this.moduleConfig.serialization.dateTimeInUtc;\n if (this.moduleConfig.serialization.dateTimeWithTimezone !== undefined) this.dateTimeWithTimezone = this.moduleConfig.serialization.dateTimeWithTimezone;\n if (this.moduleConfig.serialization.dateTimeWithMillis !== undefined) this.dateTimeWithMillis = this.moduleConfig.serialization.dateTimeWithMillis;\n if (this.moduleConfig.serialization.filtersDateOnlyDisabled !== undefined) this.dateOnlyDisabled = this.moduleConfig.serialization.filtersDateOnlyDisabled;\n }\n\n this.primeField = this.descriptor.property;\n\n switch (this.descriptor.filterType) {\n case FilterTypeEnum.Boolean:\n this.primeType = 'boolean';\n break;\n case FilterTypeEnum.Number:\n this.primeType = 'numeric';\n break;\n case FilterTypeEnum.Date:\n this.primeType = 'date';\n break;\n case FilterTypeEnum.Lookup:\n case FilterTypeEnum.LookupEnum:\n this.primeType = 'lookup';\n this.lookupDescriptor = this.descriptor as FilterLookupDescriptor<any, any>;\n break;\n case FilterTypeEnum.String:\n this.primeType = 'text';\n break;\n }\n\n // generate match mode options\n this.translationSubscription = this.primeConfig.translationObserver.subscribe(() => {\n this.generateMatchModeOptions();\n });\n this.generateMatchModeOptions();\n\n this.initFilterConstraint();\n }\n\n ngOnDestroy() {\n if (this.overlay) {\n this.renderer.appendChild(this.el.nativeElement, this.overlay);\n ZIndexUtils.clear(this.overlay);\n this.onOverlayHide();\n }\n\n this.translationSubscription?.unsubscribe();\n this.resetSubscription?.unsubscribe();\n this.overlaySubscription?.unsubscribe();\n this.tableFilterMetadataSubscription?.unsubscribe();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onTextModelChange(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n if (value === '') {\n this.updateFilterValue(value);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onTextInputEnterKeyDown(event: Event) {\n const value = (event.target as HTMLInputElement).value;\n this.updateFilterValue(value);\n event.preventDefault();\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onNumericModelChange(value: number | null) {\n this.numericValueFromModelChange = value;\n if (value === null) {\n this.updateFilterValue(value);\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onNumericInputKeyDown(event: KeyboardEvent) {\n if (event.key === 'Enter') {\n if (this.filterConstraint()?.displayMatchMode === FilterMatchMode.Between && Array.isArray(this.numericValueFromModelChange)) {\n const numberValues = this.numericValueFromModelChange.filter(v => typeof v === 'number');\n if (numberValues.length !== 2) {\n return;\n }\n }\n this.updateFilterValue(this.numericValueFromModelChange);\n event.preventDefault();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onTristateModelChange(value: boolean | null) {\n this.updateFilterValue(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onDateFilterModelChange(value: Date | Date[] | null) {\n if (this.filterConstraint()?.displayMatchMode === FilterMatchMode.Between && Array.isArray(value)) {\n const dateValues = value.filter(v => v instanceof Date);\n if (dateValues.length !== 2) {\n return;\n }\n }\n this.dateDebounceSubject.next(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n autocompleteFilter(value: any) {\n this.updateFilterValue(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any\n dropdownFilter(value: any) {\n if (Array.isArray(value) && value.length === 0) {\n value = undefined;\n }\n this.updateFilterValue(value);\n }\n\n onMatchModeChange(displayMatchMode: string) {\n const previousDisplayMatchMode = this.filterConstraint()?.displayMatchMode;\n let value = this.filterConstraint()?.displayValue;\n if (Array.isArray(value) && value.length === 0) {\n value = null;\n }\n if (value != null && previousDisplayMatchMode && displayMatchMode !== previousDisplayMatchMode) {\n // handle values on match mode changes\n const matchModesWithArrayValues: string[] = [FilterMatchMode.Between, FilterMatchMode.In, FilterMatchMode.NotIn];\n\n if (matchModesWithArrayValues.indexOf(previousDisplayMatchMode) >= 0 && matchModesWithArrayValues.indexOf(displayMatchMode) === -1) {\n // from array values to non-array values\n if (Array.isArray(value)) {\n value = value?.[0];\n }\n } else if (matchModesWithArrayValues.indexOf(previousDisplayMatchMode) === -1 && displayMatchMode === FilterMatchMode.Between) {\n // from non-array values to between\n // it can already be an array because of \"fake\" equals for dates with timestamps (that is actually between)\n const fromValue = Array.isArray(value) ? value[0] : value;\n // for to value, add 1 day (if date) or 1 (if number)\n const toValue = fromValue instanceof Date ? new Date(fromValue.getTime() + 24 * 3600 * 1000) : typeof fromValue === 'number' ? fromValue + 1 : fromValue;\n value = [fromValue, toValue];\n } else if (matchModesWithArrayValues.indexOf(previousDisplayMatchMode) >= 0 && displayMatchMode === FilterMatchMode.Between) {\n // from array values to between\n if (Array.isArray(value)) {\n if (value.length > 2) {\n value = [value[0], value[1]];\n } else if (value.length === 1) {\n value = [value[0], value[0]];\n } else if (value.length === 0) {\n value = null;\n }\n }\n }\n\n // filters with equals on dates with timezones are extra, because double value needs to be added and match mode changed\n if (\n displayMatchMode === FilterMatchMode.Equals &&\n this.descriptor.filterType === FilterTypeEnum.Date &&\n (this.descriptor.datePickerShowTime || this.descriptor.datePickerValueNoTime || this.dateOnlyDisabled)\n ) {\n value = [value, value];\n displayMatchMode = FilterMatchMode.Between;\n }\n }\n\n this.setFilterConstraint({...this.filterConstraint(), matchMode: displayMatchMode, value: value});\n this.updateDtFilter();\n this.hideOverlay();\n }\n\n onMatchModeKeyDown(event: KeyboardEvent) {\n const item = <HTMLLIElement>event.target;\n\n switch (event.key) {\n case 'ArrowDown':\n // eslint-disable-next-line no-case-declarations\n const nextItem = this.findNextMenuModeItem(item);\n if (nextItem) {\n item.removeAttribute('tabindex');\n nextItem.tabIndex = '0';\n nextItem.focus();\n }\n\n event.preventDefault();\n break;\n\n case 'ArrowUp':\n // eslint-disable-next-line no-case-declarations\n const prevItem = this.findPrevMenuModeItem(item);\n if (prevItem) {\n item.removeAttribute('tabindex');\n prevItem.tabIndex = '0';\n prevItem.focus();\n }\n\n event.preventDefault();\n break;\n }\n }\n\n onRowClearItemClick() {\n this.clearFilter();\n this.hideOverlay();\n }\n\n toggleMenu(event: Event) {\n this.overlayVisible.set(!this.overlayVisible());\n event.stopPropagation();\n }\n\n onToggleButtonKeyDown(event: KeyboardEvent) {\n switch (event.key) {\n case 'Escape':\n case 'Tab':\n this.overlayVisible.set(false);\n break;\n\n case 'ArrowDown':\n if (this.overlayVisible()) {\n const focusable = DomHandler.getFocusableElements(<HTMLElement>this.overlay);\n if (focusable) {\n focusable[0].focus();\n }\n event.preventDefault();\n } else if (event.altKey) {\n this.overlayVisible.set(true);\n event.preventDefault();\n }\n break;\n }\n }\n\n onEscape() {\n this.overlayVisible.set(false);\n }\n\n onContentClick() {\n this.selfClick = true;\n }\n\n // onOverlayAnimationStart(event: AnimationEvent) {\n onOverlayAnimationStart(event: any) {\n switch (event.toState) {\n case 'visible':\n this.overlay = event.element;\n this.renderer.appendChild(this.document.body, this.overlay);\n ZIndexUtils.set('overlay', this.overlay, this.primeConfig.zIndex.overlay);\n DomHandler.absolutePosition(this.overlay, this.icon?.nativeElement);\n this.bindDocumentClickListener();\n this.bindDocumentResizeListener();\n this.bindScrollListener();\n\n this.overlayEventListener = (e: any) => {\n if (this.overlay && this.overlay.contains(e.target)) {\n this.selfClick = true;\n }\n };\n\n this.overlaySubscription = this.overlayService.clickObservable.pipe(takeUntilDestroyed(this.destroyRef)).subscribe(this.overlayEventListener);\n break;\n\n case 'void':\n this.onOverlayHide();\n this.overlaySubscription?.unsubscribe();\n break;\n }\n }\n\n // onOverlayAnimationEnd(event: AnimationEvent) {\n onOverlayAnimationEnd(event: any) {\n switch (event.toState) {\n case 'void':\n ZIndexUtils.clear(event.element);\n break;\n }\n }\n\n get noFilterLabel(): string {\n return this.primeConfig.getTranslation(TranslationKeys.NO_FILTER);\n }\n\n clearFilter() {\n this.initFilterConstraint(true);\n this.primeTable._filter();\n this.hideOverlay();\n }\n\n private generateMatchModeOptions() {\n let options: SelectItem[] | undefined = undefined;\n if (this.descriptor.filterType === FilterTypeEnum.String) {\n options = [\n {value: FilterMatchMode.Contains, label: this.primeConfig.getTranslation(FilterMatchMode.Contains)},\n {value: FilterMatchMode.NotContains, label: this.primeConfig.getTranslation(FilterMatchMode.NotContains)},\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.StartsWith, label: this.primeConfig.getTranslation(FilterMatchMode.StartsWith)},\n {value: FilterMatchMode.EndsWith, label: this.primeConfig.getTranslation(FilterMatchMode.EndsWith)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n } else if (this.descriptor.filterType === FilterTypeEnum.Boolean) {\n options = [{value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)}];\n } else if (this.descriptor.filterType === FilterTypeEnum.Number) {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThan, label: this.primeConfig.getTranslation(FilterMatchMode.LessThan)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThan, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThan)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: this.primeConfig.getTranslation(FilterMatchMode.Between)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n } else if (this.descriptor.filterType === FilterTypeEnum.Lookup || this.descriptor.filterType === FilterTypeEnum.LookupEnum) {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n\n if (this.lookupDescriptor?.multiselect) {\n options = [\n {value: FilterMatchMode.In, label: this.primeConfig.getTranslation(FilterMatchMode.In)},\n {value: FilterMatchMode.NotIn, label: this.primeConfig.getTranslation(FilterMatchMode.NotIn)}\n ];\n }\n } else if (this.descriptor.filterType === FilterTypeEnum.Date) {\n if (!this.descriptor.datePickerShowTime && !this.descriptor.datePickerValueNoTime && !this.dateOnlyDisabled) {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: this.primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: this.primeConfig.getTranslation(FilterMatchMode.Between)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n } else {\n options = [\n {value: FilterMatchMode.Equals, label: this.primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: this.primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: this.primeConfig.getTranslation(FilterMatchMode.Between)},\n {value: FilterMatchMode.Exists, label: this.primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: this.primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n ];\n }\n }\n\n if (this.descriptor.matchModes) {\n options = this.descriptor.matchModes.map(mm => <SelectItem>{value: mm, label: this.primeConfig.getTranslation(mm)});\n }\n\n if (!options) {\n let primeMathcModeOptionByType: string[] | undefined = undefined;\n if (this.primeType === 'text') {\n primeMathcModeOptionByType = this.primeConfig.filterMatchModeOptions.text;\n } else if (this.primeType === 'numeric') {\n primeMathcModeOptionByType = this.primeConfig.filterMatchModeOptions.numeric;\n } else if (this.primeType === 'date') {\n primeMathcModeOptionByType = this.primeConfig.filterMatchModeOptions.date;\n }\n\n if (primeMathcModeOptionByType) {\n options = primeMathcModeOptionByType.map(key => ({label: this.primeConfig.getTranslation(key), value: key}));\n }\n }\n\n this.matchModes.set(options || []);\n }\n\n private getDefaultMatchMode(): string {\n let defaultMatchMode: FilterMatchModeExtendedType = FilterMatchMode.Contains;\n if (this.primeType === 'text') defaultMatchMode = FilterMatchMode.StartsWith;\n else if (this.primeType === 'numeric') defaultMatchMode = FilterMatchMode.Equals;\n else if (this.primeType === 'date') defaultMatchMode = FilterMatchMode.Equals;\n else if (this.primeType === 'lookup') defaultMatchMode = this.lookupDescriptor?.multiselect ? FilterMatchMode.In : FilterMatchMode.Equals;\n\n // overwrite type default set in descriptor\n if (this.descriptor.defaultMatchMode) {\n defaultMatchMode = this.descriptor.defaultMatchMode;\n }\n\n // check if default mode exists!\n if (this.matchModes().length > 0 && !this.matchModes().some(m => m.value === defaultMatchMode)) {\n defaultMatchMode = this.matchModes()[0].value;\n }\n\n return defaultMatchMode;\n }\n\n private findNextMenuModeItem(item: HTMLLIElement): any {\n const nextItem = <HTMLLIElement>item.nextElementSibling;\n\n if (nextItem) return DomHandler.hasClass(nextItem, 'p-column-filter-separator') ? this.findNextMenuModeItem(nextItem) : nextItem;\n else return item.parentElement?.firstElementChild;\n }\n\n private findPrevMenuModeItem(item: HTMLLIElement): any {\n const prevItem = <HTMLLIElement>item.previousElementSibling;\n\n if (prevItem) return DomHandler.hasClass(prevItem, 'p-column-filter-separator') ? this.findPrevMenuModeItem(prevItem) : prevItem;\n else return item.parentElement?.lastElementChild;\n }\n\n private isOutsideClicked(event: any): boolean {\n return !(\n this.overlay?.isSameNode(event.target) ||\n this.overlay?.contains(event.target) ||\n this.icon?.nativeElement.isSameNode(event.target) ||\n this.icon?.nativeElement.contains(event.target) ||\n DomHandler.hasClass(event.target, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-add-button') ||\n DomHandler.hasClass(event.target, 'p-column-filter-remove-button') ||\n DomHandler.hasClass(event.target.parentElement, 'p-column-filter-remove-button')\n );\n }\n\n private bindDocumentClickListener() {\n if (!this.documentClickListener) {\n const documentTarget: any = this.el ? this.el.nativeElement.ownerDocument : 'document';\n\n this.documentClickListener = this.renderer.listen(documentTarget, 'click', event => {\n if (this.overlayVisible() && !this.selfClick && this.isOutsideClicked(event)) {\n this.hideOverlay();\n }\n\n this.selfClick = false;\n });\n }\n }\n\n private unbindDocumentClickListener() {\n if (this.documentClickListener) {\n this.documentClickListener();\n this.documentClickListener = null;\n this.selfClick = false;\n }\n }\n\n private bindDocumentResizeListener() {\n if (!this.documentResizeListener) {\n this.documentResizeListener = this.renderer.listen(this.window, 'resize', () => {\n if (this.overlayVisible() && !DomHandler.isTouchDevice()) {\n this.hideOverlay();\n }\n });\n }\n }\n\n private unbindDocumentResizeListener() {\n if (this.documentResizeListener) {\n this.documentResizeListener();\n this.documentResizeListener = null;\n }\n }\n\n private bindScrollListener() {\n if (!this.scrollHandler) {\n this.scrollHandler = new ConnectedOverlayScrollHandler(this.icon?.nativeElement, () => {\n if (this.overlayVisible()) {\n this.hideOverlay();\n }\n });\n }\n\n this.scrollHandler.bindScrollListener();\n }\n\n private unbindScrollListener() {\n if (this.scrollHandler) {\n this.scrollHandler.unbindScrollListener();\n }\n }\n\n private hideOverlay() {\n this.overlayVisible.set(false);\n this.cd.markForCheck();\n }\n\n private onOverlayHide() {\n this.unbindDocumentClickListener();\n this.unbindDocumentResizeListener();\n this.unbindScrollListener();\n this.overlay = null;\n }\n\n private updateFilterValue(value: any) {\n this.filterConstraint.set({...this.filterConstraint(), value: value});\n this.updateDtFilter();\n }\n\n private updateDtFilter() {\n this.primeTable.filters[this.primeField] = this.filterConstraint()!;\n this.primeTable._filter();\n }\n\n private initFilterConstraint(reset = false) {\n if (reset) {\n const defaultMatchMode = this.getDefaultMatchMode();\n this.primeTable.filters[this.primeField] = {value: null, matchMode: defaultMatchMode};\n }\n\n // set internal filter constraint\n const metadata = this.primeTable.filters[this.primeField];\n if (Array.isArray(metadata)) {\n this.setFilterConstraint(metadata[0]);\n } else {\n this.setFilterConstraint(metadata);\n }\n }\n\n private setFilterConstraint(metadata?: PrimeFilterMetadata) {\n let matchMode = metadata?.matchMode ?? this.getDefaultMatchMode();\n let displayValue = metadata?.value;\n let displayMatchMode = matchMode;\n\n // when equals is used on dates with time, the actual filter will be between, but displayed as equals\n if (this.descriptor.filterType === FilterTypeEnum.Date && (this.descriptor.datePickerShowTime || this.descriptor.datePickerValueNoTime || this.dateOnlyDisabled)) {\n if (\n matchMode === FilterMatchMode.Between &&\n Array.isArray(metadata?.value) &&\n metadata?.value.length === 2 &&\n metadata?.value.every(v => v instanceof Date || typeof v === 'string' || typeof v === 'number')\n ) {\n const startDate = dateToIsoString(metadata.value[0] as Date | string | number);\n const endDate = dateToIsoString(metadata.value[1] as Date | string | number);\n\n // 2020-11-02T11:12:12.000\n const cmpLength = this.descriptor.datePickerShowTime ? (this.descriptor.datePickerShowSeconds ? 19 : 16) : 10;\n\n if (startDate.substring(0, cmpLength) === endDate.substring(0, cmpLength)) {\n displayMatchMode = FilterMatchMode.Equals;\n displayValue = new Date(metadata.value[0]);\n }\n } else if (matchMode === FilterMatchMode.Equals && !metadata?.value) {\n matchMode = FilterMatchMode.Between;\n }\n }\n\n if (this.descriptor.filterType === FilterTypeEnum.Date && displayValue) {\n // display value for calendar cannot be string, convert to date\n displayValue = Array.isArray(displayValue)\n ? displayValue.map(v => (!(v instanceof Date) ? new Date(v) : v))\n : displayValue instanceof Date\n ? displayValue\n : new Date(displayValue);\n }\n\n this.filterConstraint.set({\n matchMode,\n value: metadata?.value,\n displayMatchMode,\n displayValue: displayValue ?? null\n });\n this.primeTable.filters[this.primeField] = this.filterConstraint()!;\n }\n}\n\ninterface FilterMetadata extends PrimeFilterMetadata {\n /**\n * The value used for display.\n */\n displayValue?: any;\n /**\n * The match mode for display.\n */\n displayMatchMode?: string;\n}\n","<div class=\"p-column-filter p-column-filter-row\">\n @switch (primeType) {\n @case ('text') {\n <input\n type=\"text\"\n pInputText\n class=\"mng-column-filter-string-input\"\n [value]=\"filterConstraint()?.displayValue\"\n [disabled]=\"isInputDisabled()\"\n (input)=\"onTextModelChange($event)\"\n (keydown.enter)=\"onTextInputEnterKeyDown($event)\"\n [attr.placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [mngInputTrim]=\"descriptor.trimOption\" />\n }\n @case ('numeric') {\n @if (filterConstraint()?.displayMatchMode === 'between') {\n <mng-number-range\n className=\"mng-column-filter-number-input\"\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"onNumericModelChange($event)\"\n (keyDown)=\"onNumericInputKeyDown($event)\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [useGrouping]=\"descriptor.numberUseGrouping\"\n [minFractionDigits]=\"descriptor.numberMinFractionDigits\"\n [maxFractionDigits]=\"descriptor.numberMaxFractionDigits\"\n [disabled]=\"isInputDisabled()\" />\n } @else {\n <p-inputNumber\n inputStyleClass=\"mng-column-filter-number-input\"\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"onNumericModelChange($event)\"\n (onKeyDown)=\"onNumericInputKeyDown($event)\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [useGrouping]=\"descriptor.numberUseGrouping\"\n [minFractionDigits]=\"descriptor.numberMinFractionDigits\"\n [maxFractionDigits]=\"descriptor.numberMaxFractionDigits\"\n [disabled]=\"isInputDisabled()\" />\n }\n }\n\n @case ('boolean') {\n <p-triStateCheckbox [ngModel]=\"filterConstraint()?.displayValue\" (ngModelChange)=\"onTristateModelChange($event)\"></p-triStateCheckbox>\n }\n @case ('date') {\n @if (filterConstraint()?.displayMatchMode === 'between') {\n <mng-date-range\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"onDateFilterModelChange($event)\"\n [showTime]=\"descriptor.datePickerShowTime\"\n [dateFormat]=\"descriptor.datePickerFormat\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [disabled]=\"isInputDisabled()\"></mng-date-range>\n } @else {\n <p-calendar\n appendTo=\"body\"\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"onDateFilterModelChange($event)\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [showIcon]=\"true\"\n [dateFormat]=\"descriptor.datePickerFormat ?? 'dd.mm.yy'\"\n [showTime]=\"descriptor.datePickerShowTime\"\n [firstDayOfWeek]=\"1\">\n </p-calendar>\n }\n }\n @case ('lookup') {\n @if (lookupDescriptor) {\n @switch (lookupDescriptor.lookupType) {\n @case (lookupTypeAutocomplete) {\n <mng-autocomplete\n [ngModel]=\"filterConstraint()?.displayValue\"\n [dataProvider]=\"lookupDescriptor.dataProvider\"\n [optionsTrackProperty]=\"lookupDescriptor.optionsValueProperty\"\n [optionsValueProperty]=\"lookupDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupDescriptor.optionsLabelTranslate\"\n [multiselect]=\"lookupDescriptor.multiselect\"\n [autoClear]=\"lookupDescriptor.autocompleteAutoClear ?? false\"\n [openOnFocus]=\"lookupDescriptor.autocompleteAutoClear ?? true\"\n [inlineSearch]=\"lookupDescriptor.autocompleteInlineSearch ?? false\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.searchToFilter' | translate\"\n [className]=\"lookupDescriptor.className\"\n [dropdownClassName]=\"lookupDescriptor.dropdownClassName\"\n [disabled]=\"isInputDisabled()\"\n (valueChange)=\"autocompleteFilter($event)\"\n [searchTrim]=\"descriptor.trimOption\">\n </mng-autocomplete>\n }\n @case (lookupTypeDropdown) {\n <mng-dropdown\n [ngModel]=\"filterConstraint()?.displayValue\"\n [dataProvider]=\"lookupDescriptor.dataProvider\"\n [optionsValueProperty]=\"lookupDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupDescriptor.optionsLabelTranslate\"\n [multiselect]=\"lookupDescriptor.multiselect\"\n [placeholder]=\"descriptor.placeholder ?? 'mngTable.selectToFilter' | translate\"\n [className]=\"lookupDescriptor.className\"\n [dropdownClassName]=\"lookupDescriptor.dropdownClassName\"\n [showClear]=\"false\"\n [changeValueOnBlur]=\"lookupDescriptor.multiselect\"\n [disabled]=\"isInputDisabled()\"\n (valueChange)=\"dropdownFilter($event)\">\n </mng-dropdown>\n }\n }\n }\n }\n }\n\n @if (matchModes().length > 1) {\n <button\n #icon\n type=\"button\"\n class=\"p-column-filter-menu-button p-link\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"overlayVisible()\"\n [ngClass]=\"{'p-column-filter-menu-button-open': overlayVisible(), 'p-column-filter-menu-button-active': isFilterSet()}\"\n (click)=\"toggleMenu($event)\"\n (keydown)=\"onToggleButtonKeyDown($event)\">\n <FilterIcon [styleClass]=\"'pi-filter-icon'\" />\n </button>\n }\n <button #icon [ngClass]=\"{'p-hidden-space': !isFilterSet()}\" type=\"button\" class=\"p-column-filter-clear-button p-link\" (click)=\"clearFilter()\">\n <FilterSlashIcon />\n </button>\n @if (overlayVisible()) {\n <div\n class=\"p-column-filter-overlay p-component p-fluid\"\n (click)=\"onContentClick()\"\n [@overlayAnimation]=\"'visible'\"\n (@overlayAnimation.start)=\"onOverlayAnimationStart($event)\"\n (@overlayAnimation.done)=\"onOverlayAnimationEnd($event)\"\n (keydown.escape)=\"onEscape()\">\n <ul class=\"p-column-filter-row-items\">\n @for (matchMode of matchModes(); track matchMode; let i = $index) {\n <li\n class=\"p-column-filter-row-item\"\n (click)=\"onMatchModeChange(matchMode.value)\"\n (keydown)=\"onMatchModeKeyDown($event)\"\n (keydown.enter)=\"this.onMatchModeChange(matchMode.value)\"\n [ngClass]=\"{'p-highlight': matchMode.value === filterConstraint()?.displayMatchMode}\"\n [attr.tabindex]=\"i === 0 ? '0' : null\">\n {{ matchMode.label }}\n </li>\n }\n <li class=\"p-column-filter-separator\"></li>\n <li class=\"p-column-filter-row-item\" (click)=\"onRowClearItemClick()\" (keydown)=\"onMatchModeKeyDown($event)\" (keydown.enter)=\"onRowClearItemClick()\">\n {{ noFilterLabel }}\n </li>\n </ul>\n </div>\n }\n</div>\n","import {CurrencyPipe, DatePipe, DecimalPipe} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, computed, inject, input} from '@angular/core';\n\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {MessageService} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {RippleModule} from 'primeng/ripple';\nimport {TooltipModule} from 'primeng/tooltip';\n\nimport {BooleanPipe, ComponentDirective, EnumPipe, GetterPipe, TemplatePipe} from '@mediusinc/mng-commons/core';\nimport {ColumnDescriptor, ColumnDisplayTypeEnum} from '@mediusinc/mng-commons/table/api';\n\n@Component({\n standalone: true,\n selector: 'mng-table-column-value',\n templateUrl: './column-value.component.html',\n styleUrls: ['./column-value.component.scss'],\n imports: [TooltipModule, TranslateModule, BooleanPipe, EnumPipe, ComponentDirective, ButtonModule, RippleModule, DecimalPipe, CurrencyPipe, DatePipe],\n changeDetection: ChangeDetectionStrategy.OnPush,\n // eslint-disable-next-line @angular-eslint/no-host-metadata-property\n host: {'[class]': 'className()', '[style.max-width.px]': 'styleMaxWidth()'}\n})\nexport class TableColumnValueComponent<T, TT> {\n public readonly columnDisplayTypeString: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.String;\n public readonly columnDisplayTypeNumber: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Number;\n public readonly columnDisplayTypeCurrency: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Currency;\n public readonly columnDisplayTypeBoolean: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Boolean;\n public readonly columnDisplayTypeDate: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Date;\n public readonly columnDisplayTypeEnum: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Enum;\n public readonly columnDisplayTypeComponent: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Component;\n public readonly columnDisplayTypeHtml: ColumnDisplayTypeEnum = ColumnDisplayTypeEnum.Html;\n\n private readonly elementRef = inject(ElementRef);\n private readonly messageService = inject(MessageService);\n private readonly translate = inject(TranslateService);\n\n private readonly getterPipe = new GetterPipe();\n private readonly templatePipe = new TemplatePipe();\n\n public descriptor = input.required<ColumnDescriptor<T, TT>>();\n public item = input.required<any>();\n\n public styleMaxWidth = computed(() => this.descriptor().maxWidth ?? null);\n public className = computed(() => {\n let className = 'nowrap';\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.String && this.descriptor().isMultiline) {\n className += ' multiline';\n }\n return className;\n });\n\n public value = computed<any>(() => {\n let value = this.item()?.[this.descriptor().property as keyof object];\n if (typeof this.descriptor().getter === 'function') {\n value = this.getterPipe.transform(this.item(), this.descriptor().getter, value);\n }\n if (this.descriptor().template) {\n value = this.templatePipe.transform(value, this.descriptor().template);\n }\n return value;\n });\n\n public currency = computed<string | undefined>(() => {\n if (this.descriptor().columnDisplayType === ColumnDisplayTypeEnum.Currency) {\n return this.descriptor().currencyProperty ? this.item()[this.descriptor().currencyProperty!] : this.descriptor().currencyCode ?? 'EUR';\n }\n return;\n });\n\n public copyToClipboard(event: Event) {\n event.stopPropagation();\n let value = this.elementRef.nativeElement.innerText.trim();\n const clipboardValueGetter = this.descriptor().clipboardValueGetter;\n if (clipboardValueGetter) {\n value = clipboardValueGetter(this.value(), this.item());\n }\n navigator.clipboard.writeText(value);\n const title = this.translate.instant('mngTable.copyNotificationTitle');\n const message = this.translate.instant('mngTable.copyNotificationMessage', {value});\n this.messageService.add({severity: 'info', summary: title, detail: message});\n }\n}\n","@if (descriptor().localizationExistsProperty && !item()[descriptor().localizationExistsProperty!]) {\n <i class=\"pi pi-exclamation-circle\" [pTooltip]=\"'mngTable.translationMissing' | translate\"></i>\n}\n@switch (descriptor().columnDisplayType) {\n @case (columnDisplayTypeString) {\n @if (descriptor().hasValueAsTooltip) {\n <span [pTooltip]=\"value()\" tooltipPosition=\"left\">{{ value() }}</span>\n } @else {\n {{ value() }}\n }\n }\n @case (columnDisplayTypeHtml) {\n <span [innerHTML]=\"value()\"></span>\n }\n @case (columnDisplayTypeNumber) {\n {{ value() | number: descriptor().displayFormat : descriptor().locale }}\n }\n @case (columnDisplayTypeCurrency) {\n {{ value() | currency: currency() : descriptor().currencyDisplay : descriptor().displayFormat : descriptor().locale }}\n }\n @case (columnDisplayTypeDate) {\n {{ value() | date: descriptor().displayFormat }}\n }\n @case (columnDisplayTypeBoolean) {\n @if (descriptor().booleanAsIcon) {\n <i [class]=\"value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo : true\"></i>\n } @else {\n {{ value() | mngBoolean: descriptor().booleanYes : descriptor().booleanNo | translate }}\n }\n }\n @case (columnDisplayTypeEnum) {\n {{ value() | mngEnum: descriptor().enum | translate }}\n }\n @case (columnDisplayTypeComponent) {\n <ng-container\n [mngComponent]=\"descriptor().customComponentType!\"\n [inputs]=\"{\n value: value(),\n item: item(),\n descriptor: descriptor()\n }\"></ng-container>\n }\n}\n@if (descriptor().hasCopyToClipboard) {\n <div class=\"help-buttons\">\n <button pButton pRipple type=\"button\" icon=\"pi pi-copy\" class=\"p-button-rounded p-button-info p-button-sm\" (click)=\"copyToClipboard($event)\"></button>\n </div>\n}\n","import {TranslateService} from '@ngx-translate/core';\nimport {Message, MessageService} from 'primeng/api';\n\nimport {toastMessage} from '@mediusinc/mng-commons/core';\nimport {getI18nForModel} from '@mediusinc/mng-commons/model';\nimport {TableDescriptorInst} from '@mediusinc/mng-commons/table/api';\n\nexport function tableNotificationError(translate: TranslateService, table: TableDescriptorInst<any>, error: any, messageService: MessageService): Message {\n const params: any = {};\n if (error?.message) {\n params.errorMessage = error.message;\n } else {\n params.errorMessage = '.';\n }\n const tableErrorTitle = getI18nForModel(translate, table.model, 'table.error.title', undefined, undefined, 'general.error', params) ?? undefined;\n const tableErrorMessage = getI18nForModel(translate, table.model, 'table.error.message', undefined, undefined, 'general.errorMessage', params) ?? undefined;\n return toastMessage(messageService, tableErrorTitle, tableErrorMessage, 'error', 'pi-exclamation-triangle');\n}\n","/**\n * generates table layout preferences key used when saving preferences to localstorage\n * @param typeName string, required\n * @param url string, required\n * @param trackProperty string, not required\n */\nexport function generateTableLayoutPrefsKey(typeName: string, url: string, trackProperty?: string): string {\n return `commonsTableLayoutPrefs~~${typeName}~~${trackProperty ?? url.split('?')[0].split('#')[0]}`;\n}\n","import {Injector, Pipe, PipeTransform} from '@angular/core';\n\nimport {CommonsService} from '@mediusinc/mng-commons/core';\nimport {TableDescriptorInst} from '@mediusinc/mng-commons/table/api';\n\n@Pipe({\n standalone: true,\n name: 'mngLocaleDefaultRowClass',\n pure: true\n})\nexport class LocaleDefaultRowClassPipe<T> implements PipeTransform {\n constructor(private injector: Injector) {}\n\n transform(value?: any, descriptor?: TableDescriptorInst<T>, item?: T): string {\n if (descriptor?.isLocalized) {\n if ((item as any)[descriptor.localizationLocaleProperty!] === this.injector.get(CommonsService).getDefaultLocale()) {\n return value + ' all-translations-default-value';\n }\n }\n return value ?? '';\n }\n}\n","import {Pipe, PipeTransform} from '@angular/core';\n\nimport {FilterDescriptor, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\n\n@Pipe({\n standalone: true,\n pure: true,\n name: 'mngTableColumnFilterClass'\n})\nexport class TableColumnFilterClassPipe implements PipeTransform {\n transform(value: unknown, filter: FilterDescriptor<any, any> | undefined, isEnabled: boolean): string {\n const strValue = typeof value === 'string' ? value : '';\n if (isEnabled && filter?.filterType !== undefined) {\n return `${strValue} mng-column-filter-${FilterTypeEnum[filter.filterType].toLowerCase()}`;\n } else {\n return strValue;\n }\n }\n}\n","import {AsyncPipe, NgClass, NgStyle, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Injector,\n OnDestroy,\n Signal,\n TemplateRef,\n Type,\n afterNextRender,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {outputFromObservable, toObservable} from '@angular/core/rxjs-interop';\nimport {FormsModule} from '@angular/forms';\nimport {ActivatedRoute, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Params, Router} from '@angular/router';\n\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {FilterMetadata, MessageService, SortMeta} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {MultiSelectChangeEvent, MultiSelectModule} from 'primeng/multiselect';\nimport {Table, TableColumnReorderEvent, TableLazyLoadEvent, TableModule, TableRowReorderEvent} from 'primeng/table';\nimport {TooltipModule} from 'primeng/tooltip';\nimport {NEVER, Subject, Subscription, combineLatest, of, switchMap} from 'rxjs';\nimport {filter} from 'rxjs/operators';\n\nimport {\n ClassMapPipe,\n CommonsService,\n ComponentDirective,\n DataListParams,\n DataListResult,\n FilterMatchMode,\n I18nPropertyPipe,\n LocalStorageService,\n LoggerService,\n TemplateDirective,\n booleanOrUndefinedAttribute,\n toObservable as commonsToObservable,\n dataListParamsToUrlQuery,\n findTemplateByName,\n fromSubscribeError,\n fromTableLoadToDataListParams,\n fromUrlQueryToDataListParams,\n getErrorLogLevel,\n mergeDataListParamsWithDefaults\n} from '@mediusinc/mng-commons/core';\nimport {FilterLookupDescriptor, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {\n ColumnDescriptor,\n ITableDataProvider,\n TableCellClickEvent,\n TableDescriptorInst,\n TableDynamicDescriptorInst,\n TableLayoutPreferences,\n TableLoadEvent,\n TablePaginationModeEnum,\n TableSizeEnum,\n tableDescriptor\n} from '@mediusinc/mng-commons/table/api';\n\nimport {tableNotificationError} from '../../helpers/notification';\nimport {generateTableLayoutPrefsKey} from '../../helpers/table-layout-prefs';\nimport {ColumnWithPreferences} from '../../models/column-preferences.model';\nimport {LocaleDefaultRowClassPipe} from '../../pipes/locale-default-row-class.pipe';\nimport {TableColumnFilterClassPipe} from '../../pipes/table-column-filter-class.pipe';\nimport {DataListService} from '../../services/data-list.service';\nimport {TableColumnFilterFullComponent} from '../column-filter-full/column-filter-full.component';\nimport {TableColumnValueComponent} from '../column-value/column-value.component';\n\n@Component({\n standalone: true,\n selector: 'mng-table',\n templateUrl: './table.component.html',\n imports: [\n AsyncPipe,\n ComponentDirective,\n I18nPropertyPipe,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n TableColumnValueComponent,\n ClassMapPipe,\n LocaleDefaultRowClassPipe,\n TableColumnFilterFullComponent,\n TableColumnFilterClassPipe,\n TableModule,\n MultiSelectModule,\n ButtonModule,\n TooltipModule,\n TranslateModule,\n FormsModule\n ],\n providers: [DataListService],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent<Item = any, Service = undefined, Sorts = any, Filters extends keyof any = any> implements OnDestroy {\n public readonly cmpTypeName = 'TableComponent';\n\n private readonly logger = inject(LoggerService).create(this.cmpTypeName);\n private readonly injector = inject(Injector);\n private readonly router = inject(Router);\n private readonly route = inject(ActivatedRoute);\n private readonly translate = inject(TranslateService);\n private readonly messageService = inject(MessageService);\n private readonly commons = inject(CommonsService);\n private readonly localStorageService = inject(LocalStorageService);\n public readonly dataListService = inject(DataListService<Item>);\n\n // metadata input\n public descriptorInput = input.required<TableDescriptorInst<Item, Sorts, Filters>>({alias: 'descriptor'});\n\n // data source inputs\n public items = input<Item[]>();\n public result = input<DataListResult<Item>>();\n public loadingInput = input(undefined, {alias: 'loading', transform: booleanOrUndefinedAttribute});\n public dataProvider = input<ITableDataProvider<Item, Service, Sorts, Filters>>();\n\n // extra features input\n public useQueryParamsInput = input(false, {alias: 'useQueryParams'});\n public cellClickEnabled = input(true);\n public selectionMode = input<'single' | 'multiple'>('multiple');\n public selectionEnabled = input(false);\n public rowReorderEnabledInput = input<boolean>(true, {alias: 'rowReorderEnabled'});\n public rowReorderEnabled = computed<boolean>(() => this.rowReorderEnabledInput() && this.descriptor().rowReorderable);\n\n // styling\n public columnLastMinWidth = input<number>();\n public columnsColspan = computed(() => this.visibleColumns().length + (this.hasLastColumn() ? 1 : 0) + (this.selectionEnabled() ? 1 : 0) + (this.rowReorderEnabled() ? 1 : 0));\n\n // component inputs\n public captionComponent = input<Type<any>>();\n public columnCustomLastComponent = input<Type<any>>();\n public globalFilterFieldsInput = input<string[] | undefined>(undefined, {alias: 'globalFilterFields'});\n\n // cell click\n private cellClickSubject = new Subject<TableCellClickEvent<Item>>();\n public isCellClickObserved = signal(this.cellClickSubject.observed);\n public isCellClickEnabled = computed(() => this.cellClickEnabled() && this.isCellClickObserved());\n\n // event outputs\n public tableLoad = output<TableLoadEvent>();\n public cellClick = outputFromObservable(this.cellClickSubject);\n public selectionChange = output<Array<Item>>();\n public captionComponentInstance = output<any>();\n public columnCustomLastComponentInstance = output<any>();\n public rowReorder = output<TableRowReorderEvent>();\n\n // content and view queries\n public templates = contentChildren(TemplateDirective);\n public components = viewChildren(ComponentDirective<any>);\n public primeTable = viewChild.required(Table);\n\n // templates\n public captionTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'caption'));\n public columnCustomLastTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'columnCustomLast'));\n public footerTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'footer'));\n public rowExpandTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'rowExpandContent'));\n\n // data provider and items\n public useQueryParams = computed(() => (this.paginationMode() === TablePaginationModeEnum.InfiniteScroll ? false : this.useQueryParamsInput()));\n public isLazy = computed(() => this.dataProvider()?.isLazy === true);\n public isPagination = computed(() => this.paginationMode() === TablePaginationModeEnum.Pagination);\n public useQueryParamsInitialized = signal(false);\n\n // visual\n private paginationMode = computed(() => {\n if (typeof this.descriptor().paginationMode !== 'undefined') {\n // descriptor choice is the most strong - if defined, use this value\n return this.descriptor().paginationMode;\n } else if (typeof this.dataProvider() !== 'undefined') {\n // when data provider is used, use pagination\n return TablePaginationModeEnum.Pagination;\n } else {\n return TablePaginationModeEnum.None;\n }\n });\n public infiniteScroll = computed(() => this.paginationMode() === TablePaginationModeEnum.InfiniteScroll);\n public className = computed(() => {\n let className = this.descriptor().className ?? '';\n switch (this.descriptor().size) {\n case TableSizeEnum.Small:\n className += ' p-datatable-sm';\n break;\n case TableSizeEnum.Large:\n className += ' p-datatable-lg';\n break;\n }\n if (this.descriptor().hasGridlines) {\n className += ' p-datatable-gridlines';\n }\n return className;\n });\n public tableFullHeightOffset = computed(() => (this.paginationMode() === TablePaginationModeEnum.InfiniteScroll ? this.descriptor().tableFullHeightOffset ?? 315 : undefined));\n public rowHeight = computed(() => (this.paginationMode() === TablePaginationModeEnum.InfiniteScroll ? this.descriptor().rowHeight ?? 45 : undefined));\n\n // data provider\n private dataProviderService = computed(() => {\n const dataProvider = this.dataProvider();\n return dataProvider?.serviceType ? this.injector.get<any>(dataProvider.serviceType) : null;\n });\n private dataProviderLatestLazyLoadEvent?: TableLazyLoadEvent;\n private latestLazyLoadEventVersion = 0;\n private latestParamsWithDefaults?: DataListParams;\n private latestParamsWithDefaultsVersion = 0;\n private dataProviderSubscription?: Subscription;\n\n // descriptors\n public descriptor = signal<TableDescriptorInst<any, any, any>>(tableDescriptor<string, string, string>());\n private localstorageKey = computed(() => {\n const descriptor = this.descriptor();\n return descriptor.model.typeName || descriptor.model.i18nBaseKey\n ? generateTableLayoutPrefsKey(descriptor.model.typeName ?? descriptor.model.i18nBaseKey, this.router.url, descriptor.identifier)\n : null;\n });\n private layoutPrefsSaveCnt = signal(0);\n private layoutPreferences = computed(() => {\n const lsKey = this.localstorageKey();\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const cnt = this.layoutPrefsSaveCnt(); // needed to force updates on user changes\n const layoutPrefs = lsKey ? this.localStorageService.getItem<TableLayoutPreferences>(this.cmpTypeName, lsKey) : undefined;\n return layoutPrefs ?? {columnWidths: {}};\n });\n public columns = computed<ColumnWithPreferences[]>(() => this.computColumnsWithLayout());\n public visibleColumns = computed(() => this.columns().filter(col => col.isVisible));\n\n // filter, sort\n public hasColumnFilters = computed(() => this.filterDescriptors().length > 0);\n private filterDescriptors = computed(() => this.descriptor().filters);\n private defaultParams = computed(() => this.computeDefaultDataListParams());\n private isFilterChanged = false;\n private isSortChanged = false;\n\n public anyColumnVisible = computed(() => this.visibleColumns().length > 0);\n public hasCustomLastColumn = computed(() => this.columnCustomLastComponent || this.columnCustomLastTemplate());\n public hasLastColumn = computed(() => this.hasCustomLastColumn() || this.areColumnsToggleable() || this.areColumnsReorderable());\n\n // layout prefs\n public areColumnsReorderable = computed(() => this.descriptor().columns.some(value => value.isReorderable));\n public areColumnsToggleable = computed(() => this.descriptor().columns.some(value => value.isToggleable));\n\n // other\n private routerIsNavigationOutsideInProgress = false;\n\n constructor() {\n effect(\n () => {\n const descriptor = this.descriptor();\n if (Array.isArray(descriptor.rowsPerPageOptions) && descriptor.rowsPerPageOptions.length > 0) {\n this.dataListService.rowsPerPageOptions.set(descriptor.rowsPerPageOptions);\n }\n if (descriptor.defaultNumRows) {\n this.dataListService.rows.set(\n this.dataListService.rowsPerPageOptions().includes(descriptor.defaultNumRows) ? descriptor.defaultNumRows : this.dataListService.rowsPerPageOptions()[0]\n );\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const loading = this.loadingInput();\n if (loading !== undefined) {\n this.dataListService.loading.set(loading);\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const result = this.result();\n if (result !== undefined) {\n this.dataListService.setData(result.data, result.totalCount);\n const loading = this.loadingInput();\n if (loading == undefined) {\n // only set if input is not defined\n this.dataListService.loading.set(false);\n }\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const result = this.result();\n const items = this.items();\n if (result == undefined && items !== undefined) {\n this.dataListService.setData(items);\n const loading = this.loadingInput();\n if (loading == undefined) {\n // only set if input is not defined\n this.dataListService.loading.set(false);\n }\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n this.dataListService.globalFilterFields.set(this.globalFilterFieldsInput() ?? this.columns().map(c => c.descriptor.property));\n },\n {allowSignalWrites: true}\n );\n\n afterNextRender(() => {\n this.isCellClickObserved.set(this.cellClickSubject.observed);\n });\n\n toObservable(this.dataProvider)\n .pipe(switchMap(dp => dp?.getAllReload$ ?? of({})))\n .subscribe({\n next: () => {\n this.reload();\n }\n });\n\n combineLatest([toObservable(this.descriptorInput), toObservable(this.dataProvider), toObservable(this.useQueryParams)])\n .pipe(\n // dataProvider is needed to ensure correct order of execution and reload\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n switchMap(([descriptorInput, dataProvider, useQueryParams]) => {\n if (descriptorInput !== this.descriptor()) {\n this.descriptor.set(descriptorInput);\n }\n if (useQueryParams) {\n // trigger table loads from route updates\n return this.route.queryParams;\n } else {\n return of(null);\n }\n })\n )\n .subscribe(qp => {\n if (qp === null) {\n // load data immediately by creating default sorts and filters (primeng will trigger onLazyLoad event on sort&filter metadata change)\n const defaultSort = this.createSortMeta(this.defaultParams());\n if (!defaultSort || defaultSort.length > 0) {\n this.dataListService.sortMeta.set(defaultSort);\n }\n\n const defaultFilter = this.createFilterMeta();\n if (defaultFilter) {\n this.dataListService.filterMeta.set(defaultFilter);\n }\n this.loadTableWithDataProvider({});\n } else {\n this.loadTableFromRouteUpdate(qp);\n }\n });\n\n toObservable(this.useQueryParams)\n .pipe(\n switchMap(useQp => (useQp ? this.router.events : NEVER)),\n filter(\n e =>\n (e instanceof NavigationStart && e.url.split('?')[0].split('#')[0] !== this.router.url.split('?')[0].split('#')[0]) ||\n e instanceof NavigationEnd ||\n e instanceof NavigationCancel ||\n e instanceof NavigationError\n )\n )\n .subscribe(e => {\n this.routerIsNavigationOutsideInProgress = e instanceof NavigationStart;\n });\n }\n\n public ngOnDestroy() {\n this.dataProviderSubscription?.unsubscribe();\n }\n\n public reload(emitEvent = false, resetParams = false) {\n const paramsWithDefaults: DataListParams =\n resetParams || !this.latestParamsWithDefaults ? this.defaultParams() : mergeDataListParamsWithDefaults(this.latestParamsWithDefaults, this.defaultParams());\n this.loadTableWithDataProvider(paramsWithDefaults, emitEvent);\n }\n\n public onTableLazyLoad(event: TableLazyLoadEvent) {\n this.dataProviderLatestLazyLoadEvent = event;\n this.latestLazyLoadEventVersion++;\n\n const params = fromTableLoadToDataListParams(event);\n\n if (this.useQueryParams()) {\n if (!this.routerIsNavigationOutsideInProgress) {\n // this check is necessary: from some reason, primeNG commits one last lazy load event whenever any angular router navigation occurs\n this.router.navigate([], {\n relativeTo: this.route,\n replaceUrl: true,\n queryParams: dataListParamsToUrlQuery(params, this.defaultParams())\n });\n }\n } else {\n this.loadTableWithDataProvider(mergeDataListParamsWithDefaults(params, this.defaultParams()));\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onTableSort(event: any) {\n this.isSortChanged = true;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n public onTableFilter(event: any) {\n this.isFilterChanged = true;\n }\n\n public onCellClick(event: Event, col: ColumnDescriptor<any, Item>, item: Item, idx: number) {\n if (!this.isCellClickEnabled()) {\n return;\n }\n const tableEvent: TableCellClickEvent<Item> = {\n column: col,\n rowItem: item,\n rowIndex: idx,\n event: event\n };\n this.cellClickSubject.next(tableEvent);\n }\n\n public onSelectionChange(event: Array<Item>) {\n this.selectionChange.emit(event);\n }\n\n public onRowReorder(event: TableRowReorderEvent) {\n this.rowReorder.emit(event);\n }\n\n /**\n * Method is called on column resize\n * @param element event's element\n */\n public onTableColumnResize({element}: any): void {\n const fieldId: string = element.id;\n const width: number = element.offsetWidth;\n\n const layoutPrefs = this.layoutPreferences();\n const col = this.columns().find(el => el.descriptor.property === fieldId);\n if (col) col.width = width;\n if (!layoutPrefs.columnWidths) layoutPrefs.columnWidths = {};\n\n layoutPrefs.columnWidths[fieldId] = width;\n this.saveLayoutPreferences(layoutPrefs);\n }\n\n private loadTableWithDataProvider(paramsWithDefaults: DataListParams, emitEvent = true) {\n const dataProvider = this.dataProvider();\n if (!dataProvider || paramsWithDefaults.limit === 0) {\n return;\n }\n\n this.dataProviderSubscription?.unsubscribe();\n this.dataListService.loading.set(true);\n\n this.latestParamsWithDefaults = paramsWithDefaults;\n this.latestParamsWithDefaultsVersion++;\n\n this.dataProviderSubscription = commonsToObservable(\n dataProvider.getAll(\n paramsWithDefaults as DataListParams<Sorts, Filters>,\n this.dataProviderService(),\n this.descriptor().isLocalized ? this.commons.appDataLocale() ?? undefined : undefined\n )\n ).subscribe({\n next: res => {\n const descriptorInput = this.descriptorInput();\n if (descriptorInput instanceof TableDynamicDescriptorInst) {\n this.descriptor.set(descriptorInput.toTableDescriptorFromData(res));\n }\n\n if (this.infiniteScroll()) {\n let items = this.dataListService.data();\n if (this.isFilterChanged || this.isSortChanged) {\n items = [];\n }\n items.splice(paramsWithDefaults!.offset ?? 0, paramsWithDefaults!.limit ?? this.dataListService.rows(), ...(res?.data ?? []));\n this.dataListService.setData(items);\n } else {\n this.dataListService.setData(res?.data ?? [], res?.totalCount);\n }\n\n this.isFilterChanged = false;\n this.isSortChanged = false;\n this.dataListService.loading.set(false);\n },\n error: err => {\n tableNotificationError(this.translate, this.descriptor(), err, this.messageService);\n this.dataListService.setData([]);\n this.dataListService.loading.set(false);\n\n const error = fromSubscribeError(err, 'TableComponentError', {\n queryParam: paramsWithDefaults\n });\n this.logger.log(error, getErrorLogLevel(error));\n }\n });\n\n if (emitEvent) {\n const tableEvent: TableLoadEvent = {\n originalEvent: this.dataProviderLatestLazyLoadEvent,\n params: paramsWithDefaults\n };\n this.tableLoad.emit(tableEvent);\n }\n }\n\n private loadTableFromRouteUpdate(urlParams: Params) {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(fromUrlQueryToDataListParams(urlParams), this.defaultParams());\n if (this.latestLazyLoadEventVersion < this.latestParamsWithDefaultsVersion + 1) {\n // update only if new version from query params will be higher\n this.updatePrimeSortAndFilter(paramsWithDefaults);\n }\n this.useQueryParamsInitialized.set(true);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n\n private updatePrimeSortAndFilter(paramsWithDefaults: DataListParams) {\n this.dataListService.sortMeta.set(this.createSortMeta(paramsWithDefaults));\n this.dataListService.filterMeta.set(this.createFilterMeta(paramsWithDefaults));\n this.dataListService.rows.set(paramsWithDefaults?.limit ?? this.dataListService.rows());\n this.dataListService.offset.set(paramsWithDefaults?.offset ?? 0);\n }\n\n private createFilterMeta(paramsWithDefaults?: DataListParams) {\n const primeFilterMeta: {[s: string]: FilterMetadata} = {};\n // if any filter is present, no default filters should be applied!\n if (paramsWithDefaults?.filters) {\n Object.entries(paramsWithDefaults.filters).forEach(([key, value]) => {\n primeFilterMeta[key] = {\n value: value.value,\n matchMode: value.matchMode\n };\n });\n }\n\n return primeFilterMeta;\n }\n\n private createSortMeta(paramsWithDefaults?: DataListParams): SortMeta[] | null {\n if (paramsWithDefaults?.sort !== undefined && Array.isArray(paramsWithDefaults?.sort) && paramsWithDefaults?.sort.length > 0) {\n return paramsWithDefaults?.sort.map(\n s =>\n <SortMeta>{\n field: s.property,\n order: s.ascending ? 1 : -1\n }\n );\n }\n\n return null;\n }\n\n public onColumnToggle(event: MultiSelectChangeEvent) {\n const layoutPrefs = this.layoutPreferences();\n const selectedColumns = (event.value as ColumnWithPreferences[]).map(v => v.descriptor.property);\n const hiddenColumns = this.columns()\n .filter(c => selectedColumns.indexOf(c.descriptor.property) < 0)\n .map(c => c.descriptor.property);\n layoutPrefs.columnHidden = hiddenColumns;\n this.saveLayoutPreferences(layoutPrefs);\n }\n\n public onColumnToggleAll() {\n const layoutPrefs = this.layoutPreferences();\n const columns = [...this.columns()];\n const isVisible = !this.columns().some(c => c.isVisible);\n for (const col of columns) {\n if (isVisible !== col.isVisible) {\n col.isVisible = isVisible;\n }\n }\n layoutPrefs.columnHidden = columns.filter(c => !c.isVisible).map(c => c.descriptor.property);\n this.saveLayoutPreferences(layoutPrefs);\n }\n\n public onColumnReorder(event: TableColumnReorderEvent) {\n if (event.dropIndex !== undefined && event.dropIndex >= 0 && event.dragIndex !== undefined && event.dragIndex >= 0 && event.dropIndex !== event.dragIndex) {\n const eventDropIndex = event.dropIndex;\n const eventDragIndex = event.dragIndex;\n const prevVisibleColumns = this.columns().filter(c => c.isVisible);\n const colAtDrop = prevVisibleColumns[eventDropIndex];\n const colAtDrag = prevVisibleColumns[eventDragIndex];\n const colAtDropIndex = this.columns().findIndex(el => el.id === colAtDrop.id);\n const colAtDragIndex = this.columns().findIndex(el => el.id === colAtDrag.id);\n\n if (colAtDropIndex > -1 && colAtDragIndex > -1) {\n let columns = [...this.columns()];\n columns.splice(colAtDragIndex, 1);\n const dropIndex = columns.findIndex(el => el.id === colAtDrop.id) + (eventDropIndex > eventDragIndex ? 1 : 0);\n columns = [...columns.slice(0, dropIndex), colAtDrag, ...columns.slice(dropIndex)];\n const layoutPrefs = this.layoutPreferences();\n layoutPrefs.columnOrder = columns.map(el => el.descriptor.property);\n this.saveLayoutPreferences(layoutPrefs);\n }\n }\n }\n\n private saveLayoutPreferences(layoutPrefs: TableLayoutPreferences) {\n const key = this.localstorageKey();\n if (key) {\n this.localStorageService.setItem(this.cmpTypeName, key, layoutPrefs);\n this.layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n\n private computeDefaultDataListParams() {\n const params: DataListParams = {\n offset: 0,\n limit: this.dataListService.rowsPerPageOptions()[0],\n sort: this.descriptor()\n .sorts.filter(s => s.defaultIsEnabled)\n .map(s => ({\n property: s.property,\n ascending: s.defaultIsAscending\n })),\n filters: {}\n };\n\n this.filterDescriptors()\n .filter(d => d.hasDefaultValue)\n .forEach(f => {\n let matchMode: string | undefined = f.defaultMatchMode;\n if (!matchMode) {\n switch (f.filterType) {\n case FilterTypeEnum.String:\n matchMode = FilterMatchMode.Contains;\n break;\n case FilterTypeEnum.Lookup:\n case FilterTypeEnum.LookupEnum: {\n const lookupFilter = f as FilterLookupDescriptor<any, Item>;\n if (lookupFilter.multiselect) {\n matchMode = FilterMatchMode.In;\n }\n break;\n }\n default:\n break;\n }\n }\n if (!matchMode) {\n matchMode = FilterMatchMode.Equals;\n }\n\n if (f.matchModes && !f.matchModes?.includes(matchMode)) {\n matchMode = f.matchModes[0];\n }\n\n let value: any | any[] | undefined = undefined;\n if (Array.isArray(value)) {\n value = [...value];\n } else {\n value = f.defaultValue;\n }\n\n const property = f.property;\n params.filters![property] = {\n value: value,\n matchMode: matchMode\n };\n });\n\n return params;\n }\n\n private computColumnsWithLayout() {\n const descriptor = this.descriptor();\n const layoutPrefs = this.layoutPreferences();\n\n // initialize columns with additional properties\n const timestamp = new Date().getTime();\n const columns: ColumnWithPreferences[] = descriptor.columns.map(col => ({\n id: `${col.property}-${timestamp}`,\n descriptor: col,\n filter: descriptor.filters.find(f => f.showOnColumn === col.property),\n sort: descriptor.sorts.find(f => f.showOnColumn === col.property),\n disabled: !col.isToggleable,\n isVisible: layoutPrefs.columnHidden ? !layoutPrefs.columnHidden.includes(col.property) : col.isVisible,\n width: layoutPrefs.columnWidths?.[col.property]\n }));\n\n if (layoutPrefs.columnOrder) {\n for (let i = 0; i < layoutPrefs.columnOrder.length; i++) {\n const colName = layoutPrefs.columnOrder[i];\n const colWithPrefs = columns.find(el => el.descriptor.property === colName);\n if (colWithPrefs) {\n colWithPrefs.orderIdx = i;\n }\n }\n }\n\n return columns.sort((a, b) => (a.orderIdx !== undefined && b.orderIdx !== undefined ? a.orderIdx - b.orderIdx : 0));\n }\n\n /**\n * Reset column order and column visibility to default settings\n */\n public resetDefaultLayout() {\n const key = this.localstorageKey();\n if (key) {\n this.localStorageService.removeItem(this.cmpTypeName, key);\n this.layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n}\n","<div [style.height]=\"tableFullHeightOffset() ? 'calc(100vh - ' + tableFullHeightOffset() + 'px)' : null\">\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\n @if (!useQueryParams() || useQueryParamsInitialized()) {\n <p-table\n [value]=\"dataListService.data()\"\n [dataKey]=\"descriptor().trackProperty\"\n [lazy]=\"isLazy()\"\n [loading]=\"dataListService.loading()\"\n [paginator]=\"isPagination() && !infiniteScroll()\"\n [rows]=\"infiniteScroll() ? 20 : dataListService.rows()\"\n [first]=\"infiniteScroll() ? 0 : dataListService.offset()\"\n [totalRecords]=\"dataListService.count()\"\n [rowsPerPageOptions]=\"infiniteScroll() ? undefined : dataListService.rowsPerPageOptions()\"\n [showCurrentPageReport]=\"!infiniteScroll()\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"dataListService.sortMeta()\"\n [filters]=\"dataListService.filterMeta()\"\n [globalFilterFields]=\"dataListService.globalFilterFields()\"\n sortMode=\"multiple\"\n [selection]=\"[]\"\n (selectionChange)=\"onSelectionChange($event)\"\n [selectionMode]=\"selectionEnabled() ? selectionMode() : null\"\n [scrollable]=\"true\"\n [virtualScroll]=\"infiniteScroll()\"\n [virtualScrollItemSize]=\"rowHeight()\"\n scrollHeight=\"flex\"\n [rowHover]=\"descriptor().hasHover\"\n [styleClass]=\"className()\"\n [resizableColumns]=\"descriptor().hasResizableColumns\"\n [columnResizeMode]=\"descriptor().columnResizeMode ?? 'expand'\"\n [reorderableColumns]=\"areColumnsReorderable()\"\n paginatorDropdownAppendTo=\"body\"\n [columns]=\"visibleColumns()\"\n (onColResize)=\"onTableColumnResize($event)\"\n (onColReorder)=\"onColumnReorder($event)\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n (onSort)=\"onTableSort($event)\"\n (onFilter)=\"onTableFilter($event)\"\n (onRowReorder)=\"onRowReorder($event)\">\n @if (captionTemplate() || captionComponent() || descriptor().title) {\n <ng-template pTemplate=\"caption\">\n @if (captionTemplate()) {\n <ng-container *ngTemplateOutlet=\"captionTemplate()\"></ng-container>\n } @else if (captionComponent()) {\n <div [mngComponent]=\"captionComponent()\" (instanceCreated)=\"captionComponentInstance.emit($event)\"></div>\n } @else {\n <h5 class=\"p-0 m-0\">{{ descriptor().title }}</h5>\n }\n </ng-template>\n }\n <ng-template pTemplate=\"header\">\n @if (!descriptor().hideHeader) {\n <tr class=\"mng-table-header\" [class]=\"descriptor().headerClassName\">\n\n @if (selectionEnabled()) {\n @if (selectionMode() === 'multiple') {\n <th style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\">\n <p-tableHeaderCheckbox></p-tableHeaderCheckbox>\n </th>\n } @else {\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n <th style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\"></th>\n }\n }\n @if (descriptor().rowExpandable) {\n <th scope=\"col\" class=\"col-1\" pFrozenColumn [frozen]=\"true\"></th>\n }\n @if (rowReorderEnabled()) {\n <th scope=\"col\"></th>\n }\n @for (col of visibleColumns(); track col.id) {\n <ng-template #sortableColumnTHTemplate>\n <div class=\"flex justify-content-between align-items-center\">\n {{ col.descriptor.title ?? (col.descriptor.property | mngI18nProperty: descriptor().model) | translate }}\n <p-sortIcon [field]=\"col.descriptor.property\"></p-sortIcon>\n </div>\n </ng-template>\n <ng-template #nonSortableColumnTHTemplate>\n {{ col.descriptor.title ?? (col.descriptor.property | mngI18nProperty: descriptor().model) | translate }}\n </ng-template>\n @if (col.descriptor.isReorderable) {\n <th\n pResizableColumn\n pReorderableColumn\n [id]=\"col.descriptor.property\"\n [pSortableColumn]=\"col.sort?.property\"\n [pSortableColumnDisabled]=\"!col.sort\"\n [style.width]=\"col.width ? col.width + 'px' : col.descriptor.width + '%'\"\n [style.min-width.px]=\"col.width ? null : col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\"\n [class]=\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\">\n <ng-container *ngTemplateOutlet=\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\"></ng-container>\n </th>\n } @else {\n <th\n pResizableColumn\n [id]=\"col.descriptor.property\"\n [pSortableColumn]=\"col.sort?.property\"\n [pSortableColumnDisabled]=\"!col.sort\"\n [style.width]=\"col.width ? col.width + 'px' : col.descriptor.width + '%'\"\n [style.min-width.px]=\"col.width ? null : col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\"\n [class]=\"col.descriptor.headerClassName | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\">\n <ng-container *ngTemplateOutlet=\"col.sort ? sortableColumnTHTemplate : nonSortableColumnTHTemplate\"></ng-container>\n </th>\n }\n }\n @if (hasLastColumn()) {\n <th\n [style.min-width.px]=\"columnLastMinWidth()\"\n pFrozenColumn\n [frozen]=\"descriptor().actionColumnFrozen ?? areColumnsToggleable()\"\n alignFrozen=\"right\"\n class=\"column-custom-last text-right\">\n @if (descriptor().hasResizableColumns) {\n <p-multiSelect\n #columnToggleMultiselect\n styleClass=\"p-button-primary mng-table-columns-multiselect\"\n appendTo=\"body\"\n dataKey=\"id\"\n tooltipPosition=\"left\"\n placeholder=\"\"\n dropdownIcon=\"pi pi-sliders-h\"\n [filter]=\"false\"\n [options]=\"columns()\"\n [ngModel]=\"visibleColumns()\"\n [pTooltip]=\"'mngTable.adjustTable' | translate\"\n [displaySelectedLabel]=\"false\"\n (onChange)=\"onColumnToggle($event)\">\n <ng-template pTemplate=\"filter\">\n <div class=\"p-checkbox p-component ml-1\" [ngClass]=\"{'p-checkbox-disabled': !areColumnsToggleable}\">\n <div class=\"p-hidden-accessible\">\n <input\n type=\"checkbox\"\n readonly=\"readonly\"\n [checked]=\"columnToggleMultiselect.allSelected\"\n (focus)=\"columnToggleMultiselect.onHeaderCheckboxFocus()\"\n (blur)=\"columnToggleMultiselect.onHeaderCheckboxBlur()\"\n (keydown.space)=\"columnToggleMultiselect.onToggleAll($event)\"\n [disabled]=\"!areColumnsToggleable\" />\n </div>\n <div\n class=\"p-checkbox-box\"\n role=\"checkbox\"\n [attr.aria-checked]=\"columnToggleMultiselect.allSelected\"\n [ngClass]=\"{\n 'p-highlight': anyColumnVisible()\n }\"\n (click)=\"onColumnToggleAll()\">\n <span class=\"p-checkbox-icon\" [ngClass]=\"{'pi pi-check': anyColumnVisible()}\"></span>\n </div>\n </div>\n <p-button\n icon=\"pi pi-replay\"\n styleClass=\"p-button-secondary\"\n [pTooltip]=\"'mngTable.resetLayout' | translate\"\n tooltipPosition=\"left\"\n (click)=\"resetDefaultLayout()\"></p-button>\n </ng-template>\n <ng-template let-item pTemplate=\"item\">\n {{ item.descriptor.title ?? (item.descriptor.property | mngI18nProperty: descriptor().model) | translate }}\n </ng-template>\n </p-multiSelect>\n }\n </th>\n }\n </tr>\n }\n @if (hasColumnFilters()) {\n <tr class=\"mng-column-filter-row\">\n <!-- We need the line below, because otherwise p-tableRadioButton shifts the rest of the columns in table -->\n @if (selectionEnabled()) {\n <th style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\"></th>\n }\n @if (rowReorderEnabled()) {\n <th scope=\"col\"></th>\n }\n @for (col of visibleColumns(); track col.id) {\n <th\n [class]=\"col.filter?.columnClassName | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\"\n [style.width.px]=\"col.width\"\n [style.width.%]=\"col.width ? null : col.filter?.columnWidth ?? col.descriptor.width ?? null\"\n [style.min-width.px]=\"col.width ? null : col.filter?.columnMinWidth ?? col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\">\n @if (col.filter) {\n <mng-table-column-filter-full [descriptor]=\"col.filter\"></mng-table-column-filter-full>\n }\n </th>\n }\n @if (hasLastColumn()) {\n <th class=\"column-custom-last\" [style.min-width.px]=\"columnLastMinWidth()\"></th>\n }\n </tr>\n }\n </ng-template>\n <ng-template pTemplate=\"body\" let-item let-idx=\"rowIndex\" let-expanded=\"expanded\">\n <tr\n [style.height.px]=\"rowHeight()\"\n [pReorderableRow]=\"idx\"\n [ngClass]=\"descriptor().rowClassName | mngClassMap: descriptor().rowClassNameMapFn : item | mngLocaleDefaultRowClass: descriptor() : item\">\n @if (selectionEnabled()) {\n @if (selectionMode() === 'multiple') {\n <td style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n } @else {\n <td style=\"min-width: 36px\" pFrozenColumn [frozen]=\"descriptor().selectionColumnFrozen ?? true\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n }\n }\n @if (descriptor().rowExpandable) {\n <td class=\"col-1\">\n @if (!descriptor().rowExpandableProperty || item[descriptor().rowExpandableProperty!]) {\n <button\n pButton\n type=\"button\"\n [pRowToggler]=\"item\"\n class=\"p-button-text p-button-rounded p-button-plain\"\n [icon]=\"expanded ? 'pi pi-chevron-down' : 'pi pi-chevron-right'\"></button>\n }\n </td>\n }\n @if (rowReorderEnabled()) {\n <td>\n <span class=\"pi pi-bars\" pReorderableRowHandle></span>\n </td>\n }\n @for (col of visibleColumns(); track col.id) {\n <td\n (click)=\"onCellClick($event, col.descriptor, item, idx)\"\n [class]=\"\n col.descriptor.className\n | mngClassMap: col.descriptor.classNameMapFn : item\n | mngTableColumnFilterClass: col.filter : hasColumnFilters() && !col.width\n \"\n [class.clickable]=\"isCellClickEnabled()\"\n [style.width]=\"col.width ? col.width + 'px' : col.descriptor.width + '%'\"\n [style.min-width.px]=\"col.width ? null : col.descriptor.minWidth\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\">\n <span class=\"p-column-title\">{{ col.descriptor.title ?? (col.descriptor.property | mngI18nProperty: descriptor().model) | translate }}</span>\n <mng-table-column-value [descriptor]=\"col.descriptor\" [item]=\"item\"></mng-table-column-value>\n </td>\n }\n @if (hasLastColumn()) {\n <td\n class=\"column-custom-last justify-content-end text-right\"\n [style.min-width.px]=\"columnLastMinWidth()\"\n pFrozenColumn\n [frozen]=\"descriptor().actionColumnFrozen ?? true\"\n alignFrozen=\"right\">\n @if (columnCustomLastTemplate()) {\n <ng-container *ngTemplateOutlet=\"columnCustomLastTemplate(); context: {rowItem: item, rowIndex: idx}\"></ng-container>\n } @else if (columnCustomLastComponent()) {\n <div [mngComponent]=\"columnCustomLastComponent()\" (instanceCreated)=\"columnCustomLastComponentInstance.emit($event)\"></div>\n }\n </td>\n }\n </tr>\n </ng-template>\n @if (descriptor().rowExpandable) {\n <ng-template pTemplate=\"rowexpansion\" let-item>\n <tr>\n <td class=\"col-1\"></td>\n <td [colSpan]=\"descriptor().rowExpandableColSpan\">\n <ng-container *ngTemplateOutlet=\"rowExpandTemplate(); context: {rowItem: item}\"></ng-container>\n </td>\n </tr>\n </ng-template>\n }\n <ng-template pTemplate=\"loadingicon\">\n <div class=\"flex flex-column align-items-center\">\n @if (descriptor().loadingIcon) {\n <i [class]=\"'text-white text-4xl pi-spin ' + descriptor().loadingIcon\"></i>\n }\n @if (descriptor().loadingText) {\n <div class=\"text text-white text-lg font-semibold\" [ngClass]=\"{'mt-3': descriptor().loadingIcon}\">\n {{ descriptor().loadingText ?? '' | translate }}\n </div>\n }\n </div>\n </ng-template>\n <ng-template pTemplate=\"loadingbody\">\n <tr [style.height.px]=\"rowHeight()\">\n <td [attr.colspan]=\"columnsColspan()\">\n <div class=\"loading-text\"></div>\n <p-skeleton [ngStyle]=\"{width: '100%'}\"></p-skeleton>\n </td>\n </tr>\n </ng-template>\n <ng-template pTemplate=\"emptymessage\">\n <tr [style.height.px]=\"rowHeight()\">\n <td [attr.colspan]=\"columnsColspan()\">\n {{ 'mngTable.noItems' | translate }}\n </td>\n </tr>\n </ng-template>\n @if (footerTemplate()) {\n <ng-template pTemplate=\"summary\">\n <ng-container *ngTemplateOutlet=\"footerTemplate(); context: {data: dataListService.data(), totalCount: dataListService.count()}\"></ng-container>\n </ng-template>\n }\n </p-table>\n }\n</div>\n","// components\nexport * from './components/column-filter-full/column-filter-full.component';\nexport * from './components/column-value/column-value.component';\nexport * from './components/table/table.component';\n\n// helpers\nexport * from './helpers/notification';\nexport * from './helpers/table-layout-prefs';\n\n// pipes\nexport * from './pipes/locale-default-row-class.pipe';\nexport * from './pipes/table-column-filter-class.pipe';\n\n// services\nexport * from './services/data-list.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i3","commonsToObservable","i1","i5","i6","i7"],"mappings":"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"}
|