DM-364 & DM-363 use IS_DOCUMINE & change dossier permissions
This commit is contained in:
parent
a7d1eb115a
commit
086ccb6f95
@ -1,4 +1,4 @@
|
|||||||
<iqser-help-mode *deny="roles.getRss"></iqser-help-mode>
|
<iqser-help-mode *ngIf="!config.IS_DOCUMINE"></iqser-help-mode>
|
||||||
|
|
||||||
<div class="top-bar">
|
<div class="top-bar">
|
||||||
<ng-template #menuPlaceholder>
|
<ng-template #menuPlaceholder>
|
||||||
@ -25,7 +25,7 @@
|
|||||||
[placeholder]="'search.placeholder' | translate"
|
[placeholder]="'search.placeholder' | translate"
|
||||||
></redaction-spotlight-search>
|
></redaction-spotlight-search>
|
||||||
|
|
||||||
<iqser-help-button *deny="roles.getRss" [attr.help-mode-key]="'help_mode'" id="help-mode-button"></iqser-help-button>
|
<iqser-help-button *ngIf="!config.IS_DOCUMINE" [attr.help-mode-key]="'help_mode'" id="help-mode-button"></iqser-help-button>
|
||||||
|
|
||||||
<redaction-notifications
|
<redaction-notifications
|
||||||
*ngIf="currentUser.isUser || currentUser.isManager"
|
*ngIf="currentUser.isUser || currentUser.isManager"
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { Title } from '@angular/platform-browser';
|
|||||||
import { TranslateService } from '@ngx-translate/core';
|
import { TranslateService } from '@ngx-translate/core';
|
||||||
import { SpotlightSearchAction } from '@components/spotlight-search/spotlight-search-action';
|
import { SpotlightSearchAction } from '@components/spotlight-search/spotlight-search-action';
|
||||||
import { filter, map, startWith } from 'rxjs/operators';
|
import { filter, map, startWith } from 'rxjs/operators';
|
||||||
import { IqserPermissionsService } from '@iqser/common-ui';
|
import { getConfig, IqserPermissionsService } from '@iqser/common-ui';
|
||||||
import { BreadcrumbsService } from '@services/breadcrumbs.service';
|
import { BreadcrumbsService } from '@services/breadcrumbs.service';
|
||||||
import { FeaturesService } from '@services/features.service';
|
import { FeaturesService } from '@services/features.service';
|
||||||
import { ARCHIVE_ROUTE, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE } from '@red/domain';
|
import { ARCHIVE_ROUTE, DOSSIERS_ARCHIVE, DOSSIERS_ROUTE } from '@red/domain';
|
||||||
@ -24,6 +24,12 @@ const isSearchScreen: (url: string) => boolean = url => url.includes('/search');
|
|||||||
styleUrls: ['./base-screen.component.scss'],
|
styleUrls: ['./base-screen.component.scss'],
|
||||||
})
|
})
|
||||||
export class BaseScreenComponent {
|
export class BaseScreenComponent {
|
||||||
|
readonly #navigationStart$ = this._router.events.pipe(
|
||||||
|
filter(isNavigationStart),
|
||||||
|
map(event => event.url),
|
||||||
|
startWith(this._router.url),
|
||||||
|
shareDistinctLast(),
|
||||||
|
);
|
||||||
readonly roles = Roles;
|
readonly roles = Roles;
|
||||||
readonly documentViewer = inject(REDDocumentViewer);
|
readonly documentViewer = inject(REDDocumentViewer);
|
||||||
readonly currentUser = this.userService.currentUser;
|
readonly currentUser = this.userService.currentUser;
|
||||||
@ -46,23 +52,8 @@ export class BaseScreenComponent {
|
|||||||
action: (query): void => this.#search(query, []),
|
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));
|
readonly isSearchScreen$ = this.#navigationStart$.pipe(map(isSearchScreen));
|
||||||
|
readonly config = getConfig();
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _router: Router,
|
private readonly _router: Router,
|
||||||
@ -80,6 +71,16 @@ export class BaseScreenComponent {
|
|||||||
activatedRoute.queryParamMap.pipe(takeUntilDestroyed()).subscribe(queryParams => this.#navigate(queryParams));
|
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) {
|
#navigate(queryParams: ParamMap) {
|
||||||
if (queryParams.has('username')) {
|
if (queryParams.has('username')) {
|
||||||
return this._router.navigate([], {
|
return this._router.navigate([], {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, inject, OnInit } from '@angular/core';
|
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 { 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 { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import {
|
import {
|
||||||
NotificationCategoriesValues,
|
NotificationCategoriesValues,
|
||||||
@ -13,7 +13,6 @@ import {
|
|||||||
import { firstValueFrom } from 'rxjs';
|
import { firstValueFrom } from 'rxjs';
|
||||||
import { notificationsSettingsTranslations } from '@translations/notifications-settings-translations';
|
import { notificationsSettingsTranslations } from '@translations/notifications-settings-translations';
|
||||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
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'];
|
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,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class NotificationsScreenComponent extends BaseFormComponent implements OnInit {
|
export class NotificationsScreenComponent extends BaseFormComponent implements OnInit {
|
||||||
readonly notificationCategories = NotificationCategoriesValues;
|
|
||||||
readonly notificationGroupsKeys = NotificationGroupsKeys;
|
|
||||||
readonly notificationGroupsValues = NotificationGroupsValues;
|
|
||||||
readonly translations = notificationsSettingsTranslations;
|
|
||||||
readonly currentUser = getCurrentUser<User>();
|
|
||||||
|
|
||||||
readonly #toaster = inject(Toaster);
|
readonly #toaster = inject(Toaster);
|
||||||
readonly #formBuilder = inject(UntypedFormBuilder);
|
readonly #formBuilder = inject(UntypedFormBuilder);
|
||||||
readonly #loadingService = inject(LoadingService);
|
readonly #loadingService = inject(LoadingService);
|
||||||
readonly #notificationPreferencesService = inject(NotificationPreferencesService);
|
readonly #notificationPreferencesService = inject(NotificationPreferencesService);
|
||||||
readonly #cdRef = inject(ChangeDetectorRef);
|
readonly #cdRef = inject(ChangeDetectorRef);
|
||||||
readonly #iqserPermissionsService = inject(IqserPermissionsService);
|
readonly #config = getConfig();
|
||||||
readonly #isRss = this.#iqserPermissionsService.has(Roles.getRss);
|
readonly notificationCategories = NotificationCategoriesValues;
|
||||||
|
readonly notificationGroupsKeys = NotificationGroupsKeys;
|
||||||
|
readonly notificationGroupsValues = NotificationGroupsValues;
|
||||||
|
readonly translations = notificationsSettingsTranslations;
|
||||||
|
readonly currentUser = getCurrentUser<User>();
|
||||||
|
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
@ -46,7 +43,10 @@ export class NotificationsScreenComponent extends BaseFormComponent implements O
|
|||||||
}
|
}
|
||||||
|
|
||||||
getRssFilteredSettings(settings: string[]) {
|
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) {
|
isCategoryActive(category: string) {
|
||||||
@ -86,7 +86,7 @@ export class NotificationsScreenComponent extends BaseFormComponent implements O
|
|||||||
this.#loadingService.stop();
|
this.#loadingService.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
#getForm(): UntypedFormGroup {
|
#getForm() {
|
||||||
return this.#formBuilder.group({
|
return this.#formBuilder.group({
|
||||||
inAppNotificationsEnabled: [undefined],
|
inAppNotificationsEnabled: [undefined],
|
||||||
emailNotificationsEnabled: [undefined],
|
emailNotificationsEnabled: [undefined],
|
||||||
|
|||||||
@ -79,7 +79,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<ng-container *deny="roles.getRss">
|
<ng-container *ngIf="!isDocumine">
|
||||||
<p class="heading download-includes">{{ 'download-includes' | translate }}</p>
|
<p class="heading download-includes">{{ 'download-includes' | translate }}</p>
|
||||||
<div class="flex">
|
<div class="flex">
|
||||||
<redaction-select
|
<redaction-select
|
||||||
@ -130,8 +130,9 @@
|
|||||||
[label]="'add-edit-clone-dossier-template.save' | translate"
|
[label]="'add-edit-clone-dossier-template.save' | translate"
|
||||||
[type]="iconButtonTypes.primary"
|
[type]="iconButtonTypes.primary"
|
||||||
></iqser-icon-button>
|
></iqser-icon-button>
|
||||||
|
|
||||||
<iqser-help-button
|
<iqser-help-button
|
||||||
*deny="roles.getRss; if: !!dossierTemplate"
|
*ngIf="!isDocumine && !!dossierTemplate"
|
||||||
[helpButtonKey]="'edit_clone_delete_dossier_templates'"
|
[helpButtonKey]="'edit_clone_delete_dossier_templates'"
|
||||||
></iqser-help-button>
|
></iqser-help-button>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -9,7 +9,6 @@ import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
|||||||
import { DossierTemplate, IDossierTemplate } from '@red/domain';
|
import { DossierTemplate, IDossierTemplate } from '@red/domain';
|
||||||
import { HttpStatusCode } from '@angular/common/http';
|
import { HttpStatusCode } from '@angular/common/http';
|
||||||
import dayjs, { Dayjs } from 'dayjs';
|
import dayjs, { Dayjs } from 'dayjs';
|
||||||
import { Roles } from '@users/roles';
|
|
||||||
|
|
||||||
interface EditCloneTemplateData {
|
interface EditCloneTemplateData {
|
||||||
dossierTemplateId: string;
|
dossierTemplateId: string;
|
||||||
@ -26,16 +25,15 @@ const downloadTypes = ['ORIGINAL', 'PREVIEW', 'DELTA_PREVIEW', 'REDACTED'].map(t
|
|||||||
styleUrls: ['./add-edit-clone-dossier-template-dialog.component.scss'],
|
styleUrls: ['./add-edit-clone-dossier-template-dialog.component.scss'],
|
||||||
})
|
})
|
||||||
export class AddEditCloneDossierTemplateDialogComponent extends BaseDialogComponent {
|
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;
|
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||||
hasValidFrom: boolean;
|
hasValidFrom: boolean;
|
||||||
hasValidTo: boolean;
|
hasValidTo: boolean;
|
||||||
readonly downloadTypes = downloadTypes;
|
readonly downloadTypes = downloadTypes;
|
||||||
readonly dossierTemplate: DossierTemplate;
|
readonly dossierTemplate: DossierTemplate;
|
||||||
private _previousValidFrom: Dayjs;
|
|
||||||
private _previousValidTo: Dayjs;
|
|
||||||
private _lastValidFrom: Dayjs;
|
|
||||||
private _lastValidTo: Dayjs;
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _dossierTemplatesService: DossierTemplatesService,
|
private readonly _dossierTemplatesService: DossierTemplatesService,
|
||||||
|
|||||||
@ -20,7 +20,8 @@
|
|||||||
[submit]="true"
|
[submit]="true"
|
||||||
[type]="iconButtonTypes.primary"
|
[type]="iconButtonTypes.primary"
|
||||||
></iqser-icon-button>
|
></iqser-icon-button>
|
||||||
<iqser-help-button *deny="roles.getRss" [helpButtonKey]="'create_new_entity'"></iqser-help-button>
|
|
||||||
|
<iqser-help-button *ngIf="!config.IS_DOCUMINE" [helpButtonKey]="'create_new_entity'"></iqser-help-button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<iqser-circle-button (action)="close()" class="dialog-close" icon="iqser:close"></iqser-circle-button>
|
<iqser-circle-button (action)="close()" class="dialog-close" icon="iqser:close"></iqser-circle-button>
|
||||||
|
|||||||
@ -1,8 +1,7 @@
|
|||||||
import { ChangeDetectionStrategy, Component, inject, ViewChild } from '@angular/core';
|
import { ChangeDetectionStrategy, Component, inject, ViewChild } from '@angular/core';
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||||
import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component';
|
import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component';
|
||||||
import { BaseDialogComponent, IconButtonTypes } from '@iqser/common-ui';
|
import { BaseDialogComponent, getConfig, IconButtonTypes } from '@iqser/common-ui';
|
||||||
import { Roles } from '@users/roles';
|
|
||||||
|
|
||||||
interface DialogData {
|
interface DialogData {
|
||||||
readonly dossierTemplateId: string;
|
readonly dossierTemplateId: string;
|
||||||
@ -14,10 +13,10 @@ interface DialogData {
|
|||||||
changeDetection: ChangeDetectionStrategy.OnPush,
|
changeDetection: ChangeDetectionStrategy.OnPush,
|
||||||
})
|
})
|
||||||
export class AddEntityDialogComponent extends BaseDialogComponent {
|
export class AddEntityDialogComponent extends BaseDialogComponent {
|
||||||
readonly iconButtonTypes = IconButtonTypes;
|
|
||||||
readonly roles = Roles;
|
|
||||||
readonly data = inject<DialogData>(MAT_DIALOG_DATA);
|
|
||||||
@ViewChild(AddEditEntityComponent, { static: true }) private readonly _addEditEntityComponent: AddEditEntityComponent;
|
@ViewChild(AddEditEntityComponent, { static: true }) private readonly _addEditEntityComponent: AddEditEntityComponent;
|
||||||
|
readonly iconButtonTypes = IconButtonTypes;
|
||||||
|
readonly data = inject<DialogData>(MAT_DIALOG_DATA);
|
||||||
|
readonly config = getConfig();
|
||||||
|
|
||||||
constructor(protected readonly _dialogRef: MatDialogRef<AddEntityDialogComponent>) {
|
constructor(protected readonly _dialogRef: MatDialogRef<AddEntityDialogComponent>) {
|
||||||
super(_dialogRef, false);
|
super(_dialogRef, false);
|
||||||
|
|||||||
@ -27,7 +27,7 @@
|
|||||||
|
|
||||||
<div (click)="revert()" [translate]="'entity.info.actions.revert'" class="all-caps-label cancel"></div>
|
<div (click)="revert()" [translate]="'entity.info.actions.revert'" class="all-caps-label cancel"></div>
|
||||||
|
|
||||||
<iqser-help-button *deny="roles.getRss" [helpButtonKey]="'edit_delete_entities'"></iqser-help-button>
|
<iqser-help-button *ngIf="!config.IS_DOCUMINE" [helpButtonKey]="'edit_delete_entities'"></iqser-help-button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@ -5,9 +5,8 @@ import { ActivatedRoute } from '@angular/router';
|
|||||||
import { getCurrentUser } from '@users/user.service';
|
import { getCurrentUser } from '@users/user.service';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
import { PermissionsService } from '@services/permissions.service';
|
||||||
import { AddEditEntityComponent } from '@shared/components/add-edit-entity/add-edit-entity.component';
|
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 { Observable } from 'rxjs';
|
||||||
import { Roles } from '@users/roles';
|
|
||||||
import { IqserEventTarget } from '@iqser/common-ui/lib/utils';
|
import { IqserEventTarget } from '@iqser/common-ui/lib/utils';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
@ -21,7 +20,7 @@ export class EntityInfoComponent {
|
|||||||
readonly currentUser = getCurrentUser();
|
readonly currentUser = getCurrentUser();
|
||||||
readonly entity$: Observable<Dictionary>;
|
readonly entity$: Observable<Dictionary>;
|
||||||
readonly dossierTemplateId: string;
|
readonly dossierTemplateId: string;
|
||||||
readonly roles = Roles;
|
readonly config = getConfig();
|
||||||
readonly iconButtonTypes = IconButtonTypes;
|
readonly iconButtonTypes = IconButtonTypes;
|
||||||
|
|
||||||
constructor(route: ActivatedRoute, dictionariesMapService: DictionariesMapService, readonly permissionsService: PermissionsService) {
|
constructor(route: ActivatedRoute, dictionariesMapService: DictionariesMapService, readonly permissionsService: PermissionsService) {
|
||||||
|
|||||||
@ -86,7 +86,7 @@
|
|||||||
[type]="iconButtonTypes.primary"
|
[type]="iconButtonTypes.primary"
|
||||||
></iqser-icon-button>
|
></iqser-icon-button>
|
||||||
|
|
||||||
<iqser-help-button *deny="roles.getRss" [helpButtonKey]="'edit_delete_file_attribute'"></iqser-help-button>
|
<iqser-help-button *ngIf="!config.IS_DOCUMINE" [helpButtonKey]="'edit_delete_file_attribute'"></iqser-help-button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|
||||||
|
|||||||
@ -3,14 +3,13 @@ import { ReactiveFormsModule, Validators } from '@angular/forms';
|
|||||||
import { FileAttributeConfigTypes, IFileAttributeConfig } from '@red/domain';
|
import { FileAttributeConfigTypes, IFileAttributeConfig } from '@red/domain';
|
||||||
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
|
||||||
import { fileAttributeTypesTranslations } from '@translations/file-attribute-types-translations';
|
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 { TranslateModule } from '@ngx-translate/core';
|
||||||
import { MatFormFieldModule } from '@angular/material/form-field';
|
import { MatFormFieldModule } from '@angular/material/form-field';
|
||||||
import { MatSelectModule } from '@angular/material/select';
|
import { MatSelectModule } from '@angular/material/select';
|
||||||
import { NgForOf } from '@angular/common';
|
import { NgForOf, NgIf } from '@angular/common';
|
||||||
import { MatCheckboxModule } from '@angular/material/checkbox';
|
import { MatCheckboxModule } from '@angular/material/checkbox';
|
||||||
import { MatTooltipModule } from '@angular/material/tooltip';
|
import { MatTooltipModule } from '@angular/material/tooltip';
|
||||||
import { Roles } from '@users/roles';
|
|
||||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||||
|
|
||||||
export interface AddEditFileAttributeDialogData {
|
export interface AddEditFileAttributeDialogData {
|
||||||
@ -35,12 +34,12 @@ export interface AddEditFileAttributeDialogData {
|
|||||||
MatTooltipModule,
|
MatTooltipModule,
|
||||||
IconButtonComponent,
|
IconButtonComponent,
|
||||||
CircleButtonComponent,
|
CircleButtonComponent,
|
||||||
IqserDenyDirective,
|
|
||||||
IqserHelpModeModule,
|
IqserHelpModeModule,
|
||||||
|
NgIf,
|
||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class AddEditFileAttributeDialogComponent extends BaseDialogComponent {
|
export class AddEditFileAttributeDialogComponent extends BaseDialogComponent {
|
||||||
readonly roles = Roles;
|
readonly config = getConfig();
|
||||||
readonly DISPLAYED_FILTERABLE_LIMIT = 3;
|
readonly DISPLAYED_FILTERABLE_LIMIT = 3;
|
||||||
readonly translations = fileAttributeTypesTranslations;
|
readonly translations = fileAttributeTypesTranslations;
|
||||||
readonly fileAttribute = this.data.fileAttribute;
|
readonly fileAttribute = this.data.fileAttribute;
|
||||||
|
|||||||
@ -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<PermissionsMapping>[] {
|
|
||||||
const columns = this._permissionsConfigurationMapService.getMappedPermissions(targetObject).map(p => ({
|
|
||||||
label: permissionsTranslations.mapped[p],
|
|
||||||
class: 'flex-center',
|
|
||||||
}));
|
|
||||||
|
|
||||||
return [{ label: _('permissions-screen.table-col-names.permission') }, ...columns];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -1,27 +1,34 @@
|
|||||||
import { Component, OnDestroy, OnInit } from '@angular/core';
|
import { Component, OnInit } from '@angular/core';
|
||||||
import { IqserPermissionsService, ListingComponent, listingProvidersFactory, LoadingService, TableColumnConfig } from '@iqser/common-ui';
|
import {
|
||||||
|
getConfig,
|
||||||
|
IqserPermissionsService,
|
||||||
|
ListingComponent,
|
||||||
|
listingProvidersFactory,
|
||||||
|
LoadingService,
|
||||||
|
TableColumnConfig,
|
||||||
|
} from '@iqser/common-ui';
|
||||||
import { PermissionsMapping, User } from '@red/domain';
|
import { PermissionsMapping, User } from '@red/domain';
|
||||||
import { ConfigService } from '../config.service';
|
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { EntityPermissionsService } from '@services/entity-permissions/entity-permissions.service';
|
import { EntityPermissionsService } from '@services/entity-permissions/entity-permissions.service';
|
||||||
import { ActivatedRoute } from '@angular/router';
|
import { ActivatedRoute } from '@angular/router';
|
||||||
import { PermissionsMapService } from '@services/entity-permissions/permissions-map.service';
|
import { PermissionsMapService } from '@services/entity-permissions/permissions-map.service';
|
||||||
import { PermissionsConfigurationMapService } from '@services/entity-permissions/permissions-configuration-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 { switchMap, tap } from 'rxjs/operators';
|
||||||
import { permissionsTranslations } from '@translations/permissions-translations';
|
import { permissionsTranslations } from '@translations/permissions-translations';
|
||||||
import { RouterHistoryService } from '@services/router-history.service';
|
import { RouterHistoryService } from '@services/router-history.service';
|
||||||
import { Roles } from '@users/roles';
|
import { Roles } from '@users/roles';
|
||||||
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
import { getCurrentUser } from '@iqser/common-ui/lib/users';
|
||||||
import { SortingOrders } from '@iqser/common-ui/lib/sorting';
|
import { SortingOrders } from '@iqser/common-ui/lib/sorting';
|
||||||
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
templateUrl: './permissions-screen.component.html',
|
templateUrl: './permissions-screen.component.html',
|
||||||
styleUrls: ['./permissions-screen.component.scss'],
|
styleUrls: ['./permissions-screen.component.scss'],
|
||||||
providers: listingProvidersFactory(PermissionsScreenComponent),
|
providers: listingProvidersFactory(PermissionsScreenComponent),
|
||||||
})
|
})
|
||||||
export class PermissionsScreenComponent extends ListingComponent<PermissionsMapping> implements OnInit, OnDestroy {
|
export class PermissionsScreenComponent extends ListingComponent<PermissionsMapping> implements OnInit {
|
||||||
readonly #subscription: Subscription = new Subscription();
|
readonly #config = getConfig();
|
||||||
readonly roles = Roles;
|
readonly roles = Roles;
|
||||||
readonly currentUser = getCurrentUser<User>();
|
readonly currentUser = getCurrentUser<User>();
|
||||||
readonly translations = permissionsTranslations;
|
readonly translations = permissionsTranslations;
|
||||||
@ -32,37 +39,37 @@ export class PermissionsScreenComponent extends ListingComponent<PermissionsMapp
|
|||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
route: ActivatedRoute,
|
route: ActivatedRoute,
|
||||||
configService: ConfigService,
|
|
||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
readonly routerHistoryService: RouterHistoryService,
|
readonly routerHistoryService: RouterHistoryService,
|
||||||
readonly permissionsService: IqserPermissionsService,
|
readonly permissionsService: IqserPermissionsService,
|
||||||
private readonly _permissionsMapService: PermissionsMapService,
|
private readonly _permissionsMapService: PermissionsMapService,
|
||||||
private readonly _entityPermissionsService: EntityPermissionsService,
|
private readonly _entityPermissionsService: EntityPermissionsService,
|
||||||
permissionsConfigurationMapService: PermissionsConfigurationMapService,
|
private readonly _permissionsConfigurationMapService: PermissionsConfigurationMapService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
this.targetObject = route.snapshot.data.permissionsObject;
|
this.targetObject = route.snapshot.data.permissionsObject;
|
||||||
this.tableColumnConfigs = configService.tableConfig(this.targetObject);
|
this.mappedPermissions = this.getMappedPermissions(this.targetObject);
|
||||||
this.mappedPermissions = permissionsConfigurationMapService.getMappedPermissions(this.targetObject);
|
this.tableColumnConfigs = this.getTableConfig(this.mappedPermissions);
|
||||||
this.sortingService.setSortingOption({
|
this.sortingService.setSortingOption({
|
||||||
column: 'sort',
|
column: 'sort',
|
||||||
order: SortingOrders.asc,
|
order: SortingOrders.asc,
|
||||||
});
|
});
|
||||||
this.#subscription.add(
|
this._permissionsMapService
|
||||||
this._permissionsMapService
|
.get$(this.targetObject)
|
||||||
.get$(this.targetObject)
|
.pipe(
|
||||||
.pipe(
|
// force update internal mappings set in constructor
|
||||||
// force update internal mappings set in constructor
|
map(permissions => permissions.map(p => new PermissionsMapping(p))),
|
||||||
map(permissions => permissions.map(p => new PermissionsMapping(p))),
|
tap(permissions => this.entitiesService.setEntities(permissions)),
|
||||||
tap(permissions => this.entitiesService.setEntities(permissions)),
|
takeUntilDestroyed(),
|
||||||
)
|
)
|
||||||
.subscribe(),
|
.subscribe();
|
||||||
);
|
|
||||||
this.#subscription.add(
|
interval(5000)
|
||||||
interval(5000)
|
.pipe(
|
||||||
.pipe(switchMap(() => this._entityPermissionsService.loadFor(this.targetObject)))
|
switchMap(() => this._entityPermissionsService.loadFor(this.targetObject)),
|
||||||
.subscribe(),
|
takeUntilDestroyed(),
|
||||||
);
|
)
|
||||||
|
.subscribe();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
@ -75,7 +82,20 @@ export class PermissionsScreenComponent extends ListingComponent<PermissionsMapp
|
|||||||
this._loadingService.stop();
|
this._loadingService.stop();
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy(): void {
|
getMappedPermissions(targetObject: string) {
|
||||||
this.#subscription.unsubscribe();
|
const mappedPermissions = this._permissionsConfigurationMapService.getMappedPermissions(targetObject);
|
||||||
|
if (this.#config.IS_DOCUMINE) {
|
||||||
|
return mappedPermissions.filter(p => 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];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,6 @@ import { NgModule } from '@angular/core';
|
|||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { RouterModule } from '@angular/router';
|
import { RouterModule } from '@angular/router';
|
||||||
import { PermissionsScreenComponent } from './permissions-screen/permissions-screen.component';
|
import { PermissionsScreenComponent } from './permissions-screen/permissions-screen.component';
|
||||||
import { ConfigService } from './config.service';
|
|
||||||
import { TranslateModule } from '@ngx-translate/core';
|
import { TranslateModule } from '@ngx-translate/core';
|
||||||
import { IqserHelpModeModule, IqserListingModule } from '@iqser/common-ui';
|
import { IqserHelpModeModule, IqserListingModule } from '@iqser/common-ui';
|
||||||
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
import { MatSlideToggleModule } from '@angular/material/slide-toggle';
|
||||||
@ -12,6 +11,5 @@ const routes = [{ path: '', component: PermissionsScreenComponent }];
|
|||||||
@NgModule({
|
@NgModule({
|
||||||
declarations: [PermissionsScreenComponent],
|
declarations: [PermissionsScreenComponent],
|
||||||
imports: [RouterModule.forChild(routes), CommonModule, TranslateModule, IqserListingModule, IqserHelpModeModule, MatSlideToggleModule],
|
imports: [RouterModule.forChild(routes), CommonModule, TranslateModule, IqserListingModule, IqserHelpModeModule, MatSlideToggleModule],
|
||||||
providers: [ConfigService],
|
|
||||||
})
|
})
|
||||||
export class PermissionsModule {}
|
export class PermissionsModule {}
|
||||||
|
|||||||
@ -85,7 +85,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div *ngIf="form.get('hasDictionary')?.value" class="dictionary-extras">
|
<div *ngIf="form.get('hasDictionary')?.value" class="dictionary-extras">
|
||||||
<ng-container *deny="roles.getRss">
|
<ng-container *ngIf="!isDocumine">
|
||||||
<span
|
<span
|
||||||
(click)="toggleDossierOnlyEntity()"
|
(click)="toggleDossierOnlyEntity()"
|
||||||
*ngIf="form.get('dossierDictionaryOnly') as field"
|
*ngIf="form.get('dossierDictionaryOnly') as field"
|
||||||
|
|||||||
@ -5,10 +5,8 @@ import { map, startWith } from 'rxjs/operators';
|
|||||||
import { firstValueFrom, Observable } from 'rxjs';
|
import { firstValueFrom, Observable } from 'rxjs';
|
||||||
import { toSnakeCase } from '@utils/functions';
|
import { toSnakeCase } from '@utils/functions';
|
||||||
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
|
import { DictionariesMapService } from '@services/entity-services/dictionaries-map.service';
|
||||||
import { PermissionsService } from '@services/permissions.service';
|
|
||||||
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker';
|
||||||
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
import { DictionaryService } from '@services/entity-services/dictionary.service';
|
||||||
import { Roles } from '@users/roles';
|
|
||||||
import { BaseFormComponent, getConfig, LoadingService, Toaster } from '@iqser/common-ui';
|
import { BaseFormComponent, getConfig, LoadingService, Toaster } from '@iqser/common-ui';
|
||||||
|
|
||||||
const REDACTION_FIELDS = ['defaultReason'];
|
const REDACTION_FIELDS = ['defaultReason'];
|
||||||
@ -36,13 +34,10 @@ export class AddEditEntityComponent extends BaseFormComponent implements OnInit
|
|||||||
technicalName$: Observable<string>;
|
technicalName$: Observable<string>;
|
||||||
|
|
||||||
colors: Color[];
|
colors: Color[];
|
||||||
readonly roles = Roles;
|
|
||||||
|
|
||||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _dictionariesMapService: DictionariesMapService,
|
private readonly _dictionariesMapService: DictionariesMapService,
|
||||||
private readonly _permissionsService: PermissionsService,
|
|
||||||
private readonly _dictionaryService: DictionaryService,
|
private readonly _dictionaryService: DictionaryService,
|
||||||
private readonly _toaster: Toaster,
|
private readonly _toaster: Toaster,
|
||||||
private readonly _loadingService: LoadingService,
|
private readonly _loadingService: LoadingService,
|
||||||
|
|||||||
@ -18,13 +18,13 @@
|
|||||||
></redaction-select>
|
></redaction-select>
|
||||||
|
|
||||||
<redaction-select
|
<redaction-select
|
||||||
*deny="roles.getRss"
|
*ngIf="!isDocumine"
|
||||||
[label]="'download-type.label' | translate : { length: downloadFileTypesLength }"
|
[label]="'download-type.label' | translate : { length: downloadFileTypesLength }"
|
||||||
[options]="downloadTypes"
|
[options]="downloadTypes"
|
||||||
formControlName="downloadFileTypes"
|
formControlName="downloadFileTypes"
|
||||||
></redaction-select>
|
></redaction-select>
|
||||||
|
|
||||||
<div *deny="roles.getRss" class="iqser-input-group required">
|
<div *ngIf="!isDocumine" class="iqser-input-group required">
|
||||||
<label translate="download-dialog.form.redaction-preview-color"></label>
|
<label translate="download-dialog.form.redaction-preview-color"></label>
|
||||||
<input
|
<input
|
||||||
[placeholder]="'download-dialog.form.redaction-preview-color-placeholder' | translate"
|
[placeholder]="'download-dialog.form.redaction-preview-color-placeholder' | translate"
|
||||||
|
|||||||
@ -4,15 +4,7 @@ import { downloadTypesForDownloadTranslations } from '@translations/download-typ
|
|||||||
import { ReportTemplateService } from '@services/report-template.service';
|
import { ReportTemplateService } from '@services/report-template.service';
|
||||||
import { AbstractControl, FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
import { AbstractControl, FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
||||||
import { DefaultColorsService } from '@services/entity-services/default-colors.service';
|
import { DefaultColorsService } from '@services/entity-services/default-colors.service';
|
||||||
import {
|
import { CircleButtonComponent, getConfig, IconButtonComponent, IconButtonTypes, IqserDialogComponent } from '@iqser/common-ui';
|
||||||
CircleButtonComponent,
|
|
||||||
getConfig,
|
|
||||||
IconButtonComponent,
|
|
||||||
IconButtonTypes,
|
|
||||||
IqserDenyDirective,
|
|
||||||
IqserDialogComponent,
|
|
||||||
} from '@iqser/common-ui';
|
|
||||||
import { Roles } from '@users/roles';
|
|
||||||
import { List } from '@iqser/common-ui/lib/utils';
|
import { List } from '@iqser/common-ui/lib/utils';
|
||||||
import { NGXLogger } from 'ngx-logger';
|
import { NGXLogger } from 'ngx-logger';
|
||||||
import { AsyncPipe, NgIf } from '@angular/common';
|
import { AsyncPipe, NgIf } from '@angular/common';
|
||||||
@ -41,7 +33,6 @@ export interface DownloadDialogResult {
|
|||||||
ReactiveFormsModule,
|
ReactiveFormsModule,
|
||||||
SelectComponent,
|
SelectComponent,
|
||||||
TranslateModule,
|
TranslateModule,
|
||||||
IqserDenyDirective,
|
|
||||||
ColorPickerModule,
|
ColorPickerModule,
|
||||||
MatIconModule,
|
MatIconModule,
|
||||||
IconButtonComponent,
|
IconButtonComponent,
|
||||||
@ -50,15 +41,14 @@ export interface DownloadDialogResult {
|
|||||||
],
|
],
|
||||||
})
|
})
|
||||||
export class DownloadDialogComponent extends IqserDialogComponent<DownloadDialogComponent, DownloadDialogData, DownloadDialogResult> {
|
export class DownloadDialogComponent extends IqserDialogComponent<DownloadDialogComponent, DownloadDialogData, DownloadDialogResult> {
|
||||||
|
readonly #logger = inject(NGXLogger);
|
||||||
readonly iconButtonTypes = IconButtonTypes;
|
readonly iconButtonTypes = IconButtonTypes;
|
||||||
readonly hasApprovedFiles: boolean;
|
readonly hasApprovedFiles: boolean;
|
||||||
readonly downloadTypes: { key: DownloadFileType; label: string }[];
|
readonly downloadTypes: { key: DownloadFileType; label: string }[];
|
||||||
readonly availableReportTypes = this.#availableReportTypes;
|
readonly availableReportTypes = this.#availableReportTypes;
|
||||||
readonly form = this.#getForm();
|
readonly form = this.#getForm();
|
||||||
readonly isDocumine = getConfig().IS_DOCUMINE;
|
readonly isDocumine = getConfig().IS_DOCUMINE;
|
||||||
readonly roles = Roles;
|
|
||||||
initialFormValue = this.form.getRawValue();
|
initialFormValue = this.form.getRawValue();
|
||||||
readonly #logger = inject(NGXLogger);
|
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
private readonly _defaultColorsService: DefaultColorsService,
|
private readonly _defaultColorsService: DefaultColorsService,
|
||||||
|
|||||||
@ -1931,10 +1931,10 @@
|
|||||||
},
|
},
|
||||||
"label": "{targetObject, select, Dossier{Dossier} other{}} Permissions",
|
"label": "{targetObject, select, Dossier{Dossier} other{}} Permissions",
|
||||||
"mapped": {
|
"mapped": {
|
||||||
"approve": "Approvers",
|
"approve": "Dossier members",
|
||||||
"everyone-else": "Everyone else",
|
"everyone-else": "Everyone else",
|
||||||
"owner": "Owner",
|
"owner": "Owner",
|
||||||
"review": "Reviewers"
|
"review": ""
|
||||||
},
|
},
|
||||||
"table-col-names": {
|
"table-col-names": {
|
||||||
"permission": "Permission"
|
"permission": "Permission"
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
FROM node:20.4-buster as builder
|
FROM node:20.5-buster as builder
|
||||||
|
|
||||||
WORKDIR /ng-app
|
WORKDIR /ng-app
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user