From 9ee7b12e4a51c7d1ee8923dc87e359b12e5be118 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Tue, 14 Jun 2022 19:08:13 +0300 Subject: [PATCH 1/3] update to angular 14 --- src/lib/dialog/base-dialog.component.ts | 4 ++-- src/lib/form/base-form.component.ts | 4 ++-- src/lib/utils/functions.ts | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/lib/dialog/base-dialog.component.ts b/src/lib/dialog/base-dialog.component.ts index 35400f3..2d02f1d 100644 --- a/src/lib/dialog/base-dialog.component.ts +++ b/src/lib/dialog/base-dialog.component.ts @@ -1,6 +1,6 @@ import { Directive, HostListener, Injector, OnInit } from '@angular/core'; import { MatDialog, MatDialogRef } from '@angular/material/dialog'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { AutoUnsubscribe, hasFormChanged, IqserEventTarget } from '../utils'; import { ConfirmOptions } from '../misc'; import { ConfirmationDialogService } from './confirmation-dialog.service'; @@ -25,7 +25,7 @@ export interface SaveOptions { * (otherwise the save request will be triggered twice). * */ export abstract class BaseDialogComponent extends AutoUnsubscribe implements OnInit { - form!: FormGroup; + form!: UntypedFormGroup; initialFormValue!: Record; private readonly _confirmationDialogService: ConfirmationDialogService = this._injector.get(ConfirmationDialogService); private readonly _dialog: MatDialog = this._injector.get(MatDialog); diff --git a/src/lib/form/base-form.component.ts b/src/lib/form/base-form.component.ts index ad9b033..ab961b9 100644 --- a/src/lib/form/base-form.component.ts +++ b/src/lib/form/base-form.component.ts @@ -1,10 +1,10 @@ import { Directive } from '@angular/core'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { AutoUnsubscribe, hasFormChanged } from '../utils'; @Directive() export abstract class BaseFormComponent extends AutoUnsubscribe { - form!: FormGroup; + form!: UntypedFormGroup; initialFormValue!: Record; get changed(): boolean { diff --git a/src/lib/utils/functions.ts b/src/lib/utils/functions.ts index 1f24cd8..48ab2a5 100644 --- a/src/lib/utils/functions.ts +++ b/src/lib/utils/functions.ts @@ -1,5 +1,5 @@ import { ITrackable } from '../listing/models/trackable'; -import { FormGroup } from '@angular/forms'; +import { UntypedFormGroup } from '@angular/forms'; import { forOwn, has, isEqual, isPlainObject, transform } from 'lodash-es'; import dayjs, { Dayjs } from 'dayjs'; @@ -35,7 +35,7 @@ export function trackByFactory() { return (index: number, item: T): string => item.id; } -export function hasFormChanged(form: FormGroup, initialFormValue: Record): boolean { +export function hasFormChanged(form: UntypedFormGroup, initialFormValue: Record): boolean { if (form && initialFormValue) { for (const key of Object.keys(form.getRawValue())) { const initialValue = initialFormValue[key]; From d4e2bd43ada36ae0b11be539ed613efec7e8ca57 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Tue, 14 Jun 2022 19:22:02 +0300 Subject: [PATCH 2/3] 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(); } From e4c6d5fc759ba807c0616aff855ea280e40173b8 Mon Sep 17 00:00:00 2001 From: Valentin Mihai Date: Thu, 16 Jun 2022 15:30:39 +0300 Subject: [PATCH 3/3] RED-4175 - removed 'select all' option for filter when there is possible only one selection --- src/lib/filtering/popup-filter/popup-filter.component.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lib/filtering/popup-filter/popup-filter.component.html b/src/lib/filtering/popup-filter/popup-filter.component.html index 29d8337..00d7647 100644 --- a/src/lib/filtering/popup-filter/popup-filter.component.html +++ b/src/lib/filtering/popup-filter/popup-filter.component.html @@ -77,8 +77,9 @@
-
+