diff --git a/apps/red-ui/src/app/common/filter/utils/filter-utils.ts b/apps/red-ui/src/app/common/filter/utils/filter-utils.ts
index 71141a64d..ed10d5300 100644
--- a/apps/red-ui/src/app/common/filter/utils/filter-utils.ts
+++ b/apps/red-ui/src/app/common/filter/utils/filter-utils.ts
@@ -3,6 +3,13 @@ import { FileStatusWrapper } from '../../../screens/file/model/file-status.wrapp
import * as moment from 'moment';
import { ProjectWrapper } from '../../../state/app-state.service';
+export const RedactionFilterSorter = {
+ hints: 1,
+ redactions: 2,
+ requests: 3,
+ none: 4
+};
+
export function handleCheckedValue(filter: FilterModel) {
if (filter.filters && filter.filters.length) {
filter.checked = filter.filters.reduce((acc, next) => acc && next.checked, true);
diff --git a/apps/red-ui/src/app/screens/file/model/file-status.wrapper.ts b/apps/red-ui/src/app/screens/file/model/file-status.wrapper.ts
index 9b97c7c61..a487932f8 100644
--- a/apps/red-ui/src/app/screens/file/model/file-status.wrapper.ts
+++ b/apps/red-ui/src/app/screens/file/model/file-status.wrapper.ts
@@ -47,6 +47,10 @@ export class FileStatusWrapper {
return this.fileStatus.hasRequests;
}
+ get hasNone() {
+ return !this.hasRedactions && !this.hasHints && !this.hasRequests;
+ }
+
get lastUpdated() {
return this.fileStatus.lastUpdated;
}
diff --git a/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts b/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts
index 70e534967..cef36eb57 100644
--- a/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts
+++ b/apps/red-ui/src/app/screens/project-listing-screen/project-listing-screen.component.ts
@@ -14,7 +14,8 @@ import {
dueDateChecker,
getFilteredEntities,
projectMemberChecker,
- projectStatusChecker
+ projectStatusChecker,
+ RedactionFilterSorter
} from '../../common/filter/utils/filter-utils';
import { TranslateService } from '@ngx-translate/core';
@@ -171,6 +172,7 @@ export class ProjectListingScreenComponent implements OnInit {
if (file.hasHints) allDistinctNeedsWork.add('hints');
if (file.hasRedactions) allDistinctNeedsWork.add('redactions');
if (file.hasRequests) allDistinctNeedsWork.add('requests');
+ if (file.hasNone) allDistinctNeedsWork.add('none');
});
});
@@ -198,13 +200,17 @@ export class ProjectListingScreenComponent implements OnInit {
});
});
- this.needsWorkFilters = [];
+ const needsWorkFilters = [];
allDistinctNeedsWork.forEach((type) => {
- this.needsWorkFilters.push({
+ needsWorkFilters.push({
key: type,
label: this._translateService.instant('filter.' + type)
});
});
+ needsWorkFilters.sort(
+ (a, b) => RedactionFilterSorter[a.key] - RedactionFilterSorter[b.key]
+ );
+ this.needsWorkFilters = needsWorkFilters;
}
public filtersChanged() {
diff --git a/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.html b/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.html
index b196f3a9c..3f8077da6 100644
--- a/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.html
+++ b/apps/red-ui/src/app/screens/project-overview-screen/project-overview-screen.component.html
@@ -256,7 +256,10 @@
: 'report.unavailable-single'
) | translate
"
- *ngIf="appStateService.isActiveProjectOwnerAndManager"
+ *ngIf="
+ appStateService.isActiveProjectOwnerAndManager &&
+ !isError(fileStatus)
+ "
[matTooltipPosition]="'above'"
>
+
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 fc96f9fe3..f4381926a 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
@@ -25,7 +25,8 @@ import { FileStatusWrapper } from '../file/model/file-status.wrapper';
import {
annotationFilterChecker,
getFilteredEntities,
- keyChecker
+ keyChecker,
+ RedactionFilterSorter
} from '../../common/filter/utils/filter-utils';
@Component({
@@ -280,6 +281,7 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
if (file.hasHints) allDistinctNeedsWork.add('hints');
if (file.hasRedactions) allDistinctNeedsWork.add('redactions');
if (file.hasRequests) allDistinctNeedsWork.add('requests');
+ if (file.hasNone) allDistinctNeedsWork.add('none');
});
this.statusFilters = [];
@@ -298,13 +300,17 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
});
});
- this.needsWorkFilters = [];
+ const needsWorkFilters = [];
allDistinctNeedsWork.forEach((type) => {
- this.needsWorkFilters.push({
+ needsWorkFilters.push({
key: type,
label: this._translateService.instant('filter.' + type)
});
});
+ needsWorkFilters.sort(
+ (a, b) => RedactionFilterSorter[a.key] - RedactionFilterSorter[b.key]
+ );
+ this.needsWorkFilters = needsWorkFilters;
}
filtersChanged() {
diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json
index 320ecc530..1240b6fc9 100644
--- a/apps/red-ui/src/assets/i18n/en.json
+++ b/apps/red-ui/src/assets/i18n/en.json
@@ -306,7 +306,8 @@
"filter": {
"hints": "Hints",
"redactions": "Redactions",
- "requests": "Requests"
+ "requests": "Requests",
+ "none": "No Annotations"
},
"annotation-filter": {
"super-type": {
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 9cc469fc4..9e948d08b 100644
--- a/apps/red-ui/src/assets/styles/red-page-layout.scss
+++ b/apps/red-ui/src/assets/styles/red-page-layout.scss
@@ -185,6 +185,10 @@ body {
padding-right: 0 !important;
}
+.mr-8 {
+ margin-right: 8px !important;
+}
+
.empty-state-container {
display: flex;
justify-content: center;