UNPKG

ontimize-web-ngx

Version:
97 lines 16.3 kB
import { HttpHeaders } from '@angular/common/http'; import { Injectable, Injector } from '@angular/core'; import { Observable } from 'rxjs'; import { map, share } from 'rxjs/operators'; import { Util } from '../../util/util'; import { OntimizeExportDataProviderService } from '../ontimize-export-data-provider.service'; import { OntimizeBaseService } from './ontimize-base-service.class'; import * as i0 from "@angular/core"; export class OntimizeExportService extends OntimizeBaseService { constructor(injector) { super(injector); this.injector = injector; this.exportDataProvider = this.injector.get(OntimizeExportDataProviderService); } configureService(config) { super.configureService(config); if (config.exportPath) { this.exportPath = config.exportPath; } if (config.downloadPath) { this.downloadPath = config.downloadPath; } if (config.path) { this.servicePath = config.path; } } buildHeaders() { let headers = new HttpHeaders({ 'Access-Control-Allow-Origin': '*' }); const sessionId = this.authService.getSessionInfo().id; if (Util.isDefined(sessionId)) { headers = headers.append('Authorization', 'Bearer ' + sessionId); } return headers; } exportData(format) { const entity = this.exportDataProvider.entity; const url = `${this.urlBase}${this.exportPath ? this.exportPath : ''}${this.servicePath}/${entity}/${format}`; const options = { headers: this.buildHeaders().append('Content-Type', 'application/json;charset=UTF-8'), observe: 'response' }; const exportData = this.exportDataProvider.getExportConfiguration(); const body = JSON.stringify(exportData); const dataObservable = new Observable((observer) => { this.httpClient.post(url, body, options).pipe(map((resData) => this.adapter.adapt(resData))).subscribe(resp => { this.parseSuccessfulExportDataResponse(format, resp, observer); }, error => { this.parseUnsuccessfulResponse(error, observer); }); }); return dataObservable.pipe(share()); } parseSuccessfulExportDataResponse(format, resp, subscriber) { if (resp && resp.isUnauthorized()) { this.clientErrorFallback(401); } else if (resp && resp.isFailed()) { subscriber.error(resp.message); } else if (resp && resp.isSuccessful()) { this.downloadFile(resp.data[0][format + 'Id'], format) .subscribe(r => subscriber.next(r), e => subscriber.error(e), () => subscriber.complete()); } else { subscriber.error('Service unavailable'); } } downloadFile(fileId, fileExtension) { const url = `${this.urlBase}${this.downloadPath ? this.downloadPath : ''}${this.servicePath}/${fileExtension}/${fileId}`; const options = { headers: this.buildHeaders(), observe: 'response', responseType: 'blob' }; const dataObservable = new Observable(observer => { this.httpClient.get(url, options).subscribe((resp) => { const fileData = resp.body; const fileURL = URL.createObjectURL(fileData); const a = document.createElement('a'); document.body.appendChild(a); a.href = fileURL; a.download = fileId + '.' + fileExtension; a.click(); document.body.removeChild(a); observer.next(fileData); URL.revokeObjectURL(fileURL); }, error => observer.error(error), () => observer.complete()); }); return dataObservable.pipe(share()); } } OntimizeExportService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeExportService, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.Injectable }); OntimizeExportService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeExportService }); i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: OntimizeExportService, decorators: [{ type: Injectable }], ctorParameters: function () { return [{ type: i0.Injector }]; } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib250aW1pemUtZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvc2VydmljZXMvb250aW1pemUvb250aW1pemUtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUs1QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDN0YsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sK0JBQStCLENBQUM7O0FBSXBFLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxtQkFBbUI7SUFPNUQsWUFBc0IsUUFBa0I7UUFDdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBREksYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUV0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQW9DLGlDQUFpQyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE1BQVc7UUFDakMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDckM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDdkIsSUFB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N0IsQ0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxhQUFhLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDVixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUNqQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQzFCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7O21IQXpHVSxxQkFBcUI7dUhBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IElFeHBvcnREYXRhUHJvdmlkZXIgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL2V4cG9ydC1kYXRhLXByb3ZpZGVyLmludGVyZmFjZSc7XG5cbmltcG9ydCB7IElFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9leHBvcnQtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBVdGlsIH0gZnJvbSAnLi4vLi4vdXRpbC91dGlsJztcbmltcG9ydCB7IE9udGltaXplRXhwb3J0RGF0YVByb3ZpZGVyU2VydmljZSB9IGZyb20gJy4uL29udGltaXplLWV4cG9ydC1kYXRhLXByb3ZpZGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgT250aW1pemVCYXNlU2VydmljZSB9IGZyb20gJy4vb250aW1pemUtYmFzZS1zZXJ2aWNlLmNsYXNzJztcbmltcG9ydCB7IEh0dHBSZXF1ZXN0T3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGVzL2h0dHAtcmVxdWVzdC1vcHRpb25zLnR5cGUnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgT250aW1pemVFeHBvcnRTZXJ2aWNlIGV4dGVuZHMgT250aW1pemVCYXNlU2VydmljZSBpbXBsZW1lbnRzIElFeHBvcnRTZXJ2aWNlIHtcblxuICBwdWJsaWMgZXhwb3J0UGF0aDogc3RyaW5nO1xuICBwdWJsaWMgZG93bmxvYWRQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBzZXJ2aWNlUGF0aDogc3RyaW5nO1xuICBwdWJsaWMgZXhwb3J0RGF0YVByb3ZpZGVyOiBJRXhwb3J0RGF0YVByb3ZpZGVyO1xuXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBpbmplY3RvcjogSW5qZWN0b3IpIHtcbiAgICBzdXBlcihpbmplY3Rvcik7XG4gICAgdGhpcy5leHBvcnREYXRhUHJvdmlkZXIgPSB0aGlzLmluamVjdG9yLmdldDxPbnRpbWl6ZUV4cG9ydERhdGFQcm92aWRlclNlcnZpY2U+KE9udGltaXplRXhwb3J0RGF0YVByb3ZpZGVyU2VydmljZSk7XG4gIH1cblxuICBwdWJsaWMgY29uZmlndXJlU2VydmljZShjb25maWc6IGFueSk6IHZvaWQge1xuICAgIHN1cGVyLmNvbmZpZ3VyZVNlcnZpY2UoY29uZmlnKTtcbiAgICBpZiAoY29uZmlnLmV4cG9ydFBhdGgpIHtcbiAgICAgIHRoaXMuZXhwb3J0UGF0aCA9IGNvbmZpZy5leHBvcnRQYXRoO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLmRvd25sb2FkUGF0aCkge1xuICAgICAgdGhpcy5kb3dubG9hZFBhdGggPSBjb25maWcuZG93bmxvYWRQYXRoO1xuICAgIH1cbiAgICBpZiAoY29uZmlnLnBhdGgpIHtcbiAgICAgIHRoaXMuc2VydmljZVBhdGggPSBjb25maWcucGF0aDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgYnVpbGRIZWFkZXJzKCk6IEh0dHBIZWFkZXJzIHtcbiAgICBsZXQgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7ICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicgfSk7XG4gICAgY29uc3Qgc2Vzc2lvbklkID0gdGhpcy5hdXRoU2VydmljZS5nZXRTZXNzaW9uSW5mbygpLmlkO1xuICAgIGlmIChVdGlsLmlzRGVmaW5lZChzZXNzaW9uSWQpKSB7XG4gICAgICBoZWFkZXJzID0gaGVhZGVycy5hcHBlbmQoJ0F1dGhvcml6YXRpb24nLCAnQmVhcmVyICcgKyBzZXNzaW9uSWQpO1xuICAgIH1cbiAgICByZXR1cm4gaGVhZGVycztcbiAgfVxuXG4gIHB1YmxpYyBleHBvcnREYXRhKGZvcm1hdDogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCBlbnRpdHkgPSB0aGlzLmV4cG9ydERhdGFQcm92aWRlci5lbnRpdHk7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxCYXNlfSR7dGhpcy5leHBvcnRQYXRoID8gdGhpcy5leHBvcnRQYXRoIDogJyd9JHt0aGlzLnNlcnZpY2VQYXRofS8ke2VudGl0eX0vJHtmb3JtYXR9YDtcblxuICAgIGNvbnN0IG9wdGlvbnM6IEh0dHBSZXF1ZXN0T3B0aW9ucyA9IHtcbiAgICAgIGhlYWRlcnM6IHRoaXMuYnVpbGRIZWFkZXJzKCkuYXBwZW5kKCdDb250ZW50LVR5cGUnLCAnYXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04JyksXG4gICAgICBvYnNlcnZlOiAncmVzcG9uc2UnXG4gICAgfTtcblxuICAgIGNvbnN0IGV4cG9ydERhdGEgPSB0aGlzLmV4cG9ydERhdGFQcm92aWRlci5nZXRFeHBvcnRDb25maWd1cmF0aW9uKCk7XG4gICAgY29uc3QgYm9keSA9IEpTT04uc3RyaW5naWZ5KGV4cG9ydERhdGEpO1xuICAgIC8vIFRPRE86IHRyeSBtdWx0aXBhcnRcbiAgICBjb25zdCBkYXRhT2JzZXJ2YWJsZTogT2JzZXJ2YWJsZTxTZXJ2aWNlUmVzcG9uc2U+ID0gbmV3IE9ic2VydmFibGUoKG9ic2VydmVyOiBTdWJzY3JpYmVyPFNlcnZpY2VSZXNwb25zZT4pID0+IHtcbiAgICAgIHRoaXMuaHR0cENsaWVudC5wb3N0PFNlcnZpY2VSZXNwb25zZT4odXJsLCBib2R5LCBvcHRpb25zKS5waXBlKFxuICAgICAgICBtYXAoKHJlc0RhdGE6IGFueSkgPT4gdGhpcy5hZGFwdGVyLmFkYXB0KHJlc0RhdGEpKVxuICAgICAgKS5zdWJzY3JpYmUocmVzcCA9PiB7XG4gICAgICAgIHRoaXMucGFyc2VTdWNjZXNzZnVsRXhwb3J0RGF0YVJlc3BvbnNlKGZvcm1hdCwgcmVzcCwgb2JzZXJ2ZXIpO1xuICAgICAgfSwgZXJyb3IgPT4ge1xuICAgICAgICB0aGlzLnBhcnNlVW5zdWNjZXNzZnVsUmVzcG9uc2UoZXJyb3IsIG9ic2VydmVyKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBkYXRhT2JzZXJ2YWJsZS5waXBlKHNoYXJlKCkpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHBhcnNlU3VjY2Vzc2Z1bEV4cG9ydERhdGFSZXNwb25zZShmb3JtYXQ6IHN0cmluZywgcmVzcDogU2VydmljZVJlc3BvbnNlLCBzdWJzY3JpYmVyOiBTdWJzY3JpYmVyPFNlcnZpY2VSZXNwb25zZT4pIHtcbiAgICBpZiAocmVzcCAmJiByZXNwLmlzVW5hdXRob3JpemVkKCkpIHtcbiAgICAgIHRoaXMuY2xpZW50RXJyb3JGYWxsYmFjayg0MDEpO1xuICAgIH0gZWxzZSBpZiAocmVzcCAmJiByZXNwLmlzRmFpbGVkKCkpIHtcbiAgICAgIHN1YnNjcmliZXIuZXJyb3IocmVzcC5tZXNzYWdlKTtcbiAgICB9IGVsc2UgaWYgKHJlc3AgJiYgcmVzcC5pc1N1Y2Nlc3NmdWwoKSkge1xuICAgICAgdGhpcy5kb3dubG9hZEZpbGUocmVzcC5kYXRhWzBdW2Zvcm1hdCArICdJZCddLCBmb3JtYXQpXG4gICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgciA9PiBzdWJzY3JpYmVyLm5leHQociksXG4gICAgICAgICAgZSA9PiBzdWJzY3JpYmVyLmVycm9yKGUpLFxuICAgICAgICAgICgpID0+IHN1YnNjcmliZXIuY29tcGxldGUoKVxuICAgICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBVbmtub3cgc3RhdGUgLT4gZXJyb3JcbiAgICAgIHN1YnNjcmliZXIuZXJyb3IoJ1NlcnZpY2UgdW5hdmFpbGFibGUnKTtcbiAgICB9XG5cbiAgfVxuXG4gIHB1YmxpYyBkb3dubG9hZEZpbGUoZmlsZUlkOiBzdHJpbmcsIGZpbGVFeHRlbnNpb246IHN0cmluZyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgdXJsID0gYCR7dGhpcy51cmxCYXNlfSR7dGhpcy5kb3dubG9hZFBhdGggPyB0aGlzLmRvd25sb2FkUGF0aCA6ICcnfSR7dGhpcy5zZXJ2aWNlUGF0aH0vJHtmaWxlRXh0ZW5zaW9ufS8ke2ZpbGVJZH1gO1xuXG4gICAgY29uc3Qgb3B0aW9uczogYW55ID0ge1xuICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoKSxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZScsXG4gICAgICByZXNwb25zZVR5cGU6ICdibG9iJ1xuICAgIH07XG5cbiAgICBjb25zdCBkYXRhT2JzZXJ2YWJsZSA9IG5ldyBPYnNlcnZhYmxlKG9ic2VydmVyID0+IHtcbiAgICAgIC8vIC5tYXAoKHJlczogYW55KSA9PiBuZXcgQmxvYihbcmVzLmJsb2IoKV0sIHsgdHlwZTogcmVzcG9uc2VUeXBlIH0pKVxuICAgICAgdGhpcy5odHRwQ2xpZW50LmdldCh1cmwsIG9wdGlvbnMpLnN1YnNjcmliZShcbiAgICAgICAgKHJlc3A6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbGVEYXRhID0gcmVzcC5ib2R5O1xuICAgICAgICAgIGNvbnN0IGZpbGVVUkwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGZpbGVEYXRhKTtcbiAgICAgICAgICBjb25zdCBhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYSk7XG4gICAgICAgICAgYS5ocmVmID0gZmlsZVVSTDtcbiAgICAgICAgICBhLmRvd25sb2FkID0gZmlsZUlkICsgJy4nICsgZmlsZUV4dGVuc2lvbjtcbiAgICAgICAgICBhLmNsaWNrKCk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhKTtcbiAgICAgICAgICBvYnNlcnZlci5uZXh0KGZpbGVEYXRhKTtcbiAgICAgICAgICBVUkwucmV2b2tlT2JqZWN0VVJMKGZpbGVVUkwpO1xuICAgICAgICB9LCBlcnJvciA9PiBvYnNlcnZlci5lcnJvcihlcnJvciksXG4gICAgICAgICgpID0+IG9ic2VydmVyLmNvbXBsZXRlKClcbiAgICAgICk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFPYnNlcnZhYmxlLnBpcGUoc2hhcmUoKSk7XG4gIH1cbn0iXX0=