From 4305745eceafdbc972647511847ad9d93ba087eb Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Fri, 13 Aug 2021 12:19:33 +0300 Subject: [PATCH] cleanup for recent opened file --- .../app/models/file/file-status.wrapper.ts | 1 + .../dossier-overview-screen.component.html | 2 +- .../dossier-overview-screen.component.ts | 6 +---- .../file-preview-screen.component.ts | 7 ------ .../app/services/user-preference.service.ts | 19 ++++++++++++---- .../red-ui/src/app/state/app-state.service.ts | 22 ++++++++++++++++--- 6 files changed, 37 insertions(+), 20 deletions(-) diff --git a/apps/red-ui/src/app/models/file/file-status.wrapper.ts b/apps/red-ui/src/app/models/file/file-status.wrapper.ts index 6d4619ec8..5bd5e7e7f 100644 --- a/apps/red-ui/src/app/models/file/file-status.wrapper.ts +++ b/apps/red-ui/src/app/models/file/file-status.wrapper.ts @@ -43,6 +43,7 @@ export class FileStatusWrapper implements FileStatus { readonly hasSuggestions = this.fileStatus.hasSuggestions; primaryAttribute: string; + lastOpened: boolean; constructor(readonly fileStatus: FileStatus, public reviewerName: string, fileAttributesConfig?: FileAttributesConfig) { if (fileAttributesConfig) { diff --git a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html index 1f81ef2ba..a0a6532c4 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html +++ b/apps/red-ui/src/app/modules/dossier/screens/dossier-overview-screen/dossier-overview-screen.component.html @@ -58,7 +58,7 @@
!f.required && f.checked); } - isLastOpenedFile(fileId: string): boolean { - return this._userPreferenceService.getLastOpenedFileId(this._lastOpenedFileKey) === fileId; - } - async ngOnInit(): Promise { this._loadingService.start(); try { diff --git a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts index 535f8028b..a3304bc02 100644 --- a/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts +++ b/apps/red-ui/src/app/modules/dossier/screens/file-preview-screen/file-preview-screen.component.ts @@ -244,13 +244,6 @@ export class FilePreviewScreenComponent extends AutoUnsubscribe implements OnIni await this._loadFileData(false); this.displayPDFViewer = true; this._updateCanPerformActions(); - try { - const key = 'Dossier-Recent-' + this.dossierId; - await this._userPreferenceControllerService.savePreferences([this.fileId], key).toPromise(); - } catch (error) { - console.error(error); - } - this._subscribeToFileUpdates(); this._loadingService.stop(); } diff --git a/apps/red-ui/src/app/services/user-preference.service.ts b/apps/red-ui/src/app/services/user-preference.service.ts index f788146b5..9cf706011 100644 --- a/apps/red-ui/src/app/services/user-preference.service.ts +++ b/apps/red-ui/src/app/services/user-preference.service.ts @@ -10,9 +10,7 @@ interface UserAttributes { }) export class UserPreferenceService { constructor(private readonly _userPreferenceControllerService: UserPreferenceControllerService) { - _userPreferenceControllerService.getAllUserAttributes().subscribe(attributes => { - this._userAttributes = attributes ?? {}; - }); + this.reload(); } private _userAttributes: UserAttributes = {}; @@ -26,15 +24,28 @@ export class UserPreferenceService { return value ? value === 'true' : false; } - getLastOpenedFileId(key: string): string { + getLastOpenedFileForDossier(dossierId: string): string { + const key = `Dossier-Recent-${dossierId}`; if (this.userAttributes[key]?.length > 0) { return this.userAttributes[key][0]; } return ''; } + async saveLastOpenedFileForDossier(dossierId: string, fileId: string) { + const key = `Dossier-Recent-${dossierId}`; + this.userAttributes[key] = [fileId]; + await this._userPreferenceControllerService.savePreferences([fileId], key).toPromise(); + } + toggleDevFeatures() { sessionStorage.setItem('redaction.enable-dev-features', `${!this.areDevFeaturesEnabled}`); window.location.reload(); } + + reload() { + this._userPreferenceControllerService.getAllUserAttributes().subscribe(attributes => { + this._userAttributes = attributes ?? {}; + }); + } } 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 06655441f..7875b22f5 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -7,7 +7,8 @@ import { FileAttributesControllerService, FileStatus, ReanalysisControllerService, - StatusControllerService + StatusControllerService, + UserPreferenceControllerService } from '@redaction/red-ui-http'; import { Toaster } from '@services/toaster.service'; import { TranslateService } from '@ngx-translate/core'; @@ -23,6 +24,7 @@ import { DossierTemplateModelWrapper } from '@models/file/dossier-template-model import { DossiersService } from '../modules/dossier/services/dossiers.service'; import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { humanize } from '@iqser/common-ui'; +import { UserPreferenceService } from '@services/user-preference.service'; export interface AppState { dossiers: DossierWrapper[]; @@ -55,7 +57,8 @@ export class AppStateService { private readonly _dictionaryControllerService: DictionaryControllerService, private readonly _dossierTemplateControllerService: DossierTemplateControllerService, private readonly _statusControllerService: StatusControllerService, - private readonly _fileAttributesService: FileAttributesControllerService + private readonly _fileAttributesService: FileAttributesControllerService, + private readonly _userPreferenceService: UserPreferenceService ) { this._appState = { dossiers: [], @@ -291,7 +294,7 @@ export class AppStateService { ); } - activateFile(dossierId: string, fileId: string) { + async activateFile(dossierId: string, fileId: string) { if (this.activeDossierId === dossierId && this.activeFileId === fileId) return; this.activateDossier(dossierId); if (this.activeDossier) { @@ -301,6 +304,15 @@ export class AppStateService { this._router.navigate(['/main/dossiers/' + dossierId]); } } + this._updateLastActiveFileForDossier(dossierId, fileId); + } + + private async _updateLastActiveFileForDossier(dossierId: string, fileId: string) { + this.activeDossier.files.forEach(f => { + f.lastOpened = f.fileId === fileId; + }); + + await this._userPreferenceService.saveLastOpenedFileForDossier(dossierId, fileId); } activateDossierTemplate(dossierTemplateId: string) { @@ -706,6 +718,10 @@ export class AppStateService { fileStatusChangedEvent.forEach(file => this.fileChanged$.next(file)); } + const lastOpenedFileId = this._userPreferenceService.getLastOpenedFileForDossier(dossier.dossierId); + + dossier.files.forEach(file => (file.lastOpened = file.fileId === lastOpenedFileId)); + return files; }