diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.html b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.html new file mode 100644 index 000000000..fa279c019 --- /dev/null +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.html @@ -0,0 +1,17 @@ + + +
+ {{ item.label || item.screen | translate }} +
+
+
diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.scss b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.scss new file mode 100644 index 000000000..e69de29bb diff --git a/apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.ts b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts similarity index 90% rename from apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.ts rename to apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts index 17bc80440..ef5dd63ea 100644 --- a/apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts @@ -4,11 +4,11 @@ import { UserPreferenceService } from '@services/user-preference.service'; import { AppStateService } from '@state/app-state.service'; @Component({ - selector: 'redaction-side-nav', - templateUrl: './side-nav.component.html', - styleUrls: ['./side-nav.component.scss'] + selector: 'redaction-admin-side-nav', + templateUrl: './admin-side-nav.component.html', + styleUrls: ['./admin-side-nav.component.scss'] }) -export class SideNavComponent { +export class AdminSideNavComponent { @Input() type: 'settings' | 'project-templates'; items: { diff --git a/apps/red-ui/src/app/modules/admin/admin.module.ts b/apps/red-ui/src/app/modules/admin/admin.module.ts index 843569443..a4e541468 100644 --- a/apps/red-ui/src/app/modules/admin/admin.module.ts +++ b/apps/red-ui/src/app/modules/admin/admin.module.ts @@ -32,7 +32,7 @@ import { UsersStatsComponent } from './components/users-stats/users-stats.compon import { ConfirmDeleteUsersDialogComponent } from './dialogs/confirm-delete-users-dialog/confirm-delete-users-dialog.component'; import { FileAttributesCsvImportDialogComponent } from './dialogs/file-attributes-csv-import-dialog/file-attributes-csv-import-dialog.component'; import { ActiveFieldsListingComponent } from './dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component'; -import { SideNavComponent } from './components/side-nav/side-nav.component'; +import { AdminSideNavComponent } from './admin-side-nav/admin-side-nav.component'; const dialogs = [ AddEditRuleSetDialogComponent, @@ -43,7 +43,8 @@ const dialogs = [ SmtpAuthDialogComponent, AddEditUserDialogComponent, ConfirmDeleteUsersDialogComponent, - FileAttributesCsvImportDialogComponent + FileAttributesCsvImportDialogComponent, + AdminSideNavComponent ]; const screens = [ @@ -68,7 +69,6 @@ const components = [ ComboSeriesVerticalComponent, UsersStatsComponent, ActiveFieldsListingComponent, - SideNavComponent, ...dialogs, ...screens diff --git a/apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.html b/apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.html deleted file mode 100644 index 4ff6bb202..000000000 --- a/apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.html +++ /dev/null @@ -1,17 +0,0 @@ -
- - -
- {{ item.label || item.screen | translate }} -
-
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.html b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.html index bb26db86a..b17a80f9e 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.html @@ -88,7 +88,7 @@

{{ 'download-includes' | translate }}

-
+
diff --git a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.scss b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.scss index 4c179d996..b5fcaf6e8 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.scss +++ b/apps/red-ui/src/app/modules/admin/dialogs/add-edit-rule-set-dialog/add-edit-rule-set-dialog.component.scss @@ -22,8 +22,8 @@ } } -.w-410 { - width: 410px; +redaction-select { + flex: 1; } .download-includes { diff --git a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html index 6a2674d3f..a10024c60 100644 --- a/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html +++ b/apps/red-ui/src/app/modules/admin/dialogs/file-attributes-csv-import-dialog/active-fields-listing/active-fields-listing.component.html @@ -37,7 +37,7 @@ text="file-attributes-csv-import.table-header.actions.type" > - + - + + +
+
+ + + 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..2377e7d76 --- /dev/null +++ b/apps/red-ui/src/app/modules/projects/dialogs/team-members-dialog/team-members-dialog.component.ts @@ -0,0 +1,31 @@ +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 f615d9c1a..d82c8a7ef 100644 --- a/apps/red-ui/src/app/modules/projects/projects.module.ts +++ b/apps/red-ui/src/app/modules/projects/projects.module.ts @@ -3,8 +3,7 @@ import { CommonModule } from '@angular/common'; import { ProjectListingScreenComponent } from './screens/project-listing-screen/project-listing-screen.component'; import { ProjectOverviewScreenComponent } from './screens/project-overview-screen/project-overview-screen.component'; import { FilePreviewScreenComponent } from './screens/file-preview-screen/file-preview-screen.component'; -import { AddEditProjectDialogComponent } from './dialogs/add-edit-project-dialog/add-edit-project-dialog.component'; -import { AssignOwnerDialogComponent } from './dialogs/assign-owner-dialog/assign-owner-dialog.component'; +import { AddProjectDialogComponent } from './dialogs/add-project-dialog/add-project-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'; @@ -37,7 +36,14 @@ import { AnnotationDrawService } from './services/annotation-draw.service'; import { AnnotationProcessingService } from './services/annotation-processing.service'; import { AnnotationRemoveActionsComponent } from './components/annotation-remove-actions/annotation-remove-actions.component'; import { DossierDictionaryDialogComponent } from './dialogs/dossier-dictionary-dialog/dossier-dictionary-dialog.component'; +import { EditProjectDialogComponent } from './dialogs/edit-project-dialog/edit-project-dialog.component'; +import { EditProjectGeneralInfoComponent } from './dialogs/edit-project-dialog/general-info/edit-project-general-info.component'; +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, @@ -46,8 +52,9 @@ const screens = [ ]; const dialogs = [ - AddEditProjectDialogComponent, - AssignOwnerDialogComponent, + AddProjectDialogComponent, + EditProjectDialogComponent, + TeamMembersDialogComponent, ManualAnnotationDialogComponent, ForceRedactionDialogComponent, RemoveAnnotationsDialogComponent, @@ -72,6 +79,11 @@ const components = [ DocumentInfoComponent, FileWorkloadComponent, AnnotationRemoveActionsComponent, + EditProjectGeneralInfoComponent, + EditProjectDownloadPackageComponent, + EditProjectDictionaryComponent, + EditProjectTeamMembersComponent, + TeamMembersManagerComponent, ...screens, ...dialogs diff --git a/apps/red-ui/src/app/modules/projects/screens/file-preview-screen/file-preview-screen.component.scss b/apps/red-ui/src/app/modules/projects/screens/file-preview-screen/file-preview-screen.component.scss index 2d8bc78a4..3b84f926d 100644 --- a/apps/red-ui/src/app/modules/projects/screens/file-preview-screen/file-preview-screen.component.scss +++ b/apps/red-ui/src/app/modules/projects/screens/file-preview-screen/file-preview-screen.component.scss @@ -68,10 +68,6 @@ margin-right: 8px; } -.mr-16 { - margin-right: 16px; -} - .ml-8 { margin-left: 8px; } 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 f861e72d9..e4f7f72fb 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 @@ -195,7 +195,7 @@ export class ProjectListingScreenComponent } openAssignProjectOwnerDialog($event: MouseEvent, project: ProjectWrapper) { - this._dialogService.openAssignProjectMembersAndOwnerDialog($event, project); + this._dialogService.openAssignTeamMembersDialog($event, project); } actionPerformed() { diff --git a/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.html b/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.html index 1cf231e76..46ce68abe 100644 --- a/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.html +++ b/apps/red-ui/src/app/modules/projects/screens/project-overview-screen/project-overview-screen.component.html @@ -54,13 +54,6 @@ - @@ -322,8 +315,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 c82fdc20a..ff8e153db 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 @@ -87,10 +87,6 @@ export class ProjectOverviewScreenComponent return this._appStateService.activeProject; } - isLastOpenedFile(fileStatus: FileStatusWrapper): boolean { - return this._lastOpenedFileId === fileStatus.fileId; - } - protected get _filterComponents(): FilterComponent[] { return [ this._statusFilterComponent, @@ -117,11 +113,17 @@ export class ProjectOverviewScreenComponent ]; } + isLastOpenedFile(fileStatus: FileStatusWrapper): boolean { + return this._lastOpenedFileId === fileStatus.fileId; + } + ngOnInit(): void { this._userPreferenceControllerService.getAllUserAttributes().subscribe((attributes) => { if (attributes === null || attributes === undefined) return; const key = 'Project-Recent-' + this.activeProject.projectId; - this._lastOpenedFileId = attributes[key][0]; + if (attributes[key]?.length > 0) { + this._lastOpenedFileId = attributes[key][0]; + } }); this._fileDropOverlayService.initFileDropHandling(); @@ -266,7 +268,7 @@ export class ProjectOverviewScreenComponent } openAssignProjectMembersDialog(): void { - this._dialogService.openAssignProjectMembersAndOwnerDialog(null, this.activeProject, () => { + 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 21e3fcf96..eebd4cbfd 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 @@ -7,7 +7,7 @@ import { ManualRedactionControllerService, RuleSetControllerService } from '@redaction/red-ui-http'; -import { AddEditProjectDialogComponent } from '../dialogs/add-edit-project-dialog/add-edit-project-dialog.component'; +import { AddProjectDialogComponent } from '../dialogs/add-project-dialog/add-project-dialog.component'; import { RemoveAnnotationsDialogComponent } from '../dialogs/remove-annotations-dialog/remove-annotations-dialog.component'; import { NotificationService, NotificationType } from '@services/notification.service'; import { ForceRedactionDialogComponent } from '../dialogs/force-redaction-dialog/force-redaction-dialog.component'; @@ -23,10 +23,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', @@ -150,26 +151,6 @@ export class ProjectsDialogService { return ref; } - openEditProjectDialog( - $event: MouseEvent, - project: ProjectWrapper, - cb?: Function - ): MatDialogRef { - $event.stopPropagation(); - const ref = this._dialog.open(AddEditProjectDialogComponent, { - ...dialogConfig, - width: '900px', - autoFocus: true, - data: project - }); - ref.afterClosed().subscribe(async (result) => { - if (result && cb) { - cb(result); - } - }); - return ref; - } - openForceRedactionDialog( $event: MouseEvent, cb?: Function @@ -228,15 +209,15 @@ export class ProjectsDialogService { return ref; } - openAssignProjectMembersAndOwnerDialog( + openAssignTeamMembersDialog( $event: MouseEvent, - project: ProjectWrapper, + projectWrapper: ProjectWrapper, cb?: Function - ): MatDialogRef { + ): 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) { @@ -298,9 +279,10 @@ export class ProjectsDialogService { return ref; } - openAddProjectDialog(cb?: Function): MatDialogRef { - const ref = this._dialog.open(AddEditProjectDialogComponent, { + openAddProjectDialog(cb?: Function): MatDialogRef { + const ref = this._dialog.open(AddProjectDialogComponent, { ...dialogConfig, + width: '900px', autoFocus: true }); @@ -311,6 +293,21 @@ export class ProjectsDialogService { return ref; } + openEditProjectDialog( + $event: MouseEvent, + projectWrapper: ProjectWrapper, + cb?: Function + ): MatDialogRef { + $event.stopPropagation(); + return this._dialog.open(EditProjectDialogComponent, { + ...dialogConfig, + width: '90vw', + height: '90vh', + autoFocus: true, + data: { projectWrapper, afterSave: cb } + }); + } + openDocumentInfoDialog( file: FileStatus, cb?: Function diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html index 809d7d7ff..dcdd4db08 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.html @@ -36,7 +36,7 @@ -
+
{{ 'dictionary-overview.compare.compare' | translate }} diff --git a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.scss b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.scss index 7a084f902..e887d39d4 100644 --- a/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.scss +++ b/apps/red-ui/src/app/modules/shared/components/dictionary-manager/dictionary-manager.component.scss @@ -4,13 +4,15 @@ :host { width: 100%; height: 100%; + box-sizing: border-box; } -.compare-form { +form { display: flex; flex: 1; justify-content: flex-end; align-items: center; + height: 100%; .red-input-group { margin-top: 0; @@ -18,7 +20,7 @@ } .editor-container { - height: calc(100% - 50px); + height: calc(100% - 53px); display: flex; > *:not(:first-child:last-child) { @@ -36,9 +38,7 @@ } .content-container { - padding: 15px; - height: calc(100% - 30px); - width: calc(100% - 30px); + height: 100%; .actions-bar { display: flex; @@ -49,11 +49,6 @@ margin-right: 32px; } - .mr-16 { - margin-right: 16px; - //opacity: 0; // TODO: Hidden for now - } - .red-input-group { input { padding-right: 32px; diff --git a/apps/red-ui/src/app/modules/shared/components/filter/filter.component.html b/apps/red-ui/src/app/modules/shared/components/filter/filter.component.html index 84d13420b..924a1d038 100644 --- a/apps/red-ui/src/app/modules/shared/components/filter/filter.component.html +++ b/apps/red-ui/src/app/modules/shared/components/filter/filter.component.html @@ -13,12 +13,13 @@ [text]="filterLabel" > - -
+ +
diff --git a/apps/red-ui/src/app/modules/shared/components/filter/filter.component.scss b/apps/red-ui/src/app/modules/shared/components/filter/filter.component.scss index 9ea49fb32..f0b532ec5 100644 --- a/apps/red-ui/src/app/modules/shared/components/filter/filter.component.scss +++ b/apps/red-ui/src/app/modules/shared/components/filter/filter.component.scss @@ -26,10 +26,6 @@ padding-bottom: 8px; } -::ng-deep .mat-menu-panel .mat-menu-content:not(:empty) { - padding-bottom: 0; -} - ::ng-deep .filter-menu-checkbox { width: 100%; diff --git a/apps/red-ui/src/app/modules/shared/components/select/select.component.html b/apps/red-ui/src/app/modules/shared/components/select/select.component.html index ab2c056cf..647a68aef 100644 --- a/apps/red-ui/src/app/modules/shared/components/select/select.component.html +++ b/apps/red-ui/src/app/modules/shared/components/select/select.component.html @@ -1,33 +1,26 @@ -
-
-
{{ label }}
-
-
-
-
+
+
{{ label }}
+
+
+
- - - - {{ translatePrefix + option | translate }} - -
+ + + + {{ translatePrefix + option | translate }} + + diff --git a/apps/red-ui/src/app/modules/shared/components/select/select.component.scss b/apps/red-ui/src/app/modules/shared/components/select/select.component.scss index a25196bef..ef7be607f 100644 --- a/apps/red-ui/src/app/modules/shared/components/select/select.component.scss +++ b/apps/red-ui/src/app/modules/shared/components/select/select.component.scss @@ -1,13 +1,20 @@ @import 'apps/red-ui/src/assets/styles/red-variables'; -.wrapper { +:host { border-radius: 8px; border: 1px solid $grey-5; - height: 100%; + min-height: 100%; + display: block; + + &.ng-invalid { + border-color: rgba($red-1, 0.3); + } } .label-header { padding: 16px 16px 14px 16px; + display: flex; + justify-content: space-between; .actions { display: flex; @@ -48,6 +55,7 @@ mat-chip { background-color: $white; color: $grey-1; margin: 0 0 2px 0; + transition: background-color 0.2s; &:hover { background-color: $grey-8; diff --git a/apps/red-ui/src/app/modules/shared/components/select/select.component.ts b/apps/red-ui/src/app/modules/shared/components/select/select.component.ts index 91d699fbe..bedd23877 100644 --- a/apps/red-ui/src/app/modules/shared/components/select/select.component.ts +++ b/apps/red-ui/src/app/modules/shared/components/select/select.component.ts @@ -23,6 +23,7 @@ export class SelectComponent implements AfterViewInit, ControlValueAccessor { @Input() multiple = true; @ViewChild(MatChipList) chipList: MatChipList; + private _value: string[] = []; private _onChange: (value: string[]) => void; diff --git a/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.html b/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.html new file mode 100644 index 000000000..c2695417b --- /dev/null +++ b/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.html @@ -0,0 +1,3 @@ +
+ + diff --git a/apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.scss b/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.scss similarity index 91% rename from apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.scss rename to apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.scss index fb3cba8fe..aad45863a 100644 --- a/apps/red-ui/src/app/modules/admin/components/side-nav/side-nav.component.scss +++ b/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.scss @@ -3,16 +3,18 @@ :host { display: block; min-width: 200px; + max-width: 200px; background-color: $grey-2; border-right: 1px solid $separator; box-sizing: border-box; padding: 8px; + height: 100%; .all-caps-label { padding: 16px; } - .item { + ::ng-deep.item { margin-bottom: 4px; border-radius: 20px; padding: 9px 16px; diff --git a/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.ts b/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.ts new file mode 100644 index 000000000..ceb39fb1d --- /dev/null +++ b/apps/red-ui/src/app/modules/shared/components/side-nav/side-nav.component.ts @@ -0,0 +1,12 @@ +import { Component, Input } from '@angular/core'; + +@Component({ + selector: 'redaction-side-nav', + templateUrl: './side-nav.component.html', + styleUrls: ['./side-nav.component.scss'] +}) +export class SideNavComponent { + @Input() title: string; + + constructor() {} +} diff --git a/apps/red-ui/src/app/modules/shared/services/dictionary-save.service.ts b/apps/red-ui/src/app/modules/shared/services/dictionary-save.service.ts index a6254f7a7..934d4d5a7 100644 --- a/apps/red-ui/src/app/modules/shared/services/dictionary-save.service.ts +++ b/apps/red-ui/src/app/modules/shared/services/dictionary-save.service.ts @@ -22,7 +22,8 @@ export class DictionarySaveService { initialEntries: string[], ruleSetId: string, type: string, - dossierId: string + dossierId: string, + showToast = true ): Observable { let entriesToAdd = []; entries.forEach((currentEntry) => { @@ -54,11 +55,15 @@ export class DictionarySaveService { return obs.pipe( tap( () => { - this._notificationService.showToastNotification( - this._translateService.instant('dictionary-overview.success.generic'), - null, - NotificationType.SUCCESS - ); + if (showToast) { + this._notificationService.showToastNotification( + this._translateService.instant( + 'dictionary-overview.success.generic' + ), + null, + NotificationType.SUCCESS + ); + } }, () => { this._notificationService.showToastNotification( @@ -76,7 +81,7 @@ export class DictionarySaveService { NotificationType.ERROR ); - return throwError('Entries to short'); + return throwError('Entries too short'); } } } diff --git a/apps/red-ui/src/app/modules/shared/shared.module.ts b/apps/red-ui/src/app/modules/shared/shared.module.ts index 690e5f3ad..f9cee8881 100644 --- a/apps/red-ui/src/app/modules/shared/shared.module.ts +++ b/apps/red-ui/src/app/modules/shared/shared.module.ts @@ -34,6 +34,7 @@ import { SelectComponent } from './components/select/select.component'; import { NavigateLastProjectsScreenDirective } from './directives/navigate-last-projects-screen.directive'; import { DictionaryManagerComponent } from './components/dictionary-manager/dictionary-manager.component'; import { AceEditorModule } from 'ng2-ace-editor'; +import { SideNavComponent } from '@shared/components/side-nav/side-nav.component'; const buttons = [ ChevronButtonComponent, @@ -60,6 +61,7 @@ const components = [ SortByPipe, RoundCheckboxComponent, SelectComponent, + SideNavComponent, ...buttons ]; diff --git a/apps/red-ui/src/app/state/app-state.service.ts b/apps/red-ui/src/app/state/app-state.service.ts index d34171f20..fab9e8322 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -211,20 +211,6 @@ export class AppStateService { ); } - private _dictionaryVersion(ruleSetId?: string) { - if (!ruleSetId) { - ruleSetId = this.activeProject.ruleSetId; - } - return this._appState.versions[ruleSetId].dictionaryVersion; - } - - private _rulesVersion(ruleSetId?: string) { - if (!ruleSetId) { - ruleSetId = this.activeProject.ruleSetId; - } - return this._appState.versions[ruleSetId].rulesVersion; - } - getDictionaryColor(type?: string, ruleSetId?: string) { if (!ruleSetId && this.activeProject) { ruleSetId = this.activeProject.ruleSetId; @@ -457,8 +443,8 @@ export class AppStateService { this._notificationService.showToastNotification( this._translateService.instant( error.status === 409 - ? 'project-listing.add-edit-dialog.errors.project-already-exists' - : 'project-listing.add-edit-dialog.errors.generic' + ? 'add-project-dialog.errors.project-already-exists' + : 'add-project-dialog.errors.generic' ), null, NotificationType.ERROR @@ -684,6 +670,20 @@ export class AppStateService { .toPromise(); } + private _dictionaryVersion(ruleSetId?: string) { + if (!ruleSetId) { + ruleSetId = this.activeProject.ruleSetId; + } + return this._appState.versions[ruleSetId].dictionaryVersion; + } + + private _rulesVersion(ruleSetId?: string) { + if (!ruleSetId) { + ruleSetId = this.activeProject.ruleSetId; + } + return this._appState.versions[ruleSetId].rulesVersion; + } + private _getExistingFiles(projectId: string) { const found = this._appState.projects.find((p) => p.project.projectId === projectId); return found ? found.files : []; diff --git a/apps/red-ui/src/assets/i18n/de.json b/apps/red-ui/src/assets/i18n/de.json index cc2704e91..7fc1370e6 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" }, diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json index a6442e658..ceb03f77d 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" }, @@ -131,30 +128,6 @@ "action": "New Dossier" }, "add-new": "New Dossier", - "add-edit-dialog": { - "header-new": "Create Dossier", - "header-edit": "Edit Dossier", - "form": { - "name": { - "label": "Dossier Name", - "placeholder": "Enter Name" - }, - "description": { - "label": "Description", - "placeholder": "Enter Description" - }, - "due-date": "Due Date", - "template": "Dossier Template" - }, - "errors": { - "project-already-exists": "Dossier with this name already exists!", - "generic": "Failed to save dossier" - }, - "actions": { - "save": "Save", - "save-and-add-members": "Save and Edit Team" - } - }, "header": "Dossiers", "edit": { "action": "Edit Dossier" @@ -167,6 +140,67 @@ "title": "No dossiers match your current filters." } }, + "add-project-dialog": { + "header-new": "Create Dossier", + "form": { + "name": { + "label": "Dossier Name", + "placeholder": "Enter Name" + }, + "description": { + "label": "Description", + "placeholder": "Enter Description" + }, + "due-date": "Due Date", + "template": "Dossier Template" + }, + "errors": { + "project-already-exists": "Dossier with this name already exists!", + "generic": "Failed to save dossier" + }, + "actions": { + "save": "Save", + "save-and-add-members": "Save and Edit Team" + } + }, + "edit-project-dialog": { + "header": "Edit {{projectName}}", + "nav-items": { + "dossier-info": "Dossier Info", + "general-info": "General Information", + "download-package": "Download Package", + "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" + }, + "actions": { + "save": "Save Changes", + "revert": "Revert" + }, + "general-info": { + "form": { + "name": { + "label": "Dossier Name", + "placeholder": "Enter Name" + }, + "description": { + "label": "Description", + "placeholder": "Enter Description" + }, + "due-date": "Due Date", + "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." + }, "project-details": { "title": "Dossier Details", "dialog": { @@ -368,29 +402,7 @@ "success": "Redaction added!", "error": "Failed to save redaction: {{error}}" }, - "decline": { - "success": "Redaction suggestion declined!", - "error": "Failed to decline redaction: {{error}}" - }, - "approve": { - "success": "Redaction suggestion approved!", - "error": "Failed to approved redaction: {{error}}" - }, - "request-remove": { - "success": "Requested to remove redaction!", - "error": "Failed to request removal of redaction: {{error}}" - }, - "assign-reviewer": "Assign Reviewer", - "assign-approver": "Assign Approver", - "assign-me": "Assign To Me", - "table-header": { - "title": "{{length}} documents", - "bulk-select": "Toggle Selection" - }, - "remove": { - "success": "Redaction removed!", - "error": "Failed to remove redaction: {{error}}" - } + "search": "Document name..." }, "dictionary": { "undo": { diff --git a/apps/red-ui/src/assets/styles/red-menu.scss b/apps/red-ui/src/assets/styles/red-menu.scss index d515f69b3..41e5d63ec 100644 --- a/apps/red-ui/src/assets/styles/red-menu.scss +++ b/apps/red-ui/src/assets/styles/red-menu.scss @@ -12,7 +12,11 @@ padding-bottom: 24px; } - &.no-padding-bottom .mat-menu-content:not(:empty) { + &.padding-bottom-0 .mat-menu-content:not(:empty) { + padding-bottom: 0; + } + + &.padding-bottom-8 .mat-menu-content:not(:empty) { padding-bottom: 8px; } diff --git a/apps/red-ui/src/assets/styles/red-page-layout.scss b/apps/red-ui/src/assets/styles/red-page-layout.scss index 677776986..e4a3344f3 100644 --- a/apps/red-ui/src/assets/styles/red-page-layout.scss +++ b/apps/red-ui/src/assets/styles/red-page-layout.scss @@ -20,7 +20,7 @@ section.settings { width: calc(100vw - 200px); } - redaction-side-nav { + redaction-admin-side-nav { height: calc(100vh - 61px); } } @@ -330,11 +330,14 @@ section.settings { margin-right: 8px !important; } +.mr-16 { + margin-right: 16px; +} + .fit-content { width: fit-content; } -.space-between { +.d-flex { display: flex; - justify-content: space-between; } 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 { diff --git a/apps/red-ui/src/assets/styles/red-tooltips.scss b/apps/red-ui/src/assets/styles/red-tooltips.scss index 81eaa42ef..b7d8e6f77 100644 --- a/apps/red-ui/src/assets/styles/red-tooltips.scss +++ b/apps/red-ui/src/assets/styles/red-tooltips.scss @@ -31,11 +31,11 @@ &.warn { background-color: $yellow-2; - color: $accent; + color: $accent !important; - &:after { - border-top: solid 6px $yellow-2; - } + //&:after { + // border-top: solid 6px $yellow-2; + //} } }