@iotize/ionic
Version:
Iotize specific building blocks on top of @ionic/angular.
115 lines • 12.9 kB
JavaScript
import { Directive, EventEmitter, HostListener, Input, Output, } from '@angular/core';
import { AlertController, Platform } from '@ionic/angular';
import { ExportToCsv } from '@iotize/ionic';
import { ExportDataService } from './export-data.service';
import * as i0 from "@angular/core";
import * as i1 from "@ionic/angular";
import * as i2 from "./export-data.service";
export class ExportDataDirective {
constructor(alertController, platform, dataToExportService) {
this.alertController = alertController;
this.platform = platform;
this.dataToExportService = dataToExportService;
this.exportDataError = new EventEmitter();
}
async onClickEvent() {
if (this.exportedFileName === undefined) {
this.exportedFileName = 'data';
}
let alert;
let data = typeof this.dataToExport === 'function'
? this.dataToExport()
: this.dataToExport;
if (data?.length !== 0) {
if (!this.format) {
alert = await this.alertController.create({
header: 'Export data',
cssClass: 'custom-alert',
message: 'Select file format',
buttons: [
{
text: 'CSV',
handler: async () => {
this.exportToCsv(data);
},
},
{
text: 'JSON',
handler: () => {
this.exportToJson(data);
},
},
],
});
await alert.present();
}
else {
switch (this.format) {
case 'csv':
await this.exportToCsv(data);
break;
case 'json':
await this.exportToJson(data);
break;
}
}
}
else {
const alert = await this.alertController.create({
header: 'Export data',
message: 'Cannot export empty data.',
buttons: [
{
text: 'OK',
},
],
});
await alert.present();
}
}
exportToJson(data) {
try {
this.dataToExportService.triggerDownload(new Blob([JSON.stringify(data, null, 4)]), `${this.exportedFileName}.json`);
}
catch (e) {
this.exportDataError.emit(e);
}
}
async exportToCsv(data) {
try {
if (data) {
if (!this.exportedFileName) {
this.exportedFileName = 'data';
}
const csvExport = new ExportToCsv(data, this.exportedFileName, {
headers: Object.keys(data[0]),
});
const csvString = csvExport.csvToString();
await this.dataToExportService.triggerDownload(new Blob([csvString]), `${this.exportedFileName}.csv`);
}
}
catch (e) {
this.exportDataError.emit(e);
}
}
}
/** @nocollapse */ ExportDataDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExportDataDirective, deps: [{ token: i1.AlertController }, { token: i1.Platform }, { token: i2.ExportDataService }], target: i0.ɵɵFactoryTarget.Directive });
/** @nocollapse */ ExportDataDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.10", type: ExportDataDirective, selector: "[tapExportData]", inputs: { exportedFileName: "exportedFileName", dataToExport: "dataToExport", format: "format" }, outputs: { exportDataError: "exportDataError" }, host: { listeners: { "click": "onClickEvent()" } }, ngImport: i0 });
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: ExportDataDirective, decorators: [{
type: Directive,
args: [{
selector: '[tapExportData]',
}]
}], ctorParameters: function () { return [{ type: i1.AlertController }, { type: i1.Platform }, { type: i2.ExportDataService }]; }, propDecorators: { exportDataError: [{
type: Output
}], exportedFileName: [{
type: Input
}], dataToExport: [{
type: Input
}], format: [{
type: Input
}], onClickEvent: [{
type: HostListener,
args: ['click']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhwb3J0LWRhdGEuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaW90aXplLWlvbmljL21vbml0b3Jpbmcvc3JjL2xpYi91aS1kaXJlY3RpdmUvZXhwb3J0LWRhdGEuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsWUFBWSxFQUNaLFlBQVksRUFDWixLQUFLLEVBQ0wsTUFBTSxHQUNQLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUsxRCxNQUFNLE9BQU8sbUJBQW1CO0lBQzlCLFlBQ1MsZUFBZ0MsRUFDaEMsUUFBa0IsRUFDakIsbUJBQXNDO1FBRnZDLG9CQUFlLEdBQWYsZUFBZSxDQUFpQjtRQUNoQyxhQUFRLEdBQVIsUUFBUSxDQUFVO1FBQ2pCLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBbUI7UUFHdEMsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUyxDQUFDO0lBRm5ELENBQUM7SUFRSixLQUFLLENBQUMsWUFBWTtRQUNoQixJQUFJLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLEVBQUU7WUFDdkMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE1BQU0sQ0FBQztTQUNoQztRQUNELElBQUksS0FBMEIsQ0FBQztRQUMvQixJQUFJLElBQUksR0FDTixPQUFPLElBQUksQ0FBQyxZQUFZLEtBQUssVUFBVTtZQUNyQyxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQztRQUN4QixJQUFJLElBQUksRUFBRSxNQUFNLEtB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L0IsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO2lCQUM1Qjs2SkFRVyxlQUFlO3NCQUF4QixNQUFNO2dCQUNFLGdCQUFnQjtzQkFBeEIsS0FBSztnQkFDRyxZQUFZO3NCQUFwQixLQUFLO2dCQUNHLE1BQU07c0JBQWQsS0FBSztnQkFHQSxZQUFZO3NCQURqQixZQUFZO3VCQUFDLE9BQU8iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBEaXJlY3RpdmUsXG4gIEV2ZW50RW1pdHRlcixcbiAgSG9zdExpc3RlbmVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFsZXJ0Q29udHJvbGxlciwgUGxhdGZvcm0gfSBmcm9tICdAaW9uaWMvYW5ndWxhcic7XG5pbXBvcnQgeyBFeHBvcnRUb0NzdiB9IGZyb20gJ0Bpb3RpemUvaW9uaWMnO1xuaW1wb3J0IHsgRXhwb3J0RGF0YVNlcnZpY2UgfSBmcm9tICcuL2V4cG9ydC1kYXRhLnNlcnZpY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgc2VsZWN0b3I6ICdbdGFwRXhwb3J0RGF0YV0nLFxufSlcbmV4cG9ydCBjbGFzcyBFeHBvcnREYXRhRGlyZWN0aXZlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHVibGljIGFsZXJ0Q29udHJvbGxlcjogQWxlcnRDb250cm9sbGVyLFxuICAgIHB1YmxpYyBwbGF0Zm9ybTogUGxhdGZvcm0sXG4gICAgcHJpdmF0ZSBkYXRhVG9FeHBvcnRTZXJ2aWNlOiBFeHBvcnREYXRhU2VydmljZVxuICApIHt9XG5cbiAgQE91dHB1dCgpIGV4cG9ydERhdGFFcnJvciA9IG5ldyBFdmVudEVtaXR0ZXI8RXJyb3I+KCk7XG4gIEBJbnB1dCgpIGV4cG9ydGVkRmlsZU5hbWU/OiBzdHJpbmc7XG4gIEBJbnB1dCgpIGRhdGFUb0V4cG9ydD86IGFueVtdIHwgKCgpID0+IGFueVtdKTtcbiAgQElucHV0KCkgZm9ybWF0PzogJ2NzdicgfCAnanNvbic7XG5cbiAgQEhvc3RMaXN0ZW5lcignY2xpY2snKVxuICBhc3luYyBvbkNsaWNrRXZlbnQoKSB7XG4gICAgaWYgKHRoaXMuZXhwb3J0ZWRGaWxlTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLmV4cG9ydGVkRmlsZU5hbWUgPSAnZGF0YSc7XG4gICAgfVxuICAgIGxldCBhbGVydDogSFRNTElvbkFsZXJ0RWxlbWVudDtcbiAgICBsZXQgZGF0YSA9XG4gICAgICB0eXBlb2YgdGhpcy5kYXRhVG9FeHBvcnQgPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyB0aGlzLmRhdGFUb0V4cG9ydCgpXG4gICAgICAgIDogdGhpcy5kYXRhVG9FeHBvcnQ7XG4gICAgaWYgKGRhdGE/Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgaWYgKCF0aGlzLmZvcm1hdCkge1xuICAgICAgICBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICAgICAgaGVhZGVyOiAnRXhwb3J0IGRhdGEnLFxuICAgICAgICAgIGNzc0NsYXNzOiAnY3VzdG9tLWFsZXJ0JyxcbiAgICAgICAgICBtZXNzYWdlOiAnU2VsZWN0IGZpbGUgZm9ybWF0JyxcbiAgICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIHRleHQ6ICdDU1YnLFxuICAgICAgICAgICAgICBoYW5kbGVyOiBhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5leHBvcnRUb0NzdihkYXRhIGFzIGFueSk7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICB0ZXh0OiAnSlNPTicsXG4gICAgICAgICAgICAgIGhhbmRsZXI6ICgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydFRvSnNvbihkYXRhKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGF3YWl0IGFsZXJ0LnByZXNlbnQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5mb3JtYXQpIHtcbiAgICAgICAgICBjYXNlICdjc3YnOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRUb0NzdihkYXRhKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIGNhc2UgJ2pzb24nOlxuICAgICAgICAgICAgYXdhaXQgdGhpcy5leHBvcnRUb0pzb24oZGF0YSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBhbGVydCA9IGF3YWl0IHRoaXMuYWxlcnRDb250cm9sbGVyLmNyZWF0ZSh7XG4gICAgICAgIGhlYWRlcjogJ0V4cG9ydCBkYXRhJyxcbiAgICAgICAgbWVzc2FnZTogJ0Nhbm5vdCBleHBvcnQgZW1wdHkgZGF0YS4nLFxuICAgICAgICBidXR0b25zOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdGV4dDogJ09LJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICBhd2FpdCBhbGVydC5wcmVzZW50KCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBleHBvcnRUb0pzb24oZGF0YTogYW55W10gfCB1bmRlZmluZWQpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kYXRhVG9FeHBvcnRTZXJ2aWNlLnRyaWdnZXJEb3dubG9hZChcbiAgICAgICAgbmV3IEJsb2IoW0pTT04uc3RyaW5naWZ5KGRhdGEsIG51bGwsIDQpXSksXG4gICAgICAgIGAke3RoaXMuZXhwb3J0ZWRGaWxlTmFtZX0uanNvbmBcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZTogYW55KSB7XG4gICAgICB0aGlzLmV4cG9ydERhdGFFcnJvci5lbWl0KGUpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZXhwb3J0VG9Dc3YoZGF0YTogYW55KSB7XG4gICAgdHJ5IHtcbiAgICAgIGlmIChkYXRhKSB7XG4gICAgICAgIGlmICghdGhpcy5leHBvcnRlZEZpbGVOYW1lKSB7XG4gICAgICAgICAgdGhpcy5leHBvcnRlZEZpbGVOYW1lID0gJ2RhdGEnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNzdkV4cG9ydCA9IG5ldyBFeHBvcnRUb0NzdihkYXRhLCB0aGlzLmV4cG9ydGVkRmlsZU5hbWUsIHtcbiAgICAgICAgICBoZWFkZXJzOiBPYmplY3Qua2V5cyhkYXRhWzBdKSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IGNzdlN0cmluZyA9IGNzdkV4cG9ydC5jc3ZUb1N0cmluZygpO1xuICAgICAgICBhd2FpdCB0aGlzLmRhdGFUb0V4cG9ydFNlcnZpY2UudHJpZ2dlckRvd25sb2FkKFxuICAgICAgICAgIG5ldyBCbG9iKFtjc3ZTdHJpbmddKSxcbiAgICAgICAgICBgJHt0aGlzLmV4cG9ydGVkRmlsZU5hbWV9LmNzdmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIHRoaXMuZXhwb3J0RGF0YUVycm9yLmVtaXQoZSk7XG4gICAgfVxuICB9XG59XG4iXX0=