-
+
+ {{ 'edit-project-dialog.nav-items.' + (activeNavItem.title || activeNavItem.key) | translate }}
+
+
+
+
+ {{ 'edit-project-dialog.dictionary.entries' | translate: { length: (projectWrapper.type?.entries || []).length } }}
+
+
+
+
+
+
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.scss b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.scss
index e7d761ec5..676f1d919 100644
--- a/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.scss
+++ b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.scss
@@ -27,5 +27,9 @@
redaction-edit-project-dictionary {
display: block;
- height: calc(100% - 44px);
+ height: calc(100% - 74px);
+}
+
+.stats-subtitle {
+ margin-top: 6px;
}
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.ts b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.ts
index 09396132d..50d35ee16 100644
--- a/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.ts
+++ b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/edit-project-dialog.component.ts
@@ -9,6 +9,7 @@ import { EditProjectSectionInterface } from './edit-project-section.interface';
import { NotificationService, NotificationType } from '../../../../services/notification.service';
import { TranslateService } from '@ngx-translate/core';
import { EditProjectDictionaryComponent } from './dictionary/edit-project-dictionary.component';
+import { EditProjectTeamMembersComponent } from './team-members/edit-project-team-members.component';
@Component({
selector: 'redaction-edit-project-dialog',
@@ -19,9 +20,9 @@ export class EditProjectDialogComponent {
navItems: { key: string; title?: string }[] = [
{ key: 'dossier-info', title: 'general-info' },
{ key: 'download-package', title: 'choose-download' },
- { key: 'dossier-dictionary', title: 'dossier-dictionary' }
+ { key: 'dossier-dictionary', title: 'dossier-dictionary' },
+ { key: 'members', title: 'team-members' }
// TODO:
- // { key: 'members' },
// { key: 'project-attributes' },
// { key: 'report-attributes' }
];
@@ -31,6 +32,7 @@ export class EditProjectDialogComponent {
@ViewChild(EditProjectGeneralInfoComponent) generalInfoComponent: EditProjectGeneralInfoComponent;
@ViewChild(EditProjectDownloadPackageComponent) downloadPackageComponent: EditProjectDownloadPackageComponent;
@ViewChild(EditProjectDictionaryComponent) dictionaryComponent: EditProjectDictionaryComponent;
+ @ViewChild(EditProjectTeamMembersComponent) membersComponent: EditProjectTeamMembersComponent;
constructor(
private readonly _appStateService: AppStateService,
@@ -52,7 +54,8 @@ export class EditProjectDialogComponent {
return {
'dossier-info': this.generalInfoComponent,
'download-package': this.downloadPackageComponent,
- 'dossier-dictionary': this.dictionaryComponent
+ 'dossier-dictionary': this.dictionaryComponent,
+ members: this.membersComponent
}[this.activeNav];
}
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.html b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.html
new file mode 100644
index 000000000..f57cd9416
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.html
@@ -0,0 +1 @@
+
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.scss b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.scss
new file mode 100644
index 000000000..e69de29bb
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.ts b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.ts
new file mode 100644
index 000000000..3d089cd90
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/dialogs/edit-project-dialog/team-members/edit-project-team-members.component.ts
@@ -0,0 +1,40 @@
+import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
+import { AppStateService } from '../../../../../state/app-state.service';
+import { ProjectWrapper } from '../../../../../state/model/project.wrapper';
+import { EditProjectSectionInterface } from '../edit-project-section.interface';
+import { PermissionsService } from '../../../../../services/permissions.service';
+import { TeamMembersManagerComponent } from '../../../components/team-members-manager/team-members-manager.component';
+
+@Component({
+ selector: 'redaction-edit-project-team-members',
+ templateUrl: './edit-project-team-members.component.html',
+ styleUrls: ['./edit-project-team-members.component.scss']
+})
+export class EditProjectTeamMembersComponent implements EditProjectSectionInterface {
+ @Input() projectWrapper: ProjectWrapper;
+ @Output() updateProject = new EventEmitter
();
+
+ @ViewChild(TeamMembersManagerComponent) managerComponent: TeamMembersManagerComponent;
+
+ constructor(private readonly _appStateService: AppStateService, private readonly _permissionsService: PermissionsService) {}
+
+ get changed() {
+ return this.managerComponent.changed;
+ }
+
+ get disabled() {
+ return !this._permissionsService.isManager();
+ }
+
+ async save() {
+ await this.managerComponent.saveMembers();
+ }
+
+ updatedProject($event) {
+ this.updateProject.emit($event);
+ }
+
+ revert() {
+ this.managerComponent.revert();
+ }
+}
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.html b/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.html
new file mode 100644
index 000000000..127ade703
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.scss b/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.scss
new file mode 100644
index 000000000..91e0f2a5d
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.scss
@@ -0,0 +1,8 @@
+.no-padding-bottom {
+ padding-bottom: 0;
+}
+
+::ng-deep redaction-team-members-manager .members-list {
+ max-height: 220px;
+ height: 220px;
+}
diff --git a/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.ts b/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.ts
new file mode 100644
index 000000000..e00464d40
--- /dev/null
+++ b/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.ts
@@ -0,0 +1,30 @@
+import { Component, Inject, ViewChild } from '@angular/core';
+import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';
+import { AppStateService } from '@state/app-state.service';
+import { NotificationService } from '@services/notification.service';
+import { ProjectWrapper } from '@state/model/project.wrapper';
+import { TeamMembersManagerComponent } from '../../components/team-members-manager/team-members-manager.component';
+
+class DialogData {
+ projectWrapper?: ProjectWrapper;
+}
+
+@Component({
+ selector: 'redaction-team-members-dialog',
+ templateUrl: './team-members-dialog.component.html',
+ styleUrls: ['./team-members-dialog.component.scss']
+})
+export class TeamMembersDialogComponent {
+ @ViewChild(TeamMembersManagerComponent, { static: true }) managerComponent: TeamMembersManagerComponent;
+
+ constructor(
+ private readonly _notificationService: NotificationService,
+ private readonly _appStateService: AppStateService,
+ public dialogRef: MatDialogRef,
+ @Inject(MAT_DIALOG_DATA) public data: DialogData
+ ) {}
+
+ async save(result) {
+ this.dialogRef.close(result);
+ }
+}
diff --git a/apps/red-ui/src/app/modules/projects/projects.module.ts b/apps/red-ui/src/app/modules/projects/projects.module.ts
index e7d552b34..79d2c57f7 100644
--- a/apps/red-ui/src/app/modules/projects/projects.module.ts
+++ b/apps/red-ui/src/app/modules/projects/projects.module.ts
@@ -4,7 +4,6 @@ import { ProjectListingScreenComponent } from './screens/project-listing-screen/
import { ProjectOverviewScreenComponent } from './screens/project-overview-screen/project-overview-screen.component';
import { FilePreviewScreenComponent } from './screens/file-preview-screen/file-preview-screen.component';
import { AddProjectDialogComponent } from './dialogs/add-project-dialog/add-project-dialog.component';
-import { AssignOwnerDialogComponent } from './dialogs/assign-owner-dialog/assign-owner-dialog.component';
import { AssignReviewerApproverDialogComponent } from './dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component';
import { ManualAnnotationDialogComponent } from './dialogs/manual-redaction-dialog/manual-annotation-dialog.component';
import { ForceRedactionDialogComponent } from './dialogs/force-redaction-dialog/force-redaction-dialog.component';
@@ -42,13 +41,16 @@ import { EditProjectGeneralInfoComponent } from './dialogs/edit-project-dialog/g
import { EditProjectDownloadPackageComponent } from './dialogs/edit-project-dialog/download-package/edit-project-download-package.component';
import { UserPreferenceControllerService } from '@redaction/red-ui-http';
import { EditProjectDictionaryComponent } from './dialogs/edit-project-dialog/dictionary/edit-project-dictionary.component';
+import { EditProjectTeamMembersComponent } from './dialogs/edit-project-dialog/team-members/edit-project-team-members.component';
+import { TeamMembersManagerComponent } from './components/team-members-manager/team-members-manager.component';
+import { TeamMembersDialogComponent } from './dialogs/team-members-dialog/team-members-dialog.component';
const screens = [ProjectListingScreenComponent, ProjectOverviewScreenComponent, FilePreviewScreenComponent];
const dialogs = [
AddProjectDialogComponent,
EditProjectDialogComponent,
- AssignOwnerDialogComponent,
+ TeamMembersDialogComponent,
ManualAnnotationDialogComponent,
ForceRedactionDialogComponent,
RemoveAnnotationsDialogComponent,
@@ -76,6 +78,8 @@ const components = [
EditProjectGeneralInfoComponent,
EditProjectDownloadPackageComponent,
EditProjectDictionaryComponent,
+ EditProjectTeamMembersComponent,
+ TeamMembersManagerComponent,
...screens,
...dialogs
diff --git a/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.ts b/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.ts
index 0ed9ff36d..bf7dd290f 100644
--- a/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.ts
+++ b/apps/red-ui/src/app/modules/projects/screens/project-listing-screen/project-listing-screen.component.ts
@@ -177,7 +177,7 @@ export class ProjectListingScreenComponent extends BaseListingComponent
-
@@ -170,8 +163,8 @@
@@ -265,8 +258,8 @@
diff --git a/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.ts b/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.ts
index 4b49d25bd..aaa542efa 100644
--- a/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.ts
+++ b/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.ts
@@ -241,7 +241,7 @@ export class ProjectOverviewScreenComponent extends BaseListingComponent
{
+ this._dialogService.openAssignTeamMembersDialog(null, this.activeProject, () => {
this.reloadProjects();
});
}
diff --git a/apps/red-ui/src/app/modules/projects/services/projects-dialog.service.ts b/apps/red-ui/src/app/modules/projects/services/projects-dialog.service.ts
index 78ba31768..667b93682 100644
--- a/apps/red-ui/src/app/modules/projects/services/projects-dialog.service.ts
+++ b/apps/red-ui/src/app/modules/projects/services/projects-dialog.service.ts
@@ -20,11 +20,11 @@ import { ManualRedactionEntryWrapper } from '@models/file/manual-redaction-entry
import { ManualAnnotationService } from './manual-annotation.service';
import { TranslateService } from '@ngx-translate/core';
import { ManualAnnotationDialogComponent } from '../dialogs/manual-redaction-dialog/manual-annotation-dialog.component';
-import { AssignOwnerDialogComponent } from '../dialogs/assign-owner-dialog/assign-owner-dialog.component';
import { DossierDictionaryDialogComponent } from '../dialogs/dossier-dictionary-dialog/dossier-dictionary-dialog.component';
import { EditProjectDialogComponent } from '../dialogs/edit-project-dialog/edit-project-dialog.component';
import { FileStatusWrapper } from '../../../models/file/file-status.wrapper';
import { AssignReviewerApproverDialogComponent } from '../dialogs/assign-reviewer-approver-dialog/assign-reviewer-approver-dialog.component';
+import { TeamMembersDialogComponent } from '../dialogs/team-members-dialog/team-members-dialog.component';
const dialogConfig = {
width: '662px',
@@ -175,11 +175,11 @@ export class ProjectsDialogService {
return ref;
}
- openAssignProjectMembersAndOwnerDialog($event: MouseEvent, project: ProjectWrapper, cb?: Function): MatDialogRef {
+ openAssignTeamMembersDialog($event: MouseEvent, projectWrapper: ProjectWrapper, cb?: Function): MatDialogRef {
$event?.stopPropagation();
- const ref = this._dialog.open(AssignOwnerDialogComponent, {
+ const ref = this._dialog.open(TeamMembersDialogComponent, {
...dialogConfig,
- data: { project: project }
+ data: { projectWrapper }
});
ref.afterClosed().subscribe((result) => {
if (cb) {
diff --git a/apps/red-ui/src/assets/i18n/de.json b/apps/red-ui/src/assets/i18n/de.json
index 6995c8cf3..ce84b5ef1 100644
--- a/apps/red-ui/src/assets/i18n/de.json
+++ b/apps/red-ui/src/assets/i18n/de.json
@@ -100,9 +100,6 @@
"reanalyse": {
"action": "Analysieren Sie das gesamte Dossier"
},
- "assign": {
- "action": "Eigentümer zuweisen"
- },
"download-files": {
"action": "Laden Sie redigierte Dateien herunter"
},
@@ -199,7 +196,6 @@
"header-actions": {
"edit": "Bearbeiten",
"delete": "Löschen",
- "assign": "Eigentümer zuweisen",
"upload-document": "Dokument hochladen",
"download-redacted-files": "Laden Sie redigierte Dateien herunter"
},
diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json
index 2bab942f7..ddceee4fc 100644
--- a/apps/red-ui/src/assets/i18n/en.json
+++ b/apps/red-ui/src/assets/i18n/en.json
@@ -100,9 +100,6 @@
"reanalyse": {
"action": "Analyze entire dossier"
},
- "assign": {
- "action": "Assign Owner & Members"
- },
"download-files": {
"action": "Download Redacted Files"
},
@@ -175,6 +172,8 @@
"choose-download": "Choose what is included at download:",
"dictionary": "Dictionary",
"dossier-dictionary": "Dossier Dictionary",
+ "members": "Members",
+ "team-members": "Team Members",
"project-attributes": "Dossier Attributes",
"report-attributes": "Report Attributes"
},
@@ -196,6 +195,9 @@
"template": "Dossier Template"
}
},
+ "dictionary": {
+ "entries": "{{length}} entries"
+ },
"unsaved-changes": "You have unsaved changes. Save or revert before changing the tab.",
"change-successful": "Project was updated."
},
@@ -236,7 +238,6 @@
"header-actions": {
"edit": "Edit",
"delete": "Delete",
- "assign": "Assign Owner & Members",
"upload-document": "Upload Document",
"download-redacted-files": "Download Redacted Files"
},
diff --git a/apps/red-ui/src/assets/styles/red-text-styles.scss b/apps/red-ui/src/assets/styles/red-text-styles.scss
index 638892fbb..9e72c84fd 100644
--- a/apps/red-ui/src/assets/styles/red-text-styles.scss
+++ b/apps/red-ui/src/assets/styles/red-text-styles.scss
@@ -76,6 +76,7 @@ pre {
opacity: 0.7;
font-size: 11px;
line-height: 14px;
+ font-weight: initial;
}
.link-action {