UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

78 lines 11.6 kB
import { Injectable } from '@angular/core'; import { Router, NavigationEnd, ActivatedRoute } from '@angular/router'; import { filter, map } from 'rxjs/operators'; import { InventoryBinaryService, InventoryService } from '@c8y/client'; import { AlertService, gettext, ModalService, Status } from '@c8y/ngx-components'; import { saveAs } from 'file-saver'; import { isUndefined } from 'lodash-es'; import { TranslateService } from '@ngx-translate/core'; import * as i0 from "@angular/core"; import * as i1 from "@angular/router"; import * as i2 from "@c8y/client"; import * as i3 from "@c8y/ngx-components"; import * as i4 from "@ngx-translate/core"; export class BinaryFileDownloadService { constructor(router, route, inventoryService, alertService, modalService, translate, inventoryBinary) { this.router = router; this.route = route; this.inventoryService = inventoryService; this.alertService = alertService; this.modalService = modalService; this.translate = translate; this.inventoryBinary = inventoryBinary; } run() { this.router.events .pipe(filter(event => { return event instanceof NavigationEnd && this.route.snapshot.queryParams.download; }), map(() => this.route.snapshot.queryParams.download)) .subscribe(async (downloadId) => { try { const { data } = await this.inventoryService.detail(downloadId); if (!isUndefined(data.c8y_IsBinary)) { this.showDownloadModal(data); } else { const alertMessage = this.translate.instant(gettext('Could not download the file: object with ID "{{ id }}" is not a valid binary.'), { id: data.id }); this.alertService.danger(alertMessage); } } catch (ex) { this.alertService.addServerFailure(ex); } }); } async showDownloadModal(binaryMo) { try { const modalBody = this.translate.instant(gettext('You are about to download file "{{ fileName }}". Do you want to proceed?'), { fileName: binaryMo.name }); await this.modalService.confirm(gettext('File download'), modalBody, Status.INFO, { ok: gettext('Download') }); const arrayBuffer = await this.getArrayBuffer(binaryMo.id); const fileBinary = new File([arrayBuffer], binaryMo.name, { type: binaryMo.contentType }); saveAs(fileBinary); } catch (e) { // empty body :( console.log({ e }); } } async getArrayBuffer(binaryId) { let arrayBuffer; try { const res = await this.inventoryBinary.download(binaryId); arrayBuffer = await res.arrayBuffer(); } catch (ex) { const msg = gettext('Could not get the binary.'); this.alertService.danger(msg); } return arrayBuffer; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BinaryFileDownloadService, deps: [{ token: i1.Router }, { token: i1.ActivatedRoute }, { token: i2.InventoryService }, { token: i3.AlertService }, { token: i3.ModalService }, { token: i4.TranslateService }, { token: i2.InventoryBinaryService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BinaryFileDownloadService }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: BinaryFileDownloadService, decorators: [{ type: Injectable }], ctorParameters: () => [{ type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.InventoryService }, { type: i3.AlertService }, { type: i3.ModalService }, { type: i4.TranslateService }, { type: i2.InventoryBinaryService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LWZpbGUtZG93bmxvYWQuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2JpbmFyeS1maWxlLWRvd25sb2FkL2JpbmFyeS1maWxlLWRvd25sb2FkLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN4RSxPQUFPLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdDLE9BQU8sRUFBa0Isc0JBQXNCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDdkYsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN4QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7O0FBR3ZELE1BQU0sT0FBTyx5QkFBeUI7SUFDcEMsWUFDVSxNQUFjLEVBQ2QsS0FBcUIsRUFDckIsZ0JBQWtDLEVBQ2xDLFlBQTBCLEVBQzFCLFlBQTBCLEVBQzFCLFNBQTJCLEVBQzNCLGVBQXVDO1FBTnZDLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxVQUFLLEdBQUwsS0FBSyxDQUFnQjtRQUNyQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLG9CQUFlLEdBQWYsZUFBZSxDQUF3QjtJQUM5QyxDQUFD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LE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQzsrR0FwRVUseUJBQXlCO21IQUF6Qix5QkFBeUI7OzRGQUF6Qix5QkFBeUI7a0JBRHJDLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIE5hdmlnYXRpb25FbmQsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IGZpbHRlciwgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSU1hbmFnZWRPYmplY3QsIEludmVudG9yeUJpbmFyeVNlcnZpY2UsIEludmVudG9yeVNlcnZpY2UgfSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UsIGdldHRleHQsIE1vZGFsU2VydmljZSwgU3RhdHVzIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBzYXZlQXMgfSBmcm9tICdmaWxlLXNhdmVyJztcbmltcG9ydCB7IGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIEJpbmFyeUZpbGVEb3dubG9hZFNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgcm91dGU6IEFjdGl2YXRlZFJvdXRlLFxuICAgIHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWxTZXJ2aWNlOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnZlbnRvcnlCaW5hcnk6IEludmVudG9yeUJpbmFyeVNlcnZpY2VcbiAgKSB7fVxuXG4gIHJ1bigpIHtcbiAgICB0aGlzLnJvdXRlci5ldmVudHNcbiAgICAgIC5waXBlKFxuICAgICAgICBmaWx0ZXIoZXZlbnQgPT4ge1xuICAgICAgICAgIHJldHVybiBldmVudCBpbnN0YW5jZW9mIE5hdmlnYXRpb25FbmQgJiYgdGhpcy5yb3V0ZS5zbmFwc2hvdC5xdWVyeVBhcmFtcy5kb3dubG9hZDtcbiAgICAgICAgfSksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzLnJvdXRlLnNuYXBzaG90LnF1ZXJ5UGFyYW1zLmRvd25sb2FkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyBkb3dubG9hZElkID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoZG93bmxvYWRJZCk7XG4gICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChkYXRhLmM4eV9Jc0JpbmFyeSkpIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd0Rvd25sb2FkTW9kYWwoZGF0YSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGFsZXJ0TWVzc2FnZSA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXG4gICAgICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAgICAgJ0NvdWxkIG5vdCBkb3dubG9hZCB0aGUgZmlsZTogb2JqZWN0IHdpdGggSUQgXCJ7eyBpZCB9fVwiIGlzIG5vdCBhIHZhbGlkIGJpbmFyeS4nXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgIHsgaWQ6IGRhdGEuaWQgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihhbGVydE1lc3NhZ2UpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGV4KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICBhc3luYyBzaG93RG93bmxvYWRNb2RhbChiaW5hcnlNbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgbW9kYWxCb2R5ID0gdGhpcy50cmFuc2xhdGUuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dCgnWW91IGFyZSBhYm91dCB0byBkb3dubG9hZCBmaWxlIFwie3sgZmlsZU5hbWUgfX1cIi4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nKSxcbiAgICAgICAgeyBmaWxlTmFtZTogYmluYXJ5TW8ubmFtZSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbFNlcnZpY2UuY29uZmlybShnZXR0ZXh0KCdGaWxlIGRvd25sb2FkJyksIG1vZGFsQm9keSwgU3RhdHVzLklORk8sIHtcbiAgICAgICAgb2s6IGdldHRleHQoJ0Rvd25sb2FkJylcbiAgICAgIH0pO1xuICAgICAgY29uc3QgYXJyYXlCdWZmZXIgPSBhd2FpdCB0aGlzLmdldEFycmF5QnVmZmVyKGJpbmFyeU1vLmlkKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgRmlsZShbYXJyYXlCdWZmZXJdLCBiaW5hcnlNby5uYW1lLCB7IHR5cGU6IGJpbmFyeU1vLmNvbnRlbnRUeXBlIH0pO1xuICAgICAgc2F2ZUFzKGZpbGVCaW5hcnkpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVtcHR5IGJvZHkgOihcbiAgICAgIGNvbnNvbGUubG9nKHsgZSB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEFycmF5QnVmZmVyKGJpbmFyeUlkKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIGxldCBhcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXI7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuaW52ZW50b3J5QmluYXJ5LmRvd25sb2FkKGJpbmFyeUlkKTtcbiAgICAgIGFycmF5QnVmZmVyID0gYXdhaXQgcmVzLmFycmF5QnVmZmVyKCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGNvbnN0IG1zZyA9IGdldHRleHQoJ0NvdWxkIG5vdCBnZXQgdGhlIGJpbmFyeS4nKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmRhbmdlcihtc2cpO1xuICAgIH1cblxuICAgIHJldHVybiBhcnJheUJ1ZmZlcjtcbiAgfVxufVxuIl19