+{{overflowCount}}
diff --git a/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.scss b/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.scss
index 8d4b215bf..c0b41e96d 100644
--- a/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.scss
+++ b/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.scss
@@ -4,10 +4,6 @@
display: none;
}
-.min-width {
- min-width: 60px;
-}
-
.select-all-container {
display: flex;
gap: 16px;
@@ -18,14 +14,16 @@
}
}
+.pr-0 {
+ padding-right: 0 !important;
+}
+
.select-oval {
width: 20px;
height: 20px;
border-radius: 50%;
border: 1px solid $grey-5;
background-color: $white;
- padding: 0;
- margin-left: 16px;
cursor: pointer;
&.active {
@@ -37,25 +35,20 @@
}
}
-.table-item {
- .needs-work {
- display: flex;
- flex-direction: row;
- gap: 4px;
- }
+.grid-container {
+ grid-template-columns: auto 3fr 2fr 1fr 2fr auto;
- .status-container {
- display: flex;
- justify-content: flex-end;
- }
-
- &:hover {
- .assigned-to, .status-container {
- display: none;
+ .table-item {
+ .table-item-title {
+ line-height: 80px;
}
- .action-buttons {
- margin-left: 32px;
+ .needs-work {
+ display: flex;
+ flex-direction: row;
+ align-items: center;
+ justify-content: flex-start;
+ gap: 4px;
}
}
}
diff --git a/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.ts b/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.ts
index 7c792c1f2..5cfd2cdbe 100644
--- a/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.ts
+++ b/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.ts
@@ -1,17 +1,17 @@
-import {Component, OnDestroy, OnInit} from '@angular/core';
-import {ActivatedRoute, Router} from '@angular/router';
-import {FileStatus, ReanalysisControllerService, StatusControllerService} from '@redaction/red-ui-http';
-import {NotificationService} from '../../notification/notification.service';
-import {AppStateService} from '../../state/app-state.service';
-import {FileDropOverlayService} from '../../upload/file-drop/service/file-drop-overlay.service';
-import {FileUploadModel} from '../../upload/model/file-upload.model';
-import {FileUploadService} from '../../upload/file-upload.service';
-import {UploadStatusOverlayService} from '../../upload/upload-status-dialog/service/upload-status-overlay.service';
-import {UserService} from '../../user/user.service';
-import {SortingOption} from '../../utils/types';
-import {DoughnutChartConfig} from '../../components/simple-doughnut-chart/simple-doughnut-chart.component';
-import {groupBy} from '../../utils/functions';
-import {DialogService} from '../../dialogs/dialog.service';
+import { Component, OnDestroy, OnInit } from '@angular/core';
+import { ActivatedRoute, Router } from '@angular/router';
+import { FileStatus, ReanalysisControllerService, StatusControllerService } from '@redaction/red-ui-http';
+import { NotificationService } from '../../notification/notification.service';
+import { AppStateService } from '../../state/app-state.service';
+import { FileDropOverlayService } from '../../upload/file-drop/service/file-drop-overlay.service';
+import { FileUploadModel } from '../../upload/model/file-upload.model';
+import { FileUploadService } from '../../upload/file-upload.service';
+import { UploadStatusOverlayService } from '../../upload/upload-status-dialog/service/upload-status-overlay.service';
+import { UserService } from '../../user/user.service';
+import { SortingOption } from '../../utils/types';
+import { DoughnutChartConfig } from '../../components/simple-doughnut-chart/simple-doughnut-chart.component';
+import { groupBy } from '../../utils/functions';
+import { DialogService } from '../../dialogs/dialog.service';
@Component({
@@ -23,11 +23,11 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
private _selectedFileIds: string[] = [];
public sortingOptions: SortingOption[] = [
- {label: 'project-overview.sorting.recent.label', order: 'desc', column: 'lastUpdated'},
- {label: 'project-overview.sorting.oldest.label', order: 'asc', column: 'lastUpdated'},
- {label: 'project-overview.sorting.alphabetically.label', order: 'asc', column: 'filename'},
- {label: 'project-overview.sorting.number-of-pages.label', order: 'asc', column: 'numberOfPages'},
- {label: 'project-overview.sorting.number-of-analyses.label', order: 'desc', column: 'numberOfAnalyses'}
+ { label: 'project-overview.sorting.recent.label', order: 'desc', column: 'lastUpdated' },
+ { label: 'project-overview.sorting.oldest.label', order: 'asc', column: 'lastUpdated' },
+ { label: 'project-overview.sorting.alphabetically.label', order: 'asc', column: 'filename' },
+ { label: 'project-overview.sorting.number-of-pages.label', order: 'asc', column: 'numberOfPages' },
+ { label: 'project-overview.sorting.number-of-analyses.label', order: 'desc', column: 'numberOfAnalyses' }
];
public sortingOption: SortingOption = this.sortingOptions[0];
public documentsChartData: DoughnutChartConfig[] = [];
@@ -69,20 +69,12 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
return this._userService.user;
}
- public get members() {
- return this.activeProject.memberIds.map(m => this._userService.getName(this._userService.getUserById(m)));
- }
-
public get displayMembers() {
- return this.members.slice(0, 6);
+ return this.activeProject.memberIds.slice(0, 6);
}
public get overflowCount() {
- return this.members.length > 6 ? this.members.length - 6 : 0;
- }
-
- public get ownerName() {
- return this._userService.getNameForId(this.activeProject.ownerId);
+ return this.activeProject.memberIds.length > 6 ? this.activeProject.memberIds.length - 6 : 0;
}
private _getFileStatus() {
@@ -95,7 +87,7 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
const groups = groupBy(this.appStateService.activeProject.files, 'status');
this.documentsChartData = [];
for (const key of Object.keys(groups)) {
- this.documentsChartData.push({value: groups[key].length, color: key, label: key});
+ this.documentsChartData.push({ value: groups[key].length, color: key, label: key });
}
}
@@ -118,7 +110,8 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
}
public areAllFilesSelected() {
- return this._selectedFileIds.length === this.appStateService.activeProject.files.length;
+ return this.appStateService.activeProject.files.length !== 0 &&
+ this._selectedFileIds.length === this.appStateService.activeProject.files.length;
}
public isFileSelected(file: FileStatus) {
@@ -189,10 +182,6 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
return fileStatus === 'PROCESSING' || fileStatus === 'REVIEWED' || true;
}
- public getFileOwnerUsername(fileStatus: FileStatus) {
- return this._userService.getNameForId(fileStatus.currentReviewer);
- }
-
public toggleSortByAddedOn() {
const sortedByRecent: boolean = (this.sortingOption === this.sortingOptions[0]);
this.sortingOption = sortedByRecent ? this.sortingOptions[1] : this.sortingOptions[0];
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 92a90e2b8..5a7c7b17b 100644
--- a/apps/red-ui/src/app/state/app-state.service.ts
+++ b/apps/red-ui/src/app/state/app-state.service.ts
@@ -128,7 +128,7 @@ export class AppStateService {
const projects = await this._projectControllerService.getProjects().toPromise();
if (projects) {
- let mappedProjects = projects.map(p => {
+ const mappedProjects = projects.map(p => {
return new ProjectWrapper(p, this._getExistingFiles(p));
});
@@ -150,9 +150,9 @@ export class AppStateService {
const files = await this._statusControllerService.getProjectStatus(project.project.projectId).toPromise();
const oldFiles = [...project.files];
- for (let file of files) {
+ for (const file of files) {
let found = false;
- for (let oldFile of oldFiles) {
+ for (const oldFile of oldFiles) {
if (oldFile.fileId === file.fileId) {
// emit when analysis count changed
if (oldFile.numberOfAnalyses !== file.numberOfAnalyses) {
diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json
index 9b3ea77ee..39b152da1 100644
--- a/apps/red-ui/src/assets/i18n/en.json
+++ b/apps/red-ui/src/assets/i18n/en.json
@@ -52,7 +52,7 @@
},
"content": {
"text": {
- "label": "
Selected Text: {{value}}"
+ "label": "Selected text:"
},
"dictionary": {
"add": {
diff --git a/apps/red-ui/src/assets/icons/general/flash.svg b/apps/red-ui/src/assets/icons/general/flash.svg
deleted file mode 100644
index eb030e0ed..000000000
--- a/apps/red-ui/src/assets/icons/general/flash.svg
+++ /dev/null
@@ -1,4 +0,0 @@
-
diff --git a/apps/red-ui/src/assets/styles/red-checkbox.scss b/apps/red-ui/src/assets/styles/red-checkbox.scss
index 919495916..febf4d51a 100644
--- a/apps/red-ui/src/assets/styles/red-checkbox.scss
+++ b/apps/red-ui/src/assets/styles/red-checkbox.scss
@@ -10,3 +10,19 @@
width: 18px;
height: 18px;
}
+
+.mat-checkbox-layout {
+ .mat-checkbox-inner-container {
+ margin-left: 0;
+ }
+
+ .mat-checkbox-label {
+ font-family: 'Inter', sans-serif;
+ font-size: 13px;
+ color: $accent;
+
+ display: flex;
+ align-items: center;
+ gap: 4px;
+ }
+}
diff --git a/apps/red-ui/src/assets/styles/red-dialog.scss b/apps/red-ui/src/assets/styles/red-dialog.scss
index 16ca57741..51388cc44 100644
--- a/apps/red-ui/src/assets/styles/red-dialog.scss
+++ b/apps/red-ui/src/assets/styles/red-dialog.scss
@@ -1,3 +1,7 @@
+.mat-dialog-container {
+ border-radius: 8px;
+}
+
.dialog {
position: relative;
min-height: 80px;
diff --git a/apps/red-ui/src/assets/styles/red-input.scss b/apps/red-ui/src/assets/styles/red-input.scss
index bb5b4ec4b..e60713169 100644
--- a/apps/red-ui/src/assets/styles/red-input.scss
+++ b/apps/red-ui/src/assets/styles/red-input.scss
@@ -1,53 +1,63 @@
@import "red-variables";
+@import "red-mixins";
.red-input-group {
-
display: flex;
flex-direction: column;
- margin-top: 5px;
- margin-bottom: 8px;
+ margin-top: 13px;
- label {
- height: 14px;
- opacity: 0.6;
+ &:first-child {
+ margin-top: 0;
+ }
+
+ input, textarea, mat-select {
+ box-sizing: border-box;
+ width: 322px;
+ padding-left: 11px;
+ padding-right: 11px;
+ border: 1px solid $grey-5;
+ font-family: Inter, sans-serif;
font-size: 11px;
- font-weight: 500;
- letter-spacing: 0;
line-height: 14px;
- margin-bottom: 5px;
+ background-color: #FFFFFF;
+ border-radius: 8px;
+ outline: none;
+ margin-top: 3px;
+ min-height: 34px;
+
+ &:focus {
+ border-color: $grey-1;
+ }
+ }
+
+ mat-select {
+ width: 220px;
+
+ .mat-select-trigger {
+ height: 32px;
+ }
+
+ .mat-select-value {
+ vertical-align: middle;
+ }
}
textarea {
resize: none;
- box-sizing: border-box;
- padding-left: 11px;
- padding-right: 11px;
- width: 300px;
- border: 1px solid $grey-3;
- opacity: 0.4;
- border-radius: 2px;
- background-color: #FFFFFF;
- outline: none;
-
- &:focus {
- border-color: $grey-1;
- }
+ padding-top: 7px;
+ padding-bottom: 7px;
+ @include no-scroll-bar();
}
- input {
- box-sizing: border-box;
- padding-left: 11px;
- padding-right: 11px;
- height: 34px;
- width: 300px;
- border: 1px solid $grey-3;
- opacity: 0.4;
- border-radius: 2px;
- background-color: #FFFFFF;
- outline: none;
+ label {
+ opacity: 0.7;
+ font-size: 11px;
+ letter-spacing: 0;
+ line-height: 14px;
+ margin-bottom: 2px;
- &:focus {
- border-color: $grey-1;
+ &.mat-checkbox-layout {
+ opacity: 1;
}
}
}
diff --git a/apps/red-ui/src/assets/styles/red-menu.scss b/apps/red-ui/src/assets/styles/red-menu.scss
index 5b10ac247..14d760557 100644
--- a/apps/red-ui/src/assets/styles/red-menu.scss
+++ b/apps/red-ui/src/assets/styles/red-menu.scss
@@ -11,7 +11,8 @@
color: $accent;
.arrow-wrapper {
- width: 24px;
+ width: 16px;
+ margin-right: 8px;
text-align: center;
mat-icon {
@@ -24,23 +25,5 @@
&.padding-left {
padding-left: 64px;
}
-
- .mat-checkbox-layout {
- margin-left: 4px;
-
- .mat-checkbox-inner-container {
- margin-left: 0;
- }
-
- .mat-checkbox-label {
- font-family: 'Inter', sans-serif;
- font-size: 13px;
- color: $accent;
-
- display: flex;
- align-items: center;
- gap: 4px;
- }
- }
}
}
diff --git a/apps/red-ui/src/assets/styles/red-mixins.scss b/apps/red-ui/src/assets/styles/red-mixins.scss
index 317437d89..fb3975951 100644
--- a/apps/red-ui/src/assets/styles/red-mixins.scss
+++ b/apps/red-ui/src/assets/styles/red-mixins.scss
@@ -8,3 +8,12 @@
text-overflow: ellipsis;
white-space: nowrap;
}
+
+@mixin no-scroll-bar {
+ scrollbar-width: none; /* Firefox */
+ -ms-overflow-style: none; /* IE 10+ */
+ &::-webkit-scrollbar {
+ width: 0;
+ background: transparent; /* Chrome/Safari/Webkit */
+ }
+}
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 e003252a3..5137d1761 100644
--- a/apps/red-ui/src/assets/styles/red-page-layout.scss
+++ b/apps/red-ui/src/assets/styles/red-page-layout.scss
@@ -1,5 +1,4 @@
@import "red-variables";
-@import "red-mixins";
html, body {
margin: 0;
@@ -89,22 +88,6 @@ html, body {
flex: 2;
}
-.flex-3 {
- flex: 3;
-}
-
-.flex-4 {
- flex: 4;
-}
-
-.flex-5 {
- flex: 5;
-}
-
-.flex-6 {
- flex: 6;
-}
-
.mt-5 {
margin-top: 5px;
}
@@ -172,27 +155,6 @@ html, body {
}
}
- .breadcrumbs-container {
- display: flex;
- gap: 8px;
-
- .breadcrumb {
- text-decoration: none;
- color: $accent;
- font-weight: 600;
-
- &:last-child {
- color: $primary;
- @include line-clamp(1);
- }
-
- .mat-icon {
- vertical-align: middle;
- width: 6px;
- }
- }
- }
-
.divider {
height: 1px;
opacity: 0.15;
diff --git a/apps/red-ui/src/assets/styles/red-tables.scss b/apps/red-ui/src/assets/styles/red-tables.scss
index f331982d7..908a86093 100644
--- a/apps/red-ui/src/assets/styles/red-tables.scss
+++ b/apps/red-ui/src/assets/styles/red-tables.scss
@@ -16,59 +16,83 @@
}
}
-.table-col-names {
- display: flex;
- text-transform: uppercase;
- border-bottom: 1px solid rgba(226, 228, 233, 0.9);
- align-items: center;
+.grid-container {
+ display: grid;
+ position: relative;
- > div {
- padding: 8px 16px;
+ .no-data {
+ grid-column: 1/-1;
+ }
+
+ .table-col-name {
font-weight: 600;
display: flex;
+ gap: 8px;
+ padding: 8px 16px;
+ border-bottom: 1px solid rgba(226, 228, 233, 0.9);
align-items: center;
- gap: 6px;
- }
+ text-transform: uppercase;
- .sort-arrows-container {
- mat-icon {
- display: block;
- width: 6px;
- height: 11px;
+ .sort-arrows-container {
+ mat-icon {
+ display: block;
+ width: 6px;
+ height: 11px;
+ }
}
}
-}
-.table-item {
- display: flex;
- align-items: center;
- height: 80px;
- border-bottom: 1px solid rgba(226, 228, 233, 0.9);
+ .table-item {
+ display: contents;
- > div {
- padding: 0 16px;
- }
+ > div {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ height: 100%;
+ width: 100%;
+ position: relative;
+ box-sizing: border-box;
+ }
- .table-item-title {
- font-weight: 600;
- @include line-clamp(1);
- }
+ .table-item-title {
+ font-weight: 600;
+ @include line-clamp(1);
+ }
- .action-buttons {
- display: none;
- }
+ > div {
+ height: 80px;
+ border-bottom: 1px solid rgba(226, 228, 233, 0.9);
+ padding: 0 16px;
+ }
- &:hover {
- background-color: #F9FAFB;
.action-buttons {
- display: flex;
+ position: absolute;
+ display: none;
+ right: 0;
+ top: 0;
+ height: 100%;
+ width: fit-content;
+ flex-direction: row;
align-items: center;
- justify-content: flex-end;
+ padding-left: 100px;
+ padding-right: 8px;
+ background: linear-gradient(to right, rgba(244, 245, 247, 0) 0%, #F4F5F7 35%);
mat-icon {
width: 14px;
}
}
+
+ &:hover {
+ > div {
+ background-color: #F9FAFB;
+ }
+
+ .action-buttons {
+ display: flex;
+ }
+ }
}
}