From 99e31a571a579357d44fcb5daa8c6769621e66ee Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Thu, 14 Oct 2021 09:01:12 +0300 Subject: [PATCH] delta view sort of --- .../src/app/models/file/file-data.model.ts | 17 +++++++++-------- .../admin-side-nav/admin-side-nav.component.ts | 2 +- .../page-indicator/page-indicator.component.ts | 17 +++++++++++++++-- libs/red-ui-http/src/lib/model/viewedPage.ts | 1 + 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/apps/red-ui/src/app/models/file/file-data.model.ts b/apps/red-ui/src/app/models/file/file-data.model.ts index 3d01d5803..0f0f7fb53 100644 --- a/apps/red-ui/src/app/models/file/file-data.model.ts +++ b/apps/red-ui/src/app/models/file/file-data.model.ts @@ -13,6 +13,8 @@ export class AnnotationData { } export class FileDataModel { + static readonly DELTA_VIEW_TIME = 10 * 60 * 1000; // 10 minutes; + hasChangeLog: boolean; constructor(public file: File, public fileData: Blob, public redactionLog: RedactionLog, public viewedPages?: ViewedPages) {} @@ -103,25 +105,24 @@ export class FileDataModel { } private _isChangeLogEntry(redactionLogEntry: RedactionLogEntry, wrapper: RedactionLogEntryWrapper) { - redactionLogEntry.changes.sort((a, b) => moment(a.dateTime).date() - moment(b.dateTime).date()); + redactionLogEntry.changes.sort((a, b) => moment(a.dateTime).valueOf() - moment(b.dateTime).valueOf()); const lastChange = redactionLogEntry.changes.length >= 1 ? redactionLogEntry.changes[redactionLogEntry.changes.length - 1] : undefined; const page = redactionLogEntry.positions?.[0].page; - const viewTime = this.viewedPages.pages - .filter(p => p.page === page) - .map(p => moment(p.viewedTime)) - .pop(); + + const viewedPage = this.viewedPages.pages.filter(p => p.page === page).pop(); // page has been seen -> let's see if it's a change - if (viewTime) { + if (viewedPage) { + const viewTime = moment(viewedPage.viewedTime); // these are all unseen changes - const relevantChanges = redactionLogEntry.changes.filter(change => moment(change.dateTime).date() > viewTime.date()); - console.log(viewTime.date(), relevantChanges, redactionLogEntry.positions[0].page); + const relevantChanges = redactionLogEntry.changes.filter(change => moment(change.dateTime).valueOf() > viewTime.valueOf()); // at least one unseen change if (relevantChanges.length > 0) { wrapper.changeLogType = relevantChanges[relevantChanges.length - 1].type; wrapper.isChangeLogEntry = true; + viewedPage.hasChanges = true; this.hasChangeLog = true; } else { // no relevant changes - hide removed anyway diff --git a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts index 6f641c671..8dd9f629d 100644 --- a/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts +++ b/apps/red-ui/src/app/modules/admin/admin-side-nav/admin-side-nav.component.ts @@ -29,7 +29,7 @@ export class AdminSideNavComponent implements OnInit { { screen: 'dossier-templates', label: _('dossier-templates'), - hideIf: !this.currentUser.isManager, + hideIf: !this.currentUser.isManager && !this.currentUser.isAdmin, }, { screen: 'digital-signature', diff --git a/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts b/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts index 578bd79ef..d8e247d77 100644 --- a/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts +++ b/apps/red-ui/src/app/modules/dossier/components/page-indicator/page-indicator.component.ts @@ -31,8 +31,17 @@ export class PageIndicatorComponent implements OnChanges, OnInit, OnDestroy { private readonly _permissionService: PermissionsService, ) {} + get activePage() { + return this.viewedPages?.pages?.find(p => p.page === this.number); + } + get read() { - return this.viewedPages?.pages?.findIndex(p => p.page === this.number) >= 0; + const activePage = this.activePage; + if (!activePage) { + return false; + } else { + return !activePage.hasChanges; + } } ngOnInit(): void { @@ -99,7 +108,11 @@ export class PageIndicatorComponent implements OnChanges, OnInit, OnDestroy { this._viewedPagesControllerService .addPage({ page: this.number }, this._dossiersService.activeDossierId, this._appStateService.activeFileId) .subscribe(() => { - this.viewedPages?.pages?.push({ page: this.number, fileId: this._appStateService.activeFileId }); + if (this.activePage) { + this.activePage.hasChanges = false; + } else { + this.viewedPages?.pages?.push({ page: this.number, fileId: this._appStateService.activeFileId }); + } }); } diff --git a/libs/red-ui-http/src/lib/model/viewedPage.ts b/libs/red-ui-http/src/lib/model/viewedPage.ts index 8dd917b3a..308debf35 100644 --- a/libs/red-ui-http/src/lib/model/viewedPage.ts +++ b/libs/red-ui-http/src/lib/model/viewedPage.ts @@ -15,4 +15,5 @@ export interface ViewedPage { page?: number; userId?: string; viewedTime?: string; + hasChanges?: boolean; }