From d4e2bd43ada36ae0b11be539ed613efec7e8ca57 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Tue, 14 Jun 2022 19:22:02 +0300 Subject: [PATCH] RED-4175 - added 'singleSelect' property for filters --- .../filtering/models/filter-group.model.ts | 1 + .../popup-filter/popup-filter.component.html | 14 +++++----- .../popup-filter/popup-filter.component.ts | 28 +++++++++++-------- 3 files changed, 25 insertions(+), 18 deletions(-) diff --git a/src/lib/filtering/models/filter-group.model.ts b/src/lib/filtering/models/filter-group.model.ts index de34687..452f605 100644 --- a/src/lib/filtering/models/filter-group.model.ts +++ b/src/lib/filtering/models/filter-group.model.ts @@ -12,5 +12,6 @@ export interface IFilterGroup { readonly hide?: boolean; readonly checker?: (...args: unknown[]) => boolean; readonly matchAll?: boolean; + readonly singleSelect?: boolean; readonly checkerArgs?: unknown[]; } diff --git a/src/lib/filtering/popup-filter/popup-filter.component.html b/src/lib/filtering/popup-filter/popup-filter.component.html index 23ba887..29d8337 100644 --- a/src/lib/filtering/popup-filter/popup-filter.component.html +++ b/src/lib/filtering/popup-filter/popup-filter.component.html @@ -44,7 +44,7 @@ *ngFor="let filter of filters" [ngTemplateOutletContext]="{ filter: filter, - filterTemplate: primaryGroup.filterTemplate, + filterGroup: primaryGroup, atLeastOneIsExpandable: atLeastOneFilterIsExpandable$ | async }" [ngTemplateOutlet]="defaultFilterTemplate" @@ -60,7 +60,7 @@ *ngFor="let filter of secondaryGroup.filters" [ngTemplateOutletContext]="{ filter: filter, - filterTemplate: secondaryGroup.filterTemplate, + filterGroup: secondaryGroup, atLeastOneIsExpandable: atLeastOneSecondaryFilterIsExpandable$ | async }" [ngTemplateOutlet]="defaultFilterTemplate" @@ -96,7 +96,7 @@ #defaultFilterTemplate let-atLeastOneIsExpandable="atLeastOneIsExpandable" let-filter="filter" - let-filterTemplate="filterTemplate" + let-filterGroup="filterGroup" >
@@ -107,14 +107,14 @@
 
@@ -123,10 +123,10 @@
- + diff --git a/src/lib/filtering/popup-filter/popup-filter.component.ts b/src/lib/filtering/popup-filter/popup-filter.component.ts index f3d086a..4513c56 100644 --- a/src/lib/filtering/popup-filter/popup-filter.component.ts +++ b/src/lib/filtering/popup-filter/popup-filter.component.ts @@ -84,9 +84,13 @@ export class PopupFilterComponent implements OnInit { this.atLeastOneSecondaryFilterIsExpandable$ = atLeastOneIsExpandable(this.secondaryFilterGroup$); } - filterCheckboxClicked($event: MouseEvent, nestedFilter: INestedFilter, parent?: INestedFilter): void { + filterCheckboxClicked($event: MouseEvent, nestedFilter: INestedFilter, filterGroup: IFilterGroup, parent?: INestedFilter): void { $event.stopPropagation(); + if (filterGroup.singleSelect) { + this.deactivateFilters(nestedFilter.id); + } + // eslint-disable-next-line no-param-reassign nestedFilter.checked = !nestedFilter.checked; @@ -110,10 +114,10 @@ export class PopupFilterComponent implements OnInit { this._setFilters(this.primaryFiltersSlug, true); } - deactivateFilters(): void { - this._setFilters(this.primaryFiltersSlug); + deactivateFilters(exceptedFilterId?: string): void { + this._setFilters(this.primaryFiltersSlug, false, exceptedFilterId); if (this.secondaryFiltersSlug) { - this._setFilters(this.secondaryFiltersSlug); + this._setFilters(this.secondaryFiltersSlug, false, exceptedFilterId); } } @@ -124,15 +128,17 @@ export class PopupFilterComponent implements OnInit { this.filterService.refresh(); } - private _setFilters(filterGroup: string, checked = false) { + private _setFilters(filterGroup: string, checked = false, exceptedFilterId?: string) { const filters = this.filterService.getGroup(filterGroup)?.filters; filters?.forEach(f => { - // eslint-disable-next-line no-param-reassign - f.checked = checked; - // eslint-disable-next-line no-param-reassign - f.indeterminate = false; - // eslint-disable-next-line no-return-assign,no-param-reassign - f.children?.forEach(ff => (ff.checked = checked)); + if (f.id !== exceptedFilterId) { + // eslint-disable-next-line no-param-reassign + f.checked = checked; + // eslint-disable-next-line no-param-reassign + f.indeterminate = false; + // eslint-disable-next-line no-return-assign,no-param-reassign + f.children?.forEach(ff => (ff.checked = checked)); + } }); this.filterService.refresh(); }