igniteui-angular
Version:
Ignite UI for Angular is a dependency-free Angular toolkit for building modern web apps
148 lines • 13.3 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import * as JSZip from 'jszip/dist/jszip';
import { EventEmitter, Injectable, Output } from '@angular/core';
import { ExcelElementsFactory } from './excel-elements-factory';
import { ExcelFolderTypes } from './excel-enums';
import { IgxBaseExporter } from '../exporter-common/base-export-service';
import { ExportUtilities } from '../exporter-common/export-utilities';
import { WorksheetData } from './worksheet-data';
/**
* @record
*/
export function IExcelExportEndedEventArgs() { }
if (false) {
/** @type {?} */
IExcelExportEndedEventArgs.prototype.xlsx;
}
/**
* **Ignite UI for Angular Excel Exporter Service** -
* [Documentation](https://www.infragistics.com/products/ignite-ui-angular/angular/components/exporter_excel.html)
*
* The Ignite UI for Angular Excel Exporter service can export data in Microsoft® Excel® format from both raw data
* (array) or from an `IgxGrid`.
*
* Example:
* ```typescript
* public localData = [
* { Name: "Eric Ridley", Age: "26" },
* { Name: "Alanis Brook", Age: "22" },
* { Name: "Jonathan Morris", Age: "23" }
* ];
*
* constructor(private excelExportService: IgxExcelExporterService) {
* }
*
* this.excelExportService.exportData(this.localData, new IgxExcelExporterOptions("FileName"));
* ```
*/
export class IgxExcelExporterService extends IgxBaseExporter {
constructor() {
super(...arguments);
/**
* This event is emitted when the export process finishes.
* ```typescript
* this.exporterService.onExportEnded.subscribe((args: IExcelExportEndedEventArgs) => {
* // put event handler code here
* });
* ```
* \@memberof IgxExcelExporterService
*/
this.onExportEnded = new EventEmitter();
}
/**
* @private
* @param {?} folder
* @param {?} zip
* @param {?} worksheetData
* @return {?}
*/
static populateFolder(folder, zip, worksheetData) {
for (const childFolder of folder.childFolders(worksheetData)) {
/** @type {?} */
const folderIntance = ExcelElementsFactory.getExcelFolder(childFolder);
/** @type {?} */
const zipFolder = zip.folder(folderIntance.folderName);
IgxExcelExporterService.populateFolder(folderIntance, zipFolder, worksheetData);
}
for (const childFile of folder.childFiles(worksheetData)) {
/** @type {?} */
const fileInstance = ExcelElementsFactory.getExcelFile(childFile);
fileInstance.writeElement(zip, worksheetData);
}
}
/**
* @protected
* @param {?} data
* @param {?} options
* @return {?}
*/
exportDataImplementation(data, options) {
if (this._isTreeGrid) {
/** @type {?} */
let maxLevel = 0;
data.forEach((r) => {
maxLevel = Math.max(maxLevel, r.originalRowData.level);
});
if (maxLevel > 7) {
throw Error('Can create an outline of up to eight levels!');
}
}
/** @type {?} */
const worksheetData = new WorksheetData(data, options, this._indexOfLastPinnedColumn, this._sort, this._isTreeGrid);
this._xlsx = new JSZip();
/** @type {?} */
const rootFolder = ExcelElementsFactory.getExcelFolder(ExcelFolderTypes.RootExcelFolder);
IgxExcelExporterService.populateFolder(rootFolder, this._xlsx, worksheetData);
this._xlsx.generateAsync(IgxExcelExporterService.ZIP_OPTIONS).then((result) => {
this.saveFile(result, options.fileName);
this.onExportEnded.emit({ xlsx: this._xlsx });
});
}
/**
* @private
* @param {?} data
* @param {?} fileName
* @return {?}
*/
saveFile(data, fileName) {
/** @type {?} */
const blob = new Blob([ExportUtilities.stringToArrayBuffer(atob(data))], {
type: ''
});
ExportUtilities.saveBlobToFile(blob, fileName);
}
}
IgxExcelExporterService.ZIP_OPTIONS = { compression: 'DEFLATE', type: 'base64' };
IgxExcelExporterService.decorators = [
{ type: Injectable }
];
IgxExcelExporterService.propDecorators = {
onExportEnded: [{ type: Output }]
};
if (false) {
/**
* @type {?}
* @private
*/
IgxExcelExporterService.ZIP_OPTIONS;
/**
* @type {?}
* @private
*/
IgxExcelExporterService.prototype._xlsx;
/**
* This event is emitted when the export process finishes.
* ```typescript
* this.exporterService.onExportEnded.subscribe((args: IExcelExportEndedEventArgs) => {
* // put event handler code here
* });
* ```
* \@memberof IgxExcelExporterService
* @type {?}
*/
IgxExcelExporterService.prototype.onExportEnded;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhjZWwtZXhwb3J0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9pZ25pdGV1aS1hbmd1bGFyLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL2V4Y2VsL2V4Y2VsLWV4cG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFDO0FBRTFDLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBQ3pFLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFFakQsZ0RBRUM7OztJQURHLDBDQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCaEIsTUFBTSxPQUFPLHVCQUF3QixTQUFRLGVBQWU7SUFENUQ7Ozs7Ozs7Ozs7O1FBZ0JXLGtCQUFhLEdBQUcsSUFBSSxZQUFZLEVBQThCLENBQUM7SUE4QzFFLENBQUM7Ozs7Ozs7O0lBNUNXLE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBb0IsRUFBRSxHQUFVLEVBQUUsYUFBNEI7UUFDeEYsS0FBSyxNQUFNLFdBQVcsSUFBSSxNQUFNLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFOztrQkFDcEQsYUFBYSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxXQUFXLENBQUM7O2tCQUNoRSxTQUFTLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO1lBQ3RELHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1NBQ25GO1FBRUQsS0FBSyxNQUFNLFNBQVMsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxFQUFFOztrQkFDaEQsWUFBWSxHQUFHLG9CQUFvQixDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUM7WUFDakUsWUFBWSxDQUFDLFlBQVksQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7U0FDakQ7SUFDTCxDQUFDOzs7Ozs7O0lBRVMsd0JBQXdCLENBQUMsSUFBVyxFQUFFLE9BQWdDO1FBQzVFLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTs7Z0JBQ2QsUUFBUSxHQUFHLENBQUM7WUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO2dCQUNmLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzNELENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFO2dCQUNkLE1BQU0sS0FBSyxDQUFDLDhDQUE4QyxDQUFDLENBQUM7YUFDL0Q7U0FDSjs7Y0FFSyxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ25ILElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQzs7Y0FFbkIsVUFBVSxHQUFHLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUM7UUFDeEYsdUJBQXVCLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBRTlFLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzFFLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUV4QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNsRCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7Ozs7Ozs7SUFFTyxRQUFRLENBQUMsSUFBWSxFQUFFLFFBQWdCOztjQUNyQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxlQUFlLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUNyRSxJQUFJLEVBQUUsRUFBRTtTQUNYLENBQUM7UUFFRixlQUFlLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsQ0FBQztJQUNuRCxDQUFDOztBQTFEYyxtQ0FBVyxHQUFHLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUM7O1lBSDNFLFVBQVU7Ozs0QkFlTixNQUFNOzs7Ozs7O0lBWlAsb0NBQXdFOzs7OztJQUN4RSx3Q0FBcUI7Ozs7Ozs7Ozs7O0lBV3JCLGdEQUNzRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIEpTWmlwIGZyb20gJ2pzemlwL2Rpc3QvanN6aXAnO1xuXG5pbXBvcnQgeyBFdmVudEVtaXR0ZXIsIEluamVjdGFibGUsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRXhjZWxFbGVtZW50c0ZhY3RvcnkgfSBmcm9tICcuL2V4Y2VsLWVsZW1lbnRzLWZhY3RvcnknO1xuaW1wb3J0IHsgRXhjZWxGb2xkZXJUeXBlcyB9IGZyb20gJy4vZXhjZWwtZW51bXMnO1xuaW1wb3J0IHsgSWd4RXhjZWxFeHBvcnRlck9wdGlvbnMgfSBmcm9tICcuL2V4Y2VsLWV4cG9ydGVyLW9wdGlvbnMnO1xuaW1wb3J0IHsgSUV4Y2VsRm9sZGVyIH0gZnJvbSAnLi9leGNlbC1pbnRlcmZhY2VzJztcbmltcG9ydCB7IElneEJhc2VFeHBvcnRlciB9IGZyb20gJy4uL2V4cG9ydGVyLWNvbW1vbi9iYXNlLWV4cG9ydC1zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydFV0aWxpdGllcyB9IGZyb20gJy4uL2V4cG9ydGVyLWNvbW1vbi9leHBvcnQtdXRpbGl0aWVzJztcbmltcG9ydCB7IFdvcmtzaGVldERhdGEgfSBmcm9tICcuL3dvcmtzaGVldC1kYXRhJztcblxuZXhwb3J0IGludGVyZmFjZSBJRXhjZWxFeHBvcnRFbmRlZEV2ZW50QXJncyB7XG4gICAgeGxzeDogSlNaaXA7XG59XG5cbi8qKlxuICogKipJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgRXhjZWwgRXhwb3J0ZXIgU2VydmljZSoqIC1cbiAqIFtEb2N1bWVudGF0aW9uXShodHRwczovL3d3dy5pbmZyYWdpc3RpY3MuY29tL3Byb2R1Y3RzL2lnbml0ZS11aS1hbmd1bGFyL2FuZ3VsYXIvY29tcG9uZW50cy9leHBvcnRlcl9leGNlbC5odG1sKVxuICpcbiAqIFRoZSBJZ25pdGUgVUkgZm9yIEFuZ3VsYXIgRXhjZWwgRXhwb3J0ZXIgc2VydmljZSBjYW4gZXhwb3J0IGRhdGEgaW4gTWljcm9zb2Z0wq4gRXhjZWzCriBmb3JtYXQgZnJvbSBib3RoIHJhdyBkYXRhXG4gKiAoYXJyYXkpIG9yIGZyb20gYW4gYElneEdyaWRgLlxuICpcbiAqIEV4YW1wbGU6XG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBwdWJsaWMgbG9jYWxEYXRhID0gW1xuICogICB7IE5hbWU6IFwiRXJpYyBSaWRsZXlcIiwgQWdlOiBcIjI2XCIgfSxcbiAqICAgeyBOYW1lOiBcIkFsYW5pcyBCcm9va1wiLCBBZ2U6IFwiMjJcIiB9LFxuICogICB7IE5hbWU6IFwiSm9uYXRoYW4gTW9ycmlzXCIsIEFnZTogXCIyM1wiIH1cbiAqIF07XG4gKlxuICogY29uc3RydWN0b3IocHJpdmF0ZSBleGNlbEV4cG9ydFNlcnZpY2U6IElneEV4Y2VsRXhwb3J0ZXJTZXJ2aWNlKSB7XG4gKiB9XG4gKlxuICogdGhpcy5leGNlbEV4cG9ydFNlcnZpY2UuZXhwb3J0RGF0YSh0aGlzLmxvY2FsRGF0YSwgbmV3IElneEV4Y2VsRXhwb3J0ZXJPcHRpb25zKFwiRmlsZU5hbWVcIikpO1xuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBJZ3hFeGNlbEV4cG9ydGVyU2VydmljZSBleHRlbmRzIElneEJhc2VFeHBvcnRlciB7XG5cbiAgICBwcml2YXRlIHN0YXRpYyBaSVBfT1BUSU9OUyA9IHsgY29tcHJlc3Npb246ICdERUZMQVRFJywgdHlwZTogJ2Jhc2U2NCcgfTtcbiAgICBwcml2YXRlIF94bHN4OiBKU1ppcDtcblxuICAgIC8qKlxuICAgICAqIFRoaXMgZXZlbnQgaXMgZW1pdHRlZCB3aGVuIHRoZSBleHBvcnQgcHJvY2VzcyBmaW5pc2hlcy5cbiAgICAgKiBgYGB0eXBlc2NyaXB0XG4gICAgICogdGhpcy5leHBvcnRlclNlcnZpY2Uub25FeHBvcnRFbmRlZC5zdWJzY3JpYmUoKGFyZ3M6IElFeGNlbEV4cG9ydEVuZGVkRXZlbnRBcmdzKSA9PiB7XG4gICAgICogLy8gcHV0IGV2ZW50IGhhbmRsZXIgY29kZSBoZXJlXG4gICAgICogfSk7XG4gICAgICogYGBgXG4gICAgICogQG1lbWJlcm9mIElneEV4Y2VsRXhwb3J0ZXJTZXJ2aWNlXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIG9uRXhwb3J0RW5kZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElFeGNlbEV4cG9ydEVuZGVkRXZlbnRBcmdzPigpO1xuXG4gICAgcHJpdmF0ZSBzdGF0aWMgcG9wdWxhdGVGb2xkZXIoZm9sZGVyOiBJRXhjZWxGb2xkZXIsIHppcDogSlNaaXAsIHdvcmtzaGVldERhdGE6IFdvcmtzaGVldERhdGEpOiBhbnkge1xuICAgICAgICBmb3IgKGNvbnN0IGNoaWxkRm9sZGVyIG9mIGZvbGRlci5jaGlsZEZvbGRlcnMod29ya3NoZWV0RGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZvbGRlckludGFuY2UgPSBFeGNlbEVsZW1lbnRzRmFjdG9yeS5nZXRFeGNlbEZvbGRlcihjaGlsZEZvbGRlcik7XG4gICAgICAgICAgICBjb25zdCB6aXBGb2xkZXIgPSB6aXAuZm9sZGVyKGZvbGRlckludGFuY2UuZm9sZGVyTmFtZSk7XG4gICAgICAgICAgICBJZ3hFeGNlbEV4cG9ydGVyU2VydmljZS5wb3B1bGF0ZUZvbGRlcihmb2xkZXJJbnRhbmNlLCB6aXBGb2xkZXIsIHdvcmtzaGVldERhdGEpO1xuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGlsZEZpbGUgb2YgZm9sZGVyLmNoaWxkRmlsZXMod29ya3NoZWV0RGF0YSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGZpbGVJbnN0YW5jZSA9IEV4Y2VsRWxlbWVudHNGYWN0b3J5LmdldEV4Y2VsRmlsZShjaGlsZEZpbGUpO1xuICAgICAgICAgICAgZmlsZUluc3RhbmNlLndyaXRlRWxlbWVudCh6aXAsIHdvcmtzaGVldERhdGEpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkIGV4cG9ydERhdGFJbXBsZW1lbnRhdGlvbihkYXRhOiBhbnlbXSwgb3B0aW9uczogSWd4RXhjZWxFeHBvcnRlck9wdGlvbnMpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuX2lzVHJlZUdyaWQpIHtcbiAgICAgICAgICAgIGxldCBtYXhMZXZlbCA9IDA7XG4gICAgICAgICAgICBkYXRhLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgICAgICAgICBtYXhMZXZlbCA9IE1hdGgubWF4KG1heExldmVsLCByLm9yaWdpbmFsUm93RGF0YS5sZXZlbCk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChtYXhMZXZlbCA+IDcpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBFcnJvcignQ2FuIGNyZWF0ZSBhbiBvdXRsaW5lIG9mIHVwIHRvIGVpZ2h0IGxldmVscyEnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHdvcmtzaGVldERhdGEgPSBuZXcgV29ya3NoZWV0RGF0YShkYXRhLCBvcHRpb25zLCB0aGlzLl9pbmRleE9mTGFzdFBpbm5lZENvbHVtbiwgdGhpcy5fc29ydCwgdGhpcy5faXNUcmVlR3JpZCk7XG4gICAgICAgIHRoaXMuX3hsc3ggPSBuZXcgSlNaaXAoKTtcblxuICAgICAgICBjb25zdCByb290Rm9sZGVyID0gRXhjZWxFbGVtZW50c0ZhY3RvcnkuZ2V0RXhjZWxGb2xkZXIoRXhjZWxGb2xkZXJUeXBlcy5Sb290RXhjZWxGb2xkZXIpO1xuICAgICAgICBJZ3hFeGNlbEV4cG9ydGVyU2VydmljZS5wb3B1bGF0ZUZvbGRlcihyb290Rm9sZGVyLCB0aGlzLl94bHN4LCB3b3Jrc2hlZXREYXRhKTtcblxuICAgICAgICB0aGlzLl94bHN4LmdlbmVyYXRlQXN5bmMoSWd4RXhjZWxFeHBvcnRlclNlcnZpY2UuWklQX09QVElPTlMpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zYXZlRmlsZShyZXN1bHQsIG9wdGlvbnMuZmlsZU5hbWUpO1xuXG4gICAgICAgICAgICB0aGlzLm9uRXhwb3J0RW5kZWQuZW1pdCh7IHhsc3g6IHRoaXMuX3hsc3ggfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUZpbGUoZGF0YTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbRXhwb3J0VXRpbGl0aWVzLnN0cmluZ1RvQXJyYXlCdWZmZXIoYXRvYihkYXRhKSldLCB7XG4gICAgICAgICAgICB0eXBlOiAnJ1xuICAgICAgICB9KTtcblxuICAgICAgICBFeHBvcnRVdGlsaXRpZXMuc2F2ZUJsb2JUb0ZpbGUoYmxvYiwgZmlsZU5hbWUpO1xuICAgIH1cbn1cbiJdfQ==