RED-5213 rss xml and json export

This commit is contained in:
Timo Bejan 2022-09-19 12:34:42 +03:00
parent 8163d0fcea
commit 38b62dfe27
3 changed files with 37 additions and 12 deletions

View File

@ -15,9 +15,12 @@
<button color="primary" mat-flat-button type="submit" (click)="exportJSON()">
{{ 'rss-dialog.actions.export-json' | translate }}
</button>
<button color="primary" mat-flat-button type="submit" (click)="exportXML()">
<button color="primary" mat-flat-button type="button" (click)="exportXML()">
{{ 'rss-dialog.actions.export-xml' | translate }}
</button>
<!-- <button color="primary" mat-flat-button type="button" (click)="exportAllInDossier()">-->
<!-- {{ 'Export All' }}-->
<!-- </button>-->
<div class="all-caps-label cancel" mat-dialog-close translate="rss-dialog.actions.close"></div>
</div>

View File

@ -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<IRssEntry>;
rssDataSubject$: BehaviorSubject<IRssEntry> = new BehaviorSubject<IRssEntry>(null);
constructor(
protected readonly _dialogRef: MatDialogRef<RssDialogComponent>,
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 {

View File

@ -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<void> {
@ -31,7 +32,6 @@ export class RssService extends GenericService<void> {
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<void> {
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');
}),
);
}
}