diff --git a/apps/red-ui/src/app/common/filter/filter.component.ts b/apps/red-ui/src/app/common/filter/filter.component.ts
index 02acb5487..0391340fb 100644
--- a/apps/red-ui/src/app/common/filter/filter.component.ts
+++ b/apps/red-ui/src/app/common/filter/filter.component.ts
@@ -35,7 +35,7 @@ export class FilterComponent implements OnChanges {
private _copySettings(oldFilters: FilterModel[], newFilters: FilterModel[]) {
if (oldFilters && newFilters) {
- for (let oldFilter of oldFilters) {
+ for (const oldFilter of oldFilters) {
const newFilter = newFilters.find((f) => f.key === oldFilter.key);
if (newFilter) {
newFilter.checked = oldFilter.checked;
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 6476d23a8..5c9bcf287 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
@@ -1,10 +1,14 @@
import { FilterModel } from '../model/filter.model';
export function handleCheckedValue(filter: FilterModel) {
- filter.checked = filter.filters.reduce((acc, next) => acc && next.checked, true);
- if (filter.checked) {
- filter.indeterminate = false;
+ if (filter.filters) {
+ filter.checked = filter.filters.reduce((acc, next) => acc && next.checked, true);
+ if (filter.checked) {
+ filter.indeterminate = false;
+ } else {
+ filter.indeterminate = filter.filters.reduce((acc, next) => acc || next.checked, false);
+ }
} else {
- filter.indeterminate = filter.filters.reduce((acc, next) => acc || next.checked, false);
+ filter.indeterminate = false;
}
}
diff --git a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html
index 3e02e32cb..3f73c2bc2 100644
--- a/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html
+++ b/apps/red-ui/src/app/screens/file/file-preview-screen/file-preview-screen.component.html
@@ -24,50 +24,51 @@
+
+
-
-
-
-
-
@@ -159,23 +160,19 @@
>{{ annotation.content }}
-
-
-
-
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 b83fc342b..d5b896506 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
@@ -64,6 +64,7 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
});
this.appStateService.fileStatusChanged.subscribe(() => {
+ console.log('fs changed, rebuild');
this._calculateData();
});
}
@@ -345,4 +346,22 @@ export class ProjectOverviewScreenComponent implements OnInit, OnDestroy {
fileNotUpToDateWithDictionary(fileStatus: FileStatus) {
return fileStatus.dictionaryVersion !== this.appStateService.dictionaryVersion;
}
+
+ requestApprovalOrApproveFile($event: MouseEvent, fileStatus: FileStatus) {
+ $event.stopPropagation();
+
+ if (fileStatus.status === 'UNDER_REVIEW') {
+ this._fileActionService.setUnderApproval(fileStatus);
+ } else {
+ this._fileActionService.setApproved(fileStatus);
+ }
+ }
+
+ isApprovedOrUnderApproval(fileStatus: FileStatus) {
+ return fileStatus.status === 'APPROVED' || fileStatus.status === 'UNDER_APPROVAL';
+ }
+
+ canApprove(fileStatus: FileStatus) {
+ return fileStatus.status === 'UNDER_REVIEW' || fileStatus.status === 'UNDER_APPROVAL';
+ }
}
diff --git a/apps/red-ui/src/assets/i18n/en.json b/apps/red-ui/src/assets/i18n/en.json
index 9abcc845b..81d38da0c 100644
--- a/apps/red-ui/src/assets/i18n/en.json
+++ b/apps/red-ui/src/assets/i18n/en.json
@@ -315,6 +315,8 @@
}
},
"project-overview": {
+ "under-approval": "Under Approval",
+ "approve": "Approve",
"no-files": "This Project contains no files yet. You can start your work by uploading some files!",
"new-rule": {
"label": "New Rule",