From 1df154926acceea736a9be9fc06d72ec6c04f813 Mon Sep 17 00:00:00 2001 From: Dan Percic Date: Wed, 4 Aug 2021 00:50:49 +0300 Subject: [PATCH] move filter service and some filter-utils --- .../downloads-list-screen.component.ts | 2 +- .../active-fields-listing.component.ts | 2 +- ...-attributes-csv-import-dialog.component.ts | 2 +- .../default-colors-screen.component.ts | 2 +- .../dictionary-listing-screen.component.ts | 2 +- ...ier-attributes-listing-screen.component.ts | 2 +- ...sier-templates-listing-screen.component.ts | 2 +- ...ile-attributes-listing-screen.component.ts | 2 +- .../screens/trash/trash-screen.component.ts | 2 +- .../user-listing-screen.component.ts | 2 +- .../dossier-details.component.ts | 2 +- .../dossier-listing-details.component.ts | 2 +- .../file-workload/file-workload.component.ts | 3 +- .../type-filter/type-filter.component.ts | 2 +- .../dossier-listing-screen.component.ts | 27 +++--- .../dossier-overview-screen.component.ts | 39 ++++---- .../file-preview-screen.component.ts | 5 +- .../search-screen/search-screen.component.ts | 26 +++--- .../services/annotation-processing.service.ts | 4 +- .../shared/base/base-listing.component.ts | 2 +- .../model/filter-wrapper.model.ts | 14 --- .../popup-filter/model/filter.model.ts | 13 --- .../popup-filter/popup-filter.component.ts | 4 +- .../popup-filter/utils/filter-utils.ts | 88 +------------------ .../quick-filters/quick-filters.component.ts | 2 +- .../page-header/models/action-config.model.ts | 2 +- .../page-header/models/base-config.model.ts | 6 +- .../page-header/models/button-config.model.ts | 4 +- .../page-header/models/filter-config.model.ts | 8 +- .../models/search-positions.type.ts | 4 +- .../page-header/page-header.component.html | 2 +- .../page-header/page-header.component.ts | 6 +- .../simple-doughnut-chart.component.ts | 2 +- .../modules/shared/services/filter.service.ts | 83 ----------------- .../shared/services/screen-state.service.ts | 4 +- .../src/app/services/toaster.service.ts | 8 +- 36 files changed, 90 insertions(+), 292 deletions(-) delete mode 100644 apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter-wrapper.model.ts delete mode 100644 apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter.model.ts delete mode 100644 apps/red-ui/src/app/modules/shared/services/filter.service.ts diff --git a/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts b/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts index 6bf3c6a8d..673c7d0fa 100644 --- a/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts +++ b/apps/red-ui/src/app/components/downloads-list-screen/downloads-list-screen.component.ts @@ -3,7 +3,7 @@ import { FileDownloadService } from '@upload-download/services/file-download.ser import { DownloadStatusWrapper } from '@upload-download/model/download-status.wrapper'; import { DownloadControllerService } from '@redaction/red-ui-http'; import { BaseListingComponent } from '@shared/base/base-listing.component'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts index ae2334ee7..f45e4cf77 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.ts @@ -1,7 +1,7 @@ import { Component, EventEmitter, Injector, Input, OnChanges, Output, SimpleChanges } from '@angular/core'; import { Field } from '../file-attributes-csv-import-dialog.component'; import { FileAttributeConfig } from '@redaction/red-ui-http'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts index d6fff4bec..ae2aa660f 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component.ts @@ -8,7 +8,7 @@ import { Observable } from 'rxjs'; import { map, startWith } from 'rxjs/operators'; import { Toaster } from '@services/toaster.service'; import { TranslateService } from '@ngx-translate/core'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; diff --git a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts index 5b221c678..c6dc1bd5f 100644 --- a/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/default-colors/default-colors-screen.component.ts @@ -5,7 +5,7 @@ import { ActivatedRoute } from '@angular/router'; import { PermissionsService } from '@services/permissions.service'; import { AdminDialogService } from '../../services/admin-dialog.service'; import { LoadingService } from '@services/loading.service'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { BaseListingComponent } from '@shared/base/base-listing.component'; diff --git a/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts index dee236df5..6d7059a0e 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dictionary-listing/dictionary-listing-screen.component.ts @@ -9,7 +9,7 @@ import { ActivatedRoute } from '@angular/router'; import { TypeValueWrapper } from '@models/file/type-value.wrapper'; import { TranslateService } from '@ngx-translate/core'; import { LoadingService } from '@services/loading.service'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts index 95478125f..84b0a775b 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-attributes-listing/dossier-attributes-listing-screen.component.ts @@ -6,7 +6,7 @@ import { ActivatedRoute } from '@angular/router'; import { AdminDialogService } from '../../services/admin-dialog.service'; import { LoadingService } from '@services/loading.service'; import { SortingService } from '@services/sorting.service'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { PermissionsService } from '@services/permissions.service'; diff --git a/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts index 334b0753a..81159eb85 100644 --- a/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/dossier-template-listing/dossier-templates-listing-screen.component.ts @@ -6,7 +6,7 @@ import { AdminDialogService } from '../../services/admin-dialog.service'; import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model.wrapper'; import { LoadingService } from '@services/loading.service'; import { DossierTemplateControllerService } from '@redaction/red-ui-http'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { BaseListingComponent } from '@shared/base/base-listing.component'; diff --git a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts index db387dac8..94ccfe2dd 100644 --- a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/file-attributes-listing-screen.component.ts @@ -5,7 +5,7 @@ import { AppStateService } from '@state/app-state.service'; import { ActivatedRoute } from '@angular/router'; import { AdminDialogService } from '../../services/admin-dialog.service'; import { LoadingService } from '@services/loading.service'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; diff --git a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts index 28dc5a278..0231d0d66 100644 --- a/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/trash/trash-screen.component.ts @@ -4,7 +4,7 @@ import { Dossier } from '@redaction/red-ui-http'; import { LoadingService } from '@services/loading.service'; import { AppConfigKey, AppConfigService } from '@app-config/app-config.service'; import * as moment from 'moment'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; diff --git a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts index df2ef3e5a..366af994d 100644 --- a/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/admin/screens/user-listing/user-listing-screen.component.ts @@ -8,7 +8,7 @@ import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/si import { TranslateChartService } from '@services/translate-chart.service'; import { LoadingService } from '@services/loading.service'; import { InitialsAvatarComponent } from '@shared/components/initials-avatar/initials-avatar.component'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; diff --git a/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts b/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts index f26e9927c..898656cfb 100644 --- a/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/dossier-details/dossier-details.component.ts @@ -8,7 +8,7 @@ import { StatusSorter } from '@utils/sorters/status-sorter'; import { UserService } from '@services/user.service'; import { User } from '@redaction/red-ui-http'; import { Toaster } from '@services/toaster.service'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { DossierAttributeWithValue } from '@models/dossier-attributes.model'; import { fileStatusTranslations } from '../../translations/file-status-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; diff --git a/apps/red-ui/src/app/modules/dossier/components/dossier-listing-details/dossier-listing-details.component.ts b/apps/red-ui/src/app/modules/dossier/components/dossier-listing-details/dossier-listing-details.component.ts index 254a92de9..3c94dc235 100644 --- a/apps/red-ui/src/app/modules/dossier/components/dossier-listing-details/dossier-listing-details.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/dossier-listing-details/dossier-listing-details.component.ts @@ -1,7 +1,7 @@ import { ChangeDetectionStrategy, Component, Input } from '@angular/core'; import { DoughnutChartConfig } from '@shared/components/simple-doughnut-chart/simple-doughnut-chart.component'; import { AppStateService } from '@state/app-state.service'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; @Component({ selector: 'redaction-dossier-listing-details', diff --git a/apps/red-ui/src/app/modules/dossier/components/file-workload/file-workload.component.ts b/apps/red-ui/src/app/modules/dossier/components/file-workload/file-workload.component.ts index 63720e7df..e80c20458 100644 --- a/apps/red-ui/src/app/modules/dossier/components/file-workload/file-workload.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/file-workload/file-workload.component.ts @@ -17,11 +17,10 @@ import { MatDialogRef, MatDialogState } from '@angular/material/dialog'; import scrollIntoView from 'scroll-into-view-if-needed'; import { debounce } from '@utils/debounce'; import { FileDataModel } from '@models/file/file-data.model'; -import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model'; import { CommentsComponent } from '../comments/comments.component'; import { PermissionsService } from '@services/permissions.service'; import { WebViewerInstance } from '@pdftron/webviewer'; -import { CircleButtonTypes, IconButtonTypes } from '@iqser/common-ui'; +import { CircleButtonTypes, FilterModel, IconButtonTypes } from '@iqser/common-ui'; const COMMAND_KEY_ARRAY = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown', 'Escape']; const ALL_HOTKEY_ARRAY = ['ArrowLeft', 'ArrowRight', 'ArrowUp', 'ArrowDown']; diff --git a/apps/red-ui/src/app/modules/dossier/components/type-filter/type-filter.component.ts b/apps/red-ui/src/app/modules/dossier/components/type-filter/type-filter.component.ts index daaebb252..1082bb9ac 100644 --- a/apps/red-ui/src/app/modules/dossier/components/type-filter/type-filter.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/type-filter/type-filter.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnInit } from '@angular/core'; import { AppStateService } from '@state/app-state.service'; -import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model'; +import { FilterModel } from '@iqser/common-ui'; @Component({ selector: 'redaction-type-filter', diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts index b77729f18..d1e819176 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-listing-screen/dossier-listing-screen.component.ts @@ -14,16 +14,9 @@ import { StatusSorter } from '@utils/sorters/status-sorter'; import { NavigationStart, Router } from '@angular/router'; import { DossiersDialogService } from '../../services/dossiers-dialog.service'; import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy'; -import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model'; -import { - annotationFilterChecker, - dossierMemberChecker, - dossierStatusChecker, - dossierTemplateChecker -} from '@shared/components/filters/popup-filter/utils/filter-utils'; import { UserPreferenceService } from '@services/user-preference.service'; import { ButtonConfig } from '@shared/components/page-header/models/button-config.model'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterModel, FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { BaseListingComponent } from '@shared/base/base-listing.component'; @@ -32,6 +25,12 @@ import { TableColConfig } from '@shared/components/table-col-name/table-col-name import { workloadTranslations } from '../../translations/workload-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { fileStatusTranslations } from '../../translations/file-status-translations'; +import { + annotationFilterChecker, + dossierMemberChecker, + dossierStatusChecker, + dossierTemplateChecker +} from '@shared/components/filters/popup-filter/utils/filter-utils'; const isLeavingScreen = event => event instanceof NavigationStart && event.url !== '/main/dossiers'; @@ -214,7 +213,7 @@ export class DossierListingScreenComponent slug: 'statusFilters', label: this._translateService.instant('filters.status'), icon: 'red:status', - values: statusFilters.sort(StatusSorter.byStatus), + filters: statusFilters.sort(StatusSorter.byStatus), checker: dossierStatusChecker }); @@ -227,7 +226,7 @@ export class DossierListingScreenComponent slug: 'peopleFilters', label: this._translateService.instant('filters.people'), icon: 'red:user', - values: peopleFilters, + filters: peopleFilters, checker: dossierMemberChecker }); @@ -241,7 +240,7 @@ export class DossierListingScreenComponent label: this._translateService.instant('filters.needs-work'), icon: 'red:needs-work', filterTemplate: this._needsWorkTemplate, - values: needsWorkFilters.sort(RedactionFilterSorter.byKey), + filters: needsWorkFilters.sort(RedactionFilterSorter.byKey), checker: annotationFilterChecker, matchAll: true, checkerArgs: this.permissionsService @@ -256,15 +255,15 @@ export class DossierListingScreenComponent slug: 'dossierTemplateFilters', label: this._translateService.instant('filters.dossier-templates'), icon: 'red:template', - hide: this.filterService.getFilterGroup('dossierTemplateFilters')?.values?.length <= 1, - values: dossierTemplateFilters, + hide: this.filterService.getFilterGroup('dossierTemplateFilters')?.filters?.length <= 1, + filters: dossierTemplateFilters, checker: dossierTemplateChecker }); const quickFilters = this._createQuickFilters(); this.filterService.addFilterGroup({ slug: 'quickFilters', - values: quickFilters, + filters: quickFilters, checker: (dw: DossierWrapper) => quickFilters.reduce((acc, f) => acc || (f.checked && f.checker(dw)), false) }); } diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts index b5fbc916e..715f9dd71 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.ts @@ -19,11 +19,9 @@ import { convertFiles, handleFileDrop } from '@utils/file-drop-utils'; import { DossiersDialogService } from '../../services/dossiers-dialog.service'; import { DossierWrapper } from '@state/model/dossier.wrapper'; import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy'; -import { annotationFilterChecker, keyChecker } from '@shared/components/filters/popup-filter/utils/filter-utils'; -import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model'; import { AppConfigKey, AppConfigService } from '@app-config/app-config.service'; import { ActionConfig } from '@shared/components/page-header/models/action-config.model'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterModel, FilterService, keyChecker } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { ScreenStateService } from '@shared/services/screen-state.service'; import { SortingService } from '@services/sorting.service'; @@ -37,6 +35,7 @@ import { fileStatusTranslations } from '../../translations/file-status-translati import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { CircleButtonTypes } from '@iqser/common-ui'; import { TableColConfig } from '@shared/components/table-col-name/table-col-name.component'; +import { annotationFilterChecker } from '@shared/components/filters/popup-filter/utils/filter-utils'; @Component({ templateUrl: './dossier-overview-screen.component.html', @@ -54,7 +53,14 @@ export class DossierOverviewScreenComponent readonly itemSize = 80; collapsedDetails = false; - actionConfigs: ActionConfig[]; + readonly actionConfigs: ActionConfig[] = [ + { + label: this._translateService.instant('dossier-overview.header-actions.edit'), + action: $event => this.openEditDossierDialog($event), + icon: 'red:edit', + hide: !this.permissionsService.isManager() + } + ]; dossierAttributes: DossierAttributeWithValue[] = []; tableColConfigs: TableColConfig[] = [ { @@ -125,11 +131,11 @@ export class DossierOverviewScreenComponent } get checkedRequiredFilters() { - return this.filterService.getFilterGroup('quickFilters')?.values.filter(f => f.required && f.checked); + return this.filterService.getFilterGroup('quickFilters')?.filters.filter(f => f.required && f.checked); } get checkedNotRequiredFilters() { - return this.filterService.getFilterGroup('quickFilters')?.values.filter(f => !f.required && f.checked); + return this.filterService.getFilterGroup('quickFilters')?.filters.filter(f => !f.required && f.checked); } isLastOpenedFile({ fileId }: FileStatusWrapper): boolean { @@ -308,7 +314,7 @@ export class DossierOverviewScreenComponent slug: 'statusFilters', label: this._translateService.instant('filters.status'), icon: 'red:status', - values: statusFilters.sort(StatusSorter.byStatus), + filters: statusFilters.sort(StatusSorter.byStatus), checker: keyChecker('status') }); @@ -331,7 +337,7 @@ export class DossierOverviewScreenComponent slug: 'peopleFilters', label: this._translateService.instant('filters.assigned-people'), icon: 'red:user', - values: peopleFilters, + filters: peopleFilters, checker: keyChecker('currentReviewer') }); @@ -345,7 +351,7 @@ export class DossierOverviewScreenComponent label: this._translateService.instant('filters.needs-work'), icon: 'red:needs-work', filterTemplate: this._needsWorkTemplate, - values: needsWorkFilters.sort(RedactionFilterSorter.byKey), + filters: needsWorkFilters.sort(RedactionFilterSorter.byKey), checker: annotationFilterChecker, matchAll: true, checkerArgs: this.permissionsService @@ -353,14 +359,12 @@ export class DossierOverviewScreenComponent this.filterService.addFilterGroup({ slug: 'quickFilters', - values: this._createQuickFilters(), + filters: this._createQuickFilters(), checker: (file: FileStatusWrapper) => this.checkedRequiredFilters.reduce((acc, f) => acc && f.checker(file), true) && (this.checkedNotRequiredFilters.length === 0 || this.checkedNotRequiredFilters.reduce((acc, f) => acc || f.checker(file), false)) }); - - this._createActionConfigs(); } private _createQuickFilters() { @@ -398,15 +402,4 @@ export class DossierOverviewScreenComponent } ]; } - - private _createActionConfigs() { - this.actionConfigs = [ - { - label: this._translateService.instant('dossier-overview.header-actions.edit'), - action: $event => this.openEditDossierDialog($event), - icon: 'red:edit', - hide: !this.permissionsService.isManager() - } - ]; - } } diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts index a093bafac..f486b5ee9 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts @@ -31,13 +31,14 @@ import { ViewMode } from '@models/file/view-mode'; import { FileWorkloadComponent } from '../../components/file-workload/file-workload.component'; import { DossiersDialogService } from '../../services/dossiers-dialog.service'; import { OnAttach, OnDetach } from '@utils/custom-route-reuse.strategy'; -import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model'; -import { handleFilterDelta, processFilters } from '@shared/components/filters/popup-filter/utils/filter-utils'; import { LoadingService } from '@services/loading.service'; import { stampPDFPage } from '@utils/page-stamper'; import { TranslateService } from '@ngx-translate/core'; import { AutoUnsubscribeComponent, CircleButtonTypes } from '@iqser/common-ui'; import { fileStatusTranslations } from '../../translations/file-status-translations'; +import { FilterModel } from '@iqser/common-ui'; +import { processFilters } from '@iqser/common-ui'; +import { handleFilterDelta } from '@shared/components/filters/popup-filter/utils/filter-utils'; const ALL_HOTKEY_ARRAY = ['Escape', 'F', 'f']; diff --git a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts index 6ed63f012..f2fa7a7a7 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/search-screen/search-screen.component.ts @@ -4,19 +4,19 @@ import { MatchedDocument, SearchControllerService, SearchResult } from '@redacti import { BehaviorSubject, Observable } from 'rxjs'; import { debounceTime, map, skip, switchMap, tap } from 'rxjs/operators'; import { ActivatedRoute, Router } from '@angular/router'; -import { TableColConfig } from '../../../shared/components/table-col-name/table-col-name.component'; -import { FilterService } from '../../../shared/services/filter.service'; -import { SearchService } from '../../../shared/services/search.service'; -import { ScreenStateService } from '../../../shared/services/screen-state.service'; -import { SortingService } from '../../../../services/sorting.service'; -import { AppStateService } from '../../../../state/app-state.service'; -import { FileStatusWrapper } from '../../../../models/file/file-status.wrapper'; -import { LoadingService } from '../../../../services/loading.service'; +import { TableColConfig } from '@shared/components/table-col-name/table-col-name.component'; +import { FilterService } from '@iqser/common-ui'; +import { SearchService } from '@shared/services/search.service'; +import { ScreenStateService } from '@shared/services/screen-state.service'; +import { SortingService } from '@services/sorting.service'; +import { AppStateService } from '@state/app-state.service'; +import { FileStatusWrapper } from '@models/file/file-status.wrapper'; +import { LoadingService } from '@services/loading.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { fileStatusTranslations } from '../../translations/file-status-translations'; -import { searchPositions } from '../../../shared/components/page-header/models/search-positions.type'; -import { keyChecker } from '../../../shared/components/filters/popup-filter/utils/filter-utils'; -import { DossierWrapper } from '../../../../state/model/dossier.wrapper'; +import { SearchPositions } from '@shared/components/page-header/models/search-positions.type'; +import { keyChecker } from '@iqser/common-ui'; +import { DossierWrapper } from '@state/model/dossier.wrapper'; import { TranslateService } from '@ngx-translate/core'; interface ListItem { @@ -42,7 +42,7 @@ interface SearchInput { }) export class SearchScreenComponent extends BaseListingComponent implements OnDestroy { readonly fileStatusTranslations = fileStatusTranslations; - readonly searchPositions = searchPositions; + readonly searchPositions = SearchPositions; readonly itemSize = 85; readonly search$ = new BehaviorSubject(null); @@ -85,7 +85,7 @@ export class SearchScreenComponent extends BaseListingComponent implem slug: 'dossiers', label: this._translateService.instant('search-screen.filters.by-dossier'), icon: 'red:folder', - values: this._appStateService.allDossiers.map(dossier => ({ + filters: this._appStateService.allDossiers.map(dossier => ({ key: dossier.dossierId, label: dossier.dossierName })), diff --git a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts index cf3192461..7c092c80f 100644 --- a/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/annotation-processing.service.ts @@ -1,10 +1,10 @@ import { Injectable } from '@angular/core'; import { AnnotationWrapper } from '@models/file/annotation.wrapper'; import { SuperTypeSorter } from '@utils/sorters/super-type-sorter'; -import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model'; -import { handleCheckedValue } from '@shared/components/filters/popup-filter/utils/filter-utils'; +import { handleCheckedValue } from '@iqser/common-ui'; import { annotationTypesTranslations } from '../../../translations/annotation-types-translations'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; +import { FilterModel } from '@iqser/common-ui'; @Injectable() export class AnnotationProcessingService { diff --git a/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts b/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts index bc6e54542..411655ed7 100644 --- a/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts +++ b/apps/red-ui/src/app/modules/shared/base/base-listing.component.ts @@ -7,7 +7,7 @@ import { combineLatest, Observable } from 'rxjs'; import { AutoUnsubscribeComponent } from '@iqser/common-ui'; import { distinctUntilChanged, map, switchMap } from 'rxjs/operators'; import { PermissionsService } from '@services/permissions.service'; -import { FilterService } from '../services/filter.service'; +import { FilterService } from '@iqser/common-ui'; @Component({ template: '' }) export abstract class BaseListingComponent extends AutoUnsubscribeComponent implements OnDestroy { diff --git a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter-wrapper.model.ts b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter-wrapper.model.ts deleted file mode 100644 index ccdb3e6a8..000000000 --- a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter-wrapper.model.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { FilterModel } from './filter.model'; -import { TemplateRef } from '@angular/core'; - -export interface FilterGroup { - slug: string; - label?: string; - icon?: string; - filterTemplate?: TemplateRef; - hide?: boolean; - values: FilterModel[]; - checker: Function; - matchAll?: boolean; - checkerArgs?: any; -} diff --git a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter.model.ts b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter.model.ts deleted file mode 100644 index 16686cf98..000000000 --- a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/model/filter.model.ts +++ /dev/null @@ -1,13 +0,0 @@ -export interface FilterModel { - key: string; - label?: string; - icon?: string; - checked?: boolean; - indeterminate?: boolean; - expanded?: boolean; - topLevelFilter?: boolean; - matches?: number; - filters?: FilterModel[]; - checker?: (obj?) => boolean; - required?: boolean; -} diff --git a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts index 513887f7c..51a1a2399 100644 --- a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/popup-filter.component.ts @@ -1,6 +1,6 @@ import { ChangeDetectorRef, Component, EventEmitter, Input, OnChanges, Output, TemplateRef } from '@angular/core'; -import { FilterModel } from './model/filter.model'; -import { handleCheckedValue } from './utils/filter-utils'; +import { FilterModel } from '@iqser/common-ui'; +import { handleCheckedValue } from '@iqser/common-ui'; import { MAT_CHECKBOX_DEFAULT_OPTIONS } from '@angular/material/checkbox'; @Component({ diff --git a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/utils/filter-utils.ts b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/utils/filter-utils.ts index 720d31006..ff5814ab8 100644 --- a/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/utils/filter-utils.ts +++ b/apps/red-ui/src/app/modules/shared/components/filters/popup-filter/utils/filter-utils.ts @@ -1,18 +1,8 @@ -import { FilterModel } from '../model/filter.model'; import { FileStatusWrapper } from '@models/file/file-status.wrapper'; import { DossierWrapper } from '@state/model/dossier.wrapper'; import { PermissionsService } from '@services/permissions.service'; -import { FilterGroup } from '@shared/components/filters/popup-filter/model/filter-wrapper.model'; - -export function processFilters(oldFilters: FilterModel[], newFilters: FilterModel[]) { - copySettings(oldFilters, newFilters); - if (newFilters) { - newFilters.forEach(filter => { - handleCheckedValue(filter); - }); - } - return newFilters; -} +import { handleCheckedValue } from '@iqser/common-ui'; +import { FilterModel } from '@iqser/common-ui'; export function handleFilterDelta(oldFilters: FilterModel[], newFilters: FilterModel[], allFilters: FilterModel[]) { const newFiltersDelta = {}; @@ -57,62 +47,6 @@ export function handleFilterDelta(oldFilters: FilterModel[], newFilters: FilterM }); } -function copySettings(oldFilters: FilterModel[], newFilters: FilterModel[]) { - if (oldFilters && newFilters) { - for (const oldFilter of oldFilters) { - const newFilter = newFilters.find(f => f.key === oldFilter.key); - if (newFilter) { - newFilter.checked = oldFilter.checked; - newFilter.indeterminate = oldFilter.indeterminate; - copySettings(oldFilter.filters, newFilter.filters); - } - } - } -} - -export function handleCheckedValue(filter: FilterModel) { - if (filter.filters && filter.filters.length) { - filter.checked = filter.filters.reduce((acc, next) => acc && next.checked, true); - if (filter.checked) { - filter.indeterminate = false; - } else { - filter.indeterminate = filter.filters.reduce((acc, next) => acc || next.checked, false); - } - } else { - filter.indeterminate = false; - } -} - -export function checkFilter(entity: any, filters: FilterModel[], validate: Function, validateArgs: any = [], matchAll: boolean = false) { - const hasChecked = filters.find(f => f.checked); - - if (validateArgs) { - if (!Array.isArray(validateArgs)) { - validateArgs = [validateArgs]; - } - } else { - validateArgs = []; - } - if (!hasChecked) { - return true; - } - - let filterMatched = matchAll; - for (const filter of filters) { - if (filter.checked) { - if (matchAll) { - filterMatched = filterMatched && validate(entity, filter, ...validateArgs); - } else { - filterMatched = filterMatched || validate(entity, filter, ...validateArgs); - } - } - } - - return filterMatched; -} - -export const keyChecker = (key: string) => (entity: any, filter: FilterModel) => entity[key] === filter.key; - export const annotationFilterChecker = ( input: FileStatusWrapper | DossierWrapper, filter: FilterModel, @@ -153,22 +87,4 @@ export const dossierMemberChecker = (dw: DossierWrapper, filter: FilterModel) => export const dossierTemplateChecker = (dw: DossierWrapper, filter: FilterModel) => dw.dossierTemplateId === filter.key; -export const dueDateChecker = (dw: DossierWrapper, filter: FilterModel) => dw.dueDateMatches(filter.key); - -export const addedDateChecker = (dw: DossierWrapper, filter: FilterModel) => dw.addedDateMatches(filter.key); - export const dossierApproverChecker = (dw: DossierWrapper, filter: FilterModel) => dw.approverIds.includes(filter.key); - -export function getFilteredEntities(entities: T[], filters: FilterGroup[]) { - const filteredEntities: T[] = []; - for (const entity of entities) { - let add = true; - for (const filter of filters) { - add = add && checkFilter(entity, filter.values, filter.checker, filter.checkerArgs, filter.matchAll); - } - if (add) { - filteredEntities.push(entity); - } - } - return filteredEntities; -} diff --git a/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts b/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts index fa29fc3bc..e94e736a6 100644 --- a/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/filters/quick-filters/quick-filters.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; @Component({ selector: 'redaction-quick-filters', diff --git a/apps/red-ui/src/app/modules/shared/components/page-header/models/action-config.model.ts b/apps/red-ui/src/app/modules/shared/components/page-header/models/action-config.model.ts index 223953f8f..78d125e8b 100644 --- a/apps/red-ui/src/app/modules/shared/components/page-header/models/action-config.model.ts +++ b/apps/red-ui/src/app/modules/shared/components/page-header/models/action-config.model.ts @@ -1,5 +1,5 @@ import { BaseHeaderConfig } from './base-config.model'; export interface ActionConfig extends BaseHeaderConfig { - action: ($event) => void; + readonly action: ($event) => void; } diff --git a/apps/red-ui/src/app/modules/shared/components/page-header/models/base-config.model.ts b/apps/red-ui/src/app/modules/shared/components/page-header/models/base-config.model.ts index 238f47d39..970891c10 100644 --- a/apps/red-ui/src/app/modules/shared/components/page-header/models/base-config.model.ts +++ b/apps/red-ui/src/app/modules/shared/components/page-header/models/base-config.model.ts @@ -1,5 +1,5 @@ export interface BaseHeaderConfig { - label: string; - icon?: string; - hide?: boolean; + readonly label: string; + readonly icon?: string; + readonly hide?: boolean; } diff --git a/apps/red-ui/src/app/modules/shared/components/page-header/models/button-config.model.ts b/apps/red-ui/src/app/modules/shared/components/page-header/models/button-config.model.ts index 96c46cf75..c29b6816d 100644 --- a/apps/red-ui/src/app/modules/shared/components/page-header/models/button-config.model.ts +++ b/apps/red-ui/src/app/modules/shared/components/page-header/models/button-config.model.ts @@ -2,6 +2,6 @@ import { IconButtonType } from '@iqser/common-ui'; import { BaseHeaderConfig } from './base-config.model'; export interface ButtonConfig extends BaseHeaderConfig { - action: ($event) => void; - type?: IconButtonType; + readonly action: ($event) => void; + readonly type?: IconButtonType; } diff --git a/apps/red-ui/src/app/modules/shared/components/page-header/models/filter-config.model.ts b/apps/red-ui/src/app/modules/shared/components/page-header/models/filter-config.model.ts index a4474cde2..eeaff879e 100644 --- a/apps/red-ui/src/app/modules/shared/components/page-header/models/filter-config.model.ts +++ b/apps/red-ui/src/app/modules/shared/components/page-header/models/filter-config.model.ts @@ -1,9 +1,9 @@ -import { FilterModel } from '../../filters/popup-filter/model/filter.model'; +import { FilterModel } from '@iqser/common-ui'; import { TemplateRef } from '@angular/core'; import { BaseHeaderConfig } from './base-config.model'; export interface FilterConfig extends BaseHeaderConfig { - primaryFilters?: FilterModel[]; - primaryFiltersLabel?: string; - filterTemplate?: TemplateRef; + readonly primaryFilters?: FilterModel[]; + readonly primaryFiltersLabel?: string; + readonly filterTemplate?: TemplateRef; } diff --git a/apps/red-ui/src/app/modules/shared/components/page-header/models/search-positions.type.ts b/apps/red-ui/src/app/modules/shared/components/page-header/models/search-positions.type.ts index 7333d62ac..2b6314c43 100644 --- a/apps/red-ui/src/app/modules/shared/components/page-header/models/search-positions.type.ts +++ b/apps/red-ui/src/app/modules/shared/components/page-header/models/search-positions.type.ts @@ -1,6 +1,6 @@ -export const searchPositions = { +export const SearchPositions = { beforeFilters: 'beforeFilters', afterFilters: 'afterFilters' } as const; -export type SearchPosition = keyof typeof searchPositions; +export type SearchPosition = keyof typeof SearchPositions; diff --git a/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.html b/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.html index 5f2567f6b..c68fb9017 100644 --- a/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.html +++ b/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.html @@ -13,7 +13,7 @@ [filterLabel]="config.label" [filterTemplate]="config.filterTemplate" [icon]="config.icon" - [primaryFilters]="config.values" + [primaryFilters]="config.filters" > diff --git a/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.ts b/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.ts index 4f25fadde..daddb28a9 100644 --- a/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/page-header/page-header.component.ts @@ -1,11 +1,11 @@ import { Component, Input, Optional } from '@angular/core'; import { ActionConfig } from '@shared/components/page-header/models/action-config.model'; import { ButtonConfig } from '@shared/components/page-header/models/button-config.model'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; import { distinctUntilChanged, map } from 'rxjs/operators'; import { combineLatest, Observable, of } from 'rxjs'; -import { SearchPosition, searchPositions } from '@shared/components/page-header/models/search-positions.type'; +import { SearchPosition, SearchPositions } from '@shared/components/page-header/models/search-positions.type'; @Component({ selector: 'redaction-page-header', @@ -13,7 +13,7 @@ import { SearchPosition, searchPositions } from '@shared/components/page-header/ styleUrls: ['./page-header.component.scss'] }) export class PageHeaderComponent { - readonly searchPositions = searchPositions; + readonly searchPositions = SearchPositions; @Input() pageLabel: string; @Input() showCloseButton: boolean; diff --git a/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts b/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts index ac4492263..3581ad006 100644 --- a/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/simple-doughnut-chart/simple-doughnut-chart.component.ts @@ -1,6 +1,6 @@ import { Component, Input, OnChanges } from '@angular/core'; import { Color } from '@utils/types'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { Observable, of } from 'rxjs'; import { map } from 'rxjs/operators'; diff --git a/apps/red-ui/src/app/modules/shared/services/filter.service.ts b/apps/red-ui/src/app/modules/shared/services/filter.service.ts deleted file mode 100644 index 4dc354234..000000000 --- a/apps/red-ui/src/app/modules/shared/services/filter.service.ts +++ /dev/null @@ -1,83 +0,0 @@ -import { Injectable } from '@angular/core'; -import { FilterModel } from '@shared/components/filters/popup-filter/model/filter.model'; -import { processFilters } from '@shared/components/filters/popup-filter/utils/filter-utils'; -import { FilterGroup } from '@shared/components/filters/popup-filter/model/filter-wrapper.model'; -import { BehaviorSubject, Observable, Subject } from 'rxjs'; -import { distinctUntilChanged, map, startWith, switchMap } from 'rxjs/operators'; - -@Injectable() -export class FilterService { - private readonly _filterGroups$ = new BehaviorSubject([]); - private readonly _refresh$ = new Subject(); - readonly filterGroups$ = this._refresh$.pipe( - startWith(''), - switchMap(() => this._filterGroups$.asObservable()) - ); - readonly showResetFilters$ = this._showResetFilters$; - - get filterGroups(): FilterGroup[] { - return Object.values(this._filterGroups$.getValue()); - } - - private get _showResetFilters$(): Observable { - return this.filterGroups$.pipe( - map(all => this._toFlatFilters(all)), - map(f => !!f.find(el => el.checked)), - distinctUntilChanged() - ); - } - - refresh(): void { - this._refresh$.next(); - } - - toggleFilter(slug: string, key: string) { - const filters = this.filterGroups.find(f => f.slug === slug).values; - let found = filters.find(f => f.key === key); - if (!found) found = filters.map(f => f.filters?.find(ff => ff.key === key))[0]; - found.checked = !found.checked; - - this.refresh(); - } - - addFilterGroup(value: FilterGroup): void { - const oldFilters = this.getFilterGroup(value.slug)?.values; - if (!oldFilters) return this._filterGroups$.next([...this.filterGroups, value]); - - value.values = processFilters(oldFilters, value.values); - this._filterGroups$.next([...this.filterGroups.filter(f => f.slug !== value.slug), value]); - } - - getFilterGroup(slug: string): FilterGroup { - return this.filterGroups.find(f => f.slug === slug); - } - - getFilterModels$(filterGroupSlug: string): Observable { - return this.getFilterGroup$(filterGroupSlug).pipe(map(f => f?.values)); - } - - getFilterGroup$(slug: string): Observable { - return this.filterGroups$.pipe(map(all => all.find(f => f.slug === slug))); - } - - reset(): void { - this.filterGroups.forEach(item => { - item.values.forEach(child => { - child.checked = false; - child.indeterminate = false; - child.filters?.forEach(f => { - f.checked = false; - f.indeterminate = false; - }); - }); - }); - - this.refresh(); - } - - private _toFlatFilters(entities: FilterGroup[]): FilterModel[] { - const flatChildren = (filters: FilterModel[]) => (filters ?? []).reduce((acc, f) => [...acc, ...(f?.filters ?? [])], []); - - return entities.reduce((acc, f) => [...acc, ...f.values, ...flatChildren(f.values)], []); - } -} diff --git a/apps/red-ui/src/app/modules/shared/services/screen-state.service.ts b/apps/red-ui/src/app/modules/shared/services/screen-state.service.ts index 4420d8c9e..5191f4c0f 100644 --- a/apps/red-ui/src/app/modules/shared/services/screen-state.service.ts +++ b/apps/red-ui/src/app/modules/shared/services/screen-state.service.ts @@ -1,9 +1,9 @@ import { Injectable } from '@angular/core'; import { BehaviorSubject, combineLatest, Observable } from 'rxjs'; import { distinctUntilChanged, map, tap } from 'rxjs/operators'; -import { FilterService } from '@shared/services/filter.service'; +import { FilterService } from '@iqser/common-ui'; import { SearchService } from '@shared/services/search.service'; -import { getFilteredEntities } from '@shared/components/filters/popup-filter/utils/filter-utils'; +import { getFilteredEntities } from '@iqser/common-ui'; const toLengthValue = entities => entities?.length ?? 0; diff --git a/apps/red-ui/src/app/services/toaster.service.ts b/apps/red-ui/src/app/services/toaster.service.ts index f389df656..d7c4095bd 100644 --- a/apps/red-ui/src/app/services/toaster.service.ts +++ b/apps/red-ui/src/app/services/toaster.service.ts @@ -14,19 +14,19 @@ const enum NotificationType { } export interface ToasterOptions extends IndividualConfig { - title?: string; + readonly title?: string; /** * These params are used as interpolateParams for translate service */ - params?: object; - actions?: { title?: string; action: () => void }[]; + readonly params?: object; + readonly actions?: { readonly title?: string; readonly action: () => void }[]; } export interface ErrorToasterOptions extends ToasterOptions { /** * Pass an http error that will be processed by error message service and shown in toast */ - error?: HttpErrorResponse; + readonly error?: HttpErrorResponse; } @Injectable({