@@ -64,7 +63,7 @@
>
-
diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.scss b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.scss
index 919436a78..17e669f30 100644
--- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.scss
+++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.scss
@@ -11,10 +11,6 @@ form {
flex-direction: column;
}
-.search-container {
- margin-top: 16px;
-}
-
redaction-team-members {
margin-top: -4px;
display: block;
diff --git a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts
index a8f2653b6..2d330d904 100644
--- a/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts
+++ b/apps/red-ui/src/app/modules/shared-dossiers/dialogs/edit-dossier-dialog/edit-dossier-team/edit-dossier-team.component.ts
@@ -19,26 +19,26 @@ import { EditDossierSaveResult, EditDossierSectionInterface } from '../edit-doss
changeDetection: ChangeDetectionStrategy.OnPush,
})
export class EditDossierTeamComponent implements EditDossierSectionInterface, OnChanges {
- readonly #userService = inject(UserService);
- readonly #dossiersService = inject(DossiersService);
- readonly #permissionsService = inject(PermissionsService);
- readonly #filesService = inject(FilesService);
form = this.#getForm();
- readonly #formValue$ = this.form.valueChanges;
searchQuery = '';
@Input() dossier: Dossier;
membersSelectOptions: string[] = [];
+ readonly isDocumine = getConfig().IS_DOCUMINE;
+ readonly #userService = inject(UserService);
readonly ownersSelectOptions = this.#userService.all.filter(u => u.isManager).map(m => m.id);
+ readonly #dossiersService = inject(DossiersService);
+ readonly #permissionsService = inject(PermissionsService);
+ readonly #filesService = inject(FilesService);
+ readonly #formValue$ = this.form.valueChanges;
readonly selectedReviewers$ = this.#formValue$.pipe(map(v => v.members.filter(m => !v.approvers.includes(m))));
readonly selectedApprovers$ = this.#formValue$.pipe(map(v => v.approvers));
- readonly isDocumine = getConfig().IS_DOCUMINE;
get valid(): boolean {
return this.form.valid;
}
get disabled() {
- return !this.#permissionsService.canEditTeamMembers() || !this.form.get('owner').value;
+ return !this.#permissionsService.canEditTeamMembers(this.dossier) || !this.form.get('owner').value;
}
get hasOwner() {
@@ -175,7 +175,7 @@ export class EditDossierTeamComponent implements EditDossierSectionInterface, On
#resetForm() {
this.form.reset(
{
- owner: { value: this.dossier.ownerId, disabled: !this.#permissionsService.canEditTeamMembers() },
+ owner: { value: this.dossier.ownerId, disabled: !this.#permissionsService.canEditTeamMembers(this.dossier) },
approvers: this.#sortByName([...this.dossier.approverIds]),
members: this.#sortByName([...this.dossier.memberIds]),
} as unknown,
diff --git a/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.scss b/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.scss
index 93aa005d7..9d3450c57 100644
--- a/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.scss
+++ b/apps/red-ui/src/app/modules/shared/components/type-filter/type-filter.component.scss
@@ -12,5 +12,6 @@
height: 16px;
margin-right: 8px;
opacity: 50%;
+ line-height: 16px;
}
}
diff --git a/apps/red-ui/src/app/services/permissions.service.ts b/apps/red-ui/src/app/services/permissions.service.ts
index 456ec57a5..05e98f73d 100644
--- a/apps/red-ui/src/app/services/permissions.service.ts
+++ b/apps/red-ui/src/app/services/permissions.service.ts
@@ -18,6 +18,7 @@ import { FilesMapService } from '@services/files/files-map.service';
import { Roles } from '@users/roles';
import { UserPreferenceService } from '@users/user-preference.service';
import { UserService } from '@users/user.service';
+import { DossierTemplatesService } from '@services/dossier-templates/dossier-templates.service';
@Injectable({ providedIn: 'root' })
export class PermissionsService {
@@ -29,6 +30,7 @@ export class PermissionsService {
private readonly _featuresService: FeaturesService,
private readonly _userPreferenceService: UserPreferenceService,
private readonly _iqserPermissionsService: IqserPermissionsService,
+ private readonly _dossierTemplatesService: DossierTemplatesService,
) {}
get #userId(): string {
@@ -313,8 +315,9 @@ export class PermissionsService {
return dossier.isActive && this.isOwner(dossier) && this._iqserPermissionsService.has(Roles.dossierAttributes.write);
}
- canEditTeamMembers(): boolean {
- return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager();
+ canEditTeamMembers(dossier: Dossier): boolean {
+ const dossierTemplate = this._dossierTemplatesService.find(dossier.dossierTemplateId);
+ return this._iqserPermissionsService.has(Roles.dossiers.edit) && this.isManager() && dossierTemplate.isActive;
}
isAdmin(): boolean {
diff --git a/apps/red-ui/src/app/users/user-preference.service.ts b/apps/red-ui/src/app/users/user-preference.service.ts
index 27f412574..6f2f85211 100644
--- a/apps/red-ui/src/app/users/user-preference.service.ts
+++ b/apps/red-ui/src/app/users/user-preference.service.ts
@@ -1,5 +1,7 @@
import { Injectable } from '@angular/core';
import { IqserUserPreferenceService, ListingMode } from '@iqser/common-ui';
+import { RedactOrHintOption, RemoveRedactionOption } from '../modules/file-preview/utils/dialog-options';
+import { SystemDefaultOption, SystemDefaultType } from '../modules/account/utils/dialog-defaults';
export const PreferencesKeys = {
dossierRecent: 'Dossier-Recent',
@@ -10,6 +12,16 @@ export const PreferencesKeys = {
loadAllAnnotationsWarning: 'Load-All-Annotations-Warning',
openScmDialogByDefault: 'Open-Structured-Component-Management-By-Default',
tableExtractionType: 'Table-Extraction-Type',
+ addRedactionDefaultOption: 'Add-Redaction-Default',
+ addHintDefaultOption: 'Add-Hint-Default',
+ removeRedactionDefaultOption: 'Remove-Redaction-Default',
+ removeRecommendationDefaultOption: 'Remove-Recommendation-Default',
+ removeHintDefaultOption: 'Remove-Hint-Default',
+ addRedactionDefaultExtraOption: 'Add-Redaction-Default-Extra',
+ addHintDefaultExtraOption: 'Add-Hint-Default-Extra',
+ removeRedactionDefaultExtraOption: 'Remove-Redaction-Default-Extra',
+ removeRecommendationDefaultExtraOption: 'Remove-Recommendation-Default-Extra',
+ removeHintDefaultExtraOption: 'Remove-Hint-Default-Extra',
} as const;
@Injectable({
@@ -77,4 +89,94 @@ export class UserPreferenceService extends IqserUserPreferenceService {
getTableExtractionType() {
return this._getAttribute(PreferencesKeys.tableExtractionType, 'EXPERIMENTAL_IF_MISSING');
}
+
+ getAddRedactionDefaultOption(): RedactOrHintOption | SystemDefaultType {
+ return this._getAttribute(PreferencesKeys.addRedactionDefaultOption, SystemDefaultOption.SYSTEM_DEFAULT) as
+ | RedactOrHintOption
+ | SystemDefaultType;
+ }
+
+ async saveAddRedactionDefaultOption(defaultOption: RedactOrHintOption | SystemDefaultType): Promise
{
+ await this.save(PreferencesKeys.addRedactionDefaultOption, defaultOption.toString());
+ }
+
+ getAddHintDefaultOption(): RedactOrHintOption | SystemDefaultType {
+ return this._getAttribute(PreferencesKeys.addHintDefaultOption, SystemDefaultOption.SYSTEM_DEFAULT) as
+ | RedactOrHintOption
+ | SystemDefaultType;
+ }
+
+ async saveAddHintDefaultOption(defaultOption: RedactOrHintOption | SystemDefaultType): Promise {
+ await this.save(PreferencesKeys.addHintDefaultOption, defaultOption.toString());
+ }
+
+ getRemoveRedactionDefaultOption(): RemoveRedactionOption | SystemDefaultType {
+ return this._getAttribute(PreferencesKeys.removeRedactionDefaultOption, SystemDefaultOption.SYSTEM_DEFAULT) as
+ | RemoveRedactionOption
+ | SystemDefaultType;
+ }
+
+ async saveRemoveRedactionDefaultOption(defaultOption: RemoveRedactionOption | SystemDefaultType): Promise {
+ await this.save(PreferencesKeys.removeRedactionDefaultOption, defaultOption.toString());
+ }
+
+ getRemoveRecommendationDefaultOption(): RemoveRedactionOption | SystemDefaultType {
+ return this._getAttribute(PreferencesKeys.removeRecommendationDefaultOption, SystemDefaultOption.SYSTEM_DEFAULT) as
+ | RemoveRedactionOption
+ | SystemDefaultType;
+ }
+
+ async saveRemoveRecommendationDefaultOption(defaultOption: RemoveRedactionOption | SystemDefaultType): Promise {
+ await this.save(PreferencesKeys.removeRecommendationDefaultOption, defaultOption.toString());
+ }
+
+ getRemoveHintDefaultOption(): RemoveRedactionOption | SystemDefaultType {
+ return this._getAttribute(PreferencesKeys.removeHintDefaultOption, SystemDefaultOption.SYSTEM_DEFAULT) as
+ | RemoveRedactionOption
+ | SystemDefaultType;
+ }
+
+ async saveRemoveHintDefaultOption(defaultOption: RemoveRedactionOption | SystemDefaultType): Promise {
+ await this.save(PreferencesKeys.removeHintDefaultOption, defaultOption.toString());
+ }
+
+ getAddRedactionDefaultExtraOption(): string {
+ return this._getAttribute(PreferencesKeys.addRedactionDefaultExtraOption, 'undefined');
+ }
+
+ async saveAddRedactionDefaultExtraOption(defaultOption: boolean | string): Promise {
+ await this.save(PreferencesKeys.addRedactionDefaultExtraOption, defaultOption.toString());
+ }
+
+ getAddHintDefaultExtraOption(): string {
+ return this._getAttribute(PreferencesKeys.addHintDefaultExtraOption, 'undefined');
+ }
+
+ async saveAddHintDefaultExtraOption(defaultOption: boolean | string): Promise {
+ await this.save(PreferencesKeys.addHintDefaultExtraOption, defaultOption.toString());
+ }
+
+ getRemoveRedactionDefaultExtraOption(): string {
+ return this._getAttribute(PreferencesKeys.removeRedactionDefaultExtraOption, 'undefined');
+ }
+
+ async saveRemoveRedactionDefaultExtraOption(defaultOption: boolean | string): Promise {
+ await this.save(PreferencesKeys.removeRedactionDefaultExtraOption, defaultOption.toString());
+ }
+
+ getRemoveHintDefaultExtraOption(): string {
+ return this._getAttribute(PreferencesKeys.removeHintDefaultExtraOption, 'undefined');
+ }
+
+ async saveRemoveHintDefaultExtraOption(defaultOption: boolean | string): Promise {
+ await this.save(PreferencesKeys.removeHintDefaultExtraOption, defaultOption.toString());
+ }
+
+ getRemoveRecommendationDefaultExtraOption(): string {
+ return this._getAttribute(PreferencesKeys.removeRecommendationDefaultExtraOption, 'undefined');
+ }
+
+ async saveRemoveRecommendationDefaultExtraOption(defaultOption: boolean | string): Promise {
+ await this.save(PreferencesKeys.removeRecommendationDefaultExtraOption, defaultOption.toString());
+ }
}
diff --git a/apps/red-ui/src/app/utils/functions.ts b/apps/red-ui/src/app/utils/functions.ts
index b6b086c2e..a50db47d8 100644
--- a/apps/red-ui/src/app/utils/functions.ts
+++ b/apps/red-ui/src/app/utils/functions.ts
@@ -134,7 +134,6 @@ export function calcTextWidthInPixels(text: string): number {
return width;
}
-export function addPaddingToArray(array: T[], emptyElement: T) {
- array.push(emptyElement);
- array.splice(0, 0, emptyElement);
+export function stringToBoolean(str: string): boolean {
+ return str === 'true';
}
diff --git a/apps/red-ui/src/assets/i18n/redact/en.json b/apps/red-ui/src/assets/i18n/redact/en.json
index 2414c3a9f..ccb2c7e21 100644
--- a/apps/red-ui/src/assets/i18n/redact/en.json
+++ b/apps/red-ui/src/assets/i18n/redact/en.json
@@ -681,6 +681,25 @@
}
},
"dev-mode": "DEV",
+ "dialog-defaults-form": {
+ "extra-option-label": "Apply to all active and future dossiers",
+ "hint": {
+ "add-dialog": "Add hint",
+ "remove-dialog": "Remove hint",
+ "title": "Hint"
+ },
+ "recommendation": {
+ "remove-dialog": "Remove recommendation",
+ "title": "Recommendation"
+ },
+ "redaction": {
+ "add-dialog": "Redact text",
+ "remove-dialog": "Remove redaction",
+ "title": "Redaction"
+ },
+ "system-default": "Use system default",
+ "title": "Dialog defaults"
+ },
"dictionary": "Type",
"dictionary-overview": {
"compare": {
diff --git a/apps/red-ui/src/assets/i18n/scm/en.json b/apps/red-ui/src/assets/i18n/scm/en.json
index 14f4539d3..f7cf520de 100644
--- a/apps/red-ui/src/assets/i18n/scm/en.json
+++ b/apps/red-ui/src/assets/i18n/scm/en.json
@@ -681,6 +681,25 @@
}
},
"dev-mode": "DEV",
+ "dialog-defaults-form": {
+ "extra-option-label": "",
+ "hint": {
+ "add-dialog": "",
+ "remove-dialog": "",
+ "title": ""
+ },
+ "recommendation": {
+ "remove-dialog": "",
+ "title": ""
+ },
+ "redaction": {
+ "add-dialog": "",
+ "remove-dialog": "",
+ "title": ""
+ },
+ "system-default": "",
+ "title": ""
+ },
"dictionary": "Type",
"dictionary-overview": {
"compare": {
diff --git a/libs/red-domain/src/lib/dictionaries/dictionary.model.ts b/libs/red-domain/src/lib/dictionaries/dictionary.model.ts
index f1d35940c..4c33e7840 100644
--- a/libs/red-domain/src/lib/dictionaries/dictionary.model.ts
+++ b/libs/red-domain/src/lib/dictionaries/dictionary.model.ts
@@ -19,6 +19,7 @@ export class Dictionary extends Entity implements IDictionary {
readonly hasDictionary?: boolean;
readonly systemManaged?: boolean;
readonly dossierDictionaryOnly?: boolean;
+ readonly experimental?: boolean;
entries: List;
falsePositiveEntries: List;
@@ -47,6 +48,7 @@ export class Dictionary extends Entity implements IDictionary {
this.hasDictionary = entity.hasDictionary;
this.systemManaged = entity.systemManaged;
this.dossierDictionaryOnly = entity.dossierDictionaryOnly;
+ this.experimental = entity.experimental;
}
get id(): string {
diff --git a/libs/red-domain/src/lib/dictionaries/dictionary.ts b/libs/red-domain/src/lib/dictionaries/dictionary.ts
index d5bcfb254..d146393bf 100644
--- a/libs/red-domain/src/lib/dictionaries/dictionary.ts
+++ b/libs/red-domain/src/lib/dictionaries/dictionary.ts
@@ -60,4 +60,6 @@ export interface IDictionary {
readonly systemManaged?: boolean;
readonly dossierDictionaryOnly?: boolean;
+
+ readonly experimental?: boolean;
}