move delete dossier to dossiers service

This commit is contained in:
Dan Percic 2021-10-04 16:46:23 +03:00
parent 8bf1843675
commit b73145acfc
3 changed files with 31 additions and 65 deletions

View File

@ -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());

View File

@ -129,6 +129,18 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
return this.getAll('deleted-dossiers').toPromise();
}
delete(dossier: Dossier): Observable<unknown> {
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<unknown> {
return this._post(dossierIds, 'deleted-dossiers/restore').toPromise();
@ -137,7 +149,7 @@ export class DossiersService extends EntitiesService<Dossier, IDossier> {
@Validate()
hardDelete(@RequiredParam() dossierIds: List): Promise<unknown> {
const body = dossierIds.map<QueryParam>(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<Dossier>): IDossiersStats {

View File

@ -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;
}
}