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;