From 38b62dfe27488d62b86a526b28d262ece89e96d7 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Mon, 19 Sep 2022 12:34:42 +0300 Subject: [PATCH] RED-5213 rss xml and json export --- .../rss-dialog/rss-dialog.component.html | 5 ++++- .../rss-dialog/rss-dialog.component.ts | 22 +++++++++++-------- .../src/app/services/files/rss.service.ts | 22 +++++++++++++++++-- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html index b90e41afc..4750b5cb9 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.html @@ -15,9 +15,12 @@ - + + +
diff --git a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts index 0089a5c89..b21c81536 100644 --- a/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts +++ b/apps/red-ui/src/app/modules/file-preview/dialogs/rss-dialog/rss-dialog.component.ts @@ -3,9 +3,10 @@ import { BaseDialogComponent, SaveOptions } from '@iqser/common-ui'; import { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog'; import { RssService } from '@services/files/rss.service'; import { IFile, IRssEntry } from '@red/domain'; -import { BehaviorSubject, Observable } from 'rxjs'; +import { BehaviorSubject, firstValueFrom, Observable } from 'rxjs'; import { saveAs } from 'file-saver'; import { map, tap } from 'rxjs/operators'; +import { FilesMapService } from '@services/files/files-map.service'; interface RssData { file: IFile; @@ -17,11 +18,11 @@ interface RssData { }) export class RssDialogComponent extends BaseDialogComponent { rssData$: Observable; - rssDataSubject$: BehaviorSubject = new BehaviorSubject(null); constructor( protected readonly _dialogRef: MatDialogRef, private readonly _rssService: RssService, + private readonly _filesMapService: FilesMapService, @Inject(MAT_DIALOG_DATA) readonly data: RssData, ) { super(_dialogRef); @@ -37,20 +38,23 @@ export class RssDialogComponent extends BaseDialogComponent { result: mapped, }; }), - tap(entry => this.rssDataSubject$.next(entry)), ); } exportJSON() { - const blob = new Blob([JSON.stringify(this.rssDataSubject$.value, null, 2)], { type: 'application/json' }); - saveAs(blob, this.data.file.filename + '.rss.json'); + this._rssService.exportJSON(this.data.file.dossierId, this.data.file.fileId, this.data.file.filename).subscribe(); } exportXML() { - this._rssService.getRSSDataAsXML(this.data.file.dossierId, this.data.file.fileId).subscribe(data => { - const blob = new Blob([data], { type: 'application/xml' }); - saveAs(blob, this.data.file.filename + '.rss.xml'); - }); + this._rssService.exportXML(this.data.file.dossierId, this.data.file.fileId, this.data.file.filename).subscribe(); + } + + async exportAllInDossier() { + const allFilesInDossier = this._filesMapService.get(this.data.file.dossierId); + for (const file of allFilesInDossier) { + await firstValueFrom(this._rssService.exportJSON(file.dossierId, file.fileId, file.filename)); + await firstValueFrom(this._rssService.exportXML(file.dossierId, file.fileId, file.filename)); + } } save(): void { diff --git a/apps/red-ui/src/app/services/files/rss.service.ts b/apps/red-ui/src/app/services/files/rss.service.ts index 3789e7ec0..71f639f6d 100644 --- a/apps/red-ui/src/app/services/files/rss.service.ts +++ b/apps/red-ui/src/app/services/files/rss.service.ts @@ -1,9 +1,10 @@ import { Injectable } from '@angular/core'; import { GenericService, QueryParam, RequiredParam, Validate } from '@iqser/common-ui'; import { IRssData, IRssEntry } from '@red/domain'; -import { catchError, map } from 'rxjs/operators'; +import { catchError, map, tap } from 'rxjs/operators'; import { of } from 'rxjs'; import { HttpHeaders } from '@angular/common/http'; +import { saveAs } from 'file-saver'; @Injectable({ providedIn: 'root' }) export class RssService extends GenericService { @@ -31,7 +32,6 @@ export class RssService extends GenericService { let headers = new HttpHeaders(); headers = headers.set('accept', 'application/xml'); - console.log('headers', headers); return this._http.get(`/${encodeURI('rss')}/${entityPath}`, { headers: headers, params: this._queryParams(queryParams), @@ -39,4 +39,22 @@ export class RssService extends GenericService { observe: 'body', }); } + + exportJSON(dossierId: string, fileId: string, name: string) { + return this.getRSSData(dossierId, fileId).pipe( + tap(data => { + const blob = new Blob([JSON.stringify(data, null, 2)], { type: 'application/json' }); + saveAs(blob, name + '.rss.json'); + }), + ); + } + + exportXML(dossierId: string, fileId: string, name: string) { + return this.getRSSDataAsXML(dossierId, fileId).pipe( + tap(data => { + const blob = new Blob([data], { type: 'application/xml' }); + saveAs(blob, name + '.rss.xml'); + }), + ); + } }