diff --git a/projects/netgrif-components-core/src/lib/navigation/utility/filter-extraction.service.ts b/projects/netgrif-components-core/src/lib/navigation/utility/filter-extraction.service.ts index 6e24bb02a..462eb3257 100644 --- a/projects/netgrif-components-core/src/lib/navigation/utility/filter-extraction.service.ts +++ b/projects/netgrif-components-core/src/lib/navigation/utility/filter-extraction.service.ts @@ -60,7 +60,8 @@ export class FilterExtractionService { return this.extractCompleteFilterFromData(dataSection.slice(taskRefIndex.dataGroupIndex + 1), activatedRoute); } - public extractCompleteFilterFromData(dataSection?: Array, activatedRoute?: ActivatedRoute, fieldId: string = UserFilterConstants.FILTER_FIELD_ID): Filter | undefined { + public extractCompleteFilterFromData(dataSection?: Array, activatedRoute?: ActivatedRoute, filterData?: Filter, + fieldId: string = UserFilterConstants.FILTER_FIELD_ID): Filter | undefined { if (!dataSection) { if (!activatedRoute) { throw new Error('ActivatedRoute not provided.'); @@ -86,7 +87,11 @@ export class FilterExtractionService { throw new Error('Filter segment could not be extracted from filter field'); } - const parentFilter = this.extractCompleteFilterFromData(dataSection.slice(filterIndex.dataGroupIndex + 1), activatedRoute); + if (!!filterData) { + filterSegment = filterSegment.merge(filterData, MergeOperator.AND); + } + + const parentFilter = this.extractCompleteFilterFromData(dataSection.slice(filterIndex.dataGroupIndex + 1), activatedRoute, filterData); if (parentFilter !== undefined && parentFilter.type === filterSegment.type) { return filterSegment.merge(parentFilter, MergeOperator.AND); diff --git a/projects/netgrif-components-core/src/lib/search/search-service/search.service.ts b/projects/netgrif-components-core/src/lib/search/search-service/search.service.ts index f9d52fa94..d39a58e1b 100644 --- a/projects/netgrif-components-core/src/lib/search/search-service/search.service.ts +++ b/projects/netgrif-components-core/src/lib/search/search-service/search.service.ts @@ -304,6 +304,14 @@ export class SearchService implements OnDestroy { } } + /** + * Loads whole new filter and search cases/tasks based on this filter + * @param newFilter whole new filter that should be used for search + */ + public updateWithFullFilter(newFilter: Filter): void { + this._activeFilter.next(newFilter); + } + /** * @returns `undefined` if the predicate tree contains no complete query. * Otherwise returns the serialized form of the completed queries in the predicate tree. diff --git a/projects/netgrif-components-core/src/lib/utility/navigation-item-task-filter-factory.ts b/projects/netgrif-components-core/src/lib/utility/navigation-item-task-filter-factory.ts index 04cb38cee..320c5bbc5 100644 --- a/projects/netgrif-components-core/src/lib/utility/navigation-item-task-filter-factory.ts +++ b/projects/netgrif-components-core/src/lib/utility/navigation-item-task-filter-factory.ts @@ -1,19 +1,21 @@ import {BaseFilter} from '../search/models/base-filter'; -import {NAE_NAVIGATION_ITEM_TASK_DATA} from '../navigation/model/filter-case-injection-token'; import {DataGroup} from '../resources/interface/data-groups'; import {FilterExtractionService} from '../navigation/utility/filter-extraction.service'; import {ActivatedRoute} from '@angular/router'; +import {Filter} from '../filter/models/filter'; /** * Converts an {@link NAE_NAVIGATION_ITEM_TASK_DATA} injection token into {@link NAE_BASE_FILTER} * @param extractionService * @param activatedRoute * @param navigationItemTaskData a navigation item task containing the aggregated data representing a navigation item + * @param filterData filter data to be used and combined in view */ export function navigationItemTaskFilterFactory(extractionService: FilterExtractionService, activatedRoute?: ActivatedRoute, - navigationItemTaskData?: Array): BaseFilter { + navigationItemTaskData?: Array, + filterData?: Filter): BaseFilter { return { - filter: extractionService.extractCompleteFilterFromData(navigationItemTaskData, activatedRoute) + filter: extractionService.extractCompleteFilterFromData(navigationItemTaskData, activatedRoute, filterData) }; } diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/model/factory-methods.ts b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/model/factory-methods.ts index bdd4b58ca..08e4cb603 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/model/factory-methods.ts +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/model/factory-methods.ts @@ -21,7 +21,7 @@ import {ActivatedRoute} from '@angular/router'; export function filterCaseTabbedDataFilterFactory(extractionService: FilterExtractionService, tabData: InjectedTabbedCaseViewDataWithNavigationItemTaskData, activatedRoute: ActivatedRoute): BaseFilter { - return navigationItemTaskFilterFactory(extractionService, activatedRoute, tabData.navigationItemTaskData); + return navigationItemTaskFilterFactory(extractionService, activatedRoute, tabData.navigationItemTaskData, tabData.loadFilter); } /** diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html index 055eef094..59436a228 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.html @@ -3,7 +3,7 @@
- +
diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts index 7beb85b24..28b215221 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/refs/default-case-ref-list-view/default-case-ref-list-view.component.ts @@ -3,23 +3,32 @@ import { AbstractCaseViewComponent, AllowedNetsService, AllowedNetsServiceFactory, + BaseFilter, Case, + CaseRefField, CaseViewService, CategoryFactory, + DATA_FIELD_PORTAL_DATA, + DataFieldPortalData, defaultCaseSearchCategoriesFactory, + EnumerationField, + Filter, FilterType, + MergeOperator, + MultichoiceField, + NAE_BASE_FILTER, NAE_CASE_REF_CREATE_CASE, NAE_CASE_REF_SEARCH, - CaseRefField, NAE_SEARCH_CATEGORIES, NAE_TAB_DATA, NAE_VIEW_ID_SEGMENT, OverflowService, + SavedFilterMetadata, SearchMode, SearchService, SimpleFilter, TaskSetDataRequestFields, - ViewIdService, DATA_FIELD_PORTAL_DATA, DataFieldPortalData, MultichoiceField, EnumerationField + ViewIdService } from '@netgrif/components-core'; import {HeaderComponent} from '../../../../../header/header.component' import {DefaultTabbedTaskViewComponent} from '../../tabbed/default-tabbed-task-view/default-tabbed-task-view.component'; @@ -58,8 +67,12 @@ export class DefaultCaseRefListViewComponent extends AbstractCaseViewComponent i public search: boolean; public createCase: boolean; + private initFilter: Filter; + constructor(caseViewService: CaseViewService, + protected searchService: SearchService, @Optional() overflowService: OverflowService, + @Optional() @Inject(NAE_BASE_FILTER) protected _baseFilter: BaseFilter, @Optional() @Inject(NAE_TAB_DATA) protected _injectedTabData: InjectedTabbedTaskViewDataWithNavigationItemTaskData, @Optional() @Inject(DATA_FIELD_PORTAL_DATA) protected _dataFieldPortalData: DataFieldPortalData, @Optional() @Inject(NAE_CASE_REF_CREATE_CASE) protected _caseRefCreateCase: boolean = false, @@ -70,6 +83,16 @@ export class DefaultCaseRefListViewComponent extends AbstractCaseViewComponent i }); this.search = !!_caseRefSearch; this.createCase = !!_caseRefCreateCase; + if (!this._baseFilter || !this._baseFilter.filter) { + return; + } + if (this._baseFilter.filter instanceof Filter) { + this.initFilter = this._baseFilter.filter + } else { + this._baseFilter.filter.subscribe(observableFilter => { + this.initFilter = observableFilter; + }); + } } ngAfterViewInit(): void { @@ -120,4 +143,8 @@ export class DefaultCaseRefListViewComponent extends AbstractCaseViewComponent i createdCase(caze: Case) { this.handleCaseClick(caze); } + + loadFilter(filterData: SavedFilterMetadata) { + this.searchService.updateWithFullFilter(this.initFilter.merge(filterData.filter, MergeOperator.AND)); + } } diff --git a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/tabbed/default-tabbed-case-view/default-tabbed-case-view.component.ts b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/tabbed/default-tabbed-case-view/default-tabbed-case-view.component.ts index 5bfc166ea..207cb3458 100644 --- a/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/tabbed/default-tabbed-case-view/default-tabbed-case-view.component.ts +++ b/projects/netgrif-components/src/lib/navigation/group-navigation-component-resolver/default-components/tabbed/default-tabbed-case-view/default-tabbed-case-view.component.ts @@ -121,7 +121,7 @@ export class DefaultTabbedCaseViewComponent extends AbstractTabbedCaseViewCompon }, canBeClosed: true, tabContentComponent: DefaultTabbedCaseViewComponent, - injectedObject: {...this._injectedTabData, filterCase: filterData.filterCase}, + injectedObject: {...this._injectedTabData, loadFilter: filterData.filter}, order: this._injectedTabData.tabViewOrder, parentUniqueId: this._injectedTabData.tabUniqueId }, this._autoswitchToTaskTab, this._openExistingTab);