diff --git a/libs/platform/table-helpers/interfaces/collection-filter.interface.ts b/libs/platform/table-helpers/interfaces/collection-filter.interface.ts index d71851b69c1..4eb9aee1824 100644 --- a/libs/platform/table-helpers/interfaces/collection-filter.interface.ts +++ b/libs/platform/table-helpers/interfaces/collection-filter.interface.ts @@ -16,6 +16,7 @@ export interface BaseCollectionFilter { value2?: Nullable; exclude?: boolean; strategy?: FilterStrategy; + fieldName?: string; } export interface CollectionStringFilter extends BaseCollectionFilter { strategy: FilterStringStrategy; diff --git a/libs/platform/table-helpers/services/table.service.spec.ts b/libs/platform/table-helpers/services/table.service.spec.ts index c74432faecd..e0d710ef683 100644 --- a/libs/platform/table-helpers/services/table.service.spec.ts +++ b/libs/platform/table-helpers/services/table.service.spec.ts @@ -72,7 +72,7 @@ describe('TableServiceService', () => { const setTableStateSpy = jest.spyOn(service, 'setTableState'); const filterChangeSpy = jest.spyOn(service.filterChange$, 'next'); const newFilterBy: CollectionStringFilter[] = [ - { field: 'name', value: 'Product name', strategy: FILTER_STRING_STRATEGY.CONTAINS } + { field: 'name', value: 'Product name', fieldName: 'name', strategy: FILTER_STRING_STRATEGY.CONTAINS } ]; const newState: TableState = { ...DEFAULT_TABLE_STATE, filterBy: newFilterBy }; const event: FilterChange = { current: newFilterBy, previous: DEFAULT_TABLE_STATE.filterBy }; diff --git a/libs/platform/table-helpers/services/table.service.ts b/libs/platform/table-helpers/services/table.service.ts index 7ff1be0f080..22cefcc8ceb 100644 --- a/libs/platform/table-helpers/services/table.service.ts +++ b/libs/platform/table-helpers/services/table.service.ts @@ -6,6 +6,7 @@ import { skip } from 'rxjs/operators'; import { DEFAULT_TABLE_STATE } from '../constants'; import { toSignal } from '@angular/core/rxjs-interop'; +import { Nullable } from '@fundamental-ngx/cdk/utils'; import { CollectionFilter, CollectionGroup, CollectionPage, CollectionSort, TableState } from '../interfaces'; import { ColumnsChange, @@ -188,7 +189,12 @@ export class TableService { const prevState = this.getTableState(); const prevFilterRules = (prevState && prevState.filterBy) || []; - const newFilterRules: CollectionFilter[] = filterRules ? [...filterRules] : []; + const newFilterRules: CollectionFilter[] = filterRules + ? filterRules.map((rule) => ({ + ...rule, + fieldName: this._getFieldName(rule.field, rule.fieldName) + })) + : []; const state: TableState = { ...prevState, filterBy: newFilterRules }; if (!equal(prevFilterRules, state.filterBy)) { @@ -209,7 +215,10 @@ export class TableService { const newFilterRules: CollectionFilter[] = [ ...prevFilterRules.filter((existing) => !rulesToAdd.find(({ field }) => field === existing.field)), - ...rulesToAdd + ...rulesToAdd.map((rule) => ({ + ...rule, + fieldName: this._getFieldName(rule.field, rule.fieldName) + })) ]; const state: TableState = { ...prevState, filterBy: newFilterRules }; @@ -427,9 +436,12 @@ export class TableService { */ buildFilterRulesMap(state = this.getTableState()): void { const prevState = this.getTableState(); - const evt = { current: state.filterBy, previous: prevState.filterBy }; + const filterRulesWithFieldNames = state.filterBy.map((rule) => ({ + ...rule, + fieldName: this._getFieldName(rule.field, rule.fieldName) + })); this.filterRules$.set( - state.filterBy.reduce((hash, rule) => { + filterRulesWithFieldNames.reduce((hash, rule) => { const key = rule.field; if (!hash.has(key)) { hash.set(key, []); @@ -438,6 +450,8 @@ export class TableService { return hash; }, new Map()) ); + const evt = { current: filterRulesWithFieldNames, previous: state.filterBy }; + this.stateChange$.next({ type: 'filter', state: evt }); } @@ -468,6 +482,12 @@ export class TableService { this.buildSortRulesMap(); this.buildFilterRulesMap(); } + + /** @hidden */ + private _getFieldName(field: string, fieldName: Nullable): string { + const column = this.tableColumns$.getValue().find((col) => col.key === field); + return column ? column.name : fieldName ?? field; + } } /** @hidden */ diff --git a/libs/platform/table/components/table-toolbar/table-toolbar.component.html b/libs/platform/table/components/table-toolbar/table-toolbar.component.html index 639c58ac874..00722c42339 100644 --- a/libs/platform/table/components/table-toolbar/table-toolbar.component.html +++ b/libs/platform/table/components/table-toolbar/table-toolbar.component.html @@ -161,6 +161,7 @@ @if (appliedFilters().length) {