@mediusinc/mng-commons 5.4.0 → 5.5.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/descriptors/table.descriptor.d.ts +4 -2
- package/core/directives/rerender.directive.d.ts +9 -0
- package/core/helpers/route.d.ts +25 -25
- package/core/index.d.ts +2 -0
- package/core/models/version.model.d.ts +16 -4
- package/core/reactivity/effect.d.ts +16 -0
- package/esm2022/core/components/notification/notification-wrapper.component.mjs +4 -4
- package/esm2022/core/components/pages/error/error.page.component.mjs +4 -4
- package/esm2022/core/components/pages/not-found/not-found.page.component.mjs +4 -4
- package/esm2022/core/data-list/data-list-params-helpers.mjs +18 -3
- package/esm2022/core/descriptors/table.descriptor.mjs +1 -1
- package/esm2022/core/directives/component.directive.mjs +4 -4
- package/esm2022/core/directives/rerender.directive.mjs +25 -0
- package/esm2022/core/directives/template.directive.mjs +4 -4
- package/esm2022/core/index.mjs +4 -1
- package/esm2022/core/models/version.model.mjs +1 -1
- package/esm2022/core/pipes/boolean.pipe.mjs +6 -6
- package/esm2022/core/pipes/class-map.pipe.mjs +4 -4
- package/esm2022/core/pipes/enum.pipe.mjs +4 -4
- package/esm2022/core/pipes/enumerate-async.pipe.mjs +4 -4
- package/esm2022/core/pipes/enumerate.pipe.mjs +4 -4
- package/esm2022/core/pipes/getter.pipe.mjs +5 -5
- package/esm2022/core/pipes/i18n-property.pipe.mjs +4 -4
- package/esm2022/core/pipes/json-path.pipe.mjs +4 -4
- package/esm2022/core/pipes/parametrize.pipe.mjs +4 -4
- package/esm2022/core/pipes/template.pipe.mjs +4 -4
- package/esm2022/core/reactivity/effect.mjs +22 -0
- package/esm2022/core/security/permission.service.mjs +4 -4
- package/esm2022/core/services/commons-init.service.mjs +4 -4
- package/esm2022/core/services/commons-router.service.mjs +4 -4
- package/esm2022/core/services/commons-storage.service.mjs +4 -4
- package/esm2022/core/services/commons.service.mjs +8 -8
- package/esm2022/filter/descriptors/filter-lookup.descriptor.mjs +32 -25
- package/esm2022/filter/descriptors/filter.descriptor.mjs +53 -1
- package/esm2022/form/components/autocomplete/autocomplete.component.mjs +4 -4
- package/esm2022/form/components/date-range/date-range.component.mjs +4 -4
- package/esm2022/form/components/dropdown/dropdown.component.mjs +4 -4
- package/esm2022/form/components/number-range/number-range.component.mjs +4 -4
- package/esm2022/form/directives/input-trim.directive.mjs +4 -4
- package/esm2022/table/api/descriptors/sort.descriptor.mjs +2 -2
- package/esm2022/table/api/descriptors/table.descriptor.mjs +31 -7
- package/esm2022/table/components/column-filter/column-filter.component.mjs +33 -40
- package/esm2022/table/components/column-value/column-value.component.mjs +6 -6
- package/esm2022/table/components/filter/filter-active-tag/filter-active-tag.component.mjs +7 -7
- package/esm2022/table/components/filter/filter-form/filter-form.component.mjs +28 -35
- package/esm2022/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.mjs +44 -45
- package/esm2022/table/components/table/table.component.mjs +114 -430
- package/esm2022/table/helpers/filters.mjs +9 -25
- package/esm2022/table/helpers/table.mjs +24 -0
- package/esm2022/table/index.mjs +2 -2
- package/esm2022/table/models/column-preferences.model.mjs +1 -1
- package/esm2022/table/models/filter.model.mjs +1 -1
- package/esm2022/table/pipes/filter-value.pipe.mjs +4 -4
- package/esm2022/table/pipes/locale-default-row-class.pipe.mjs +4 -4
- package/esm2022/table/pipes/table-column-filter-class.pipe.mjs +4 -4
- package/esm2022/table/services/table-data.service.mjs +194 -0
- package/esm2022/table/services/table-metadata.service.mjs +136 -0
- package/esm2022/table/services/table-preferences.service.mjs +142 -0
- package/esm2022/tableview/action/components/action/action.component.mjs +6 -7
- package/esm2022/tableview/action/components/editor/action-editor.component.mjs +4 -4
- package/esm2022/tableview/action/components/editor/injector-context/action-editor-injector-context.component.mjs +69 -46
- package/esm2022/tableview/action/components/localization/data-language-dropdown.component.mjs +4 -4
- package/esm2022/tableview/action/components/route/action-route.component.mjs +5 -6
- package/esm2022/tableview/action/components/table/action-table.component.mjs +6 -6
- package/esm2022/tableview/action/helpers/action-execution.mjs +25 -0
- package/esm2022/tableview/action/models/execution/action-instance.model.mjs +2 -3
- package/esm2022/tableview/action/services/action-executor.service.mjs +12 -79
- package/esm2022/tableview/action/services/component-action-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/data-provider-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/navigation.service.mjs +4 -4
- package/esm2022/tableview/action/services/root-action-executor.service.mjs +4 -4
- package/esm2022/tableview/action/services/view-container.service.mjs +4 -4
- package/esm2022/tableview/api/action/descriptors/action-confirmation.descriptor.mjs +13 -1
- package/esm2022/tableview/api/action/descriptors/action-editor.descriptor.mjs +67 -10
- package/esm2022/tableview/api/action/descriptors/action-link-descriptor.factory.mjs +2 -2
- package/esm2022/tableview/api/action/descriptors/action-link.descriptor.mjs +17 -1
- package/esm2022/tableview/api/action/descriptors/action.descriptor.mjs +32 -7
- package/esm2022/tableview/api/action/models/execution/action-instance-state.model.mjs +2 -2
- package/esm2022/tableview/api/editor/descriptors/field-many.descriptor.mjs +2 -1
- package/esm2022/tableview/api/editor/models/formly-custom-field.model.mjs +4 -4
- package/esm2022/tableview/api/tableview/descriptors/tableview.descriptor.mjs +13 -5
- package/esm2022/tableview/api/tableview/helpers/tableview-default-actions.mjs +3 -2
- package/esm2022/tableview/api/tableview/helpers/tableview-descriptor-helpers.mjs +2 -2
- package/esm2022/tableview/editor/components/editor/auto-save-status/auto-save-status.component.mjs +4 -4
- package/esm2022/tableview/editor/components/editor/form-editor.component.mjs +31 -38
- package/esm2022/tableview/editor/components/formly/fields/formly-field-action/formly-field-action.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-autocomplete/formly-field-autocomplete.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-custom/formly-field-custom.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-datepicker/formly-field-datepicker.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-dropdown/formly-field-dropdown.component.mjs +7 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-input/formly-field-input.component.mjs +5 -5
- package/esm2022/tableview/editor/components/formly/fields/formly-field-label/formly-field-label.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-lookup-dialog/formly-field-lookup-dialog.component.mjs +5 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-form/formly-field-table-dialog-form.component.mjs +5 -6
- package/esm2022/tableview/editor/components/formly/fields/formly-field-table-dialog-multiselect/formly-field-table-dialog-multiselect.component.mjs +6 -7
- package/esm2022/tableview/editor/components/formly/fields/formly-field-tabs/formly-field-tabs.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/fields/formly-field-type.abstract.component.mjs +6 -5
- package/esm2022/tableview/editor/components/formly/pipes/formly-field-label.pipe.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-no-label-wrapper/formly-field-no-label-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/components/formly/wrappers/formly-field-wrapper/formly-field-wrapper.component.mjs +4 -4
- package/esm2022/tableview/editor/helpers/editor-autosave.mjs +2 -2
- package/esm2022/tableview/editor/services/form-editor.service.mjs +4 -4
- package/esm2022/tableview/index.mjs +1 -2
- package/esm2022/tableview/tableview/components/route/tableview-route.component.mjs +4 -4
- package/esm2022/tableview/tableview/components/tableview/tableview.component.mjs +4 -4
- package/fesm2022/mediusinc-mng-commons-core.mjs +130 -71
- package/fesm2022/mediusinc-mng-commons-core.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-filter.mjs +83 -24
- package/fesm2022/mediusinc-mng-commons-filter.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-form.mjs +15 -15
- package/fesm2022/mediusinc-mng-commons-form.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-model.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table-api.mjs +31 -7
- package/fesm2022/mediusinc-mng-commons-table-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-table.mjs +704 -606
- package/fesm2022/mediusinc-mng-commons-table.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs +146 -26
- package/fesm2022/mediusinc-mng-commons-tableview-api.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons-tableview.mjs +260 -317
- package/fesm2022/mediusinc-mng-commons-tableview.mjs.map +1 -1
- package/fesm2022/mediusinc-mng-commons.mjs.map +1 -1
- package/filter/descriptors/filter-lookup.descriptor.d.ts +17 -20
- package/filter/descriptors/filter.descriptor.d.ts +32 -2
- package/form/components/date-range/date-range.component.d.ts +3 -3
- package/form/components/number-range/number-range.component.d.ts +2 -2
- package/package.json +4 -4
- package/table/api/descriptors/column.descriptor.d.ts +1 -1
- package/table/api/descriptors/sort.descriptor.d.ts +2 -2
- package/table/api/descriptors/table.descriptor.d.ts +20 -6
- package/table/components/column-filter/column-filter.component.d.ts +8 -14
- package/table/components/filter/filter-active-tag/filter-active-tag.component.d.ts +5 -5
- package/table/components/filter/filter-form/filter-form.component.d.ts +10 -19
- package/table/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.d.ts +11 -13
- package/table/components/table/table.component.d.ts +20 -64
- package/table/helpers/filters.d.ts +4 -7
- package/table/helpers/table.d.ts +6 -0
- package/table/index.d.ts +1 -1
- package/table/models/column-preferences.model.d.ts +2 -2
- package/table/models/filter.model.d.ts +14 -2
- package/table/services/table-data.service.d.ts +36 -0
- package/table/services/table-metadata.service.d.ts +31 -0
- package/table/services/table-preferences.service.d.ts +25 -0
- package/tableview/action/components/editor/injector-context/action-editor-injector-context.component.d.ts +4 -7
- package/tableview/action/components/localization/data-language-dropdown.component.d.ts +1 -1
- package/tableview/action/helpers/action-execution.d.ts +7 -0
- package/tableview/action/models/execution/action-instance.model.d.ts +1 -2
- package/tableview/action/services/action-executor.service.d.ts +1 -2
- package/tableview/api/action/descriptors/action-confirmation.descriptor.d.ts +1 -0
- package/tableview/api/action/descriptors/action-editor.descriptor.d.ts +12 -4
- package/tableview/api/action/descriptors/action-link.descriptor.d.ts +1 -0
- package/tableview/api/action/descriptors/action.descriptor.d.ts +5 -3
- package/tableview/api/action/models/execution/action-instance-state.model.d.ts +1 -1
- package/tableview/api/editor/descriptors/field-base.descriptor.d.ts +4 -10
- package/tableview/api/editor/descriptors/field-group.descriptor.d.ts +1 -1
- package/tableview/api/tableview/descriptors/tableview.descriptor.d.ts +6 -4
- package/tableview/editor/components/editor/form-editor.component.d.ts +3 -2
- package/tableview/editor/components/formly/fields/formly-field-fieldset/formly-field-fieldset.component.d.ts +1 -1
- package/tableview/editor/components/formly/fields/formly-field-type.abstract.component.d.ts +2 -1
- package/tableview/index.d.ts +0 -1
- package/version-info.json +6 -6
- package/esm2022/table/services/data-list.service.mjs +0 -29
- package/esm2022/tableview/action/models/execution/action-instance-state.model.mjs +0 -32
- package/table/services/data-list.service.d.ts +0 -19
- package/tableview/action/models/execution/action-instance-state.model.d.ts +0 -30
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mediusinc-mng-commons-table.mjs","sources":["../../table/src/helpers/filters.ts","../../table/src/services/data-list.service.ts","../../table/src/components/column-filter/column-filter.component.ts","../../table/src/components/column-filter/column-filter.component.html","../../table/src/components/column-value/column-value.component.ts","../../table/src/components/column-value/column-value.component.html","../../table/src/pipes/filter-value.pipe.ts","../../table/src/components/filter/filter-active-tag/filter-active-tag.component.ts","../../table/src/components/filter/filter-active-tag/filter-active-tag.component.html","../../table/src/components/filter/filter-form/filter-form.component.ts","../../table/src/components/filter/filter-form/filter-form.component.html","../../table/src/services/table-feature-config.token.ts","../../table/src/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.ts","../../table/src/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.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/provide.ts","../../table/src/index.ts","../../table/src/mediusinc-mng-commons-table.ts"],"sourcesContent":["import {PrimeNGConfig, SelectItem} from 'primeng/api';\n\nimport {\n CommonsFilterMetadata,\n CommonsModuleConfig,\n CommonsSerializationConfig,\n FilterMatchMode,\n FilterMatchModeExtendedType,\n Nullable,\n SingleOrArrayType,\n angularDateFormatHasSeconds,\n angularDateFormatHasTime,\n dateToIsoString,\n fromAngularDateFormatToPrime,\n fromAngularNumberFormatToFractions\n} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterGenericProperty, FilterLookupDescriptor, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {LookupDataProviderInst} from '@mediusinc/mng-commons/form/api';\n\nimport {FilterDateConfig} from '../models/filter.model';\n\nexport function generateMatchModeOptions(primeConfig: PrimeNGConfig, descriptor: FilterDescriptor<any, any> | undefined, cmpSerCfg?: CommonsSerializationConfig): SelectItem[] {\n let options: SelectItem[] | undefined = undefined;\n if (descriptor == null || descriptor.filterType === FilterTypeEnum.String) {\n options = [\n {value: FilterMatchMode.Contains, label: primeConfig.getTranslation(FilterMatchMode.Contains)},\n {value: FilterMatchMode.NotContains, label: primeConfig.getTranslation(FilterMatchMode.NotContains)},\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.StartsWith, label: primeConfig.getTranslation(FilterMatchMode.StartsWith)},\n {value: FilterMatchMode.EndsWith, label: primeConfig.getTranslation(FilterMatchMode.EndsWith)}\n ];\n } else if (descriptor.filterType === FilterTypeEnum.Boolean) {\n options = [{value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)}];\n } else if (descriptor.filterType === FilterTypeEnum.Number) {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThan, label: primeConfig.getTranslation(FilterMatchMode.LessThan)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThan, label: primeConfig.getTranslation(FilterMatchMode.GreaterThan)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between)}\n ];\n } else if (descriptor.filterType === FilterTypeEnum.Lookup || descriptor.filterType === FilterTypeEnum.LookupEnum) {\n if (descriptor instanceof FilterLookupDescriptor && descriptor.multiselect) {\n options = [\n {value: FilterMatchMode.In, label: primeConfig.getTranslation(FilterMatchMode.In)},\n {value: FilterMatchMode.NotIn, label: primeConfig.getTranslation(FilterMatchMode.NotIn)}\n ];\n } else {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)}\n ];\n }\n } else if (descriptor.filterType === FilterTypeEnum.Date) {\n if (!descriptor.datePickerShowTime && !descriptor.dateValueNoTime && !cmpSerCfg?.filtersDateOnlyDisabled) {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between)}\n ];\n } else {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between)}\n ];\n }\n }\n\n options?.push(\n {value: FilterMatchMode.Exists, label: primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n );\n\n if (descriptor?.matchModes) {\n options = descriptor.matchModes.map(mm => <SelectItem>{value: mm, label: primeConfig.getTranslation(mm)});\n }\n return options || [];\n}\n\n/**\n * Gets the default match mode for a filter.\n *\n * @param {FilterDescriptor<any, any>} [descriptor] - The filter descriptor.\n * @param {SelectItem[]} [matchModes=[]] - The available match modes options.\n *\n * @return {FilterMatchModeExtendedType} The default match mode for the filter.\n */\nexport function filterGetDefaultMatchMode(descriptor?: FilterDescriptor<any, any>, matchModes: SelectItem[] = []): FilterMatchModeExtendedType {\n let defaultMatchMode: FilterMatchModeExtendedType = FilterMatchMode.Equals;\n if (descriptor?.filterType === FilterTypeEnum.String) defaultMatchMode = FilterMatchMode.StartsWith;\n else if (descriptor?.filterType === FilterTypeEnum.Number || descriptor?.filterType === FilterTypeEnum.Date || descriptor?.filterType === FilterTypeEnum.Boolean)\n defaultMatchMode = FilterMatchMode.Equals;\n else if (descriptor?.filterType === FilterTypeEnum.Lookup || descriptor?.filterType === FilterTypeEnum.LookupEnum) {\n if (descriptor instanceof FilterLookupDescriptor) {\n defaultMatchMode = descriptor?.multiselect ? FilterMatchMode.In : FilterMatchMode.Equals;\n } else {\n defaultMatchMode = FilterMatchMode.Equals;\n }\n }\n\n // overwrite type default set in descriptor\n if (descriptor?.defaultMatchMode) {\n defaultMatchMode = descriptor.defaultMatchMode;\n }\n\n // check if default mode exists!\n if (matchModes.length > 0 && !matchModes.some(m => m.value === defaultMatchMode)) {\n defaultMatchMode = matchModes[0].value;\n }\n\n return defaultMatchMode;\n}\n\nexport function filterSetMetadataOnChange(\n filter: CommonsFilterMetadata,\n matchMode?: FilterMatchModeExtendedType,\n value?: any,\n filterType?: FilterTypeEnum,\n filterDateCfg?: FilterDateConfig\n): CommonsFilterMetadata {\n let displayValue = filter?.displayValue ?? value;\n let displayMatchMode = filter?.displayMatchMode ?? matchMode;\n\n // when equals is used on dates with time, the actual filter will be between, but displayed as equals\n if (filterType === FilterTypeEnum.Date && !filterDateCfg?.valueNoTime) {\n if (\n matchMode === FilterMatchMode.Between &&\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(v => v instanceof Date || typeof v === 'string' || typeof v === 'number')\n ) {\n if (filterAreDatesEqual(value[0], value[1], filterDateCfg)) {\n displayMatchMode = FilterMatchMode.Equals;\n displayValue = new Date(value[0]);\n }\n } else if (matchMode === FilterMatchMode.Equals && !value) {\n matchMode = FilterMatchMode.Between;\n }\n }\n\n if (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 if (filterType === FilterTypeEnum.Boolean && displayValue != null && typeof displayValue !== 'boolean') {\n displayValue = (typeof displayValue === 'string' && displayValue.toLowerCase() === 'true') || displayValue === 1;\n }\n if (filterType === FilterTypeEnum.Number && displayValue != null && typeof displayValue !== 'number') {\n const numValue = +displayValue;\n if (!isNaN(numValue)) {\n displayValue = numValue;\n }\n }\n\n return {\n ...filter,\n matchMode,\n value: value,\n displayMatchMode,\n displayValue\n };\n}\n\nexport function filterSetMetadataOnDisplayChange(\n filter: CommonsFilterMetadata | undefined,\n displayMatchMode: FilterMatchModeExtendedType,\n displayValue: any,\n filterType?: FilterTypeEnum,\n filterDateCfg?: FilterDateConfig\n) {\n let matchMode = displayMatchMode;\n let value: SingleOrArrayType<Nullable<Date | string | number | boolean>> = displayValue;\n\n if (filterType === FilterTypeEnum.Date) {\n if (!filterDateCfg?.valueNoTime && displayValue !== null) {\n if (displayMatchMode === FilterMatchMode.Equals) {\n if (value instanceof Date || typeof value === 'string' || typeof value === 'number') {\n const fromDate = new Date(value);\n const toDate = new Date(value);\n\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n fromDate.setMilliseconds(0);\n toDate.setMilliseconds(999);\n } else {\n fromDate.setSeconds(0, 0);\n toDate.setSeconds(59, 999);\n }\n } else {\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n }\n\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n } else {\n value = null;\n }\n } else if (displayMatchMode === FilterMatchMode.Between) {\n if (Array.isArray(value) && value.length === 2 && value.every(i => i instanceof Date || typeof i === 'string' || typeof i === 'number')) {\n const fromDate = new Date(value[0] as Date | string | number);\n let toDate = new Date(value[1] as Date | string | number);\n\n if (filterAreDatesEqual(fromDate, toDate, filterDateCfg)) {\n toDate = new Date(fromDate);\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n toDate.setSeconds(toDate.getSeconds() + 1);\n } else {\n toDate.setMinutes(toDate.getMinutes() + 1);\n }\n } else {\n toDate.setDate(toDate.getDate() + 1);\n }\n\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n }\n } else {\n value = null;\n }\n }\n }\n\n const convertDateType = filterDateCfg?.valueNoTime ? 'date' : 'date-time';\n const convertDateTimeOpts = {\n utc: filterDateCfg?.valueUtc,\n noMillis: filterDateCfg?.valueNoMillis,\n noTimezone: filterDateCfg?.valueNoTimezone\n };\n\n value =\n value == null\n ? value\n : Array.isArray(value)\n ? value.filter(i => i != null).map(i => dateToIsoString(i, convertDateType, convertDateTimeOpts))\n : dateToIsoString(value, convertDateType, convertDateTimeOpts);\n }\n if (matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n value = null;\n }\n\n return {\n ...filter,\n displayMatchMode: displayMatchMode,\n matchMode: matchMode,\n displayValue: displayValue,\n value: value,\n caseSensitive: filterType === FilterTypeEnum.String ? filter?.caseSensitive : undefined\n };\n}\n\nexport function filterAreDatesEqual(fromDate: Date | string | number, toDate: Date | string | number, filterDateCfg?: FilterDateConfig) {\n const startDate = dateToIsoString(fromDate);\n const endDate = dateToIsoString(toDate);\n\n // 2020-11-02T11:12:12.000\n const cmpLength = filterDateCfg?.showTime ? (filterDateCfg?.showSeconds ? 19 : 16) : 10;\n\n return startDate.substring(0, cmpLength) === endDate.substring(0, cmpLength);\n}\n\nexport function filterApplySerializationConfigToCmp(config: CommonsModuleConfig | null, cmpSerCfg: CommonsSerializationConfig) {\n // set default\n cmpSerCfg.dateTimeInUtc = false;\n cmpSerCfg.dateTimeWithTimezone = true;\n cmpSerCfg.dateTimeWithMillis = true;\n cmpSerCfg.filtersDateOnlyDisabled = false;\n // set customizations\n if (config?.serialization) {\n if (config.serialization.dateTimeInUtc !== undefined) cmpSerCfg.dateTimeInUtc = config.serialization.dateTimeInUtc;\n if (config.serialization.dateTimeWithTimezone !== undefined) cmpSerCfg.dateTimeWithTimezone = config.serialization.dateTimeWithTimezone;\n if (config.serialization.dateTimeWithMillis !== undefined) cmpSerCfg.dateTimeWithMillis = config.serialization.dateTimeWithMillis;\n if (config.serialization.filtersDateOnlyDisabled !== undefined) cmpSerCfg.filtersDateOnlyDisabled = config.serialization.filtersDateOnlyDisabled;\n }\n}\n\nexport function filterAdjustDisplayValueOnMatchModeChange(matchMode?: FilterMatchModeExtendedType, value?: any): any {\n if (matchMode == null || matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n return value; // never change, only change later if something else changes here\n }\n if (matchMode === FilterMatchMode.Between) {\n if (!Array.isArray(value)) {\n return value != null ? [value, value] : [];\n } else if (value.length === 0 || value.length === 2) {\n return value;\n } else if (value.length === 1) {\n return [value[0], value[0]];\n } else {\n return [value[0], value[1]];\n }\n }\n if (matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) {\n return Array.isArray(value) ? value : value == null ? [] : [value];\n }\n return Array.isArray(value) && value.length > 0 ? value[0] : value;\n}\n\nexport function filterGetDateConfig(descriptor?: FilterDescriptor<any, any>, serCfg?: CommonsSerializationConfig): FilterDateConfig | undefined {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Date) {\n return undefined;\n }\n\n const showTime =\n descriptor.datePickerShowTime ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasTime(descriptor.displayFormat) : false);\n return {\n valueNoTime: descriptor.dateValueNoTime || (!serCfg?.filtersDateOnlyDisabled && !showTime),\n valueUtc: descriptor.dateValueUtc ?? serCfg?.dateTimeInUtc,\n valueNoTimezone: descriptor.dateValueNoTimezone ?? !serCfg?.dateTimeWithTimezone,\n valueNoMillis: !serCfg?.dateTimeWithMillis,\n format:\n descriptor.datePickerFormat ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularDateFormatToPrime(descriptor.displayFormat) : undefined),\n showTime: showTime,\n showSeconds:\n showTime &&\n (descriptor.datePickerShowSeconds ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasSeconds(descriptor.displayFormat) : false))\n };\n}\n\nexport function filterGetNumberConfig(descriptor?: FilterDescriptor<any, any>) {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Number) {\n return undefined;\n }\n\n const displayCfg = descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularNumberFormatToFractions(descriptor.displayFormat) : undefined;\n return {\n fractionsMin: descriptor.numberMinFractionDigits ?? displayCfg?.fractionsMin,\n fractionsMax: descriptor.numberMaxFractionDigits ?? displayCfg?.fractionsMax\n };\n}\n\n/**\n * Creates an array of filter descriptors from an array of generic filter properties.\n *\n * @param {FilterGenericProperty[]} properties - The array of filterable properties, their types and options.\n * @param {LookupDataProviderInst<string, any, any, 'field'>} [valueLookup] - The lookup data provider for value suggestions.\n */\nexport function createFilterDescriptorsFromGeneric(\n properties: FilterGenericProperty[],\n valueLookup?: LookupDataProviderInst<string, any, any, 'field'>\n): FilterDescriptor<any, any>[] | [] {\n return properties.reduce<FilterDescriptor<any, any>[]>((createdFilterDescriptors, genericFilter) => {\n // when no generic value lookup is provided, lookup enum filters are treated as string filters\n const filterType = genericFilter.type === FilterTypeEnum.LookupEnum && valueLookup === undefined ? FilterTypeEnum.String : genericFilter.type;\n const filterDescriptor = new FilterDescriptor(genericFilter.property).asFilterType(filterType).asGenericFilter();\n if ((genericFilter.type === FilterTypeEnum.String || genericFilter.type === FilterTypeEnum.LookupEnum) && valueLookup) {\n filterDescriptor.withGenericValueProvider(valueLookup);\n }\n if (filterDescriptor && genericFilter.opts !== undefined) {\n switch (genericFilter.type) {\n case FilterTypeEnum.Number:\n filterDescriptor.asNumber(genericFilter.opts);\n break;\n case FilterTypeEnum.Date:\n filterDescriptor.asDate(genericFilter.opts);\n break;\n }\n }\n\n if (filterDescriptor) {\n createdFilterDescriptors.push(filterDescriptor);\n }\n return createdFilterDescriptors;\n }, []);\n}\n","import {Injectable, signal} from '@angular/core';\n\nimport {SortMeta} from 'primeng/api';\n\nimport {CommonsFilterMetadata} from '@mediusinc/mng-commons/core';\n\n@Injectable()\nexport class DataListService<Item> {\n // pagination\n public sortMeta = signal<SortMeta[] | null>(null);\n public filterMeta = signal<Record<string, CommonsFilterMetadata>>({});\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, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n Renderer2,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport {takeUntilDestroyed, toSignal} from '@angular/core/rxjs-interop';\nimport {FormsModule} from '@angular/forms';\n\nimport {TranslateModule} from '@ngx-translate/core';\nimport {OverlayService, PrimeNGConfig, TranslationKeys} from 'primeng/api';\nimport {CalendarModule} from 'primeng/calendar';\nimport {CheckboxModule} from 'primeng/checkbox';\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 {Nullable, VoidListener} from 'primeng/ts-helpers';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {Subject, Subscription, debounceTime, distinctUntilChanged} from 'rxjs';\n\nimport {COMMONS_MODULE_CONFIG_IT, CommonsFilterMetadata, CommonsSerializationConfig, FilterMatchMode, FilterMatchModeExtendedType} 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 {\n filterAdjustDisplayValueOnMatchModeChange,\n filterApplySerializationConfigToCmp,\n filterGetDateConfig,\n filterGetDefaultMatchMode,\n filterGetNumberConfig,\n filterSetMetadataOnChange,\n filterSetMetadataOnDisplayChange,\n generateMatchModeOptions\n} from '../../helpers/filters';\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',\n imports: [\n TableModule,\n TranslateModule,\n DateRangeComponent,\n CalendarModule,\n FormsModule,\n AutocompleteComponent,\n DropdownComponent,\n InputNumberModule,\n InputTextModule,\n FilterIcon,\n FilterSlashIcon,\n NgClass,\n InputTrimDirective,\n NumberRangeComponent,\n NgTemplateOutlet,\n CheckboxModule\n ],\n templateUrl: './column-filter.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 TableColumnFilterComponent implements OnDestroy {\n public readonly lookupTypeDropdown: FilterLookupTypeEnum = FilterLookupTypeEnum.Dropdown;\n public readonly lookupTypeAutocomplete: FilterLookupTypeEnum = FilterLookupTypeEnum.Autocomplete;\n public readonly FilterTypeEnum = FilterTypeEnum;\n public readonly FilterMatchMode = FilterMatchMode;\n\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 public descriptor = input.required<FilterDescriptor<any, any>>();\n public descriptorAsLookup = computed(() => (this.descriptor() instanceof FilterLookupDescriptor ? (this.descriptor() as FilterLookupDescriptor<any, any>) : undefined));\n private icon = viewChild<Nullable<ElementRef>>('icon');\n\n private translationObserver = toSignal(this.primeConfig.translationObserver);\n public matchModes = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const translationObserver = this.translationObserver();\n return generateMatchModeOptions(this.primeConfig, this.descriptor(), this.serializationCfg);\n });\n public filterConstraint = signal<CommonsFilterMetadata | 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 // display configs\n public dateConfig = computed(() => filterGetDateConfig(this.descriptor(), this.serializationCfg));\n public numberConfig = computed(() => filterGetNumberConfig(this.descriptor()));\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 resetSubscription?: Subscription;\n private selfClick?: boolean;\n private overlayEventListener: any;\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\n private serializationCfg: CommonsSerializationConfig = {};\n\n constructor() {\n filterApplySerializationConfigToCmp(this.moduleConfig, this.serializationCfg);\n\n this.dateDebounceSubject.pipe(debounceTime(500), distinctUntilChanged(), takeUntilDestroyed()).subscribe(v => this.updateFilterOnDisplayValueChange(v));\n\n effect(\n () => {\n const fieldFilterMeta = this.dataListService.filterMeta()[this.descriptor().property];\n const filterConstraint = untracked(() => this.filterConstraint());\n if (fieldFilterMeta && (!filterConstraint || filterConstraint.value !== fieldFilterMeta.value || filterConstraint.matchMode !== fieldFilterMeta.matchMode)) {\n this.setFilterConstraint(\n filterSetMetadataOnChange(\n fieldFilterMeta,\n fieldFilterMeta.matchMode,\n fieldFilterMeta.value,\n untracked(() => this.descriptor().filterType),\n untracked(() => this.dateConfig())\n )\n );\n }\n },\n {allowSignalWrites: true}\n );\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.resetSubscription?.unsubscribe();\n this.overlaySubscription?.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.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(this.numericValueFromModelChange);\n event.preventDefault();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onCheckboxModelChange(value: boolean | null) {\n this.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(value);\n }\n\n onMatchModeChange(displayMatchMode: FilterMatchModeExtendedType) {\n if (this.filterConstraint()?.displayMatchMode === displayMatchMode) {\n return;\n }\n\n this.setFilterConstraint(\n filterSetMetadataOnDisplayChange(\n this.filterConstraint(),\n displayMatchMode,\n filterAdjustDisplayValueOnMatchModeChange(displayMatchMode, this.filterConstraint()?.displayValue),\n this.descriptor().filterType,\n this.dateConfig()\n )\n );\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 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 updateFilterOnDisplayValueChange(displayValue: any) {\n this.setFilterConstraint(\n filterSetMetadataOnDisplayChange(\n this.filterConstraint(),\n this.filterConstraint()?.displayMatchMode ?? filterGetDefaultMatchMode(this.descriptor(), this.matchModes()),\n displayValue,\n this.descriptor().filterType,\n this.dateConfig()\n )\n );\n }\n\n private initFilterConstraint(reset = false) {\n if (reset) {\n const defaultMatchMode = filterGetDefaultMatchMode(this.descriptor(), this.matchModes());\n this.primeTable.filters[this.descriptor().property] = {value: null, matchMode: defaultMatchMode};\n }\n\n // set internal filter constraint\n let metadata = this.primeTable.filters[this.descriptor().property];\n if (Array.isArray(metadata)) {\n metadata = metadata[0];\n }\n this.setFilterConstraint(filterSetMetadataOnChange(metadata, metadata?.matchMode, metadata?.value, this.descriptor().filterType, this.dateConfig()));\n }\n\n private setFilterConstraint(metadata?: CommonsFilterMetadata) {\n if (metadata && !metadata.displayMatchMode) metadata.displayMatchMode = metadata.matchMode;\n if (metadata && !metadata.displayValue) metadata.displayValue = metadata.value;\n this.filterConstraint.set(metadata);\n this.primeTable.filters[this.descriptor().property] = this.filterConstraint()!;\n this.primeTable._filter();\n }\n}\n","<div class=\"p-column-filter p-column-filter-row\">\n @switch (descriptor().filterType) {\n @case (FilterTypeEnum.Number) {\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]=\"numberConfig()?.fractionsMin\"\n [maxFractionDigits]=\"numberConfig()?.fractionsMax\"\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]=\"numberConfig()?.fractionsMin\"\n [maxFractionDigits]=\"numberConfig()?.fractionsMax\"\n [disabled]=\"isInputDisabled()\" />\n }\n }\n\n @case (FilterTypeEnum.Boolean) {\n <p-checkbox [ngModel]=\"filterConstraint()?.displayValue\" binary=\"true\" (ngModelChange)=\"onCheckboxModelChange($event)\"></p-checkbox>\n }\n @case (FilterTypeEnum.Date) {\n @if (filterConstraint()?.displayMatchMode === FilterMatchMode.Between) {\n <mng-date-range\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"onDateFilterModelChange($event)\"\n [showTime]=\"dateConfig()?.showTime ?? false\"\n [showSeconds]=\"dateConfig()?.showSeconds ?? false\"\n [dateFormat]=\"dateConfig()?.format\"\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 [showTime]=\"dateConfig()?.showTime ?? false\"\n [showSeconds]=\"dateConfig()?.showSeconds ?? false\"\n [dateFormat]=\"dateConfig()?.format\"\n [firstDayOfWeek]=\"1\">\n </p-calendar>\n }\n }\n @case (FilterTypeEnum.Lookup) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\" />\n }\n @case (FilterTypeEnum.LookupEnum) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\" />\n }\n @default {\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 }\n\n <ng-template #lookupFilter>\n @if (descriptorAsLookup(); as lookup) {\n @switch (lookup.lookupType) {\n @case (lookupTypeAutocomplete) {\n <mng-autocomplete\n [ngModel]=\"filterConstraint()?.displayValue\"\n [dataProvider]=\"lookup.dataProvider\"\n [optionsTrackProperty]=\"lookup.optionsValueProperty\"\n [optionsValueProperty]=\"lookup.optionsValueProperty\"\n [optionsLabelProperty]=\"lookup.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookup.optionsLabelTranslate\"\n [multiselect]=\"lookup.multiselect\"\n [autoClear]=\"lookup.autocompleteAutoClear ?? false\"\n [openOnFocus]=\"lookup.autocompleteAutoClear ?? true\"\n [inlineSearch]=\"lookup.autocompleteInlineSearch ?? false\"\n [placeholder]=\"descriptor().placeholder ?? 'mngTable.searchToFilter' | translate\"\n [className]=\"lookup.className\"\n [dropdownClassName]=\"lookup.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]=\"lookup.dataProvider\"\n [optionsValueProperty]=\"lookup.optionsValueProperty\"\n [optionsLabelProperty]=\"lookup.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookup.optionsLabelTranslate\"\n [multiselect]=\"lookup.multiselect\"\n [placeholder]=\"descriptor().placeholder ?? 'mngTable.selectToFilter' | translate\"\n [className]=\"lookup.className\"\n [dropdownClassName]=\"lookup.dropdownClassName\"\n [showClear]=\"false\"\n [changeValueOnBlur]=\"lookup.multiselect\"\n [disabled]=\"isInputDisabled()\"\n (valueChange)=\"dropdownFilter($event)\">\n </mng-dropdown>\n }\n }\n }\n </ng-template>\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 {DatePipe, DecimalPipe} from '@angular/common';\nimport {LOCALE_ID, OnDestroy, Pipe, PipeTransform, inject} from '@angular/core';\n\nimport {TranslateService} from '@ngx-translate/core';\nimport {Observable, ReplaySubject, Subscription} from 'rxjs';\n\nimport {BooleanPipe, EnumPipe} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterLookupEnumDescriptor, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\n\n@Pipe({\n name: 'mngFilterValue',\n standalone: true,\n pure: true\n})\nexport class FilterValuePipe implements PipeTransform, OnDestroy {\n private readonly locale = inject(LOCALE_ID);\n private readonly translate = inject(TranslateService);\n private readonly enumPipe = new EnumPipe();\n\n private subscription?: Subscription;\n subject = new ReplaySubject<any>(1);\n\n transform(value: unknown, descriptor?: FilterDescriptor<any, any>): Observable<any> {\n const valTransform = this.prepareValueTransform(value, descriptor);\n\n this.subscription?.unsubscribe();\n if (valTransform.translate) {\n this.subscription = this.translate.stream(valTransform.valueArr).subscribe(i18n => {\n this.subject.next(valTransform.valueArr.map(k => i18n[k]).join(', '));\n });\n } else {\n this.subject.next(valTransform.valueArr.join(', '));\n }\n\n return this.subject.asObservable();\n }\n\n /**\n * If returns a string, this represents i18n key that must go through translation. If translation is not needed, undefined is returned.\n */\n private prepareValueTransform(value: unknown, descriptor?: FilterDescriptor<any, any>): {translate: boolean; valueArr: any[]} {\n const result = {\n translate: false,\n valueArr: Array.isArray(value) ? value : [value]\n };\n switch (descriptor?.filterType) {\n case FilterTypeEnum.Date:\n // eslint-disable-next-line no-case-declarations\n const datePipe = new DatePipe(this.locale);\n result.valueArr = result.valueArr.map(v => datePipe.transform(v as Date, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Number:\n // eslint-disable-next-line no-case-declarations\n const decimalPipe = new DecimalPipe(this.locale);\n result.valueArr = result.valueArr.map(v => decimalPipe.transform(v as number, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Boolean:\n // eslint-disable-next-line no-case-declarations\n const booleanPipe = new BooleanPipe();\n result.valueArr = result.valueArr.map(v => booleanPipe.transform(v));\n result.translate = true;\n break;\n case FilterTypeEnum.LookupEnum:\n // eslint-disable-next-line no-case-declarations\n const enumPipe = new EnumPipe();\n result.valueArr = result.valueArr.map(v => enumPipe.transform(v, (descriptor as FilterLookupEnumDescriptor<any, any>).enum));\n result.translate = true;\n break;\n }\n\n return result;\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n this.subject.complete();\n }\n}\n","import {AsyncPipe} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, computed, input, output} from '@angular/core';\n\nimport {TranslateModule} from '@ngx-translate/core';\nimport {TagModule} from 'primeng/tag';\n\nimport {FilterMatchMode, getI18nTypePropertyKey} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor} from '@mediusinc/mng-commons/filter';\nimport {ModelDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {CommonsFilterMetadataWithDescriptor, FilterActiveTagEvent} from '../../../models/filter.model';\nimport {FilterValuePipe} from '../../../pipes/filter-value.pipe';\n\n@Component({\n standalone: true,\n selector: 'mng-filter-active-tag',\n templateUrl: './filter-active-tag.component.html',\n imports: [TranslateModule, TagModule, FilterValuePipe, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilterActiveTagComponent {\n public readonly FilterMatchMode = FilterMatchMode;\n\n public model = input.required<ModelDescriptor<any, any>>();\n public filter = input.required<CommonsFilterMetadataWithDescriptor>();\n\n public edit = output<FilterActiveTagEvent>();\n public remove = output<FilterActiveTagEvent>();\n\n public label = computed(() => this.getPropertyLabelKey(this.filter().descriptor));\n public matchMode = computed(() => this.filter().displayMatchMode);\n public matchModeSymbol = computed(() => `mngFilterActiveTag.matchMode.${this.matchMode()}`);\n public value = computed(() => this.filter().displayValue);\n\n onRemove(event: Event) {\n event.stopPropagation();\n this.remove.emit({\n filter: this.filter(),\n event: event\n });\n }\n\n onEdit(event: Event) {\n this.edit.emit({\n filter: this.filter(),\n event: event\n });\n }\n\n private getPropertyLabelKey(filterDescriptor: FilterDescriptor<any, any>) {\n if (filterDescriptor.isGenericFilter) {\n return filterDescriptor.property;\n }\n\n let labelKey: string;\n if (filterDescriptor.title !== undefined) {\n labelKey = filterDescriptor.title;\n } else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.property);\n }\n return labelKey;\n }\n}\n","<p-tag severity=\"secondary\" styleClass=\"mr-1 p-tag-outlined\">\n <div class=\"flex align-items-center gap-2 p-1 cursor-pointer\" (click)=\"onEdit($event)\">\n <span>{{ label() | translate }}</span>\n @if (matchMode() === FilterMatchMode.Between) {\n <span class=\"font-semibold\">{{ value()?.[0] | mngFilterValue: filter().descriptor | async }}</span>\n <span class=\"text-primary\">{{ matchModeSymbol() | translate }}</span>\n <span class=\"font-semibold\">{{ value()?.[1] | mngFilterValue: filter().descriptor | async }}</span>\n } @else {\n <span class=\"text-primary\">{{ matchModeSymbol() | translate }}</span>\n <span class=\"font-semibold\">{{ value() | mngFilterValue: filter().descriptor | async }}</span>\n @if (filter().caseSensitive) {\n <small class=\"border-solid border-1 border-round-sm px-1 text-primary-400\">Aa</small>\n }\n }\n <span class=\"pi pi-times text-xs\" (click)=\"onRemove($event)\"></span>\n </div>\n</p-tag>\n","import {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, effect, inject, input, output, signal, untracked, viewChild} from '@angular/core';\nimport {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {FormsModule, NgForm} from '@angular/forms';\n\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {PrimeNGConfig, SelectItem} from 'primeng/api';\nimport {CalendarModule} from 'primeng/calendar';\nimport {CheckboxModule} from 'primeng/checkbox';\nimport {DropdownModule} from 'primeng/dropdown';\nimport {InputNumberModule} from 'primeng/inputnumber';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {MessagesModule} from 'primeng/messages';\nimport {OverlayPanel} from 'primeng/overlaypanel';\nimport {NEVER, switchMap} from 'rxjs';\n\nimport {\n COMMONS_MODULE_CONFIG_IT,\n CommonsSerializationConfig,\n FilterMatchMode,\n FilterMatchModeExtendedType,\n ILookupDataProvider,\n getI18nTypePropertyKey\n} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterGenericDescriptor, FilterLookupDescriptor, FilterLookupTypeEnum, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective, NumberRangeComponent} from '@mediusinc/mng-commons/form';\nimport {lookupDataProviderWithService} from '@mediusinc/mng-commons/form/api';\nimport {ModelDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {\n filterAdjustDisplayValueOnMatchModeChange,\n filterApplySerializationConfigToCmp,\n filterGetDateConfig,\n filterGetDefaultMatchMode,\n filterGetNumberConfig,\n generateMatchModeOptions\n} from '../../../helpers/filters';\nimport {CommonsFilterMetadataWithDescriptor, FilterFormEmitEvent} from '../../../models/filter.model';\n\n@Component({\n standalone: true,\n selector: 'mng-filter-form',\n templateUrl: './filter-form.component.html',\n imports: [\n DropdownComponent,\n FormsModule,\n NgClass,\n TranslateModule,\n InputTrimDirective,\n NumberRangeComponent,\n InputNumberModule,\n DateRangeComponent,\n CalendarModule,\n AutocompleteComponent,\n CheckboxModule,\n MessagesModule,\n InputTextModule,\n NgTemplateOutlet,\n DropdownModule\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-grow-1'\n }\n})\nexport class FilterFormComponent {\n public readonly lookupTypeDropdown: FilterLookupTypeEnum = FilterLookupTypeEnum.Dropdown;\n public readonly lookupTypeAutocomplete: FilterLookupTypeEnum = FilterLookupTypeEnum.Autocomplete;\n public readonly FilterTypeEnum = FilterTypeEnum;\n public readonly FilterMatchMode = FilterMatchMode;\n\n private readonly elementRef = inject(ElementRef);\n private readonly moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, {optional: true});\n private readonly primeConfig = inject(PrimeNGConfig);\n private readonly translate = inject(TranslateService);\n\n public title = input<string>();\n public descriptors = input.required<FilterDescriptor<any, any>[]>();\n public genericDescriptor = input<FilterGenericDescriptor>();\n public model = input.required<ModelDescriptor<any>>();\n public filter = input<CommonsFilterMetadataWithDescriptor>();\n public overlay = input<OverlayPanel>();\n public disabledProperties = input<string[]>([]);\n public enableCaseSensitive = input<boolean>(true);\n public propertySearch = input(false, {transform: booleanAttribute});\n\n public apply = output<FilterFormEmitEvent>();\n\n public propertyOptionsWithTranslations = computed(() => {\n const disabledProperties = this.disabledProperties();\n const filter = this.filter();\n return (\n this.descriptors()?.map(d => {\n return <PropertyModel>{\n property: d.property,\n label: d.isGenericFilter ? d.property : this.getPropertyLabelKey(d),\n disabled: !filter && disabledProperties.includes(d.property)\n };\n }) ?? []\n );\n });\n\n public selectedDescriptor = computed(() => {\n const property = this.propertyModel();\n return this.descriptors().find(filterDescriptor => filterDescriptor.property === property);\n });\n\n // change value lookup function to include the property name of the generic filter\n public genericValueDataProvider = computed<ILookupDataProvider<string, any, any, 'field'> | undefined>(() => {\n const genericValueProvider = this.genericDescriptor()?.valueLookup;\n\n if (genericValueProvider && genericValueProvider.serviceType) {\n const lookupFn = genericValueProvider.lookup;\n return lookupDataProviderWithService<string, any, any, 'field'>(genericValueProvider.serviceType).withLookup((params, service, search) => {\n params = {\n ...params,\n filters: {\n ...params?.filters,\n field: {\n value: this.selectedDescriptor()?.property,\n matchMode: this.selectedDescriptor()?.filterType === FilterTypeEnum.LookupEnum ? FilterMatchMode.In : FilterMatchMode.StartsWith\n }\n }\n };\n return lookupFn(params, service, search);\n });\n }\n return;\n });\n\n public selectedDescriptorAsLookup = computed(() => {\n const filterDescriptor = this.selectedDescriptor();\n return filterDescriptor !== undefined &&\n !filterDescriptor.isGenericFilter &&\n (filterDescriptor.filterType === FilterTypeEnum.Lookup || filterDescriptor.filterType === FilterTypeEnum.LookupEnum)\n ? (filterDescriptor as FilterLookupDescriptor<any, any>)\n : undefined;\n });\n public matchModeOptions = computed<SelectItem[]>(() => {\n return generateMatchModeOptions(this.primeConfig, this.selectedDescriptor(), this.serializationCfg);\n });\n\n public isEdit = computed(() => this.filter() != null);\n public formSubmitted = signal(false);\n public formErrorMessage = signal<any>([]);\n\n // display configs\n public dateConfig = computed(() => filterGetDateConfig(this.selectedDescriptor(), this.serializationCfg));\n public numberConfig = computed(() => filterGetNumberConfig(this.selectedDescriptor()));\n\n // UI utilities\n private filterForm = viewChild.required<NgForm>('filterForm');\n\n // Filter form model and form utilities\n public propertyModel = signal<string | null>(null);\n public matchModeModel = signal<FilterMatchModeExtendedType | null>(null);\n public valueModel = signal<any | any[] | null>(null);\n public caseSensitiveModel = signal<boolean>(false);\n\n private serializationCfg: CommonsSerializationConfig = {};\n\n constructor() {\n filterApplySerializationConfigToCmp(this.moduleConfig, this.serializationCfg);\n\n effect(\n () => {\n const edit = this.filter();\n if (edit) {\n this.resetForm({\n property: edit.descriptor.property,\n matchMode: edit.displayMatchMode ?? edit.matchMode ?? null,\n value: edit.displayValue ?? edit.value,\n caseSensitive: edit.caseSensitive ?? false\n });\n } else {\n this.resetForm();\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const descriptor = this.selectedDescriptor();\n const value = untracked(() => this.valueModel());\n\n if (value != null) {\n // reset value if filter type and value type mismatch\n if (\n (descriptor?.filterType === FilterTypeEnum.String &&\n (value === true || value === false || value === 'true' || value === 'false' || value instanceof Date)) ||\n (descriptor?.filterType === FilterTypeEnum.Number && typeof value !== 'number' && isNaN(+value)) ||\n (descriptor?.filterType === FilterTypeEnum.Date && !(value instanceof Date)) ||\n descriptor?.filterType === FilterTypeEnum.Lookup ||\n descriptor?.filterType === FilterTypeEnum.LookupEnum\n ) {\n this.valueModel.set(null);\n } else if (descriptor?.filterType === FilterTypeEnum.Boolean && typeof value !== 'boolean') {\n this.valueModel.set(false);\n }\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const matchModeOptions = this.matchModeOptions();\n const matchMode = untracked(() => this.matchModeModel());\n const filterForm = untracked(() => this.filterForm());\n\n if (\n matchModeOptions.length > 0 &&\n (!matchMode || filterForm.controls['matchMode']?.pristine || filterForm.controls['matchMode']?.untouched || !matchModeOptions.find(o => o.value === matchMode))\n ) {\n this.matchModeModel.set(filterGetDefaultMatchMode(this.selectedDescriptor(), matchModeOptions));\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const currentValue = untracked(() => this.valueModel());\n this.valueModel.set(filterAdjustDisplayValueOnMatchModeChange(this.matchModeModel() ?? undefined, currentValue));\n },\n {allowSignalWrites: true}\n );\n\n toObservable(this.overlay)\n .pipe(\n switchMap(o => (o ? o.onShow : NEVER)),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n const formFields = this.elementRef.nativeElement.querySelectorAll(\n 'input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [role=\"combobox\"]:not([disabled])'\n );\n const activeEl = document.activeElement;\n const activeInputIdx = activeEl ? [...formFields].findIndex(el => activeEl.isEqualNode(el)) : 0;\n if (activeInputIdx <= 0) {\n formFields[0].focus();\n }\n });\n }\n\n onFormSubmit(form: NgForm) {\n this.formSubmitted.set(true);\n\n // mark all as dirty\n for (const key in form.controls) {\n form.controls[key].markAsDirty();\n }\n\n const property = this.propertyModel();\n const matchMode = this.matchModeModel();\n if (form.invalid || !property || !matchMode) {\n this.formErrorMessage.set([\n {\n severity: 'warn',\n summary: this.translate.instant('mngFilter.messages.invalidFormTitle'),\n detail: this.translate.instant('mngFilter.messages.invalidFormMessage')\n }\n ]);\n return;\n }\n\n this.apply.emit({\n property: property,\n matchMode: matchMode,\n value: this.valueModel(),\n caseSensitive: this.caseSensitiveModel()\n });\n\n // resetting the form is done from the parent component (filter-overlay-with-tag) for smoother animations\n }\n\n public resetForm(value?: FilterFormModel) {\n this.filterForm().resetForm(value);\n // somehow have to set case sensitivity manually\n this.caseSensitiveModel.set(value?.caseSensitive ?? false);\n this.formSubmitted.set(false);\n }\n\n private getPropertyLabelKey(filterDescriptor: FilterDescriptor<any, any>) {\n let labelKey: string;\n if (filterDescriptor.title !== undefined) {\n labelKey = filterDescriptor.title;\n } else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.property);\n }\n return labelKey;\n }\n}\n\ninterface FilterFormModel {\n property: string | null;\n matchMode: FilterMatchModeExtendedType | null;\n value: any | null;\n caseSensitive: boolean;\n}\n\ninterface PropertyModel {\n property: string;\n label: string;\n disabled: boolean;\n}\n","<div>\n <div>\n <h5>{{ filter() ? ('mngFilter.titleEdit' | translate) : ('mngFilter.titleAdd' | translate) }}</h5>\n </div>\n <form #filterForm=\"ngForm\" (ngSubmit)=\"onFormSubmit(filterForm)\" class=\"flex flex-column align-items-center lg:flex-row gap-3\">\n <div class=\"w-full lg:w-auto\">\n <mng-dropdown\n name=\"property\"\n id=\"property\"\n tabindex=\"1\"\n #propertyControl=\"ngModel\"\n [(ngModel)]=\"propertyModel\"\n [options]=\"propertyOptionsWithTranslations()\"\n optionsValueProperty=\"property\"\n optionsDisabledProperty=\"disabled\"\n optionsLabelProperty=\"label\"\n [placeholder]=\"'mngFilter.property' | translate\"\n [optionsLabelTranslate]=\"!propertySearch()\"\n [inlineSearch]=\"propertySearch()\"\n required=\"true\"\n className=\"w-full\"\n [disabled]=\"isEdit()\"\n [appendTo]=\"null\" />\n </div>\n <div class=\"w-full lg:w-auto\">\n <mng-dropdown\n name=\"matchMode\"\n id=\"matchMode\"\n [(ngModel)]=\"matchModeModel\"\n className=\"w-full\"\n [options]=\"matchModeOptions()\"\n [placeholder]=\"'mngFilter.matchMode' | translate\"\n [disabled]=\"!propertyControl.value\"\n class=\"align-self-end\"\n required=\"true\"\n [appendTo]=\"null\" />\n </div>\n @if (!(matchModeModel() === FilterMatchMode.Exists || matchModeModel() === FilterMatchMode.DoesNotExist)) {\n <div class=\"w-full lg:w-auto flex flex-column\">\n @switch (selectedDescriptor()?.filterType) {\n @case (FilterTypeEnum.Number) {\n @if (matchModeModel() === FilterMatchMode.Between) {\n <mng-number-range\n className=\"mng-column-filter-number-input\"\n name=\"value\"\n [(ngModel)]=\"valueModel\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [useGrouping]=\"selectedDescriptor()?.numberUseGrouping ?? false\"\n [minFractionDigits]=\"numberConfig()?.fractionsMin\"\n [maxFractionDigits]=\"numberConfig()?.fractionsMax\"\n required=\"true\" />\n } @else {\n <p-inputNumber\n inputStyleClass=\"mng-column-filter-number-input\"\n name=\"value\"\n [(ngModel)]=\"valueModel\"\n [styleClass]=\"'w-full'\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [useGrouping]=\"selectedDescriptor()?.numberUseGrouping\"\n [minFractionDigits]=\"numberConfig()?.fractionsMin\"\n [maxFractionDigits]=\"numberConfig()?.fractionsMax\"\n [disabled]=\"!matchModeModel()\"\n required=\"true\" />\n }\n }\n\n @case (FilterTypeEnum.Boolean) {\n <p-checkbox [(ngModel)]=\"valueModel\" [disabled]=\"!matchModeModel()\" name=\"value\" binary=\"true\" required=\"true\" />\n }\n @case (FilterTypeEnum.Date) {\n @if (matchModeModel() === FilterMatchMode.Between) {\n <mng-date-range\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [showTime]=\"dateConfig()?.showTime ?? false\"\n [showSeconds]=\"dateConfig()?.showSeconds ?? false\"\n [dateFormat]=\"dateConfig()?.format\"\n [placeholder]=\"'mngFilter.value' | translate\"\n required=\"true\"></mng-date-range>\n } @else {\n <p-calendar\n appendTo=\"body\"\n name=\"value\"\n [(ngModel)]=\"valueModel\"\n [styleClass]=\"'w-full'\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [showIcon]=\"true\"\n [showTime]=\"dateConfig()?.showTime ?? false\"\n [showSeconds]=\"dateConfig()?.showSeconds ?? false\"\n [dateFormat]=\"dateConfig()?.format\"\n [firstDayOfWeek]=\"1\"\n [disabled]=\"!matchModeModel()\"\n required=\"true\">\n </p-calendar>\n }\n }\n @case (FilterTypeEnum.Lookup) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\"></ng-container>\n }\n @case (FilterTypeEnum.LookupEnum) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\"></ng-container>\n }\n @default {\n @if (selectedDescriptor()?.genericValueProvider && genericValueDataProvider()) {\n <!-- conditional rendering on the placeholder is there because of styling issues with PrimeNG -->\n <!-- (PrimeNG applies the .p-placeholder class to programmatically set values, making them greyed out) -->\n <mng-dropdown\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"genericValueDataProvider()\"\n [className]=\"selectedDescriptor()?.className\"\n [dropdownClassName]=\"selectedDescriptor()?.dropdownClassName\"\n [placeholder]=\"valueModel() ? undefined : ('mngFilter.value' | translate)\"\n allowInput=\"true\"\n [disabled]=\"!matchModeModel()\"\n [appendTo]=\"null\"\n required=\"true\"></mng-dropdown>\n } @else {\n <input\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n type=\"text\"\n pInputText\n class=\"mng-column-filter-string-input w-full\"\n [attr.placeholder]=\"'mngFilter.value' | translate\"\n [mngInputTrim]=\"selectedDescriptor()?.trimOption!\"\n [disabled]=\"!matchModeModel()\"\n [placeholder]=\"'mngFilter.value' | translate\"\n required=\"true\" />\n }\n }\n }\n <ng-template #lookupFilter>\n @if (selectedDescriptorAsLookup(); as lookupFilterDescriptor) {\n @switch (lookupFilterDescriptor.lookupType) {\n @case (lookupTypeAutocomplete) {\n <mng-autocomplete\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"lookupFilterDescriptor.dataProvider\"\n [optionsTrackProperty]=\"lookupFilterDescriptor.optionsValueProperty\"\n [optionsValueProperty]=\"lookupFilterDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupFilterDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupFilterDescriptor.optionsLabelTranslate\"\n [multiselect]=\"lookupFilterDescriptor.multiselect\"\n [autoClear]=\"lookupFilterDescriptor.autocompleteAutoClear ?? false\"\n [openOnFocus]=\"lookupFilterDescriptor.autocompleteAutoClear ?? true\"\n [inlineSearch]=\"lookupFilterDescriptor.autocompleteInlineSearch ?? false\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [className]=\"lookupFilterDescriptor.className\"\n [dropdownClassName]=\"lookupFilterDescriptor.dropdownClassName\"\n [searchTrim]=\"selectedDescriptor()?.trimOption!\"\n [disabled]=\"!matchModeModel()\"\n required=\"true\">\n </mng-autocomplete>\n }\n @case (lookupTypeDropdown) {\n <mng-dropdown\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"lookupFilterDescriptor.dataProvider\"\n [optionsValueProperty]=\"lookupFilterDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupFilterDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupFilterDescriptor.optionsLabelTranslate\"\n [multiselect]=\"lookupFilterDescriptor.multiselect\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [className]=\"lookupFilterDescriptor.className + ' w-full'\"\n [dropdownClassName]=\"lookupFilterDescriptor.dropdownClassName\"\n showClear=\"false\"\n [disabled]=\"!matchModeModel()\"\n [appendTo]=\"null\"\n required=\"true\">\n </mng-dropdown>\n }\n }\n } @else if (selectedDescriptor()?.isGenericFilter && genericValueDataProvider()) {\n <mng-dropdown\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"genericValueDataProvider()\"\n [placeholder]=\"'mngFilter.value' | translate\"\n showClear=\"false\"\n [disabled]=\"!matchModeModel()\"\n [appendTo]=\"null\"\n required=\"true\">\n </mng-dropdown>\n }\n </ng-template>\n </div>\n }\n @if (\n enableCaseSensitive() &&\n selectedDescriptor()?.filterType === FilterTypeEnum.String &&\n matchModeModel() !== FilterMatchMode.Exists &&\n matchModeModel() !== FilterMatchMode.DoesNotExist\n ) {\n <div class=\"flex align-items-center gap-2\">\n <p-checkbox [(ngModel)]=\"caseSensitiveModel\" name=\"caseSensitive\" binary=\"true\" id=\"caseSensitive\" />\n <label for=\"caseSensitive\">{{ 'mngFilter.caseSensitive' | translate }}</label>\n </div>\n }\n <div class=\"flex justify-content-end\">\n <button pButton type=\"submit\" class=\"align-self-end\">\n {{ (filter() ? 'general.apply' : 'general.add') | translate }}\n </button>\n </div>\n </form>\n @if (formSubmitted() && filterForm.invalid) {\n <p-messages [value]=\"formErrorMessage()\" class=\"w-full\"></p-messages>\n }\n</div>\n","import {InjectionToken} from '@angular/core';\n\nimport {FilterDisplayTypeEnum} from '@mediusinc/mng-commons/filter';\n\nexport interface TableFeatureConfig {\n filterDisplayType?: FilterDisplayTypeEnum;\n searchLimitMaxWords?: number | null;\n}\n\nexport const COMMONS_TABLE_FEATURE_CONFIG_IT = new InjectionToken<TableFeatureConfig>('COMMONS_TABLE_FEATURE_CONFIG');\n","import {NgClass, NgStyle, NgTemplateOutlet} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, Signal, TemplateRef, booleanAttribute, computed, contentChildren, inject, input, signal, viewChild} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nimport {TranslateModule} from '@ngx-translate/core';\nimport {Button} from 'primeng/button';\nimport {CheckboxModule} from 'primeng/checkbox';\nimport {InputGroupModule} from 'primeng/inputgroup';\nimport {InputGroupAddonModule} from 'primeng/inputgroupaddon';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {OverlayPanel, OverlayPanelModule} from 'primeng/overlaypanel';\nimport {PaginatorModule} from 'primeng/paginator';\nimport {Table} from 'primeng/table';\nimport {TagModule} from 'primeng/tag';\nimport {ToggleButtonModule} from 'primeng/togglebutton';\nimport {BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, skip} from 'rxjs';\n\nimport {COMMONS_MODULE_CONFIG_IT, CommonsFilterMetadata, CommonsSerializationConfig, FilterMatchMode, TemplateDirective, findTemplateByName} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterGenericDescriptor} from '@mediusinc/mng-commons/filter';\nimport {ModelDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {filterApplySerializationConfigToCmp, filterGetDateConfig, filterSetMetadataOnChange, filterSetMetadataOnDisplayChange} from '../../../helpers/filters';\nimport {CommonsFilterMetadataWithDescriptor, FilterActiveTagEvent, FilterFormEmitEvent} from '../../../models/filter.model';\nimport {DataListService} from '../../../services/data-list.service';\nimport {COMMONS_TABLE_FEATURE_CONFIG_IT} from '../../../services/table-feature-config.token';\nimport {FilterActiveTagComponent} from '../filter-active-tag/filter-active-tag.component';\nimport {FilterFormComponent} from '../filter-form/filter-form.component';\n\n@Component({\n standalone: true,\n selector: 'mng-filter-overlay-with-tag',\n templateUrl: './filter-overlay-with-tag.component.html',\n styleUrls: ['./filter-overlay-with-tag.component.scss'],\n imports: [\n OverlayPanelModule,\n TranslateModule,\n TagModule,\n FilterFormComponent,\n Button,\n FilterActiveTagComponent,\n NgTemplateOutlet,\n InputTextModule,\n PaginatorModule,\n NgClass,\n ToggleButtonModule,\n InputGroupModule,\n InputGroupAddonModule,\n CheckboxModule,\n NgStyle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class FilterOverlayWithTagComponent {\n private static readonly SEARCH_WORD_LIMIT_MAX = 4;\n\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 tableConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, {optional: true});\n\n public descriptors = input.required<FilterDescriptor<any, any>[]>();\n public genericFilterDescriptor = input<FilterGenericDescriptor>();\n public model = input.required<ModelDescriptor<any>>();\n public enableSearch = input(false, {transform: booleanAttribute});\n public search = input<{value: string; caseSensitive: boolean} | undefined>();\n public searchLimitWordMax = input<number | undefined | null>(undefined);\n public enableCaseSensitive = input(true, {transform: booleanAttribute});\n\n private filterOverlay = viewChild.required(OverlayPanel);\n private filterFormComponent = viewChild(FilterFormComponent);\n\n public templates = contentChildren(TemplateDirective);\n public titleTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'title'));\n\n public filters = computed(() => {\n return this.setInitialFilters(this.dataListService.filterMeta());\n });\n\n public showFilterButton = computed(() => this.descriptors().length > 0);\n\n public activeFilters = computed(() => {\n const filterEntry = this.filters();\n return this.descriptors()\n .filter(d => {\n const filter = filterEntry[d.property];\n return (\n filter &&\n filter.matchMode !== undefined &&\n filter.displayMatchMode !== undefined &&\n (filter.matchMode === FilterMatchMode.Exists ||\n filter.matchMode === FilterMatchMode.DoesNotExist ||\n (filter.value !== undefined && filter.displayValue !== undefined))\n );\n })\n .map(d => filterEntry[d.property]!);\n });\n public activeFilterProperties = computed(() => this.activeFilters().map(f => f.descriptor.property));\n public filterEdit = signal<CommonsFilterMetadataWithDescriptor | undefined>(undefined);\n\n private serializationCfg: CommonsSerializationConfig = {};\n\n // global search model\n public searchValue = computed(() => this.search()?.value);\n public searchCaseSensitive = computed(() => this.search()?.caseSensitive);\n public searchWordLimitMaxError = signal(false);\n private searchWordLimitMaxCmp = computed(() => {\n const inputLimit = this.searchLimitWordMax();\n if (inputLimit !== undefined) {\n return inputLimit;\n }\n return this.tableConfig?.searchLimitMaxWords !== undefined ? this.tableConfig?.searchLimitMaxWords : FilterOverlayWithTagComponent.SEARCH_WORD_LIMIT_MAX;\n });\n private searchValueSubject = new BehaviorSubject<string | undefined>(undefined);\n private searchCaseSensitiveSubject = new BehaviorSubject<boolean | undefined>(undefined);\n\n // UI utilities\n private clickedOnFilterEvent: {event?: Event; filter?: CommonsFilterMetadataWithDescriptor} | undefined = undefined;\n\n constructor() {\n filterApplySerializationConfigToCmp(this.moduleConfig, this.serializationCfg);\n\n combineLatest([this.searchValueSubject.pipe(debounceTime(500), distinctUntilChanged()), this.searchCaseSensitiveSubject])\n // NOTE: skip is used to ignore propagating the initial value of the subjects\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe(([value, caseSensitive]) => {\n this.updatePrimeTableGlobalFilter(\n value == null ? this.search()?.value ?? '' : value,\n caseSensitive == null ? this.search()?.caseSensitive ?? undefined : caseSensitive\n );\n });\n }\n\n onFilterFormApply(event: FilterFormEmitEvent) {\n const descriptor = this.descriptors().find(d => d.property === event.property);\n if (!descriptor) {\n return;\n }\n\n const filterData = {\n ...filterSetMetadataOnDisplayChange(\n {caseSensitive: event.caseSensitive},\n event.matchMode,\n event.value,\n descriptor.filterType,\n filterGetDateConfig(descriptor, this.serializationCfg)\n ),\n descriptor: descriptor\n };\n\n this.updatePrimeTableFilter(filterData);\n\n // this keeps the UI updated properly before closing the overlay\n this.filterEdit.set(filterData);\n\n // Resetting the form is done in the onOverlayHide callback because resetting the\n // values here renders empty inputs for a split second before closing the overlay\n this.filterOverlay().hide();\n }\n\n onFilterRemove(event: FilterActiveTagEvent) {\n this.updatePrimeTableFilter({\n ...this.filters()[event.filter.descriptor.property],\n matchMode: undefined,\n displayMatchMode: undefined,\n value: undefined,\n displayValue: undefined\n });\n }\n\n onFilterEdit(event: FilterActiveTagEvent) {\n this.onFilterAddOrEdit(event.filter, event.event);\n }\n\n onFilterAdd(event: Event) {\n this.onFilterAddOrEdit(undefined, event);\n }\n\n onSearchChange(value: string): void {\n const searchWordLimitMax = this.searchWordLimitMaxCmp();\n if (searchWordLimitMax !== null) {\n const wordCount = value.split(/\\s+/).filter(word => word.length > 0).length;\n this.searchWordLimitMaxError.set(wordCount > searchWordLimitMax);\n } else {\n this.searchWordLimitMaxError.set(false);\n }\n\n if (!this.searchWordLimitMaxError()) {\n this.searchValueSubject.next(value);\n }\n }\n\n onSearchCaseSensitiveChange(value: boolean) {\n this.searchCaseSensitiveSubject.next(value);\n }\n\n onOverlayHide() {\n // resetting the form is done here for a smoother animation\n if (this.filterFormComponent !== undefined) {\n this.filterFormComponent()?.resetForm();\n }\n\n if (this.clickedOnFilterEvent) {\n // show the overlay again if the user clicked another filter\n setTimeout(() => {\n this.filterEdit.set(this.clickedOnFilterEvent?.filter);\n this.filterOverlay().show(this.clickedOnFilterEvent?.event);\n this.clickedOnFilterEvent = undefined;\n }, 0);\n return;\n } else {\n // clean state\n this.filterEdit.set(undefined);\n }\n }\n\n private onFilterAddOrEdit(filter?: CommonsFilterMetadataWithDescriptor, event?: Event) {\n // If user clicks on the same filter or add that is already open, close the overlay\n if (this.filterOverlay().overlayVisible && this.filterEdit()?.descriptor.property === filter?.descriptor.property) {\n this.filterOverlay().hide();\n return;\n }\n\n if (this.filterOverlay().overlayVisible) {\n // In case the user clicks another filter, 're-showing' the overlay in\n // the new position is done in the onOverlayHide callback\n this.clickedOnFilterEvent = {event, filter};\n this.filterOverlay().hide();\n } else {\n this.filterEdit.set(filter);\n this.filterOverlay().show(event);\n }\n }\n\n private setInitialFilters(filtersInit: Record<string, CommonsFilterMetadata>) {\n const filtersResult: {[p: string]: CommonsFilterMetadataWithDescriptor} = {};\n\n for (const property in filtersInit) {\n const filterInit = filtersInit[property];\n\n const descriptor = this.descriptors().find(filterDescriptor => filterDescriptor.property === property);\n if (!descriptor) {\n continue;\n }\n\n filtersResult[property] = {\n ...filterSetMetadataOnChange(filterInit, filterInit.matchMode, filterInit.value, descriptor.filterType, filterGetDateConfig(descriptor, this.serializationCfg)),\n descriptor: descriptor\n };\n }\n\n return filtersResult;\n }\n\n private updatePrimeTableFilter(filter: CommonsFilterMetadataWithDescriptor) {\n this.primeTable.filters[filter.descriptor.property] = {...filter};\n this.primeTable._filter();\n }\n\n private updatePrimeTableGlobalFilter(searchQuery: string | null, caseSensitive = false) {\n // match mode needs to be set for inline search\n this.primeTable.filters['global'] = {...{value: searchQuery, matchMode: 'contains', caseSensitive: caseSensitive}};\n this.primeTable._filter();\n }\n}\n","<div class=\"flex align-items-center flex-grow-1\">\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n }\n @if (showFilterButton()) {\n <p-button\n icon=\"pi pi-filter\"\n rounded=\"true\"\n [severity]=\"activeFilters().length > 0 ? 'primary' : 'secondary'\"\n size=\"small\"\n (click)=\"onFilterAdd($event)\"\n [styleClass]=\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\">\n </p-button>\n }\n @if (enableSearch()) {\n <div class=\"col-4\" [ngClass]=\"{'ml-3': !showFilterButton() && titleTemplate()}\">\n <span class=\"p-input-icon-left w-full\">\n <i class=\"pi pi-search\"></i>\n <input\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"onSearchChange($event)\"\n name=\"globalSearch\"\n type=\"text\"\n pInputText\n class=\"search-input w-full\"\n [ngClass]=\"{'ng-invalid': searchWordLimitMaxError()}\"\n [attr.placeholder]=\"'mngFilter.search.input' | translate\"\n [placeholder]=\"'mngFilter.search.input' | translate\" />\n @if (enableCaseSensitive()) {\n <span class=\"toggle-button-input\">\n <p-toggleButton\n styleClass=\"ml-1 p-1 p-button-sm\"\n [ngModel]=\"searchCaseSensitive()\"\n (ngModelChange)=\"onSearchCaseSensitiveChange($event)\"\n onLabel=\"Aa\"\n offLabel=\"Aa\" />\n </span>\n }\n </span>\n @if (searchWordLimitMaxError()) {\n <small class=\"p-error block\">\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\n </small>\n }\n </div>\n }\n</div>\n@if (activeFilters().length > 0) {\n <div class=\"flex align-items-center flex-wrap mt-2\">\n @for (filter of activeFilters(); track filter.descriptor.property) {\n <mng-filter-active-tag [model]=\"model()\" [filter]=\"filter\" (edit)=\"onFilterEdit($event)\" (remove)=\"onFilterRemove($event)\" />\n }\n </div>\n}\n<p-overlayPanel #op [showCloseIcon]=\"true\" (onHide)=\"onOverlayHide()\" appendTo=\"body\">\n <mng-filter-form\n [model]=\"model()\"\n [descriptors]=\"descriptors()\"\n [genericDescriptor]=\"genericFilterDescriptor()\"\n [filter]=\"filterEdit()\"\n [disabledProperties]=\"activeFilterProperties()\"\n [propertySearch]=\"genericFilterDescriptor()?.propertySearch\"\n [overlay]=\"op\"\n [enableCaseSensitive]=\"enableCaseSensitive()\"\n (apply)=\"onFilterFormApply($event)\" />\n</p-overlayPanel>\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 booleanAttribute,\n computed,\n contentChildren,\n effect,\n inject,\n input,\n output,\n signal,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {outputFromObservable, takeUntilDestroyed, 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 {MessageService, SortMeta} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {MultiSelectChangeEvent, MultiSelectModule} from 'primeng/multiselect';\nimport {Table, TableColumnReorderEvent, TableFilterEvent, 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 CommonsFilterMetadata,\n CommonsService,\n CommonsStorageService,\n ComponentDirective,\n DataListParams,\n DataListResult,\n FilterMatchMode,\n I18nPropertyPipe,\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 {FilterDescriptor, FilterDisplayTypeEnum, 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 TableReloadEvent,\n TableSizeEnum,\n tableDescriptor\n} from '@mediusinc/mng-commons/table/api';\n\nimport {createFilterDescriptorsFromGeneric} from '../../helpers/filters';\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 {COMMONS_TABLE_FEATURE_CONFIG_IT} from '../../services/table-feature-config.token';\nimport {TableColumnFilterComponent} from '../column-filter/column-filter.component';\nimport {TableColumnValueComponent} from '../column-value/column-value.component';\nimport {FilterOverlayWithTagComponent} from '../filter/filter-overlay-with-tag/filter-overlay-with-tag.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 TableColumnFilterComponent,\n TableColumnFilterClassPipe,\n TableModule,\n MultiSelectModule,\n ButtonModule,\n TooltipModule,\n TranslateModule,\n FilterOverlayWithTagComponent,\n FormsModule,\n TemplateDirective\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 private readonly filterKeyPrepend = 'f_';\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 storageService = inject(CommonsStorageService);\n private readonly config = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, {optional: true});\n public readonly dataListService = inject(DataListService<Item>);\n\n private readonly defaultFilterDisplayType: FilterDisplayTypeEnum = this.config?.filterDisplayType ?? FilterDisplayTypeEnum.Column;\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 useQueryParams = input(false, {transform: booleanAttribute});\n public cellClickEnabled = input(true, {transform: booleanAttribute});\n public selectionMode = input<'single' | 'multiple'>('multiple');\n public selectionEnabled = input(false, {transform: booleanAttribute});\n public rowReorderEnabledInput = input(true, {alias: 'rowReorderEnabled', transform: booleanAttribute});\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 public hasTitleDisplay = computed(() => this.captionTemplate() || this.captionComponent() || this.descriptor().title);\n public isCaptionVisible = computed(() => this.hasTitleDisplay() || this.overlayWithTagFilters().length > 0 || this.descriptor().search);\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 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 strongest - 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 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 if (!this.isCaptionVisible()) {\n className += ' datatable-no-header';\n }\n return className;\n });\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 latestParamsWithDefaults?: DataListParams;\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.i18nBaseKey ? generateTableLayoutPrefsKey(descriptor.model.i18nBaseKey, this.router.url, descriptor.identifier) : 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.storageService.getItem<TableLayoutPreferences>(this.cmpTypeName, lsKey) : undefined;\n return layoutPrefs ?? {columnWidths: {}};\n });\n public columns = computed<ColumnWithPreferences[]>(() => this.computeColumnsWithLayout());\n public visibleColumns = computed(() => this.columns().filter(col => col.isVisible));\n\n // filter, sort\n public filterDescriptors = computed(() => this.descriptor().filters);\n public genericFilterDescriptor = computed(() => this.descriptor().genericFilter);\n private filterDescriptorsFromGeneric = signal<FilterDescriptor<any, any>[]>([]);\n public hasColumnFilters = computed(\n () =>\n (this.defaultFilterDisplayType === FilterDisplayTypeEnum.OverlayWithTag && this.filterDescriptors().some(d => d.displayType === FilterDisplayTypeEnum.Column)) ||\n (this.defaultFilterDisplayType === FilterDisplayTypeEnum.Column && this.filterDescriptors().some(d => d.displayType == null))\n );\n public overlayWithTagFilters = computed(() => {\n const filters = this.filterDescriptors().filter(\n d => (d.displayType == null && this.defaultFilterDisplayType === FilterDisplayTypeEnum.OverlayWithTag) || d.displayType === FilterDisplayTypeEnum.OverlayWithTag\n );\n\n return filters.concat(this.filterDescriptorsFromGeneric());\n });\n\n private defaultParams = computed(() => this.computeDefaultDataListParams());\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.columns().some(col => col.descriptor.isReorderable));\n public areColumnsToggleable = computed(() => this.columns().some(col => col.descriptor.isToggleable));\n\n public globalSearchParamFromUrl = signal<{value: string; caseSensitive: boolean} | undefined>(undefined);\n\n // other\n private lastQueryParams?: Params = this.route.snapshot.queryParams;\n private navigationOutOfTableInProgress = false;\n private navigationInTableInProgress = 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 const descriptor = this.descriptor();\n this.dataListService.globalFilterFields.set(\n this.globalFilterFieldsInput() ??\n (this.descriptor().search && descriptor.searchFields ? descriptor.searchFields : this.columns().map(c => c.descriptor.property))\n );\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?.tableReload$ ?? of({})))\n .subscribe({\n next: e => {\n this.reload(e);\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.navigationOutOfTableInProgress = e instanceof NavigationStart;\n });\n\n toObservable(this.genericFilterDescriptor)\n .pipe(\n switchMap(genericFilterDescriptor => {\n if (genericFilterDescriptor) {\n const dataProvider = this.genericFilterDescriptor()?.propertyLookup;\n const genericFilterService = dataProvider?.serviceType ? this.injector.get<any>(dataProvider.serviceType) : null;\n\n // fetch filterable properties\n return commonsToObservable(genericFilterDescriptor.propertyLookup.lookup({}, genericFilterService));\n }\n return of([]);\n }),\n takeUntilDestroyed()\n )\n .subscribe({\n next: genericFilters => {\n // set descriptors from generic filter data\n this.filterDescriptorsFromGeneric.set(createFilterDescriptorsFromGeneric(genericFilters, this.genericFilterDescriptor()?.valueLookup));\n }\n });\n }\n\n public ngOnDestroy() {\n this.dataProviderSubscription?.unsubscribe();\n }\n\n public reload(): void;\n /**\n * @deprecated Use with `TableReloadEvent` object parameter.\n */\n public reload(emitEvent: boolean): void;\n public reload(emitEvent?: TableReloadEvent<Sorts, Filters>): void;\n /**\n * @deprecated Use with `TableReloadEvent` object parameter.\n */\n public reload(emitEvent: boolean, resetParams: boolean): void;\n public reload(emitEventOrEvent: boolean | TableReloadEvent<Sorts, Filters> = false, resetParamsParam = false) {\n const emitEvent = typeof emitEventOrEvent === 'boolean' ? emitEventOrEvent : emitEventOrEvent?.emitEvent ?? false;\n const resetParams = typeof emitEventOrEvent === 'object' ? emitEventOrEvent?.resetParams : resetParamsParam;\n const params =\n typeof emitEventOrEvent === 'object' && emitEventOrEvent?.params\n ? (emitEventOrEvent?.params as DataListParams)\n : resetParams\n ? undefined\n : this.latestParamsWithDefaults;\n const reloadParams = mergeDataListParamsWithDefaults(params ?? {}, this.defaultParams());\n this.loadTableWithDataProvider(reloadParams, emitEvent);\n }\n\n public onTableLazyLoad(event: TableLazyLoadEvent) {\n this.dataProviderLatestLazyLoadEvent = event;\n\n const params = fromTableLoadToDataListParams(event);\n\n if (this.useQueryParams()) {\n if (!this.navigationOutOfTableInProgress && !this.navigationInTableInProgress) {\n this.navigationInTableInProgress = true;\n const newParams = dataListParamsToUrlQuery(params, this.defaultParams(), {prependFilterName: this.filterKeyPrepend});\n const newParamsWithParamsToRemove = {...newParams};\n if (this.lastQueryParams) {\n Object.keys(this.lastQueryParams)\n .filter(k => (k.startsWith(this.filterKeyPrepend) || ['offset', 'limit', 'sort', 'q'].indexOf(k) >= 0) && newParams[k] === undefined)\n .forEach(k => (newParamsWithParamsToRemove[k] = null));\n }\n // this check is necessary: from some reason, primeNG commits one last lazy load event whenever any angular router navigation occurs\n\n this.router\n .navigate([], {\n relativeTo: this.route,\n replaceUrl: true,\n queryParams: newParamsWithParamsToRemove,\n queryParamsHandling: 'merge'\n })\n .then(res => {\n this.navigationInTableInProgress = false;\n if (res) {\n this.lastQueryParams = newParams;\n }\n });\n }\n } else {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.defaultParams());\n\n if (!this.compareWithCurrentParams(paramsWithDefaults)) {\n this.updatePrimeSortAndFilter(paramsWithDefaults);\n }\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n }\n\n public onTableFilter(event: TableFilterEvent) {\n if (this.useQueryParams()) {\n return;\n }\n const params = fromTableLoadToDataListParams({filters: event.filters});\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.defaultParams());\n\n // if table doesn't use lazy loading, filter params need to be set here\n // because the onTableLazyLoad event is not emitted\n if (!this.isLazy()) {\n if (!this.compareWithCurrentParams(paramsWithDefaults)) {\n this.updatePrimeSortAndFilter(paramsWithDefaults);\n }\n }\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 this.latestParamsWithDefaults = paramsWithDefaults;\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 this.dataListService.setData(res?.data ?? [], res?.totalCount);\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(\n fromUrlQueryToDataListParams(urlParams, {\n prependFilterName: this.filterKeyPrepend,\n searchAsGlobal: true\n }),\n this.defaultParams()\n );\n this.updatePrimeSortAndFilter(paramsWithDefaults);\n if (!this.useQueryParamsInitialized() && paramsWithDefaults?.search) {\n this.globalSearchParamFromUrl.set({value: paramsWithDefaults?.search, caseSensitive: paramsWithDefaults.filters?.['global']?.caseSensitive ?? false});\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]: CommonsFilterMetadata} = {};\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 caseSensitive: value?.caseSensitive\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 layoutPrefs.columnHidden = this.columns()\n .filter(c => selectedColumns.indexOf(c.descriptor.property) < 0)\n .map(c => c.descriptor.property);\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.storageService.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 .sort((s1, s2) => (s1.defaultOrder ?? 1000) - (s2.defaultOrder ?? 1000))\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 computeColumnsWithLayout() {\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(\n f =>\n f.showOnColumn === col.property &&\n ((f.displayType == null && this.defaultFilterDisplayType === FilterDisplayTypeEnum.Column) || f.displayType === FilterDisplayTypeEnum.Column)\n ),\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.storageService.removeItem(this.cmpTypeName, key);\n this.layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n\n /**\n * Compare the given params with the stored params in the DataListService.\n *\n * @param {DataListParams} params - The params to compare with the stored params.\n *\n * @return {boolean} - True if the given params match the stored params, otherwise false.\n */\n private compareWithCurrentParams(params: DataListParams): boolean {\n return (\n params.offset === this.dataListService.offset() &&\n params.limit === this.dataListService.rows() &&\n JSON.stringify(this.createSortMeta(params)) === JSON.stringify(this.dataListService.sortMeta()) &&\n JSON.stringify(this.createFilterMeta(params)) === JSON.stringify(this.dataListService.filterMeta())\n );\n }\n}\n","<div>\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()\"\n [rows]=\"dataListService.rows()\"\n [first]=\"dataListService.offset()\"\n [totalRecords]=\"dataListService.count()\"\n [rowsPerPageOptions]=\"dataListService.rowsPerPageOptions()\"\n [showCurrentPageReport]=\"true\"\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 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 (onFilter)=\"onTableFilter($event)\"\n (onRowReorder)=\"onRowReorder($event)\">\n <ng-template pTemplate=\"caption\">\n @if (isCaptionVisible()) {\n <div class=\"table-header\">\n @if (overlayWithTagFilters().length > 0 || descriptor().search) {\n <mng-filter-overlay-with-tag\n [title]=\"descriptor().title\"\n [descriptors]=\"overlayWithTagFilters()\"\n [genericFilterDescriptor]=\"genericFilterDescriptor()\"\n [model]=\"descriptor().model\"\n [enableSearch]=\"descriptor().search\"\n [search]=\"globalSearchParamFromUrl()\"\n [searchLimitWordMax]=\"descriptor().searchLimitMaxWords\"\n [enableCaseSensitive]=\"isLazy()\">\n @if (hasTitleDisplay()) {\n <ng-template mngTemplate=\"title\">\n <ng-container *ngTemplateOutlet=\"captionTemplateOrComponentOrTitle\"></ng-container>\n </ng-template>\n }\n </mng-filter-overlay-with-tag>\n } @else {\n <ng-container *ngTemplateOutlet=\"captionTemplateOrComponentOrTitle\"></ng-container>\n }\n <ng-template #captionTemplateOrComponentOrTitle>\n @if (captionTemplate()) {\n <ng-container *ngTemplateOutlet=\"captionTemplate()\"></ng-container>\n } @else if (captionComponent()) {\n <ng-container [mngComponent]=\"captionComponent()\" (instanceCreated)=\"captionComponentInstance.emit($event)\"></ng-container>\n } @else if (descriptor().title) {\n <h5 class=\"p-0 m-0\">{{ descriptor().title! | translate }}</h5>\n }\n </ng-template>\n </div>\n }\n </ng-template>\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\" 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 (areColumnsToggleable()) {\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\">\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 </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 @if (descriptor().rowExpandable) {\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 [descriptor]=\"col.filter\"></mng-table-column-filter>\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 [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>\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 mng-table-row-expand-button\"\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 <ng-template pTemplate=\"rowexpansion\" let-item>\n @if (descriptor().rowExpandable) {\n <tr>\n <td></td>\n <td [colSpan]=\"descriptor().rowExpandableColSpan\">\n @if (descriptor().rowExpandableComponentType !== undefined) {\n <ng-container [mngComponent]=\"descriptor().rowExpandableComponentType\" [inputs]=\"{item}\"> </ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"rowExpandTemplate(); context: {rowItem: item}\"></ng-container>\n }\n </td>\n </tr>\n }\n </ng-template>\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>\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>\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","import {CommonsFeature, CommonsFeatureTypeEnum} from '@mediusinc/mng-commons/core';\n\nimport {COMMONS_TABLE_FEATURE_CONFIG_IT, TableFeatureConfig} from './services/table-feature-config.token';\n\n/**\n * Prepares providers for usage of the tableview functionalities.\n *\n * @returns {CommonsFeature} The `CommonsFeature` object with the layout configuration.\n */\nexport function withTable(config?: TableFeatureConfig): CommonsFeature {\n return {\n type: CommonsFeatureTypeEnum.Table,\n providers: [\n {\n provide: COMMONS_TABLE_FEATURE_CONFIG_IT,\n useValue: config\n }\n ]\n };\n}\n","// components\nexport * from './components/column-filter/column-filter.component';\nexport * from './components/column-value/column-value.component';\nexport * from './components/filter/filter-active-tag/filter-active-tag.component';\nexport * from './components/filter/filter-form/filter-form.component';\nexport * from './components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component';\nexport * from './components/table/table.component';\n\n// helpers\nexport * from './helpers/filters';\nexport * from './helpers/notification';\nexport * from './helpers/table-layout-prefs';\n\n// models\nexport * from './models/column-preferences.model';\nexport * from './models/filter.model';\n\n// pipes\nexport * from './pipes/filter-value.pipe';\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';\nexport * from './services/table-feature-config.token';\n\n// provide\nexport * from './provide';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2","i3","i4","i5","i8","commonsToObservable","i7"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mediusinc-mng-commons-table.mjs","sources":["../../table/src/helpers/filters.ts","../../table/src/helpers/table.ts","../../table/src/services/table-feature-config.token.ts","../../table/src/services/table-metadata.service.ts","../../table/src/services/table-data.service.ts","../../table/src/components/column-filter/column-filter.component.ts","../../table/src/components/column-filter/column-filter.component.html","../../table/src/components/column-value/column-value.component.ts","../../table/src/components/column-value/column-value.component.html","../../table/src/pipes/filter-value.pipe.ts","../../table/src/components/filter/filter-active-tag/filter-active-tag.component.ts","../../table/src/components/filter/filter-active-tag/filter-active-tag.component.html","../../table/src/components/filter/filter-form/filter-form.component.ts","../../table/src/components/filter/filter-form/filter-form.component.html","../../table/src/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.ts","../../table/src/components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component.html","../../table/src/helpers/notification.ts","../../table/src/pipes/locale-default-row-class.pipe.ts","../../table/src/pipes/table-column-filter-class.pipe.ts","../../table/src/helpers/table-layout-prefs.ts","../../table/src/services/table-preferences.service.ts","../../table/src/components/table/table.component.ts","../../table/src/components/table/table.component.html","../../table/src/provide.ts","../../table/src/index.ts","../../table/src/mediusinc-mng-commons-table.ts"],"sourcesContent":["import {PrimeNGConfig, SelectItem} from 'primeng/api';\n\nimport {\n CommonsFilterMetadata,\n CommonsModuleConfig,\n CommonsSerializationConfig,\n FilterMatchMode,\n FilterMatchModeExtendedType,\n Nullable,\n SingleOrArrayType,\n angularDateFormatHasSeconds,\n angularDateFormatHasTime,\n dateToIsoString,\n fromAngularDateFormatToPrime,\n fromAngularNumberFormatToFractions\n} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterGenericProperty, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {LookupDataProviderInst} from '@mediusinc/mng-commons/form/api';\n\nimport {FilterDateConfig, FilterNumberConfig} from '../models/filter.model';\n\nexport function filterGenerateMatchModeOptions(\n primeConfig: PrimeNGConfig,\n descriptor: FilterDescriptor<any, any> | undefined,\n cmpSerCfg?: CommonsSerializationConfig\n): SelectItem[] {\n let options: SelectItem[] | undefined = undefined;\n if (descriptor == null || descriptor.filterType === FilterTypeEnum.String) {\n options = [\n {value: FilterMatchMode.Contains, label: primeConfig.getTranslation(FilterMatchMode.Contains)},\n {value: FilterMatchMode.NotContains, label: primeConfig.getTranslation(FilterMatchMode.NotContains)},\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.StartsWith, label: primeConfig.getTranslation(FilterMatchMode.StartsWith)},\n {value: FilterMatchMode.EndsWith, label: primeConfig.getTranslation(FilterMatchMode.EndsWith)}\n ];\n } else if (descriptor.filterType === FilterTypeEnum.Boolean) {\n options = [{value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)}];\n } else if (descriptor.filterType === FilterTypeEnum.Number) {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThan, label: primeConfig.getTranslation(FilterMatchMode.LessThan)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThan, label: primeConfig.getTranslation(FilterMatchMode.GreaterThan)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between)}\n ];\n } else if (descriptor.filterType === FilterTypeEnum.Lookup || descriptor.filterType === FilterTypeEnum.LookupEnum) {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.In, label: primeConfig.getTranslation(FilterMatchMode.In)},\n {value: FilterMatchMode.NotIn, label: primeConfig.getTranslation(FilterMatchMode.NotIn)}\n ];\n } else if (descriptor.filterType === FilterTypeEnum.Date) {\n if (!descriptor.datePickerShowTime && !descriptor.dateValueNoTime && !cmpSerCfg?.filtersDateOnlyDisabled) {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.NotEquals, label: primeConfig.getTranslation(FilterMatchMode.NotEquals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between)}\n ];\n } else {\n options = [\n {value: FilterMatchMode.Equals, label: primeConfig.getTranslation(FilterMatchMode.Equals)},\n {value: FilterMatchMode.LessThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.LessThanOrEqualTo)},\n {value: FilterMatchMode.GreaterThanOrEqualTo, label: primeConfig.getTranslation(FilterMatchMode.GreaterThanOrEqualTo)},\n {value: FilterMatchMode.Between, label: primeConfig.getTranslation(FilterMatchMode.Between)}\n ];\n }\n }\n\n options?.push(\n {value: FilterMatchMode.Exists, label: primeConfig.getTranslation(FilterMatchMode.Exists)},\n {value: FilterMatchMode.DoesNotExist, label: primeConfig.getTranslation(FilterMatchMode.DoesNotExist)}\n );\n\n if (descriptor?.matchModes) {\n options = descriptor.matchModes.map(mm => <SelectItem>{value: mm, label: primeConfig.getTranslation(mm)});\n }\n return options || [];\n}\n\n/**\n * Gets the default match mode for a filter.\n *\n * @param {FilterDescriptor<any, any>} [descriptor] - The filter descriptor.\n * @param {SelectItem[]} [matchModes=[]] - The available match modes options.\n *\n * @return {FilterMatchModeExtendedType} The default match mode for the filter.\n */\nexport function filterGetDefaultMatchMode(descriptor?: FilterDescriptor<any, any>, matchModes: SelectItem[] = []): FilterMatchModeExtendedType {\n let defaultMatchMode: FilterMatchModeExtendedType = FilterMatchMode.Equals;\n if (descriptor?.filterType === FilterTypeEnum.String) defaultMatchMode = FilterMatchMode.StartsWith;\n\n // overwrite type default set in descriptor\n if (descriptor?.defaultMatchMode) {\n defaultMatchMode = descriptor.defaultMatchMode;\n }\n\n // check if default mode exists!\n if (matchModes.length > 0 && !matchModes.some(m => m.value === defaultMatchMode)) {\n defaultMatchMode = matchModes[0].value;\n }\n\n return defaultMatchMode;\n}\n\nexport function filterSetMetadataOnChange(\n filter: CommonsFilterMetadata,\n matchMode?: FilterMatchModeExtendedType,\n value?: any,\n filterType?: FilterTypeEnum,\n filterDateCfg?: FilterDateConfig\n): CommonsFilterMetadata {\n let displayValue = filter?.displayValue ?? value;\n let displayMatchMode = filter?.displayMatchMode ?? matchMode;\n\n // when equals is used on dates with time, the actual filter will be between, but displayed as equals\n if (filterType === FilterTypeEnum.Date && !filterDateCfg?.valueNoTime) {\n if (\n matchMode === FilterMatchMode.Between &&\n Array.isArray(value) &&\n value.length === 2 &&\n value.every(v => v instanceof Date || typeof v === 'string' || typeof v === 'number')\n ) {\n if (filterAreDatesEqual(value[0], value[1], filterDateCfg)) {\n displayMatchMode = FilterMatchMode.Equals;\n displayValue = new Date(value[0]);\n }\n } else if (matchMode === FilterMatchMode.Equals && !value) {\n matchMode = FilterMatchMode.Between;\n }\n }\n\n if (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 if (filterType === FilterTypeEnum.Boolean && displayValue != null && typeof displayValue !== 'boolean') {\n displayValue = (typeof displayValue === 'string' && displayValue.toLowerCase() === 'true') || displayValue === 1;\n }\n if (filterType === FilterTypeEnum.Number && displayValue != null && typeof displayValue !== 'number') {\n const numValue = +displayValue;\n if (!isNaN(numValue)) {\n displayValue = numValue;\n }\n }\n\n return {\n ...filter,\n matchMode,\n value: value,\n displayMatchMode,\n displayValue\n };\n}\n\nexport function filterSetMetadataOnDisplayChange(\n filter: CommonsFilterMetadata | undefined,\n displayMatchMode: FilterMatchModeExtendedType,\n displayValue: any,\n filterType?: FilterTypeEnum,\n filterDateCfg?: FilterDateConfig\n) {\n let matchMode = displayMatchMode;\n let value: SingleOrArrayType<Nullable<Date | string | number | boolean>> = displayValue;\n\n if (filterType === FilterTypeEnum.Date) {\n if (!filterDateCfg?.valueNoTime && displayValue !== null) {\n if (displayMatchMode === FilterMatchMode.Equals) {\n if (value instanceof Date || typeof value === 'string' || typeof value === 'number') {\n const fromDate = new Date(value);\n const toDate = new Date(value);\n\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n fromDate.setMilliseconds(0);\n toDate.setMilliseconds(999);\n } else {\n fromDate.setSeconds(0, 0);\n toDate.setSeconds(59, 999);\n }\n } else {\n fromDate.setHours(0, 0, 0, 0);\n toDate.setHours(23, 59, 59, 999);\n }\n\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n } else {\n value = null;\n }\n } else if (displayMatchMode === FilterMatchMode.Between) {\n if (Array.isArray(value) && value.length === 2 && value.every(i => i instanceof Date || typeof i === 'string' || typeof i === 'number')) {\n const fromDate = new Date(value[0] as Date | string | number);\n let toDate = new Date(value[1] as Date | string | number);\n\n if (filterAreDatesEqual(fromDate, toDate, filterDateCfg)) {\n toDate = new Date(fromDate);\n if (filterDateCfg?.showTime) {\n if (filterDateCfg?.showSeconds) {\n toDate.setSeconds(toDate.getSeconds() + 1);\n } else {\n toDate.setMinutes(toDate.getMinutes() + 1);\n }\n } else {\n toDate.setDate(toDate.getDate() + 1);\n }\n\n value = [fromDate, toDate];\n matchMode = FilterMatchMode.Between;\n }\n } else {\n value = null;\n }\n }\n }\n\n const convertDateType = filterDateCfg?.valueNoTime ? 'date' : 'date-time';\n const convertDateTimeOpts = {\n utc: filterDateCfg?.valueUtc,\n noMillis: filterDateCfg?.valueNoMillis,\n noTimezone: filterDateCfg?.valueNoTimezone\n };\n\n value =\n value == null\n ? value\n : Array.isArray(value)\n ? value.filter(i => i != null).map(i => dateToIsoString(i, convertDateType, convertDateTimeOpts))\n : dateToIsoString(value, convertDateType, convertDateTimeOpts);\n }\n if (matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n value = null;\n }\n\n return {\n ...filter,\n displayMatchMode: displayMatchMode,\n matchMode: matchMode,\n displayValue: displayValue,\n value: value,\n caseSensitive: filterType === FilterTypeEnum.String ? filter?.caseSensitive : undefined\n };\n}\n\nexport function filterAreDatesEqual(fromDate: Date | string | number, toDate: Date | string | number, filterDateCfg?: FilterDateConfig) {\n const startDate = dateToIsoString(fromDate);\n const endDate = dateToIsoString(toDate);\n\n // 2020-11-02T11:12:12.000\n const cmpLength = filterDateCfg?.showTime ? (filterDateCfg?.showSeconds ? 19 : 16) : 10;\n\n return startDate.substring(0, cmpLength) === endDate.substring(0, cmpLength);\n}\n\nexport function filterApplySerializationConfigToCmp(config: CommonsModuleConfig | null, cmpSerCfg: CommonsSerializationConfig) {\n // set default\n cmpSerCfg.dateTimeInUtc = false;\n cmpSerCfg.dateTimeWithTimezone = true;\n cmpSerCfg.dateTimeWithMillis = true;\n cmpSerCfg.filtersDateOnlyDisabled = false;\n // set customizations\n if (config?.serialization) {\n if (config.serialization.dateTimeInUtc !== undefined) cmpSerCfg.dateTimeInUtc = config.serialization.dateTimeInUtc;\n if (config.serialization.dateTimeWithTimezone !== undefined) cmpSerCfg.dateTimeWithTimezone = config.serialization.dateTimeWithTimezone;\n if (config.serialization.dateTimeWithMillis !== undefined) cmpSerCfg.dateTimeWithMillis = config.serialization.dateTimeWithMillis;\n if (config.serialization.filtersDateOnlyDisabled !== undefined) cmpSerCfg.filtersDateOnlyDisabled = config.serialization.filtersDateOnlyDisabled;\n }\n}\n\nexport function filterAdjustDisplayValueOnMatchModeChange(matchMode?: FilterMatchModeExtendedType, value?: any): any {\n if (matchMode == null || matchMode === FilterMatchMode.Exists || matchMode === FilterMatchMode.DoesNotExist) {\n return value; // never change, only change later if something else changes here\n }\n if (matchMode === FilterMatchMode.Between) {\n if (!Array.isArray(value)) {\n return value != null ? [value, value] : [];\n } else if (value.length === 0 || value.length === 2) {\n return value;\n } else if (value.length === 1) {\n return [value[0], value[0]];\n } else {\n return [value[0], value[1]];\n }\n }\n if (matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) {\n return Array.isArray(value) ? value : value == null ? [] : [value];\n }\n return Array.isArray(value) && value.length > 0 ? value[0] : value;\n}\n\nexport function filterGetDateConfig(descriptor?: FilterDescriptor<any, any>, serCfg?: CommonsSerializationConfig): FilterDateConfig | undefined {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Date) {\n return undefined;\n }\n\n const showTime =\n descriptor.datePickerShowTime ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasTime(descriptor.displayFormat) : false);\n return {\n valueNoTime: descriptor.dateValueNoTime || (!serCfg?.filtersDateOnlyDisabled && !showTime),\n valueUtc: descriptor.dateValueUtc ?? serCfg?.dateTimeInUtc,\n valueNoTimezone: descriptor.dateValueNoTimezone ?? !serCfg?.dateTimeWithTimezone,\n valueNoMillis: !serCfg?.dateTimeWithMillis,\n format:\n descriptor.datePickerFormat ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularDateFormatToPrime(descriptor.displayFormat) : undefined),\n showTime: showTime,\n showSeconds:\n showTime &&\n (descriptor.datePickerShowSeconds ?? (descriptor.displayFormatApplyToField && descriptor.displayFormat ? angularDateFormatHasSeconds(descriptor.displayFormat) : false))\n };\n}\n\nexport function filterGetNumberConfig(descriptor?: FilterDescriptor<any, any>): FilterNumberConfig | undefined {\n if (!descriptor || descriptor.filterType !== FilterTypeEnum.Number) {\n return undefined;\n }\n\n const displayCfg = descriptor.displayFormatApplyToField && descriptor.displayFormat ? fromAngularNumberFormatToFractions(descriptor.displayFormat) : undefined;\n return {\n fractionsMin: descriptor.numberMinFractionDigits ?? displayCfg?.fractionsMin,\n fractionsMax: descriptor.numberMaxFractionDigits ?? displayCfg?.fractionsMax\n };\n}\n\n/**\n * Creates an array of filter descriptors from an array of generic filter properties.\n *\n * @param {FilterGenericProperty[]} properties - The array of filterable properties, their types and options.\n * @param {LookupDataProviderInst<string, any, any, 'field'>} [valueLookup] - The lookup data provider for value suggestions.\n */\nexport function createFilterDescriptorsFromGeneric(\n properties: FilterGenericProperty[],\n valueLookup?: LookupDataProviderInst<string, any, any, 'field'>\n): FilterDescriptor<any, any>[] | [] {\n return properties.reduce<FilterDescriptor<any, any>[]>((createdFilterDescriptors, genericFilter) => {\n // when no generic value lookup is provided, lookup enum filters are treated as string filters\n const filterType = genericFilter.type === FilterTypeEnum.LookupEnum && valueLookup === undefined ? FilterTypeEnum.String : genericFilter.type;\n const filterDescriptor = new FilterDescriptor(genericFilter.property).asFilterType(filterType).asGenericFilter();\n if ((genericFilter.type === FilterTypeEnum.String || genericFilter.type === FilterTypeEnum.LookupEnum) && valueLookup) {\n filterDescriptor.withGenericValueProvider(valueLookup);\n }\n if (filterDescriptor && genericFilter.opts !== undefined) {\n switch (genericFilter.type) {\n case FilterTypeEnum.Number:\n filterDescriptor.asNumber(genericFilter.opts);\n break;\n case FilterTypeEnum.Date:\n filterDescriptor.asDate(genericFilter.opts);\n break;\n }\n }\n\n if (filterDescriptor) {\n createdFilterDescriptors.push(filterDescriptor);\n }\n return createdFilterDescriptors;\n }, []);\n}\n","import {SortMeta} from 'primeng/api';\n\nimport {CommonsFilterMetadata, DataListParams} from '@mediusinc/mng-commons/core';\n\nexport function tableCreateFilterMeta(paramsWithDefaults?: DataListParams) {\n const primeFilterMeta: {[s: string]: CommonsFilterMetadata} = {};\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 caseSensitive: value?.caseSensitive\n };\n });\n }\n return primeFilterMeta;\n}\n\nexport function tableCreateSortMeta(paramsWithDefaults?: DataListParams): SortMeta[] | undefined {\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 undefined;\n}\n","import {InjectionToken} from '@angular/core';\n\nimport {FilterDisplayTypeEnum} from '@mediusinc/mng-commons/filter';\n\nexport interface TableFeatureConfig {\n filterDisplayType?: FilterDisplayTypeEnum;\n searchLimitMaxWords?: number | null;\n}\n\nexport const COMMONS_TABLE_FEATURE_CONFIG_IT = new InjectionToken<TableFeatureConfig>('COMMONS_TABLE_FEATURE_CONFIG');\n","import {Injectable, Injector, Signal, computed, inject, signal} from '@angular/core';\nimport {takeUntilDestroyed, toObservable, toSignal} from '@angular/core/rxjs-interop';\n\nimport {PrimeNGConfig} from 'primeng/api';\nimport {combineLatest, of, switchMap} from 'rxjs';\n\nimport {COMMONS_MODULE_CONFIG_IT, CommonsSerializationConfig, DataListParams, toObservable as commonsToObservable, effectWithDeps} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterDisplayTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {TableDescriptorInst, TableDynamicDescriptorInst, tableDescriptor} from '@mediusinc/mng-commons/table/api';\n\nimport {\n createFilterDescriptorsFromGeneric,\n filterApplySerializationConfigToCmp,\n filterGenerateMatchModeOptions,\n filterGetDateConfig,\n filterGetDefaultMatchMode,\n filterGetNumberConfig\n} from '../helpers/filters';\nimport {FilterMetadata} from '../models/filter.model';\nimport {COMMONS_TABLE_FEATURE_CONFIG_IT} from './table-feature-config.token';\n\ninterface SignalSources<Item = any> {\n descriptor?: Signal<TableDescriptorInst<Item, any, any>>;\n searchFields?: Signal<string[] | undefined>;\n}\n\n@Injectable()\nexport class TableMetadataService {\n static readonly cmpTypeName = 'TableComponent';\n\n readonly #injector = inject(Injector);\n readonly primeConfig = inject(PrimeNGConfig);\n readonly moduleConfig = inject(COMMONS_MODULE_CONFIG_IT, {optional: true});\n readonly tableModuleConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, {optional: true});\n\n readonly serializationCfg: CommonsSerializationConfig = {};\n readonly #translationObserver = toSignal(this.primeConfig.translationObserver);\n readonly defaultFilterDisplayType: FilterDisplayTypeEnum = this.tableModuleConfig?.filterDisplayType ?? FilterDisplayTypeEnum.Column;\n\n // signal sources\n readonly #signalSources = signal<SignalSources>({});\n\n // descriptors\n readonly descriptorFromSource = computed(() => this.#signalSources().descriptor?.());\n readonly #descriptor = signal<TableDescriptorInst<any, any, any>>(tableDescriptor<string, string, string>());\n readonly descriptor = this.#descriptor.asReadonly();\n #updateDescriptorFromSourceEffect = effectWithDeps([this.descriptorFromSource], ([d]) => {\n if (d != null) {\n this.#descriptor.set(d);\n }\n });\n\n // pagination\n rowsPerPageOptions = computed(() => {\n const descriptor = this.descriptor();\n if (Array.isArray(descriptor.rowsPerPageOptions) && descriptor.rowsPerPageOptions.length > 0) {\n return descriptor.rowsPerPageOptions;\n } else {\n return [25, 50, 100];\n }\n });\n\n // filters\n readonly filterDescriptors = computed(() => this.descriptor().filters);\n readonly filters = computed(() => {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const observer = this.#translationObserver(); // need this one to track language changes\n return this.filterDescriptors().map(d => this.mapDescriptorToMetadata(d));\n });\n readonly genericFilterDescriptor = computed(() => this.descriptor().genericFilter);\n readonly #genericFilters = signal<FilterMetadata[]>([]);\n readonly genericFilters = this.#genericFilters.asReadonly();\n\n // search\n readonly #searchFieldsFromSignalSource = computed(() => this.#signalSources().searchFields?.());\n readonly #searchFields = signal<string[]>([]);\n readonly searchFields = this.#searchFields.asReadonly();\n #searchFieldsEffect = effectWithDeps([this.descriptor, this.#searchFieldsFromSignalSource], ([descriptor, searchFieldsFromSignalSource]) => {\n this.#searchFields.set(\n searchFieldsFromSignalSource ?? (descriptor.search && descriptor.searchFields ? descriptor.searchFields : this.descriptor().columns.map(c => c.property))\n );\n });\n\n // params\n readonly defaultParams = computed(() => {\n const params: DataListParams = {\n offset: 0,\n limit: this.rowsPerPageOptions()[0],\n sort: this.descriptor()\n .sorts.filter(s => s.defaultIsEnabled)\n .sort((s1, s2) => (s1.defaultOrder ?? 1000) - (s2.defaultOrder ?? 1000))\n .map(s => ({\n property: s.property,\n ascending: s.defaultIsAscending\n })),\n filters: {}\n };\n\n this.filters()\n .filter(f => f.descriptor.hasDefaultValue)\n .forEach(f => {\n params.filters![f.descriptor.property] = {\n value: f.descriptor.defaultValue,\n matchMode: f.defaultMatchMode\n };\n });\n\n return params;\n });\n\n constructor() {\n filterApplySerializationConfigToCmp(this.moduleConfig, this.serializationCfg);\n\n combineLatest([toObservable(this.genericFilterDescriptor), toObservable(this.#translationObserver)])\n .pipe(\n switchMap(([genericFilterDescriptor]) => {\n if (genericFilterDescriptor) {\n const dataProvider = this.genericFilterDescriptor()?.propertyLookup;\n const genericFilterService = dataProvider?.serviceType ? this.#injector.get<any>(dataProvider.serviceType) : null;\n\n // fetch filterable properties\n return commonsToObservable(genericFilterDescriptor.propertyLookup.lookup({}, genericFilterService));\n }\n return of([]);\n }),\n takeUntilDestroyed()\n )\n .subscribe({\n next: genericFilters => {\n // set descriptors from generic filter data\n this.#genericFilters.set(\n createFilterDescriptorsFromGeneric(genericFilters, this.genericFilterDescriptor()?.valueLookup).map(d => this.mapDescriptorToMetadata(d))\n );\n }\n });\n }\n\n public setSignalSources(descriptor: Signal<TableDescriptorInst<any, any>>, searchFields: Signal<string[] | undefined>) {\n this.#signalSources.set({descriptor, searchFields});\n }\n\n public setDescriptor(descriptor: TableDescriptorInst<any, any, any>) {\n if (this.descriptorFromSource() instanceof TableDynamicDescriptorInst) {\n this.#descriptor.set(descriptor);\n }\n }\n\n private mapDescriptorToMetadata(descriptor: FilterDescriptor<any, any>): FilterMetadata {\n const matchModes = filterGenerateMatchModeOptions(this.primeConfig, descriptor, this.serializationCfg);\n return {\n descriptor: descriptor,\n matchModes: matchModes,\n defaultMatchMode: filterGetDefaultMatchMode(descriptor, matchModes),\n dateConfig: filterGetDateConfig(descriptor, this.serializationCfg),\n numberConfig: filterGetNumberConfig(descriptor)\n };\n }\n}\n","import {Injectable, Injector, OnDestroy, Signal, computed, inject, signal} from '@angular/core';\n\nimport {SortMeta} from 'primeng/api';\nimport {Subscription} from 'rxjs';\n\nimport {CommonsFilterMetadata, CommonsService, DataListParams, DataListResult, toObservable as commonsToObservable, effectWithDeps} from '@mediusinc/mng-commons/core';\nimport {ITableDataProvider, TableDynamicDescriptorInst, TablePaginationModeEnum} from '@mediusinc/mng-commons/table/api';\n\nimport {tableCreateFilterMeta, tableCreateSortMeta} from '../helpers/table';\nimport {TableMetadataService} from './table-metadata.service';\n\ninterface DataSources<Item = any> {\n arrayItems?: Signal<Item[] | undefined>;\n dataListResult?: Signal<DataListResult<Item> | undefined>;\n dataProvider?: Signal<ITableDataProvider<Item> | undefined>;\n manualLoading?: Signal<boolean | undefined>;\n}\n\n@Injectable()\nexport class TableDataService<Item> implements OnDestroy {\n readonly #injector = inject(Injector);\n readonly #commons = inject(CommonsService);\n readonly #metadata = inject(TableMetadataService);\n\n // signal sources\n readonly #dataSources = signal<DataSources<Item>>({});\n\n // data sources\n readonly #manualLoading = computed(() => this.#dataSources()?.manualLoading?.());\n // results that are set directly via input and are not result of a asynchronous operation (aka data provider)\n readonly #synchronousResult = computed(() => {\n const dataSources = this.#dataSources();\n if (dataSources?.dataProvider?.() !== undefined) {\n return undefined;\n }\n if (dataSources?.dataListResult?.() !== undefined) {\n return dataSources?.dataListResult();\n }\n if (dataSources?.arrayItems?.() !== undefined) {\n return <DataListResult>{data: dataSources.arrayItems(), totalCount: dataSources.arrayItems()?.length ?? 0};\n }\n return undefined;\n });\n readonly #dataProvider = computed(() => this.#dataSources()?.dataProvider?.());\n readonly #dataProviderService = computed(() => {\n const dataProvider = this.#dataProvider();\n return dataProvider?.serviceType ? this.#injector.get<any>(dataProvider.serviceType) : null;\n });\n readonly #synchronousResultEffect = effectWithDeps([this.#synchronousResult], ([res]) => {\n if (res != null) {\n this.#setData(res.data ?? [], res.totalCount);\n }\n });\n readonly #synchronousLoadingEffect = effectWithDeps([this.#synchronousResult, this.#manualLoading], ([res, manualLoading]) => {\n if (res != null && manualLoading == null) {\n this.#loading.set(false);\n }\n });\n readonly #manualLoadingEffect = effectWithDeps([this.#manualLoading], ([manualLoading]) => {\n if (manualLoading != null) {\n this.#loading.set(manualLoading);\n }\n });\n #dataProviderSubscription?: Subscription;\n\n // pagination\n readonly #params = signal<DataListParams | undefined>(undefined);\n readonly params = this.#params.asReadonly();\n readonly #sortMeta = signal<SortMeta[] | undefined>(undefined);\n readonly sortMeta = this.#sortMeta.asReadonly();\n readonly #filterMeta = signal<Record<string, CommonsFilterMetadata>>({});\n readonly filterMeta = this.#filterMeta.asReadonly();\n readonly #isSortAndFilterMetaInitialized = signal(false);\n readonly #defaultParamsEffect = effectWithDeps(\n [this.#metadata.defaultParams],\n ([defaultParams]) => {\n this.#sortMeta.set(tableCreateSortMeta(defaultParams));\n this.#filterMeta.set(tableCreateFilterMeta(defaultParams));\n this.#isSortAndFilterMetaInitialized.set(true);\n },\n {firstOnly: true}\n );\n readonly #isSearchMetaInitialized = signal(false);\n readonly #searchMeta = signal<{value: string; caseSensitive: boolean} | undefined>(undefined);\n readonly searchMeta = this.#searchMeta.asReadonly();\n readonly isAllPaginationMetaInitialized = computed(() => this.#isSortAndFilterMetaInitialized() && this.#isSortAndFilterMetaInitialized());\n readonly paginationMode = computed(() => {\n const descriptor = this.#metadata.descriptor();\n if (descriptor.paginationMode != null) {\n // descriptor choice is the strongest - if defined, use this value\n return descriptor.paginationMode;\n } else if (this.#dataProvider() != null) {\n // when data provider is used, use pagination\n return TablePaginationModeEnum.Pagination;\n } else {\n return TablePaginationModeEnum.None;\n }\n });\n readonly offset = computed(() => this.params()?.offset ?? 0);\n readonly rows = computed(() => {\n if (this.params()?.limit) {\n return this.params()?.limit;\n }\n\n const descriptor = this.#metadata.descriptor();\n const rowsPerPageOptions = this.#metadata.rowsPerPageOptions();\n if (descriptor.defaultNumRows && rowsPerPageOptions.includes(descriptor.defaultNumRows)) {\n return descriptor.defaultNumRows;\n }\n\n return rowsPerPageOptions[0];\n });\n\n // data\n readonly #data = signal<Item[]>([]);\n readonly data = this.#data.asReadonly();\n readonly #count = signal(0);\n readonly count = this.#count.asReadonly();\n readonly #loading = signal(true);\n readonly loading = this.#loading.asReadonly();\n\n setDataSources(\n arrayItems: Signal<Item[] | undefined>,\n dataListResult: Signal<DataListResult<Item> | undefined>,\n dataProvider: Signal<ITableDataProvider<Item, any, any, any> | undefined>,\n manualLoading: Signal<boolean | undefined>\n ) {\n this.#dataSources.set({arrayItems, dataListResult, dataProvider, manualLoading});\n }\n\n fetchWithDataProvider(params: DataListParams, onErrorFn: (error: Error) => void): boolean {\n const dataProvider = this.#dataProvider();\n if (!dataProvider || params.limit === 0) {\n return false;\n }\n\n this.#dataProviderSubscription?.unsubscribe();\n this.#loading.set(true);\n\n this.#dataProviderSubscription = commonsToObservable(\n dataProvider.getAll(\n params as DataListParams<any, any>,\n this.#dataProviderService(),\n this.#metadata.descriptor().isLocalized ? (this.#commons.appDataLocale() ?? undefined) : undefined\n )\n ).subscribe({\n next: res => {\n const descriptorInput = this.#metadata.descriptorFromSource();\n if (descriptorInput instanceof TableDynamicDescriptorInst) {\n this.#metadata.setDescriptor(descriptorInput.toTableDescriptorFromData(res));\n }\n this.#setData(res?.data ?? [], res?.totalCount);\n this.#loading.set(false);\n },\n error: err => {\n onErrorFn(err);\n this.#setData([]);\n this.#loading.set(false);\n }\n });\n\n return true;\n }\n\n setParams(params: DataListParams, fromQueryParams = false) {\n if (!fromQueryParams && this.compareWithCurrentParams(params)) {\n return;\n }\n\n this.#params.set(params);\n this.#sortMeta.set(tableCreateSortMeta(params));\n this.#filterMeta.set(tableCreateFilterMeta(params));\n this.#isSortAndFilterMetaInitialized.set(true);\n if (fromQueryParams && !this.#isSearchMetaInitialized() && params?.search) {\n this.#searchMeta.set({value: params.search, caseSensitive: params.filters?.['global']?.caseSensitive ?? false});\n }\n this.#isSearchMetaInitialized.set(true);\n }\n\n /**\n * Compare the given params with the stored params in the DataListService.\n *\n * @param {DataListParams} params - The params to compare with the stored params.\n *\n * @return {boolean} - True if the given params match the stored params, otherwise false.\n */\n private compareWithCurrentParams(params: DataListParams): boolean {\n return (\n params.offset === this.offset() &&\n params.limit === this.rows() &&\n JSON.stringify(tableCreateSortMeta(params)) === JSON.stringify(this.#sortMeta()) &&\n JSON.stringify(tableCreateFilterMeta(params)) === JSON.stringify(this.#filterMeta())\n );\n }\n\n #setData(data: Item[], count?: number) {\n this.#data.set([...data]);\n this.#count.set(count ?? data.length);\n }\n\n ngOnDestroy() {\n this.#dataProviderSubscription?.unsubscribe();\n }\n}\n","import {animate, style, transition, trigger} from '@angular/animations';\nimport {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n ElementRef,\n OnDestroy,\n Renderer2,\n ViewEncapsulation,\n computed,\n effect,\n inject,\n input,\n signal,\n untracked,\n viewChild\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, TranslationKeys} from 'primeng/api';\nimport {CalendarModule} from 'primeng/calendar';\nimport {CheckboxModule} from 'primeng/checkbox';\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 {Nullable, VoidListener} from 'primeng/ts-helpers';\nimport {ZIndexUtils} from 'primeng/utils';\nimport {Subject, Subscription, debounceTime, distinctUntilChanged} from 'rxjs';\n\nimport {CommonsFilterMetadata, FilterMatchMode, FilterMatchModeExtendedType, RerenderDirective} from '@mediusinc/mng-commons/core';\nimport {FilterLookupDescriptor, FilterLookupTypeEnum, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective, NumberRangeComponent} from '@mediusinc/mng-commons/form';\n\nimport {filterAdjustDisplayValueOnMatchModeChange, filterSetMetadataOnChange, filterSetMetadataOnDisplayChange} from '../../helpers/filters';\nimport {FilterMetadata} from '../../models/filter.model';\nimport {TableDataService} from '../../services/table-data.service';\nimport {TableMetadataService} from '../../services/table-metadata.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',\n imports: [\n TableModule,\n TranslateModule,\n DateRangeComponent,\n CalendarModule,\n FormsModule,\n AutocompleteComponent,\n DropdownComponent,\n InputNumberModule,\n InputTextModule,\n FilterIcon,\n FilterSlashIcon,\n NgClass,\n InputTrimDirective,\n NumberRangeComponent,\n NgTemplateOutlet,\n CheckboxModule,\n RerenderDirective\n ],\n templateUrl: './column-filter.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 TableColumnFilterComponent implements OnDestroy {\n public readonly lookupTypeDropdown: FilterLookupTypeEnum = FilterLookupTypeEnum.Dropdown;\n public readonly lookupTypeAutocomplete: FilterLookupTypeEnum = FilterLookupTypeEnum.Autocomplete;\n public readonly FilterTypeEnum = FilterTypeEnum;\n public readonly FilterMatchMode = FilterMatchMode;\n\n private readonly el = inject(ElementRef);\n private readonly primeTable = inject(Table);\n private readonly renderer = inject(Renderer2);\n private readonly overlayService = inject(OverlayService);\n private readonly cd = inject(ChangeDetectorRef);\n private readonly destroyRef = inject(DestroyRef);\n private readonly tableData = inject(TableDataService<any>);\n private readonly tableMetadata = inject(TableMetadataService);\n private readonly document: Document = window.document;\n\n public metadata = input.required<FilterMetadata>();\n public descriptorAsLookup = computed(() =>\n this.metadata().descriptor instanceof FilterLookupDescriptor ? (this.metadata().descriptor as FilterLookupDescriptor<any, any>) : undefined\n );\n private icon = viewChild<Nullable<ElementRef>>('icon');\n\n public matchModes = computed(() => this.metadata().matchModes);\n public filterConstraint = signal<CommonsFilterMetadata | 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 // display configs\n public isMultiselect = computed(() => {\n const ft = this.filterConstraint();\n const matchMode = ft?.displayMatchMode ?? this.metadata().defaultMatchMode;\n return (matchMode === FilterMatchMode.In || matchMode === FilterMatchMode.NotIn) && (ft?.displayValue == null || Array.isArray(ft.displayValue));\n });\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 resetSubscription?: Subscription;\n private selfClick?: boolean;\n private overlayEventListener: any;\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\n constructor() {\n this.dateDebounceSubject.pipe(debounceTime(500), distinctUntilChanged(), takeUntilDestroyed()).subscribe(v => this.updateFilterOnDisplayValueChange(v));\n\n effect(\n () => {\n const fieldFilterMeta = this.tableData.filterMeta()?.[this.metadata().descriptor.property];\n const filterConstraint = untracked(() => this.filterConstraint());\n if (fieldFilterMeta && (!filterConstraint || filterConstraint.value !== fieldFilterMeta.value || filterConstraint.matchMode !== fieldFilterMeta.matchMode)) {\n this.setFilterConstraint(\n filterSetMetadataOnChange(\n fieldFilterMeta,\n fieldFilterMeta.matchMode,\n fieldFilterMeta.value,\n untracked(() => this.metadata().descriptor.filterType),\n untracked(() => this.metadata().dateConfig)\n )\n );\n }\n },\n {allowSignalWrites: true}\n );\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.resetSubscription?.unsubscribe();\n this.overlaySubscription?.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.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(this.numericValueFromModelChange);\n event.preventDefault();\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types\n onCheckboxModelChange(value: boolean | null) {\n this.updateFilterOnDisplayValueChange(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.updateFilterOnDisplayValueChange(value);\n }\n\n // eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any\n dropdownFilter(value: any) {\n this.updateFilterOnDisplayValueChange(value);\n }\n\n onMatchModeChange(displayMatchMode: FilterMatchModeExtendedType) {\n if (this.filterConstraint()?.displayMatchMode === displayMatchMode) {\n return;\n }\n\n this.setFilterConstraint(\n filterSetMetadataOnDisplayChange(\n this.filterConstraint(),\n displayMatchMode,\n filterAdjustDisplayValueOnMatchModeChange(displayMatchMode, this.filterConstraint()?.displayValue),\n this.metadata().descriptor.filterType,\n this.metadata().dateConfig\n )\n );\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.tableMetadata.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.tableMetadata.primeConfig.getTranslation(TranslationKeys.NO_FILTER);\n }\n\n clearFilter() {\n this.initFilterConstraint(true);\n this.primeTable._filter();\n this.hideOverlay();\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 updateFilterOnDisplayValueChange(displayValue: any) {\n this.setFilterConstraint(\n filterSetMetadataOnDisplayChange(\n this.filterConstraint(),\n this.filterConstraint()?.displayMatchMode ?? this.metadata().defaultMatchMode,\n displayValue,\n this.metadata().descriptor.filterType,\n this.metadata().dateConfig\n )\n );\n }\n\n private initFilterConstraint(reset = false) {\n if (reset) {\n this.primeTable.filters[this.metadata().descriptor.property] = {value: null, matchMode: this.metadata().defaultMatchMode};\n }\n\n // set internal filter constraint\n let metadata = this.primeTable.filters[this.metadata().descriptor.property];\n if (Array.isArray(metadata)) {\n metadata = metadata[0];\n }\n this.setFilterConstraint(filterSetMetadataOnChange(metadata, metadata?.matchMode, metadata?.value, this.metadata().descriptor.filterType, this.metadata().dateConfig));\n }\n\n private setFilterConstraint(metadata?: CommonsFilterMetadata) {\n if (metadata && !metadata.displayMatchMode) metadata.displayMatchMode = metadata.matchMode;\n if (metadata && !metadata.displayValue) metadata.displayValue = metadata.value;\n this.filterConstraint.set(metadata);\n this.primeTable.filters[this.metadata().descriptor.property] = this.filterConstraint()!;\n this.primeTable._filter();\n }\n}\n","<div class=\"p-column-filter p-column-filter-row\">\n @switch (metadata().descriptor.filterType) {\n @case (FilterTypeEnum.Number) {\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]=\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [useGrouping]=\"metadata().descriptor.numberUseGrouping\"\n [minFractionDigits]=\"metadata().numberConfig?.fractionsMin\"\n [maxFractionDigits]=\"metadata().numberConfig?.fractionsMax\"\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]=\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [useGrouping]=\"metadata().descriptor.numberUseGrouping\"\n [minFractionDigits]=\"metadata().numberConfig?.fractionsMin\"\n [maxFractionDigits]=\"metadata().numberConfig?.fractionsMax\"\n [disabled]=\"isInputDisabled()\" />\n }\n }\n\n @case (FilterTypeEnum.Boolean) {\n <p-checkbox [ngModel]=\"filterConstraint()?.displayValue\" binary=\"true\" (ngModelChange)=\"onCheckboxModelChange($event)\"></p-checkbox>\n }\n @case (FilterTypeEnum.Date) {\n @if (filterConstraint()?.displayMatchMode === FilterMatchMode.Between) {\n <mng-date-range\n [ngModel]=\"filterConstraint()?.displayValue\"\n (ngModelChange)=\"onDateFilterModelChange($event)\"\n [showTime]=\"metadata().dateConfig?.showTime ?? false\"\n [showSeconds]=\"metadata().dateConfig?.showSeconds ?? false\"\n [dateFormat]=\"metadata().dateConfig?.format\"\n [placeholder]=\"metadata().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]=\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [showIcon]=\"true\"\n [showTime]=\"metadata().dateConfig?.showTime ?? false\"\n [showSeconds]=\"metadata().dateConfig?.showSeconds ?? false\"\n [dateFormat]=\"metadata().dateConfig?.format\"\n [firstDayOfWeek]=\"1\">\n </p-calendar>\n }\n }\n @case (FilterTypeEnum.Lookup) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\" />\n }\n @case (FilterTypeEnum.LookupEnum) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\" />\n }\n @default {\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]=\"metadata().descriptor.placeholder ?? 'mngTable.typeToFilter' | translate\"\n [mngInputTrim]=\"metadata().descriptor.trimOption\" />\n }\n }\n\n <ng-template #lookupFilter>\n @if (descriptorAsLookup(); as lookup) {\n @switch (lookup.lookupType) {\n @case (lookupTypeAutocomplete) {\n <mng-autocomplete\n *mngRerender=\"isMultiselect()\"\n [ngModel]=\"filterConstraint()?.displayValue\"\n [dataProvider]=\"lookup.dataProvider\"\n [optionsTrackProperty]=\"lookup.optionsValueProperty\"\n [optionsValueProperty]=\"lookup.optionsValueProperty\"\n [optionsLabelProperty]=\"lookup.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookup.optionsLabelTranslate\"\n [multiselect]=\"isMultiselect()\"\n [autoClear]=\"lookup.autocompleteAutoClear ?? false\"\n [openOnFocus]=\"lookup.autocompleteAutoClear ?? true\"\n [inlineSearch]=\"lookup.autocompleteInlineSearch ?? false\"\n [placeholder]=\"metadata().descriptor.placeholder ?? 'mngTable.searchToFilter' | translate\"\n [className]=\"lookup.className\"\n [dropdownClassName]=\"lookup.dropdownClassName\"\n [disabled]=\"isInputDisabled()\"\n (valueChange)=\"autocompleteFilter($event)\"\n [searchTrim]=\"metadata().descriptor.trimOption\">\n </mng-autocomplete>\n }\n @case (lookupTypeDropdown) {\n <mng-dropdown\n *mngRerender=\"isMultiselect()\"\n [ngModel]=\"filterConstraint()?.displayValue\"\n [dataProvider]=\"lookup.dataProvider\"\n [optionsValueProperty]=\"lookup.optionsValueProperty\"\n [optionsLabelProperty]=\"lookup.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookup.optionsLabelTranslate\"\n [multiselect]=\"isMultiselect()\"\n [placeholder]=\"metadata().descriptor.placeholder ?? 'mngTable.selectToFilter' | translate\"\n [className]=\"lookup.className\"\n [dropdownClassName]=\"lookup.dropdownClassName\"\n [showClear]=\"false\"\n [changeValueOnBlur]=\"isMultiselect()\"\n [disabled]=\"isInputDisabled()\"\n (valueChange)=\"dropdownFilter($event)\">\n </mng-dropdown>\n }\n }\n }\n </ng-template>\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(value, this.descriptor().getter, this.item());\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 {DatePipe, DecimalPipe} from '@angular/common';\nimport {LOCALE_ID, OnDestroy, Pipe, PipeTransform, inject} from '@angular/core';\n\nimport {TranslateService} from '@ngx-translate/core';\nimport {Observable, ReplaySubject, Subscription} from 'rxjs';\n\nimport {BooleanPipe, EnumPipe} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterLookupEnumDescriptor, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\n\n@Pipe({\n name: 'mngFilterValue',\n standalone: true,\n pure: true\n})\nexport class FilterValuePipe implements PipeTransform, OnDestroy {\n private readonly locale = inject(LOCALE_ID);\n private readonly translate = inject(TranslateService);\n private readonly enumPipe = new EnumPipe();\n\n private subscription?: Subscription;\n subject = new ReplaySubject<any>(1);\n\n transform(value: unknown, descriptor?: FilterDescriptor<any, any>): Observable<any> {\n const valTransform = this.prepareValueTransform(value, descriptor);\n\n this.subscription?.unsubscribe();\n if (valTransform.translate) {\n this.subscription = this.translate.stream(valTransform.valueArr).subscribe(i18n => {\n this.subject.next(valTransform.valueArr.map(k => i18n[k]).join(', '));\n });\n } else {\n this.subject.next(valTransform.valueArr.join(', '));\n }\n\n return this.subject.asObservable();\n }\n\n /**\n * If returns a string, this represents i18n key that must go through translation. If translation is not needed, undefined is returned.\n */\n private prepareValueTransform(value: unknown, descriptor?: FilterDescriptor<any, any>): {translate: boolean; valueArr: any[]} {\n const result = {\n translate: false,\n valueArr: Array.isArray(value) ? value : [value]\n };\n switch (descriptor?.filterType) {\n case FilterTypeEnum.Date:\n // eslint-disable-next-line no-case-declarations\n const datePipe = new DatePipe(this.locale);\n result.valueArr = result.valueArr.map(v => datePipe.transform(v as Date, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Number:\n // eslint-disable-next-line no-case-declarations\n const decimalPipe = new DecimalPipe(this.locale);\n result.valueArr = result.valueArr.map(v => decimalPipe.transform(v as number, descriptor.displayFormat, descriptor.locale));\n break;\n case FilterTypeEnum.Boolean:\n // eslint-disable-next-line no-case-declarations\n const booleanPipe = new BooleanPipe();\n result.valueArr = result.valueArr.map(v => booleanPipe.transform(v));\n result.translate = true;\n break;\n case FilterTypeEnum.LookupEnum:\n // eslint-disable-next-line no-case-declarations\n const enumPipe = new EnumPipe();\n result.valueArr = result.valueArr.map(v => enumPipe.transform(v, (descriptor as FilterLookupEnumDescriptor<any, any>).enum));\n result.translate = true;\n break;\n }\n\n return result;\n }\n\n ngOnDestroy() {\n this.subscription?.unsubscribe();\n this.subject.complete();\n }\n}\n","import {AsyncPipe} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, computed, input, output} from '@angular/core';\n\nimport {TranslateModule} from '@ngx-translate/core';\nimport {TagModule} from 'primeng/tag';\n\nimport {FilterMatchMode, getI18nTypePropertyKey} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor} from '@mediusinc/mng-commons/filter';\nimport {ModelDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {FilterActiveTagEvent, FilterState} from '../../../models/filter.model';\nimport {FilterValuePipe} from '../../../pipes/filter-value.pipe';\n\n@Component({\n standalone: true,\n selector: 'mng-table-filter-active-tag',\n templateUrl: './filter-active-tag.component.html',\n imports: [TranslateModule, TagModule, FilterValuePipe, AsyncPipe],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableFilterActiveTagComponent {\n public readonly FilterMatchMode = FilterMatchMode;\n\n public model = input.required<ModelDescriptor<any, any>>();\n public filter = input.required<FilterState>();\n\n public edit = output<FilterActiveTagEvent>();\n public remove = output<FilterActiveTagEvent>();\n\n public label = computed(() => this.getPropertyLabelKey(this.filter().metadata.descriptor));\n public matchMode = computed(() => this.filter().displayMatchMode);\n public matchModeSymbol = computed(() => `mngFilterActiveTag.matchMode.${this.matchMode()}`);\n public value = computed(() => this.filter().displayValue);\n\n onRemove(event: Event) {\n event.stopPropagation();\n this.remove.emit({\n filter: this.filter(),\n event: event\n });\n }\n\n onEdit(event: Event) {\n this.edit.emit({\n filter: this.filter(),\n event: event\n });\n }\n\n private getPropertyLabelKey(filterDescriptor: FilterDescriptor<any, any>) {\n if (filterDescriptor.isGenericFilter) {\n return filterDescriptor.property;\n }\n\n let labelKey: string;\n if (filterDescriptor.title !== undefined) {\n labelKey = filterDescriptor.title;\n } else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.property);\n }\n return labelKey;\n }\n}\n","<p-tag severity=\"secondary\" styleClass=\"mr-1 p-tag-outlined\">\n <div class=\"flex align-items-center gap-2 p-1 cursor-pointer\" (click)=\"onEdit($event)\">\n <span>{{ label() | translate }}</span>\n @if (matchMode() === FilterMatchMode.Between) {\n <span class=\"font-semibold\">{{ value()?.[0] | mngFilterValue: filter().metadata.descriptor | async }}</span>\n <span class=\"text-primary\">{{ matchModeSymbol() | translate }}</span>\n <span class=\"font-semibold\">{{ value()?.[1] | mngFilterValue: filter().metadata.descriptor | async }}</span>\n } @else {\n <span class=\"text-primary\">{{ matchModeSymbol() | translate }}</span>\n <span class=\"font-semibold\">{{ value() | mngFilterValue: filter().metadata.descriptor | async }}</span>\n @if (filter().caseSensitive) {\n <small class=\"border-solid border-1 border-round-sm px-1 text-primary-400\">Aa</small>\n }\n }\n <span class=\"pi pi-times text-xs\" (click)=\"onRemove($event)\"></span>\n </div>\n</p-tag>\n","import {NgClass, NgTemplateOutlet} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, ElementRef, booleanAttribute, computed, effect, inject, input, output, signal, untracked, viewChild} from '@angular/core';\nimport {takeUntilDestroyed, toObservable} from '@angular/core/rxjs-interop';\nimport {FormsModule, NgForm} from '@angular/forms';\n\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {CalendarModule} from 'primeng/calendar';\nimport {CheckboxModule} from 'primeng/checkbox';\nimport {DropdownModule} from 'primeng/dropdown';\nimport {InputNumberModule} from 'primeng/inputnumber';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {MessagesModule} from 'primeng/messages';\nimport {OverlayPanel} from 'primeng/overlaypanel';\nimport {ToggleButtonModule} from 'primeng/togglebutton';\nimport {NEVER, switchMap} from 'rxjs';\n\nimport {FilterMatchMode, FilterMatchModeExtendedType, ILookupDataProvider, getI18nTypePropertyKey} from '@mediusinc/mng-commons/core';\nimport {FilterDescriptor, FilterGenericDescriptor, FilterLookupDescriptor, FilterLookupTypeEnum, FilterTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {AutocompleteComponent, DateRangeComponent, DropdownComponent, InputTrimDirective, NumberRangeComponent} from '@mediusinc/mng-commons/form';\nimport {lookupDataProviderWithService} from '@mediusinc/mng-commons/form/api';\nimport {ModelDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {filterAdjustDisplayValueOnMatchModeChange, filterGetDefaultMatchMode} from '../../../helpers/filters';\nimport {FilterFormEmitEvent, FilterMetadata, FilterState} from '../../../models/filter.model';\n\n@Component({\n standalone: true,\n selector: 'mng-table-filter-form',\n templateUrl: './filter-form.component.html',\n styleUrl: './filter-form.component.scss',\n imports: [\n DropdownComponent,\n FormsModule,\n NgClass,\n TranslateModule,\n InputTrimDirective,\n NumberRangeComponent,\n InputNumberModule,\n DateRangeComponent,\n CalendarModule,\n AutocompleteComponent,\n CheckboxModule,\n MessagesModule,\n InputTextModule,\n NgTemplateOutlet,\n DropdownModule,\n ToggleButtonModule\n ],\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'flex flex-grow-1'\n }\n})\nexport class TableFilterFormComponent {\n public readonly lookupTypeDropdown: FilterLookupTypeEnum = FilterLookupTypeEnum.Dropdown;\n public readonly lookupTypeAutocomplete: FilterLookupTypeEnum = FilterLookupTypeEnum.Autocomplete;\n public readonly FilterTypeEnum = FilterTypeEnum;\n public readonly FilterMatchMode = FilterMatchMode;\n\n private readonly elementRef = inject(ElementRef);\n private readonly translate = inject(TranslateService);\n\n public title = input<string>();\n public metadata = input.required<FilterMetadata[]>();\n public genericDescriptor = input<FilterGenericDescriptor>();\n public model = input.required<ModelDescriptor<any>>();\n public filter = input<FilterState>();\n public overlay = input<OverlayPanel>();\n public disabledProperties = input<string[]>([]);\n public enableCaseSensitive = input<boolean>(true);\n public propertySearch = input(false, {transform: booleanAttribute});\n\n public apply = output<FilterFormEmitEvent>();\n\n public propertyOptionsWithTranslations = computed(() => {\n const disabledProperties = this.disabledProperties();\n const filter = this.filter();\n return (\n this.metadata()?.map(d => {\n return <PropertyModel>{\n property: d.descriptor.property,\n label: d.descriptor.isGenericFilter ? d.descriptor.property : this.getPropertyLabelKey(d.descriptor),\n disabled: !filter && disabledProperties.includes(d.descriptor.property)\n };\n }) ?? []\n );\n });\n\n public selectedFilterMetadata = computed(() => {\n const property = this.propertyModel();\n return this.metadata().find(d => d.descriptor.property === property);\n });\n\n // change value lookup function to include the property name of the generic filter\n public genericValueDataProvider = computed<ILookupDataProvider<string, any, any, 'field'> | undefined>(() => {\n const genericValueProvider = this.genericDescriptor()?.valueLookup;\n\n if (genericValueProvider && genericValueProvider.serviceType) {\n const lookupFn = genericValueProvider.lookup;\n return lookupDataProviderWithService<string, any, any, 'field'>(genericValueProvider.serviceType).withLookup((params, service, search) => {\n params = {\n ...params,\n filters: {\n ...params?.filters,\n field: {\n value: this.selectedFilterMetadata()?.descriptor.property,\n matchMode: this.selectedFilterMetadata()?.descriptor.filterType === FilterTypeEnum.LookupEnum ? FilterMatchMode.In : FilterMatchMode.StartsWith\n }\n }\n };\n return lookupFn(params, service, search);\n });\n }\n return;\n });\n\n public selectedDescriptorAsLookup = computed(() => {\n const filterDescriptor = this.selectedFilterMetadata()?.descriptor;\n return filterDescriptor !== undefined &&\n !filterDescriptor.isGenericFilter &&\n (filterDescriptor.filterType === FilterTypeEnum.Lookup || filterDescriptor.filterType === FilterTypeEnum.LookupEnum)\n ? (filterDescriptor as FilterLookupDescriptor<any, any>)\n : undefined;\n });\n\n public isEdit = computed(() => this.filter() != null);\n public formSubmitted = signal(false);\n public formErrorMessage = signal<any>([]);\n\n // UI utilities\n private filterForm = viewChild.required<NgForm>('filterForm');\n\n // Filter form model and form utilities\n public propertyModel = signal<string | null>(null);\n public matchModeModel = signal<FilterMatchModeExtendedType | null>(null);\n public valueModel = signal<any | any[] | null>(null);\n public caseSensitiveModel = signal<boolean>(false);\n\n public isMultiselect = computed(() => this.matchModeModel() === FilterMatchMode.In || this.matchModeModel() === FilterMatchMode.NotIn);\n\n constructor() {\n effect(\n () => {\n const edit = this.filter();\n if (edit) {\n this.resetForm({\n property: edit.metadata.descriptor.property,\n matchMode: edit.displayMatchMode ?? edit.matchMode ?? null,\n value: edit.displayValue ?? edit.value,\n caseSensitive: edit.caseSensitive ?? false\n });\n } else {\n this.resetForm();\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const descriptor = this.selectedFilterMetadata()?.descriptor;\n const value = untracked(() => this.valueModel());\n\n if (value != null) {\n // reset value if filter type and value type mismatch\n if (\n (descriptor?.filterType === FilterTypeEnum.String &&\n (value === true || value === false || value === 'true' || value === 'false' || value instanceof Date)) ||\n (descriptor?.filterType === FilterTypeEnum.Number && typeof value !== 'number' && isNaN(+value)) ||\n (descriptor?.filterType === FilterTypeEnum.Date && !(value instanceof Date)) ||\n descriptor?.filterType === FilterTypeEnum.Lookup ||\n descriptor?.filterType === FilterTypeEnum.LookupEnum\n ) {\n this.valueModel.set(null);\n } else if (descriptor?.filterType === FilterTypeEnum.Boolean && typeof value !== 'boolean') {\n this.valueModel.set(false);\n }\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const matchModeOptions = this.selectedFilterMetadata()?.matchModes ?? [];\n const matchMode = untracked(() => this.matchModeModel());\n const filterForm = untracked(() => this.filterForm());\n\n if (\n matchModeOptions.length > 0 &&\n (!matchMode || filterForm.controls['matchMode']?.pristine || filterForm.controls['matchMode']?.untouched || !matchModeOptions.find(o => o.value === matchMode))\n ) {\n this.matchModeModel.set(filterGetDefaultMatchMode(this.selectedFilterMetadata()?.descriptor, matchModeOptions));\n }\n },\n {allowSignalWrites: true}\n );\n\n effect(\n () => {\n const currentValue = untracked(() => this.valueModel());\n this.valueModel.set(filterAdjustDisplayValueOnMatchModeChange(this.matchModeModel() ?? undefined, currentValue));\n },\n {allowSignalWrites: true}\n );\n\n toObservable(this.overlay)\n .pipe(\n switchMap(o => (o ? o.onShow : NEVER)),\n takeUntilDestroyed()\n )\n .subscribe(() => {\n const formFields = this.elementRef.nativeElement.querySelectorAll(\n 'input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [role=\"combobox\"]:not([disabled])'\n );\n const activeEl = document.activeElement;\n const activeInputIdx = activeEl ? [...formFields].findIndex(el => activeEl.isEqualNode(el)) : 0;\n if (activeInputIdx <= 0) {\n formFields[0].focus();\n }\n });\n }\n\n onFormSubmit(form: NgForm) {\n this.formSubmitted.set(true);\n\n // mark all as dirty\n for (const key in form.controls) {\n form.controls[key].markAsDirty();\n }\n\n const property = this.propertyModel();\n const matchMode = this.matchModeModel();\n if (form.invalid || !property || !matchMode) {\n this.formErrorMessage.set([\n {\n severity: 'warn',\n summary: this.translate.instant('mngFilter.messages.invalidFormTitle'),\n detail: this.translate.instant('mngFilter.messages.invalidFormMessage')\n }\n ]);\n return;\n }\n\n this.apply.emit({\n property: property,\n matchMode: matchMode,\n value: this.valueModel(),\n caseSensitive: this.caseSensitiveModel()\n });\n\n // resetting the form is done from the parent component (filter-overlay-with-tag) for smoother animations\n }\n\n public resetForm(value?: FilterFormModel) {\n this.filterForm().resetForm(value);\n // somehow have to set case sensitivity manually\n this.caseSensitiveModel.set(value?.caseSensitive ?? false);\n this.formSubmitted.set(false);\n }\n\n private getPropertyLabelKey(filterDescriptor: FilterDescriptor<any, any>) {\n let labelKey: string;\n if (filterDescriptor.title !== undefined) {\n labelKey = filterDescriptor.title;\n } else {\n labelKey = getI18nTypePropertyKey(this.model().i18nBaseKey, filterDescriptor.property);\n }\n return labelKey;\n }\n}\n\ninterface FilterFormModel {\n property: string | null;\n matchMode: FilterMatchModeExtendedType | null;\n value: any | null;\n caseSensitive: boolean;\n}\n\ninterface PropertyModel {\n property: string;\n label: string;\n disabled: boolean;\n}\n","<div>\n <div>\n <h5>{{ filter() ? ('mngFilter.titleEdit' | translate) : ('mngFilter.titleAdd' | translate) }}</h5>\n </div>\n <form #filterForm=\"ngForm\" (ngSubmit)=\"onFormSubmit(filterForm)\" class=\"flex flex-column align-items-center lg:flex-row gap-3\">\n <div class=\"w-full lg:w-auto\">\n <mng-dropdown\n name=\"property\"\n id=\"property\"\n tabindex=\"1\"\n #propertyControl=\"ngModel\"\n [(ngModel)]=\"propertyModel\"\n [options]=\"propertyOptionsWithTranslations()\"\n optionsValueProperty=\"property\"\n optionsDisabledProperty=\"disabled\"\n optionsLabelProperty=\"label\"\n [placeholder]=\"'mngFilter.property' | translate\"\n [optionsLabelTranslate]=\"!propertySearch()\"\n [inlineSearch]=\"propertySearch()\"\n required=\"true\"\n className=\"w-full\"\n [disabled]=\"isEdit()\"\n [appendTo]=\"null\" />\n </div>\n <div class=\"w-full lg:w-auto\">\n <mng-dropdown\n name=\"matchMode\"\n id=\"matchMode\"\n [(ngModel)]=\"matchModeModel\"\n className=\"w-full\"\n [options]=\"selectedFilterMetadata()?.matchModes ?? []\"\n [placeholder]=\"'mngFilter.matchMode' | translate\"\n [disabled]=\"!propertyControl.value\"\n class=\"align-self-end\"\n required=\"true\"\n [appendTo]=\"null\" />\n </div>\n @if (!(matchModeModel() === FilterMatchMode.Exists || matchModeModel() === FilterMatchMode.DoesNotExist)) {\n <div class=\"w-full lg:w-auto flex flex-column\">\n @switch (selectedFilterMetadata()?.descriptor?.filterType) {\n @case (FilterTypeEnum.Number) {\n @if (matchModeModel() === FilterMatchMode.Between) {\n <mng-number-range\n className=\"mng-column-filter-number-input\"\n name=\"value\"\n [(ngModel)]=\"valueModel\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [useGrouping]=\"selectedFilterMetadata()?.descriptor?.numberUseGrouping ?? false\"\n [minFractionDigits]=\"selectedFilterMetadata()?.numberConfig?.fractionsMin\"\n [maxFractionDigits]=\"selectedFilterMetadata()?.numberConfig?.fractionsMax\"\n required=\"true\" />\n } @else {\n <p-inputNumber\n inputStyleClass=\"mng-column-filter-number-input\"\n name=\"value\"\n [(ngModel)]=\"valueModel\"\n [styleClass]=\"'w-full'\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [useGrouping]=\"selectedFilterMetadata()?.descriptor?.numberUseGrouping\"\n [minFractionDigits]=\"selectedFilterMetadata()?.numberConfig?.fractionsMin\"\n [maxFractionDigits]=\"selectedFilterMetadata()?.numberConfig?.fractionsMax\"\n [disabled]=\"!matchModeModel()\"\n required=\"true\" />\n }\n }\n\n @case (FilterTypeEnum.Boolean) {\n <p-checkbox [(ngModel)]=\"valueModel\" [disabled]=\"!matchModeModel()\" name=\"value\" binary=\"true\" required=\"true\" />\n }\n @case (FilterTypeEnum.Date) {\n @if (matchModeModel() === FilterMatchMode.Between) {\n <mng-date-range\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [showTime]=\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\"\n [showSeconds]=\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\"\n [dateFormat]=\"selectedFilterMetadata()?.dateConfig?.format\"\n [placeholder]=\"'mngFilter.value' | translate\"\n required=\"true\"></mng-date-range>\n } @else {\n <p-calendar\n appendTo=\"body\"\n name=\"value\"\n [(ngModel)]=\"valueModel\"\n [styleClass]=\"'w-full'\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [showIcon]=\"true\"\n [showTime]=\"selectedFilterMetadata()?.dateConfig?.showTime ?? false\"\n [showSeconds]=\"selectedFilterMetadata()?.dateConfig?.showSeconds ?? false\"\n [dateFormat]=\"selectedFilterMetadata()?.dateConfig?.format\"\n [firstDayOfWeek]=\"1\"\n [disabled]=\"!matchModeModel()\"\n required=\"true\">\n </p-calendar>\n }\n }\n @case (FilterTypeEnum.Lookup) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\"></ng-container>\n }\n @case (FilterTypeEnum.LookupEnum) {\n <ng-container *ngTemplateOutlet=\"lookupFilter\"></ng-container>\n }\n @default {\n @if (selectedFilterMetadata()?.descriptor?.genericValueProvider && genericValueDataProvider()) {\n <!-- conditional rendering on the placeholder is there because of styling issues with PrimeNG -->\n <!-- (PrimeNG applies the .p-placeholder class to programmatically set values, making them greyed out) -->\n <span class=\"flex align-items-center\">\n <mng-dropdown\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"genericValueDataProvider()\"\n [className]=\"selectedFilterMetadata()?.descriptor?.className\"\n [dropdownClassName]=\"selectedFilterMetadata()?.descriptor?.dropdownClassName\"\n [placeholder]=\"valueModel() ? undefined : ('mngFilter.value' | translate)\"\n allowInput=\"true\"\n [disabled]=\"!matchModeModel()\"\n [appendTo]=\"null\"\n required=\"true\"></mng-dropdown>\n @if (enableCaseSensitive()) {\n <p-toggleButton [(ngModel)]=\"caseSensitiveModel\" name=\"caseSensitive\" styleClass=\"ml-2 p-1 p-button\" onLabel=\"Aa\" offLabel=\"Aa\" />\n }\n </span>\n } @else {\n <span class=\"p-input-icon-right\">\n <input\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n type=\"text\"\n pInputText\n class=\"mng-column-filter-string-input w-full\"\n [attr.placeholder]=\"'mngFilter.value' | translate\"\n [mngInputTrim]=\"selectedFilterMetadata()?.descriptor?.trimOption\"\n [disabled]=\"!matchModeModel()\"\n [placeholder]=\"'mngFilter.value' | translate\"\n required=\"true\" />\n @if (enableCaseSensitive()) {\n <span class=\"toggle-button-input\">\n <p-toggleButton [(ngModel)]=\"caseSensitiveModel\" name=\"caseSensitive\" styleClass=\"ml-1 p-1 p-button-sm\" onLabel=\"Aa\" offLabel=\"Aa\" />\n </span>\n }\n </span>\n }\n }\n }\n <ng-template #lookupFilter>\n @if (selectedDescriptorAsLookup(); as lookupFilterDescriptor) {\n @switch (lookupFilterDescriptor.lookupType) {\n @case (lookupTypeAutocomplete) {\n <mng-autocomplete\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"lookupFilterDescriptor.dataProvider\"\n [optionsTrackProperty]=\"lookupFilterDescriptor.optionsValueProperty\"\n [optionsValueProperty]=\"lookupFilterDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupFilterDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupFilterDescriptor.optionsLabelTranslate\"\n [multiselect]=\"isMultiselect()\"\n [autoClear]=\"lookupFilterDescriptor.autocompleteAutoClear ?? false\"\n [openOnFocus]=\"lookupFilterDescriptor.autocompleteAutoClear ?? true\"\n [inlineSearch]=\"lookupFilterDescriptor.autocompleteInlineSearch ?? false\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [className]=\"lookupFilterDescriptor.className\"\n [dropdownClassName]=\"lookupFilterDescriptor.dropdownClassName\"\n [searchTrim]=\"selectedFilterMetadata()?.descriptor?.trimOption\"\n [disabled]=\"!matchModeModel()\"\n required=\"true\">\n </mng-autocomplete>\n }\n @case (lookupTypeDropdown) {\n <mng-dropdown\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"lookupFilterDescriptor.dataProvider\"\n [optionsValueProperty]=\"lookupFilterDescriptor.optionsValueProperty\"\n [optionsLabelProperty]=\"lookupFilterDescriptor.optionsLabelProperty\"\n [optionsLabelTranslate]=\"lookupFilterDescriptor.optionsLabelTranslate\"\n [multiselect]=\"isMultiselect()\"\n [placeholder]=\"'mngFilter.value' | translate\"\n [className]=\"lookupFilterDescriptor.className + ' w-full'\"\n [dropdownClassName]=\"lookupFilterDescriptor.dropdownClassName\"\n showClear=\"false\"\n [disabled]=\"!matchModeModel()\"\n [appendTo]=\"null\"\n required=\"true\">\n </mng-dropdown>\n }\n }\n } @else if (selectedFilterMetadata()?.descriptor?.isGenericFilter && genericValueDataProvider()) {\n <mng-dropdown\n [(ngModel)]=\"valueModel\"\n name=\"value\"\n [dataProvider]=\"genericValueDataProvider()\"\n [placeholder]=\"'mngFilter.value' | translate\"\n showClear=\"false\"\n [disabled]=\"!matchModeModel()\"\n [appendTo]=\"null\"\n required=\"true\">\n </mng-dropdown>\n }\n </ng-template>\n </div>\n }\n <div class=\"flex justify-content-end\">\n <button pButton type=\"submit\" class=\"align-self-end\">\n {{ (filter() ? 'general.apply' : 'general.add') | translate }}\n </button>\n </div>\n </form>\n @if (formSubmitted() && filterForm.invalid) {\n <p-messages [value]=\"formErrorMessage()\" class=\"w-full\"></p-messages>\n }\n</div>\n","import {NgClass, NgStyle, NgTemplateOutlet} from '@angular/common';\nimport {ChangeDetectionStrategy, Component, Signal, TemplateRef, booleanAttribute, computed, contentChildren, inject, input, signal, viewChild} from '@angular/core';\nimport {takeUntilDestroyed} from '@angular/core/rxjs-interop';\n\nimport {TranslateModule} from '@ngx-translate/core';\nimport {Button} from 'primeng/button';\nimport {CheckboxModule} from 'primeng/checkbox';\nimport {InputGroupModule} from 'primeng/inputgroup';\nimport {InputGroupAddonModule} from 'primeng/inputgroupaddon';\nimport {InputTextModule} from 'primeng/inputtext';\nimport {OverlayPanel, OverlayPanelModule} from 'primeng/overlaypanel';\nimport {PaginatorModule} from 'primeng/paginator';\nimport {Table} from 'primeng/table';\nimport {TagModule} from 'primeng/tag';\nimport {ToggleButtonModule} from 'primeng/togglebutton';\nimport {BehaviorSubject, combineLatest, debounceTime, distinctUntilChanged, skip} from 'rxjs';\n\nimport {CommonsFilterMetadata, FilterMatchMode, TemplateDirective, findTemplateByName} from '@mediusinc/mng-commons/core';\nimport {FilterGenericDescriptor} from '@mediusinc/mng-commons/filter';\nimport {ModelDescriptor} from '@mediusinc/mng-commons/model';\n\nimport {filterSetMetadataOnChange, filterSetMetadataOnDisplayChange} from '../../../helpers/filters';\nimport {FilterActiveTagEvent, FilterFormEmitEvent, FilterMetadata, FilterState} from '../../../models/filter.model';\nimport {TableDataService} from '../../../services/table-data.service';\nimport {COMMONS_TABLE_FEATURE_CONFIG_IT} from '../../../services/table-feature-config.token';\nimport {TableFilterActiveTagComponent} from '../filter-active-tag/filter-active-tag.component';\nimport {TableFilterFormComponent} from '../filter-form/filter-form.component';\n\n@Component({\n standalone: true,\n selector: 'mng-table-filter-overlay-with-tag',\n templateUrl: './filter-overlay-with-tag.component.html',\n styleUrls: ['./filter-overlay-with-tag.component.scss'],\n imports: [\n OverlayPanelModule,\n TranslateModule,\n TagModule,\n TableFilterFormComponent,\n Button,\n TableFilterActiveTagComponent,\n NgTemplateOutlet,\n InputTextModule,\n PaginatorModule,\n NgClass,\n ToggleButtonModule,\n InputGroupModule,\n InputGroupAddonModule,\n CheckboxModule,\n NgStyle\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableFilterOverlayWithTagComponent {\n private static readonly SEARCH_WORD_LIMIT_MAX = 4;\n\n private readonly primeTable = inject(Table);\n private readonly tableData = inject(TableDataService<any>);\n private readonly tableConfig = inject(COMMONS_TABLE_FEATURE_CONFIG_IT, {optional: true});\n\n public metadata = input.required<FilterMetadata[]>();\n public genericFilterDescriptor = input<FilterGenericDescriptor>();\n public model = input.required<ModelDescriptor<any>>();\n public enableSearch = input(false, {transform: booleanAttribute});\n public search = input<{value: string; caseSensitive: boolean} | undefined>();\n public searchLimitWordMax = input<number | undefined | null>(undefined);\n public enableCaseSensitive = input(true, {transform: booleanAttribute});\n\n private filterOverlay = viewChild.required(OverlayPanel);\n private filterFormComponent = viewChild(TableFilterFormComponent);\n\n public templates = contentChildren(TemplateDirective);\n public titleTemplate: Signal<TemplateRef<any> | null> = computed(() => findTemplateByName([...this.templates()], 'title'));\n\n public filters = computed(() => {\n return this.getInitialFilters(this.tableData.filterMeta(), this.metadata());\n });\n\n public showFilterButton = computed(() => this.metadata().length > 0);\n\n public activeFilters = computed(() => {\n const filterEntry = this.filters();\n return this.metadata()\n .filter(d => {\n const filter = filterEntry[d.descriptor.property];\n return (\n filter &&\n filter.matchMode !== undefined &&\n filter.displayMatchMode !== undefined &&\n (filter.matchMode === FilterMatchMode.Exists ||\n filter.matchMode === FilterMatchMode.DoesNotExist ||\n (filter.value !== undefined && filter.displayValue !== undefined))\n );\n })\n .map(d => filterEntry[d.descriptor.property]!);\n });\n public activeFilterProperties = computed(() => this.activeFilters().map(f => f.metadata.descriptor.property));\n public filterEdit = signal<FilterState | undefined>(undefined);\n\n // global search model\n public searchValue = computed(() => this.search()?.value);\n public searchCaseSensitive = computed(() => this.search()?.caseSensitive);\n public searchWordLimitMaxError = signal(false);\n private searchWordLimitMaxCmp = computed(() => {\n const inputLimit = this.searchLimitWordMax();\n if (inputLimit !== undefined) {\n return inputLimit;\n }\n return this.tableConfig?.searchLimitMaxWords !== undefined ? this.tableConfig?.searchLimitMaxWords : TableFilterOverlayWithTagComponent.SEARCH_WORD_LIMIT_MAX;\n });\n private searchValueSubject = new BehaviorSubject<string | undefined>(undefined);\n private searchCaseSensitiveSubject = new BehaviorSubject<boolean | undefined>(undefined);\n\n // UI utilities\n private clickedOnFilterEvent: {event?: Event; filter?: FilterState} | undefined = undefined;\n\n constructor() {\n combineLatest([this.searchValueSubject.pipe(debounceTime(500), distinctUntilChanged()), this.searchCaseSensitiveSubject])\n // NOTE: skip is used to ignore propagating the initial value of the subjects\n .pipe(skip(1), takeUntilDestroyed())\n .subscribe(([value, caseSensitive]) => {\n this.updatePrimeTableGlobalFilter(\n value == null ? (this.search()?.value ?? '') : value,\n caseSensitive == null ? (this.search()?.caseSensitive ?? undefined) : caseSensitive\n );\n });\n }\n\n onFilterFormApply(event: FilterFormEmitEvent) {\n const filterMetadata = this.metadata().find(d => d.descriptor.property === event.property);\n if (!filterMetadata) {\n return;\n }\n\n const filterData: FilterState = {\n ...filterSetMetadataOnDisplayChange(\n {caseSensitive: event.caseSensitive},\n event.matchMode,\n event.value,\n filterMetadata.descriptor.filterType,\n filterMetadata.dateConfig\n ),\n metadata: filterMetadata\n };\n\n this.updatePrimeTableFilter(filterData);\n\n // this keeps the UI updated properly before closing the overlay\n this.filterEdit.set(filterData);\n\n // Resetting the form is done in the onOverlayHide callback because resetting the\n // values here renders empty inputs for a split second before closing the overlay\n this.filterOverlay().hide();\n }\n\n onFilterRemove(event: FilterActiveTagEvent) {\n this.updatePrimeTableFilter({\n ...this.filters()[event.filter.metadata.descriptor.property],\n matchMode: undefined,\n displayMatchMode: undefined,\n value: undefined,\n displayValue: undefined\n });\n }\n\n onFilterEdit(event: FilterActiveTagEvent) {\n this.onFilterAddOrEdit(event.filter, event.event);\n }\n\n onFilterAdd(event: Event) {\n this.onFilterAddOrEdit(undefined, event);\n }\n\n onSearchChange(value: string): void {\n const searchWordLimitMax = this.searchWordLimitMaxCmp();\n if (searchWordLimitMax !== null) {\n const wordCount = value.split(/\\s+/).filter(word => word.length > 0).length;\n this.searchWordLimitMaxError.set(wordCount > searchWordLimitMax);\n } else {\n this.searchWordLimitMaxError.set(false);\n }\n\n if (!this.searchWordLimitMaxError()) {\n this.searchValueSubject.next(value);\n }\n }\n\n onSearchCaseSensitiveChange(value: boolean) {\n this.searchCaseSensitiveSubject.next(value);\n }\n\n onOverlayHide() {\n // resetting the form is done here for a smoother animation\n if (this.filterFormComponent !== undefined) {\n this.filterFormComponent()?.resetForm();\n }\n\n if (this.clickedOnFilterEvent) {\n // show the overlay again if the user clicked another filter\n setTimeout(() => {\n this.filterEdit.set(this.clickedOnFilterEvent?.filter);\n this.filterOverlay().show(this.clickedOnFilterEvent?.event);\n this.clickedOnFilterEvent = undefined;\n }, 0);\n return;\n } else {\n // clean state\n this.filterEdit.set(undefined);\n }\n }\n\n private onFilterAddOrEdit(filter?: FilterState, event?: Event) {\n // If user clicks on the same filter or add that is already open, close the overlay\n if (this.filterOverlay().overlayVisible && this.filterEdit()?.metadata.descriptor.property === filter?.metadata.descriptor.property) {\n this.filterOverlay().hide();\n return;\n }\n\n if (this.filterOverlay().overlayVisible) {\n // In case the user clicks another filter, 're-showing' the overlay in\n // the new position is done in the onOverlayHide callback\n this.clickedOnFilterEvent = {event, filter};\n this.filterOverlay().hide();\n } else {\n this.filterEdit.set(filter);\n this.filterOverlay().show(event);\n }\n }\n\n private getInitialFilters(filtersInit: Record<string, CommonsFilterMetadata> | undefined, metadata: FilterMetadata[]) {\n const filtersResult: {[p: string]: FilterState} = {};\n\n if (filtersInit) {\n for (const property in filtersInit) {\n const filterInit = filtersInit[property];\n\n const filterMetadata = metadata.find(m => m.descriptor.property === property);\n if (!filterMetadata) {\n continue;\n }\n\n filtersResult[property] = {\n ...filterSetMetadataOnChange(filterInit, filterInit.matchMode, filterInit.value, filterMetadata.descriptor.filterType, filterMetadata.dateConfig),\n metadata: filterMetadata\n };\n }\n }\n\n return filtersResult;\n }\n\n private updatePrimeTableFilter(filter: FilterState) {\n this.primeTable.filters[filter.metadata.descriptor.property] = {...filter};\n this.primeTable._filter();\n }\n\n private updatePrimeTableGlobalFilter(searchQuery: string | null, caseSensitive = false) {\n // match mode needs to be set for inline search\n this.primeTable.filters['global'] = {...{value: searchQuery, matchMode: 'contains', caseSensitive: caseSensitive}};\n this.primeTable._filter();\n }\n}\n","<div class=\"flex align-items-center flex-grow-1\">\n @if (titleTemplate()) {\n <ng-container *ngTemplateOutlet=\"titleTemplate()\"></ng-container>\n }\n @if (showFilterButton()) {\n <p-button\n icon=\"pi pi-filter\"\n rounded=\"true\"\n [severity]=\"activeFilters().length > 0 ? 'primary' : 'secondary'\"\n size=\"small\"\n (click)=\"onFilterAdd($event)\"\n [styleClass]=\"'my-1 mr-2' + (titleTemplate() ? ' ml-3' : '')\">\n </p-button>\n }\n @if (enableSearch()) {\n <div class=\"col-4\" [ngClass]=\"{'ml-3': !showFilterButton() && titleTemplate()}\">\n <span class=\"p-input-icon-left w-full\">\n <i class=\"pi pi-search\"></i>\n <input\n [ngModel]=\"searchValue()\"\n (ngModelChange)=\"onSearchChange($event)\"\n name=\"globalSearch\"\n type=\"text\"\n pInputText\n class=\"search-input w-full\"\n [ngClass]=\"{'ng-invalid': searchWordLimitMaxError()}\"\n [attr.placeholder]=\"'mngFilter.search.input' | translate\"\n [placeholder]=\"'mngFilter.search.input' | translate\" />\n @if (enableCaseSensitive()) {\n <span class=\"toggle-button-input\">\n <p-toggleButton\n styleClass=\"ml-1 p-1 p-button-sm\"\n [ngModel]=\"searchCaseSensitive()\"\n (ngModelChange)=\"onSearchCaseSensitiveChange($event)\"\n onLabel=\"Aa\"\n offLabel=\"Aa\" />\n </span>\n }\n </span>\n @if (searchWordLimitMaxError()) {\n <small class=\"p-error block\">\n {{ 'mngFilter.search.maxWordsExceededMessage' | translate }}\n </small>\n }\n </div>\n }\n</div>\n@if (activeFilters().length > 0) {\n <div class=\"flex align-items-center flex-wrap mt-2\">\n @for (filter of activeFilters(); track filter.metadata.descriptor.property) {\n <mng-table-filter-active-tag [model]=\"model()\" [filter]=\"filter\" (edit)=\"onFilterEdit($event)\" (remove)=\"onFilterRemove($event)\" />\n }\n </div>\n}\n<p-overlayPanel #op [showCloseIcon]=\"true\" (onHide)=\"onOverlayHide()\" appendTo=\"body\">\n <mng-table-filter-form\n [model]=\"model()\"\n [metadata]=\"metadata()\"\n [genericDescriptor]=\"genericFilterDescriptor()\"\n [filter]=\"filterEdit()\"\n [disabledProperties]=\"activeFilterProperties()\"\n [propertySearch]=\"genericFilterDescriptor()?.propertySearch\"\n [overlay]=\"op\"\n [enableCaseSensitive]=\"enableCaseSensitive()\"\n (apply)=\"onFilterFormApply($event)\" />\n</p-overlayPanel>\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","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","/**\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 {Injectable, computed, inject, signal} from '@angular/core';\nimport {Router} from '@angular/router';\n\nimport {MultiSelectChangeEvent} from 'primeng/multiselect';\nimport {TableColumnReorderEvent} from 'primeng/table';\n\nimport {CommonsStorageService} from '@mediusinc/mng-commons/core';\nimport {FilterDisplayTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {TableLayoutPreferences} from '@mediusinc/mng-commons/table/api';\n\nimport {generateTableLayoutPrefsKey} from '../helpers/table-layout-prefs';\nimport {ColumnWithPreferences} from '../models/column-preferences.model';\nimport {TableMetadataService} from './table-metadata.service';\n\n@Injectable()\nexport class TablePreferencesService {\n readonly #router = inject(Router);\n readonly #storageService = inject(CommonsStorageService);\n readonly #metadata = inject(TableMetadataService);\n\n readonly localstorageKey = computed(() => {\n const descriptor = this.#metadata.descriptor();\n return descriptor.model.i18nBaseKey ? generateTableLayoutPrefsKey(descriptor.model.i18nBaseKey, this.#router.url, descriptor.identifier) : null;\n });\n readonly #layoutPrefsSaveCnt = signal(0);\n readonly 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.#storageService.getItem<TableLayoutPreferences>(TableMetadataService.cmpTypeName, lsKey) : undefined;\n return layoutPrefs ?? {columnWidths: {}};\n });\n\n // columns\n columnsWithPrefs = computed<ColumnWithPreferences[]>(() => this.#computeColumnsWithLayout());\n\n /**\n * Method is called on column resize\n * @param element event's element\n */\n public onColumnResize({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.columnsWithPrefs().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 onColumnToggle(event: MultiSelectChangeEvent) {\n const layoutPrefs = this.layoutPreferences();\n const selectedColumns = (event.value as ColumnWithPreferences[]).map(v => v.descriptor.property);\n layoutPrefs.columnHidden = this.columnsWithPrefs()\n .filter(c => selectedColumns.indexOf(c.descriptor.property) < 0)\n .map(c => c.descriptor.property);\n this.#saveLayoutPreferences(layoutPrefs, true);\n }\n\n onColumnToggleAll() {\n const layoutPrefs = this.layoutPreferences();\n const columns = [...this.columnsWithPrefs()];\n const isVisible = !this.columnsWithPrefs().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 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.columnsWithPrefs().filter(c => c.isVisible);\n const colAtDrop = prevVisibleColumns[eventDropIndex];\n const colAtDrag = prevVisibleColumns[eventDragIndex];\n const colAtDropIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrop.id);\n const colAtDragIndex = this.columnsWithPrefs().findIndex(el => el.id === colAtDrag.id);\n\n if (colAtDropIndex > -1 && colAtDragIndex > -1) {\n let columns = [...this.columnsWithPrefs()];\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 /**\n * Reset column order and column visibility to default settings\n */\n clearLayoutPreferences() {\n const key = this.localstorageKey();\n if (key) {\n this.#storageService.removeItem(TableMetadataService.cmpTypeName, key);\n this.#layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n\n #saveLayoutPreferences(layoutPrefs: TableLayoutPreferences, forceUpdate = false) {\n const key = this.localstorageKey();\n if (key) {\n this.#storageService.setItem(TableMetadataService.cmpTypeName, key, layoutPrefs);\n if (forceUpdate) {\n this.#layoutPrefsSaveCnt.update(v => v + 1);\n }\n }\n }\n\n #computeColumnsWithLayout() {\n const descriptor = this.#metadata.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: this.#metadata\n .filters()\n .find(\n f =>\n f.descriptor.showOnColumn === col.property &&\n ((f.descriptor.displayType == null && this.#metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.Column) ||\n f.descriptor.displayType === FilterDisplayTypeEnum.Column)\n ),\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","import {NgClass, NgStyle, NgTemplateOutlet} from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n Signal,\n TemplateRef,\n Type,\n afterNextRender,\n booleanAttribute,\n computed,\n contentChildren,\n inject,\n input,\n output,\n signal,\n viewChild,\n viewChildren\n} from '@angular/core';\nimport {outputFromObservable, takeUntilDestroyed, 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 {MessageService} from 'primeng/api';\nimport {ButtonModule} from 'primeng/button';\nimport {MultiSelectModule} from 'primeng/multiselect';\nimport {Table, TableFilterEvent, TableLazyLoadEvent, TableModule, TableRowReorderEvent} from 'primeng/table';\nimport {TooltipModule} from 'primeng/tooltip';\nimport {NEVER, Subject, filter, of, switchMap} from 'rxjs';\n\nimport {\n ClassMapPipe,\n ComponentDirective,\n DataListParams,\n DataListResult,\n I18nPropertyPipe,\n LoggerService,\n TemplateDirective,\n booleanOrUndefinedAttribute,\n dataListParamsToUrlQuery,\n effectWithDeps,\n findTemplateByName,\n fromSubscribeError,\n fromTableLoadToDataListParams,\n fromUrlQueryToDataListParams,\n getErrorLogLevel,\n mergeDataListParamsWithDefaults\n} from '@mediusinc/mng-commons/core';\nimport {FilterDisplayTypeEnum} from '@mediusinc/mng-commons/filter';\nimport {\n ColumnDescriptor,\n ITableDataProvider,\n TableCellClickEvent,\n TableDescriptorInst,\n TableLoadEvent,\n TablePaginationModeEnum,\n TableReloadEvent,\n TableSizeEnum\n} from '@mediusinc/mng-commons/table/api';\n\nimport {tableNotificationError} from '../../helpers/notification';\nimport {LocaleDefaultRowClassPipe} from '../../pipes/locale-default-row-class.pipe';\nimport {TableColumnFilterClassPipe} from '../../pipes/table-column-filter-class.pipe';\nimport {TableDataService} from '../../services/table-data.service';\nimport {TableMetadataService} from '../../services/table-metadata.service';\nimport {TablePreferencesService} from '../../services/table-preferences.service';\nimport {TableColumnFilterComponent} from '../column-filter/column-filter.component';\nimport {TableColumnValueComponent} from '../column-value/column-value.component';\nimport {TableFilterOverlayWithTagComponent} from '../filter/filter-overlay-with-tag/filter-overlay-with-tag.component';\n\n@Component({\n standalone: true,\n selector: 'mng-table',\n templateUrl: './table.component.html',\n imports: [\n ComponentDirective,\n I18nPropertyPipe,\n NgClass,\n NgStyle,\n NgTemplateOutlet,\n TableColumnValueComponent,\n ClassMapPipe,\n LocaleDefaultRowClassPipe,\n TableColumnFilterComponent,\n TableColumnFilterClassPipe,\n TableModule,\n MultiSelectModule,\n ButtonModule,\n TooltipModule,\n TranslateModule,\n TableFilterOverlayWithTagComponent,\n FormsModule,\n TemplateDirective\n ],\n providers: [TableMetadataService, TableDataService, TablePreferencesService],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class TableComponent<Item = any, Service = undefined, Sorts = any, Filters extends keyof any = any> {\n private readonly filterKeyPrepend = 'f_';\n\n private readonly logger = inject(LoggerService).create(TableMetadataService.cmpTypeName);\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 public readonly metadata = inject(TableMetadataService);\n public readonly prefs = inject(TablePreferencesService);\n public readonly data = inject(TableDataService<Item>);\n\n // descriptor\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 useQueryParams = input(false, {transform: booleanAttribute});\n public cellClickEnabled = input(true, {transform: booleanAttribute});\n public selectionMode = input<'single' | 'multiple'>('multiple');\n public selectionEnabled = input(false, {transform: booleanAttribute});\n public rowReorderEnabledInput = input(true, {alias: 'rowReorderEnabled', transform: booleanAttribute});\n public rowReorderEnabled = computed<boolean>(() => this.rowReorderEnabledInput() && this.metadata.descriptor().rowReorderable);\n public expandedRowKeys = computed(() => {\n const descriptor = this.metadata.descriptor();\n if (typeof descriptor.isRowExpanded === 'string') {\n return this.data.data()?.reduce((acc: {[key: string]: boolean}, item: any) => {\n acc[item[descriptor.trackProperty!]] = !!item[descriptor.isRowExpanded as string];\n return acc;\n }, {});\n } else if (typeof descriptor.isRowExpanded === 'function') {\n return this.data.data()?.reduce((acc: {[key: string]: boolean}, item: any) => {\n acc[item[descriptor.trackProperty!]] = (descriptor.isRowExpanded as (item: Item) => boolean)(item);\n return acc;\n }, {});\n }\n return {};\n });\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 public hasTitleDisplay = computed(() => this.captionTemplate() || this.captionComponent() || this.metadata.descriptor().title);\n public isCaptionVisible = computed(() => this.hasTitleDisplay() || this.overlayWithTagFilters().length > 0 || this.metadata.descriptor().search);\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(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 isLazy = computed(() => this.dataProvider()?.isLazy === true);\n public isPagination = computed(() => this.data.paginationMode() === TablePaginationModeEnum.Pagination);\n public useQueryParamsInitialized = signal(false);\n\n // visual\n public className = computed(() => {\n let className = this.metadata.descriptor().className ?? '';\n switch (this.metadata.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.metadata.descriptor().hasGridlines) {\n className += ' p-datatable-gridlines';\n }\n if (!this.isCaptionVisible()) {\n className += ' datatable-no-header';\n }\n return className;\n });\n\n // columns\n public visibleColumns = computed(() => this.prefs.columnsWithPrefs().filter(col => col.isVisible));\n public areColumnsReorderable = computed(() => this.prefs.columnsWithPrefs().some(col => col.descriptor.isReorderable));\n public areColumnsToggleable = computed(() => this.prefs.columnsWithPrefs().some(col => col.descriptor.isToggleable));\n\n // filter, sort\n public hasColumnFilters = computed(\n () =>\n (this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.OverlayWithTag &&\n this.metadata.filterDescriptors().some(d => d.displayType === FilterDisplayTypeEnum.Column)) ||\n (this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.Column && this.metadata.filterDescriptors().some(d => d.displayType == null))\n );\n public overlayWithTagFilters = computed(() => {\n // statically defined filters AND generic filters\n const filters = this.metadata\n .filters()\n .filter(\n d =>\n (d.descriptor.displayType == null && this.metadata.defaultFilterDisplayType === FilterDisplayTypeEnum.OverlayWithTag) ||\n d.descriptor.displayType === FilterDisplayTypeEnum.OverlayWithTag\n );\n\n return filters.concat(this.metadata.genericFilters());\n });\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 // table load params\n private lastLazyLoadEvent?: TableLazyLoadEvent;\n private lastParamsWithDefaults?: DataListParams;\n\n // other\n private lastQueryParams?: Params = this.route.snapshot.queryParams;\n private navigationOutOfTableInProgress = false;\n private navigationInTableInProgress = false;\n\n // subscriptions and refs\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n #dataProviderEagerFirstLoad = effectWithDeps(\n [this.dataProvider],\n ([dataProvider]) => {\n if (dataProvider?.isLazy === false) {\n this.loadTableWithDataProvider(this.metadata.defaultParams());\n }\n },\n {firstOnly: true}\n );\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n #dataProviderReloadSubscription = toObservable(this.dataProvider)\n .pipe(\n switchMap(dp => dp?.tableReload$ ?? of({})),\n takeUntilDestroyed()\n )\n .subscribe({\n next: e => {\n this.reload(e);\n }\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n #routeQueryParamsSubscription = toObservable(this.useQueryParams)\n .pipe(\n switchMap(useQp => (useQp ? this.route.queryParams : NEVER)),\n takeUntilDestroyed()\n )\n .subscribe(qp => {\n this.loadTableFromRouteUpdate(qp);\n });\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n #routerEventsSubscription = 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 takeUntilDestroyed()\n )\n .subscribe(e => {\n this.navigationOutOfTableInProgress = e instanceof NavigationStart;\n });\n #afterNextRenderRef = afterNextRender(() => {\n this.isCellClickObserved.set(this.cellClickSubject.observed);\n });\n\n constructor() {\n this.metadata.setSignalSources(this.descriptorInput, this.globalFilterFieldsInput);\n this.data.setDataSources(this.items, this.result, this.dataProvider, this.loadingInput);\n }\n\n public reload(): void;\n /**\n * @deprecated Use with `TableReloadEvent` object parameter.\n */\n public reload(emitEvent: boolean): void;\n public reload(emitEvent?: TableReloadEvent<Sorts, Filters>): void;\n /**\n * @deprecated Use with `TableReloadEvent` object parameter.\n */\n public reload(emitEvent: boolean, resetParams: boolean): void;\n public reload(emitEventOrEvent: boolean | TableReloadEvent<Sorts, Filters> = false, resetParamsParam = false) {\n const emitEvent = typeof emitEventOrEvent === 'boolean' ? emitEventOrEvent : (emitEventOrEvent?.emitEvent ?? false);\n const resetParams = typeof emitEventOrEvent === 'object' ? emitEventOrEvent?.resetParams : resetParamsParam;\n const params =\n typeof emitEventOrEvent === 'object' && emitEventOrEvent?.params ? (emitEventOrEvent?.params as DataListParams) : resetParams ? undefined : this.lastParamsWithDefaults;\n const reloadParams = mergeDataListParamsWithDefaults(params ?? {}, this.metadata.defaultParams());\n this.loadTableWithDataProvider(reloadParams, emitEvent);\n }\n\n public onTableLazyLoad(event: TableLazyLoadEvent) {\n this.lastLazyLoadEvent = event;\n\n const params = fromTableLoadToDataListParams(event);\n\n if (this.useQueryParams()) {\n if (!this.navigationOutOfTableInProgress && !this.navigationInTableInProgress) {\n // this check is necessary: from some reason, primeNG commits one last lazy load event whenever any angular router navigation occurs\n this.navigationInTableInProgress = true;\n const newParams = dataListParamsToUrlQuery(params, this.metadata.defaultParams(), {prependFilterName: this.filterKeyPrepend});\n const newParamsWithParamsToRemove = {...newParams};\n if (this.lastQueryParams) {\n Object.keys(this.lastQueryParams)\n .filter(k => (k.startsWith(this.filterKeyPrepend) || ['offset', 'limit', 'sort', 'q'].indexOf(k) >= 0) && newParams[k] === undefined)\n .forEach(k => (newParamsWithParamsToRemove[k] = null));\n }\n\n this.router\n .navigate([], {\n relativeTo: this.route,\n replaceUrl: true,\n queryParams: newParamsWithParamsToRemove,\n queryParamsHandling: 'merge'\n })\n .then(res => {\n this.navigationInTableInProgress = false;\n if (res) {\n this.lastQueryParams = newParams;\n }\n });\n }\n } else {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.metadata.defaultParams());\n this.data.setParams(paramsWithDefaults);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n }\n\n public onTableFilter(event: TableFilterEvent) {\n if (this.useQueryParams()) {\n return;\n }\n const params = fromTableLoadToDataListParams({filters: event.filters});\n const paramsWithDefaults = mergeDataListParamsWithDefaults(params, this.metadata.defaultParams());\n\n // if table doesn't use lazy loading, filter params need to be set here\n // because the onTableLazyLoad event is not emitted\n if (!this.isLazy()) {\n this.data.setParams(paramsWithDefaults);\n }\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 private loadTableWithDataProvider(paramsWithDefaults: DataListParams, emitEvent = true) {\n const isFetched = this.data.fetchWithDataProvider(paramsWithDefaults, error => {\n tableNotificationError(this.translate, this.metadata.descriptor(), error, this.messageService);\n const commonsError = fromSubscribeError(error, 'TableComponentError', {\n params: paramsWithDefaults\n });\n this.logger.log(commonsError, getErrorLogLevel(commonsError));\n });\n\n if (isFetched) {\n this.lastParamsWithDefaults = paramsWithDefaults;\n if (emitEvent) {\n const tableEvent: TableLoadEvent = {\n originalEvent: this.lastLazyLoadEvent,\n params: paramsWithDefaults\n };\n this.tableLoad.emit(tableEvent);\n }\n }\n }\n\n private loadTableFromRouteUpdate(urlParams: Params) {\n const paramsWithDefaults = mergeDataListParamsWithDefaults(\n fromUrlQueryToDataListParams(urlParams, {\n prependFilterName: this.filterKeyPrepend,\n searchAsGlobal: true\n }),\n this.metadata.defaultParams()\n );\n this.data.setParams(paramsWithDefaults, true);\n this.loadTableWithDataProvider(paramsWithDefaults);\n }\n}\n","<div>\n <!-- MUST NOT use observable for value when using virtual scroll - does not work for some reason -->\n @if (data.isAllPaginationMetaInitialized()) {\n <p-table\n [value]=\"data.data()\"\n [dataKey]=\"metadata.descriptor().trackProperty\"\n [lazy]=\"isLazy()\"\n [loading]=\"data.loading()\"\n [paginator]=\"isPagination()\"\n [rows]=\"data.rows()\"\n [first]=\"data.offset()\"\n [totalRecords]=\"data.count()\"\n [rowsPerPageOptions]=\"metadata.rowsPerPageOptions()\"\n [showCurrentPageReport]=\"true\"\n [currentPageReportTemplate]=\"'mngTable.paginationMsg' | translate\"\n [multiSortMeta]=\"data.sortMeta()\"\n [filters]=\"data.filterMeta()\"\n [globalFilterFields]=\"metadata.searchFields()\"\n sortMode=\"multiple\"\n [selection]=\"[]\"\n (selectionChange)=\"onSelectionChange($event)\"\n [selectionMode]=\"selectionEnabled() ? selectionMode() : null\"\n [scrollable]=\"true\"\n scrollHeight=\"flex\"\n [rowHover]=\"metadata.descriptor().hasHover\"\n [styleClass]=\"className()\"\n [resizableColumns]=\"metadata.descriptor().hasResizableColumns\"\n [columnResizeMode]=\"metadata.descriptor().columnResizeMode ?? 'expand'\"\n [reorderableColumns]=\"areColumnsReorderable()\"\n paginatorDropdownAppendTo=\"body\"\n [columns]=\"visibleColumns()\"\n [expandedRowKeys]=\"expandedRowKeys()\"\n (onColResize)=\"prefs.onColumnResize($event)\"\n (onColReorder)=\"prefs.onColumnReorder($event)\"\n (onLazyLoad)=\"onTableLazyLoad($event)\"\n (onFilter)=\"onTableFilter($event)\"\n (onRowReorder)=\"onRowReorder($event)\">\n <ng-template pTemplate=\"caption\">\n @if (isCaptionVisible()) {\n <div class=\"table-header\">\n @if (overlayWithTagFilters().length > 0 || metadata.descriptor().search) {\n <mng-table-filter-overlay-with-tag\n [title]=\"metadata.descriptor().title\"\n [metadata]=\"overlayWithTagFilters()\"\n [genericFilterDescriptor]=\"metadata.genericFilterDescriptor()\"\n [model]=\"metadata.descriptor().model\"\n [enableSearch]=\"metadata.descriptor().search\"\n [search]=\"data.searchMeta()\"\n [searchLimitWordMax]=\"metadata.descriptor().searchLimitMaxWords\"\n [enableCaseSensitive]=\"isLazy()\">\n @if (hasTitleDisplay()) {\n <ng-template mngTemplate=\"title\">\n <ng-container *ngTemplateOutlet=\"captionTemplateOrComponentOrTitle\"></ng-container>\n </ng-template>\n }\n </mng-table-filter-overlay-with-tag>\n } @else {\n <ng-container *ngTemplateOutlet=\"captionTemplateOrComponentOrTitle\"></ng-container>\n }\n <ng-template #captionTemplateOrComponentOrTitle>\n @if (captionTemplate()) {\n <ng-container *ngTemplateOutlet=\"captionTemplate()\"></ng-container>\n } @else if (captionComponent()) {\n <ng-container [mngComponent]=\"captionComponent()\" (instanceCreated)=\"captionComponentInstance.emit($event)\"></ng-container>\n } @else if (metadata.descriptor().title) {\n <h5 class=\"p-0 m-0\">{{ metadata.descriptor().title! | translate }}</h5>\n }\n </ng-template>\n </div>\n }\n </ng-template>\n <ng-template pTemplate=\"header\">\n @if (!metadata.descriptor().hideHeader) {\n <tr class=\"mng-table-header\" [class]=\"metadata.descriptor().headerClassName\">\n @if (selectionEnabled()) {\n @if (selectionMode() === 'multiple') {\n <th style=\"min-width: 36px\" pFrozenColumn [frozen]=\"metadata.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]=\"metadata.descriptor().selectionColumnFrozen ?? true\"></th>\n }\n }\n @if (metadata.descriptor().rowExpandable) {\n <th scope=\"col\" 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: metadata.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: metadata.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?.descriptor : 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?.descriptor : 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]=\"metadata.descriptor().actionColumnFrozen ?? areColumnsToggleable()\"\n alignFrozen=\"right\"\n class=\"column-custom-last text-right\">\n @if (areColumnsToggleable()) {\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]=\"prefs.columnsWithPrefs()\"\n [ngModel]=\"visibleColumns()\"\n [pTooltip]=\"'mngTable.adjustTable' | translate\"\n [displaySelectedLabel]=\"false\"\n (onChange)=\"prefs.onColumnToggle($event)\">\n <ng-template pTemplate=\"filter\">\n <div class=\"p-checkbox p-component ml-1\">\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 </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)=\"prefs.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)=\"prefs.clearLayoutPreferences()\"></p-button>\n </ng-template>\n <ng-template let-item pTemplate=\"item\">\n {{ item.descriptor.title ?? (item.descriptor.property | mngI18nProperty: metadata.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]=\"metadata.descriptor().selectionColumnFrozen ?? true\"></th>\n }\n @if (rowReorderEnabled()) {\n <th scope=\"col\"></th>\n }\n @if (metadata.descriptor().rowExpandable) {\n <th scope=\"col\"></th>\n }\n @for (col of visibleColumns(); track col.id) {\n <th\n [class]=\"col.filter?.descriptor?.columnClassName | mngTableColumnFilterClass: col.filter?.descriptor : hasColumnFilters() && !col.width\"\n [style.width.px]=\"col.width\"\n [style.width.%]=\"col.width ? null : (col.filter?.descriptor?.columnWidth ?? col.descriptor.width ?? null)\"\n [style.min-width.px]=\"col.width ? null : (col.filter?.descriptor?.columnMinWidth ?? col.descriptor.minWidth)\"\n [style.max-width.px]=\"col.width ?? col.descriptor.maxWidth\">\n @if (col.filter) {\n <mng-table-column-filter [metadata]=\"col.filter\"></mng-table-column-filter>\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 [pReorderableRow]=\"idx\"\n [ngClass]=\"\n metadata.descriptor().rowClassName | mngClassMap: metadata.descriptor().rowClassNameMapFn : item | mngLocaleDefaultRowClass: metadata.descriptor() : item\n \">\n @if (selectionEnabled()) {\n @if (selectionMode() === 'multiple') {\n <td style=\"min-width: 36px\" pFrozenColumn [frozen]=\"metadata.descriptor().selectionColumnFrozen ?? true\">\n <p-tableCheckbox [value]=\"item\"></p-tableCheckbox>\n </td>\n } @else {\n <td style=\"min-width: 36px\" pFrozenColumn [frozen]=\"metadata.descriptor().selectionColumnFrozen ?? true\">\n <p-tableRadioButton [value]=\"item\"></p-tableRadioButton>\n </td>\n }\n }\n @if (metadata.descriptor().rowExpandable) {\n <td>\n @if (!metadata.descriptor().rowExpandableProperty || item[metadata.descriptor().rowExpandableProperty!]) {\n <button\n pButton\n type=\"button\"\n [pRowToggler]=\"item\"\n class=\"p-button-text p-button-rounded p-button-plain mng-table-row-expand-button\"\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?.descriptor : 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: metadata.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]=\"metadata.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 <ng-template pTemplate=\"rowexpansion\" let-item>\n @if (metadata.descriptor().rowExpandable) {\n <tr>\n <td></td>\n <td [colSpan]=\"metadata.descriptor().rowExpandableColSpan\">\n @if (metadata.descriptor().rowExpandableComponentType !== undefined) {\n <ng-container [mngComponent]=\"metadata.descriptor().rowExpandableComponentType\" [inputs]=\"{item}\"> </ng-container>\n } @else {\n <ng-container *ngTemplateOutlet=\"rowExpandTemplate(); context: {rowItem: item}\"></ng-container>\n }\n </td>\n </tr>\n }\n </ng-template>\n <ng-template pTemplate=\"loadingicon\">\n <div class=\"flex flex-column align-items-center\">\n @if (metadata.descriptor().loadingIcon) {\n <i [class]=\"'text-white text-4xl pi-spin ' + metadata.descriptor().loadingIcon\"></i>\n }\n @if (metadata.descriptor().loadingText) {\n <div class=\"text text-white text-lg font-semibold\" [ngClass]=\"{'mt-3': metadata.descriptor().loadingIcon}\">\n {{ metadata.descriptor().loadingText ?? '' | translate }}\n </div>\n }\n </div>\n </ng-template>\n <ng-template pTemplate=\"loadingbody\">\n <tr>\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>\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: data.data(), totalCount: data.count()}\"></ng-container>\n </ng-template>\n }\n </p-table>\n }\n</div>\n","import {CommonsFeature, CommonsFeatureTypeEnum} from '@mediusinc/mng-commons/core';\n\nimport {COMMONS_TABLE_FEATURE_CONFIG_IT, TableFeatureConfig} from './services/table-feature-config.token';\n\n/**\n * Prepares providers for usage of the tableview functionalities.\n *\n * @returns {CommonsFeature} The `CommonsFeature` object with the layout configuration.\n */\nexport function withTable(config?: TableFeatureConfig): CommonsFeature {\n return {\n type: CommonsFeatureTypeEnum.Table,\n providers: [\n {\n provide: COMMONS_TABLE_FEATURE_CONFIG_IT,\n useValue: config\n }\n ]\n };\n}\n","// components\nexport * from './components/column-filter/column-filter.component';\nexport * from './components/column-value/column-value.component';\nexport * from './components/filter/filter-active-tag/filter-active-tag.component';\nexport * from './components/filter/filter-form/filter-form.component';\nexport * from './components/filter/filter-overlay-with-tag/filter-overlay-with-tag.component';\nexport * from './components/table/table.component';\n\n// helpers\nexport * from './helpers/filters';\nexport * from './helpers/notification';\nexport * from './helpers/table-layout-prefs';\n\n// models\nexport * from './models/column-preferences.model';\nexport * from './models/filter.model';\n\n// pipes\nexport * from './pipes/filter-value.pipe';\nexport * from './pipes/locale-default-row-class.pipe';\nexport * from './pipes/table-column-filter-class.pipe';\n\n// services\nexport * from './services/table-data.service';\nexport * from './services/table-feature-config.token';\n\n// provide\nexport * from './provide';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["commonsToObservable","i1","i3","i2","i4","i5","i8","i6","i7"],"mappings":"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"}
|