diff --git a/apps/red-ui/src/app/components/base-screen/base-screen.component.html b/apps/red-ui/src/app/components/base-screen/base-screen.component.html
index b7efcf7a5..fe3838c65 100644
--- a/apps/red-ui/src/app/components/base-screen/base-screen.component.html
+++ b/apps/red-ui/src/app/components/base-screen/base-screen.component.html
@@ -1,4 +1,4 @@
-
+
@@ -25,7 +25,7 @@
[placeholder]="'search.placeholder' | translate"
>
-
+
boolean = url => url.includes('/search');
styleUrls: ['./base-screen.component.scss'],
})
export class BaseScreenComponent {
+ readonly #navigationStart$ = this._router.events.pipe(
+ filter(isNavigationStart),
+ map(event => event.url),
+ startWith(this._router.url),
+ shareDistinctLast(),
+ );
readonly roles = Roles;
readonly documentViewer = inject(REDDocumentViewer);
readonly currentUser = this.userService.currentUser;
@@ -46,23 +52,8 @@ export class BaseScreenComponent {
action: (query): void => this.#search(query, []),
},
];
- readonly #navigationStart$ = this._router.events.pipe(
- filter(isNavigationStart),
- map(event => event.url),
- startWith(this._router.url),
- shareDistinctLast(),
- );
readonly isSearchScreen$ = this.#navigationStart$.pipe(map(isSearchScreen));
-
- get #hideSearchThisDossier() {
- const routerLink = this.breadcrumbsService.breadcrumbs[1]?.options?.routerLink;
- if (!routerLink) {
- return true;
- }
-
- const isDossierOverview = (routerLink.includes(DOSSIERS_ROUTE) || routerLink.includes(ARCHIVE_ROUTE)) && routerLink.length === 3;
- return !isDossierOverview;
- }
+ readonly config = getConfig();
constructor(
private readonly _router: Router,
@@ -80,6 +71,16 @@ export class BaseScreenComponent {
activatedRoute.queryParamMap.pipe(takeUntilDestroyed()).subscribe(queryParams => this.#navigate(queryParams));
}
+ get #hideSearchThisDossier() {
+ const routerLink = this.breadcrumbsService.breadcrumbs[1]?.options?.routerLink;
+ if (!routerLink) {
+ return true;
+ }
+
+ const isDossierOverview = (routerLink.includes(DOSSIERS_ROUTE) || routerLink.includes(ARCHIVE_ROUTE)) && routerLink.length === 3;
+ return !isDossierOverview;
+ }
+
#navigate(queryParams: ParamMap) {
if (queryParams.has('username')) {
return this._router.navigate([], {
diff --git a/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.ts b/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.ts
index f1cb7e65b..a6a2b4fe5 100644
--- a/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.ts
+++ b/apps/red-ui/src/app/modules/account/screens/notifications/notifications-screen/notifications-screen.component.ts
@@ -1,7 +1,7 @@
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit } from '@angular/core';
-import { UntypedFormBuilder, UntypedFormGroup } from '@angular/forms';
+import { UntypedFormBuilder } from '@angular/forms';
import { NotificationPreferencesService } from '../../../services/notification-preferences.service';
-import { BaseFormComponent, IqserPermissionsService, LoadingService, Toaster } from '@iqser/common-ui';
+import { BaseFormComponent, getConfig, LoadingService, Toaster } from '@iqser/common-ui';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import {
NotificationCategoriesValues,
@@ -13,7 +13,6 @@ import {
import { firstValueFrom } from 'rxjs';
import { notificationsSettingsTranslations } from '@translations/notifications-settings-translations';
import { getCurrentUser } from '@iqser/common-ui/lib/users';
-import { Roles } from '@users/roles';
const RSS_EXCLUDED_SETTINGS = ['USER_PROMOTED_TO_APPROVER', 'USER_DEGRADED_TO_REVIEWER', 'ASSIGN_REVIEWER'];
@@ -23,19 +22,17 @@ const RSS_EXCLUDED_SETTINGS = ['USER_PROMOTED_TO_APPROVER', 'USER_DEGRADED_TO_RE
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class NotificationsScreenComponent extends BaseFormComponent implements OnInit {
- readonly notificationCategories = NotificationCategoriesValues;
- readonly notificationGroupsKeys = NotificationGroupsKeys;
- readonly notificationGroupsValues = NotificationGroupsValues;
- readonly translations = notificationsSettingsTranslations;
- readonly currentUser = getCurrentUser();
-
readonly #toaster = inject(Toaster);
readonly #formBuilder = inject(UntypedFormBuilder);
readonly #loadingService = inject(LoadingService);
readonly #notificationPreferencesService = inject(NotificationPreferencesService);
readonly #cdRef = inject(ChangeDetectorRef);
- readonly #iqserPermissionsService = inject(IqserPermissionsService);
- readonly #isRss = this.#iqserPermissionsService.has(Roles.getRss);
+ readonly #config = getConfig();
+ readonly notificationCategories = NotificationCategoriesValues;
+ readonly notificationGroupsKeys = NotificationGroupsKeys;
+ readonly notificationGroupsValues = NotificationGroupsValues;
+ readonly translations = notificationsSettingsTranslations;
+ readonly currentUser = getCurrentUser();
constructor() {
super();
@@ -46,7 +43,10 @@ export class NotificationsScreenComponent extends BaseFormComponent implements O
}
getRssFilteredSettings(settings: string[]) {
- return settings.filter(s => (this.#isRss ? !RSS_EXCLUDED_SETTINGS.includes(s) : true));
+ if (this.#config.IS_DOCUMINE) {
+ return settings.filter(s => !RSS_EXCLUDED_SETTINGS.includes(s));
+ }
+ return settings;
}
isCategoryActive(category: string) {
@@ -86,7 +86,7 @@ export class NotificationsScreenComponent extends BaseFormComponent implements O
this.#loadingService.stop();
}
- #getForm(): UntypedFormGroup {
+ #getForm() {
return this.#formBuilder.group({
inAppNotificationsEnabled: [undefined],
emailNotificationsEnabled: [undefined],
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.html
index d3f993aa4..931efd74f 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.html
+++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.html
@@ -79,7 +79,7 @@
-
+
{{ 'download-includes' | translate }}
+
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.ts
index 33a838b66..2537456d6 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-dossier-template-dialog/add-edit-clone-dossier-template-dialog.component.ts
@@ -9,7 +9,6 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { DossierTemplate, IDossierTemplate } from '@red/domain';
import { HttpStatusCode } from '@angular/common/http';
import dayjs, { Dayjs } from 'dayjs';
-import { Roles } from '@users/roles';
interface EditCloneTemplateData {
dossierTemplateId: string;
@@ -26,16 +25,15 @@ const downloadTypes = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(t
styleUrls: ['./add-edit-clone-dossier-template-dialog.component.scss'],
})
export class AddEditCloneDossierTemplateDialogComponent extends BaseDialogComponent {
- readonly roles = Roles;
+ private _previousValidFrom: Dayjs;
+ private _previousValidTo: Dayjs;
+ private _lastValidFrom: Dayjs;
+ private _lastValidTo: Dayjs;
readonly isDocumine = getConfig().IS_DOCUMINE;
hasValidFrom: boolean;
hasValidTo: boolean;
readonly downloadTypes = downloadTypes;
readonly dossierTemplate: DossierTemplate;
- private _previousValidFrom: Dayjs;
- private _previousValidTo: Dayjs;
- private _lastValidFrom: Dayjs;
- private _lastValidTo: Dayjs;
constructor(
private readonly _dossierTemplatesService: DossierTemplatesService,
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html
index 1e7375e6a..0b9200a81 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html
+++ b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.html
@@ -20,7 +20,8 @@
[submit]="true"
[type]="iconButtonTypes.primary"
>
-
+
+
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts
index b5974388a..88f4b2b99 100644
--- a/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/admin/dialogs/add-entity-dialog/add-entity-dialog.component.ts
@@ -1,8 +1,7 @@
import { ChangeDetectionStrategy, Component, inject, ViewChild } from '@angular/core';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component';
-import { BaseDialogComponent, IconButtonTypes } from '@iqser/common-ui';
-import { Roles } from '@users/roles';
+import { BaseDialogComponent, getConfig, IconButtonTypes } from '@iqser/common-ui';
interface DialogData {
readonly dossierTemplateId: string;
@@ -14,10 +13,10 @@ interface DialogData {
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class AddEntityDialogComponent extends BaseDialogComponent {
- readonly iconButtonTypes = IconButtonTypes;
- readonly roles = Roles;
- readonly data = inject(MAT_DIALOG_DATA);
@ViewChild(AddEditEntityComponent, { static: true }) private readonly _addEditEntityComponent: AddEditEntityComponent;
+ readonly iconButtonTypes = IconButtonTypes;
+ readonly data = inject(MAT_DIALOG_DATA);
+ readonly config = getConfig();
constructor(protected readonly _dialogRef: MatDialogRef) {
super(_dialogRef, false);
diff --git a/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.html b/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.html
index d7830e0dd..d6c524524 100644
--- a/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.html
+++ b/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.html
@@ -27,7 +27,7 @@
-
+
diff --git a/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.ts b/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.ts
index e992f7d9c..dac54c423 100644
--- a/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/entities/screens/entity-info/entity-info.component.ts
@@ -5,9 +5,8 @@ import { ActivatedRoute } from '@angular/router';
import { getCurrentUser } from '@users/user.service';
import { PermissionsService } from '@services/permissions.service';
import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component';
-import { IconButtonTypes } from '@iqser/common-ui';
+import { getConfig, IconButtonTypes } from '@iqser/common-ui';
import { Observable } from 'rxjs';
-import { Roles } from '@users/roles';
import { IqserEventTarget } from '@iqser/common-ui/lib/utils';
@Component({
@@ -21,7 +20,7 @@ export class EntityInfoComponent {
readonly currentUser = getCurrentUser();
readonly entity$: Observable;
readonly dossierTemplateId: string;
- readonly roles = Roles;
+ readonly config = getConfig();
readonly iconButtonTypes = IconButtonTypes;
constructor(route: ActivatedRoute, dictionariesMapService: DictionariesMapService, readonly permissionsService: PermissionsService) {
diff --git a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html
index 160e24e3c..ff2097450 100644
--- a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html
+++ b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.html
@@ -86,7 +86,7 @@
[type]="iconButtonTypes.primary"
>
-
+
diff --git a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts
index feed67329..95e89df51 100644
--- a/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/file-attributes-listing/add-edit-file-attribute-dialog/add-edit-file-attribute-dialog.component.ts
@@ -3,14 +3,13 @@ import { ReactiveFormsModule, Validators } from '@angular/forms';
import { FileAttributeConfigTypes, IFileAttributeConfig } from '@red/domain';
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
import { fileAttributeTypesTranslations } from '@translations/file-attribute-types-translations';
-import { BaseDialogComponent, CircleButtonComponent, IconButtonComponent, IqserDenyDirective, IqserHelpModeModule } from '@iqser/common-ui';
+import { BaseDialogComponent, CircleButtonComponent, getConfig, IconButtonComponent, IqserHelpModeModule } from '@iqser/common-ui';
import { TranslateModule } from '@ngx-translate/core';
import { MatFormFieldModule } from '@angular/material/form-field';
import { MatSelectModule } from '@angular/material/select';
-import { NgForOf } from '@angular/common';
+import { NgForOf, NgIf } from '@angular/common';
import { MatCheckboxModule } from '@angular/material/checkbox';
import { MatTooltipModule } from '@angular/material/tooltip';
-import { Roles } from '@users/roles';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
export interface AddEditFileAttributeDialogData {
@@ -35,12 +34,12 @@ export interface AddEditFileAttributeDialogData {
MatTooltipModule,
IconButtonComponent,
CircleButtonComponent,
- IqserDenyDirective,
IqserHelpModeModule,
+ NgIf,
],
})
export class AddEditFileAttributeDialogComponent extends BaseDialogComponent {
- readonly roles = Roles;
+ readonly config = getConfig();
readonly DISPLAYED_FILTERABLE_LIMIT = 3;
readonly translations = fileAttributeTypesTranslations;
readonly fileAttribute = this.data.fileAttribute;
diff --git a/apps/red-ui/src/app/modules/admin/screens/permissions/config.service.ts b/apps/red-ui/src/app/modules/admin/screens/permissions/config.service.ts
deleted file mode 100644
index 846024fd3..000000000
--- a/apps/red-ui/src/app/modules/admin/screens/permissions/config.service.ts
+++ /dev/null
@@ -1,20 +0,0 @@
-import { Injectable } from '@angular/core';
-import { TableColumnConfig } from '@iqser/common-ui';
-import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
-import { PermissionsMapping } from '@red/domain';
-import { PermissionsConfigurationMapService } from '@services/entity-permissions/permissions-configuration-map.service';
-import { permissionsTranslations } from '@translations/permissions-translations';
-
-@Injectable()
-export class ConfigService {
- constructor(private readonly _permissionsConfigurationMapService: PermissionsConfigurationMapService) {}
-
- tableConfig(targetObject: string): TableColumnConfig[] {
- const columns = this._permissionsConfigurationMapService.getMappedPermissions(targetObject).map(p => ({
- label: permissionsTranslations.mapped[p],
- class: 'flex-center',
- }));
-
- return [{ label: _('permissions-screen.table-col-names.permission') }, ...columns];
- }
-}
diff --git a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts
index a7f36d2fa..a58f2305f 100644
--- a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions-screen/permissions-screen.component.ts
@@ -1,27 +1,34 @@
-import { Component, OnDestroy, OnInit } from '@angular/core';
-import { IqserPermissionsService, ListingComponent, listingProvidersFactory, LoadingService, TableColumnConfig } from '@iqser/common-ui';
+import { Component, OnInit } from '@angular/core';
+import {
+ getConfig,
+ IqserPermissionsService,
+ ListingComponent,
+ listingProvidersFactory,
+ LoadingService,
+ TableColumnConfig,
+} from '@iqser/common-ui';
import { PermissionsMapping, User } from '@red/domain';
-import { ConfigService } from '../config.service';
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
import { EntityPermissionsService } from '@services/entity-permissions/entity-permissions.service';
import { ActivatedRoute } from '@angular/router';
import { PermissionsMapService } from '@services/entity-permissions/permissions-map.service';
import { PermissionsConfigurationMapService } from '@services/entity-permissions/permissions-configuration-map.service';
-import { interval, map, Subscription } from 'rxjs';
+import { interval, map } from 'rxjs';
import { switchMap, tap } from 'rxjs/operators';
import { permissionsTranslations } from '@translations/permissions-translations';
import { RouterHistoryService } from '@services/router-history.service';
import { Roles } from '@users/roles';
import { getCurrentUser } from '@iqser/common-ui/lib/users';
import { SortingOrders } from '@iqser/common-ui/lib/sorting';
+import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
@Component({
templateUrl: './permissions-screen.component.html',
styleUrls: ['./permissions-screen.component.scss'],
providers: listingProvidersFactory(PermissionsScreenComponent),
})
-export class PermissionsScreenComponent extends ListingComponent implements OnInit, OnDestroy {
- readonly #subscription: Subscription = new Subscription();
+export class PermissionsScreenComponent extends ListingComponent implements OnInit {
+ readonly #config = getConfig();
readonly roles = Roles;
readonly currentUser = getCurrentUser();
readonly translations = permissionsTranslations;
@@ -32,37 +39,37 @@ export class PermissionsScreenComponent extends ListingComponent permissions.map(p => new PermissionsMapping(p))),
- tap(permissions => this.entitiesService.setEntities(permissions)),
- )
- .subscribe(),
- );
- this.#subscription.add(
- interval(5000)
- .pipe(switchMap(() => this._entityPermissionsService.loadFor(this.targetObject)))
- .subscribe(),
- );
+ this._permissionsMapService
+ .get$(this.targetObject)
+ .pipe(
+ // force update internal mappings set in constructor
+ map(permissions => permissions.map(p => new PermissionsMapping(p))),
+ tap(permissions => this.entitiesService.setEntities(permissions)),
+ takeUntilDestroyed(),
+ )
+ .subscribe();
+
+ interval(5000)
+ .pipe(
+ switchMap(() => this._entityPermissionsService.loadFor(this.targetObject)),
+ takeUntilDestroyed(),
+ )
+ .subscribe();
}
ngOnInit() {
@@ -75,7 +82,20 @@ export class PermissionsScreenComponent extends ListingComponent p !== 'REVIEW');
+ }
+ return mappedPermissions;
+ }
+
+ getTableConfig(mappedPermissions: string[]) {
+ const columns = mappedPermissions.map(p => ({
+ label: permissionsTranslations.mapped[p],
+ class: 'flex-center',
+ }));
+
+ return [{ label: _('permissions-screen.table-col-names.permission') }, ...columns];
}
}
diff --git a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts
index bb54b92c8..c4fdbd7b6 100644
--- a/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts
+++ b/apps/red-ui/src/app/modules/admin/screens/permissions/permissions.module.ts
@@ -2,7 +2,6 @@ import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule } from '@angular/router';
import { PermissionsScreenComponent } from './permissions-screen/permissions-screen.component';
-import { ConfigService } from './config.service';
import { TranslateModule } from '@ngx-translate/core';
import { IqserHelpModeModule, IqserListingModule } from '@iqser/common-ui';
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
@@ -12,6 +11,5 @@ const routes = [{ path: '', component: PermissionsScreenComponent }];
@NgModule({
declarations: [PermissionsScreenComponent],
imports: [RouterModule.forChild(routes), CommonModule, TranslateModule, IqserListingModule, IqserHelpModeModule, MatSlideToggleModule],
- providers: [ConfigService],
})
export class PermissionsModule {}
diff --git a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html
index 850cc8726..26943eaff 100644
--- a/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html
+++ b/apps/red-ui/src/app/modules/shared/components/add-edit-entity/add-edit-entity.component.html
@@ -85,7 +85,7 @@