diff --git a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts index f2971fb72..8f10d34a9 100644 --- a/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts +++ b/apps/red-ui/src/app/modules/dossier/dialogs/edit-dossier-dialog/general-info/edit-dossier-general-info.component.ts @@ -122,7 +122,7 @@ export class EditDossierGeneralInfoComponent implements OnInit, EditDossierSecti } }); this._dialogService.openDialog('confirm', null, data, async () => { - await this._appStateService.deleteDossier(this.dossier); + await this._dossiersService.delete(this.dossier).toPromise(); this._editDossierDialogRef.componentInstance.afterSave(); this._editDossierDialogRef.close(); this._router.navigate(['main', 'dossiers']).then(() => this._notifyDossierDeleted()); diff --git a/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts b/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts index c29175844..90654ad04 100644 --- a/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts +++ b/apps/red-ui/src/app/modules/dossier/services/dossiers.service.ts @@ -129,6 +129,18 @@ export class DossiersService extends EntitiesService { return this.getAll('deleted-dossiers').toPromise(); } + delete(dossier: Dossier): Observable { + const updateDossiers = () => { + console.log(this.all.filter(d => d.dossierId !== dossier.dossierId)); + this.setEntities(this.all.filter(d => d.dossierId !== dossier.dossierId)); + }; + const showToast = () => { + this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier }); + return of({}); + }; + return super.delete(dossier.dossierId).pipe(tap(updateDossiers), catchError(showToast)); + } + @Validate() restore(@RequiredParam() dossierIds: List): Promise { return this._post(dossierIds, 'deleted-dossiers/restore').toPromise(); @@ -137,7 +149,7 @@ export class DossiersService extends EntitiesService { @Validate() hardDelete(@RequiredParam() dossierIds: List): Promise { const body = dossierIds.map(id => ({ key: 'dossierId', value: id })); - return this.delete(body, 'deleted-dossiers/hard-delete', body).toPromise(); + return super.delete(body, 'deleted-dossiers/hard-delete', body).toPromise(); } private _computeStats(entities: List): IDossiersStats { 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 7680baba7..19509cec4 100644 --- a/apps/red-ui/src/app/state/app-state.service.ts +++ b/apps/red-ui/src/app/state/app-state.service.ts @@ -2,7 +2,7 @@ import { Injectable } from '@angular/core'; import { Colors, IFile, ReanalysisControllerService } from '@redaction/red-ui-http'; import { Toaster } from '@iqser/common-ui'; import { TranslateService } from '@ngx-translate/core'; -import { Event, NavigationEnd, ResolveStart, Router } from '@angular/router'; +import { Event, ResolveStart, Router } from '@angular/router'; import { UserService } from '@services/user.service'; import { forkJoin, Observable, of, Subject } from 'rxjs'; import { catchError, filter, first, map, tap } from 'rxjs/operators'; @@ -12,7 +12,6 @@ import { Dossier } from './model/dossier'; import { TypeValue } from '@models/file/type-value'; import { DossierTemplate } from '@models/file/dossier-template'; import { DossiersService } from '../modules/dossier/services/dossiers.service'; -import { marker as _ } from '@biesbjerg/ngx-translate-extract-marker'; import { UserPreferenceService } from '@services/user-preference.service'; import { FilesService } from '../modules/dossier/services/files.service'; import { DictionaryService } from '@shared/services/dictionary.service'; @@ -65,9 +64,8 @@ export class AppStateService { .toPromise(); return await this.activateFile(dossierId, fileId); } - if (AppStateService._isRandomRoute(event)) { - this._appState.activeFileId = undefined; - } + + this._appState.activeFileId = undefined; }); } @@ -114,10 +112,6 @@ export class AppStateService { return event instanceof ResolveStart && event.url.includes('/main/dossiers/') && event.url.includes('/file/'); } - private static _isRandomRoute(event: Event) { - return event instanceof NavigationEnd && !event.url.includes('/main/dossiers/') && !event.url.includes('/file/'); - } - async reloadActiveDossierFilesIfNecessary() { if (this._dossiersService.activeDossier?.hasPendingOrProcessing) { await this.reloadActiveDossierFiles(); @@ -253,21 +247,6 @@ export class AppStateService { this._appState.activeDictionaryType = null; } - deleteDossier(dossier: Dossier) { - return this._dossiersService - .delete(dossier.id) - .toPromise() - .then( - () => { - const dossiers = this._dossiersService.all; - const index = dossiers.findIndex(p => p.id === dossier.id); - dossiers.splice(index, 1); - this._dossiersService.setEntities([...dossiers]); - }, - () => this._toaster.error(_('dossier-listing.delete.delete-failed'), { params: dossier }) - ); - } - async reloadActiveDossierFiles() { if (this._dossiersService.activeDossierId) { await this.getFiles(); @@ -576,62 +555,37 @@ export class AppStateService { private _processFiles(dossier: Dossier, iFiles: IFile[], emitEvents = true) { const oldFiles = [...dossier.files]; + const fileAttributes = this._fileAttributesService.getFileAttributeConfig(dossier.dossierTemplateId); + const newFiles = iFiles.map(iFile => new File(iFile, this._userService.getNameForId(iFile.currentReviewer), fileAttributes)); - const fileChangedEvent: File[] = []; - const fileReanalysedEvent: File[] = []; + const lastOpenedFileId = this._userPreferenceService.getLastOpenedFileForDossier(dossier.id); + newFiles.forEach(file => (file.lastOpened = file.fileId === lastOpenedFileId)); - for (const iFile of iFiles) { + for (const newFile of newFiles) { let found = false; for (const oldFile of oldFiles) { - if (oldFile.fileId === iFile.fileId) { + if (oldFile.fileId === newFile.fileId) { // emit when analysis count changed - const file = new File( - iFile, - this._userService.getNameForId(iFile.currentReviewer), - this._fileAttributesService.getFileAttributeConfig(dossier.dossierTemplateId) - ); - file.lastOpened = file.fileId === this._userPreferenceService.getLastOpenedFileForDossier(dossier.id); - if (JSON.stringify(oldFile) !== JSON.stringify(file)) { - fileChangedEvent.push(file); + if (JSON.stringify(oldFile) !== JSON.stringify(newFile) && emitEvents) { + this.fileChanged$.next(newFile); } - if (oldFile.lastProcessed !== iFile.lastProcessed) { - fileReanalysedEvent.push(file); + if (oldFile.lastProcessed !== newFile.lastProcessed && emitEvents) { + this.fileReanalysed$.next(newFile); } found = true; break; } } // emit for new file - if (!found) { - const file = new File( - iFile, - this._userService.getNameForId(iFile.currentReviewer), - this._fileAttributesService.getFileAttributeConfig(dossier.dossierTemplateId) - ); - fileChangedEvent.push(file); + if (!found && emitEvents) { + this.fileChanged$.next(newFile); } } - const files = iFiles.map( - iFile => - new File( - iFile, - this._userService.getNameForId(iFile.currentReviewer), - this._fileAttributesService.getFileAttributeConfig(dossier.dossierTemplateId) - ) - ); - - const lastOpenedFileId = this._userPreferenceService.getLastOpenedFileForDossier(dossier.id); - files.forEach(file => (file.lastOpened = file.fileId === lastOpenedFileId)); - const newDossier = new Dossier(dossier, files); + const newDossier = new Dossier(dossier, newFiles); this._dossiersService.replace(newDossier); - if (emitEvents) { - fileReanalysedEvent.forEach(file => this.fileReanalysed$.next(file)); - fileChangedEvent.forEach(file => this.fileChanged$.next(file)); - } - - return files; + return newFiles; } }