ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
97 lines • 16.2 kB
JavaScript
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 { BaseService } from '../base-service.class';
import { OntimizeExportDataProviderService } from '../ontimize-export-data-provider.service';
import * as i0 from "@angular/core";
export class OntimizeExportService extends BaseService {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib250aW1pemUtZXhwb3J0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vbnRpbWl6ZS13ZWItbmd4L3NyYy9saWIvc2VydmljZXMvb250aW1pemUvb250aW1pemUtZXhwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25ELE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JELE9BQU8sRUFBRSxVQUFVLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDOUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQU01QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3BELE9BQU8sRUFBRSxpQ0FBaUMsRUFBRSxNQUFNLDBDQUEwQyxDQUFDOztBQUc3RixNQUFNLE9BQU8scUJBQXNCLFNBQVEsV0FBNEI7SUFPckUsWUFBc0IsUUFBa0I7UUFDdEMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBREksYUFBUSxHQUFSLFFBQVEsQ0FBVTtRQUV0QyxJQUFJLENBQUMsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQW9DLGlDQUFpQyxDQUFDLENBQUM7SUFDcEgsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE1BQVc7UUFDakMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQy9CLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtZQUNyQixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7U0FDckM7UUFDRCxJQUFJLE1BQU0sQ0FBQyxZQUFZLEVBQUU7WUFDdkIsSUFBSSxD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Q0FBQyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7Z0JBQ2pCLENBQUMsQ0FBQyxRQUFRLEdBQUcsTUFBTSxHQUFHLEdBQUcsR0FBRyxhQUFhLENBQUM7Z0JBQzFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDVixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0IsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEIsR0FBRyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMvQixDQUFDLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUNqQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQzFCLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7O21IQXpHVSxxQkFBcUI7dUhBQXJCLHFCQUFxQjs0RkFBckIscUJBQXFCO2tCQURqQyxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3RhYmxlLCBJbmplY3RvciB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaWJlciB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBzaGFyZSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgSUV4cG9ydERhdGFQcm92aWRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvZXhwb3J0LWRhdGEtcHJvdmlkZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IElFeHBvcnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9leHBvcnQtc2VydmljZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgU2VydmljZVJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9zZXJ2aWNlLXJlc3BvbnNlLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIdHRwUmVxdWVzdE9wdGlvbnMgfSBmcm9tICcuLi8uLi90eXBlcy9odHRwLXJlcXVlc3Qtb3B0aW9ucy50eXBlJztcbmltcG9ydCB7IFV0aWwgfSBmcm9tICcuLi8uLi91dGlsL3V0aWwnO1xuaW1wb3J0IHsgQmFzZVNlcnZpY2UgfSBmcm9tICcuLi9iYXNlLXNlcnZpY2UuY2xhc3MnO1xuaW1wb3J0IHsgT250aW1pemVFeHBvcnREYXRhUHJvdmlkZXJTZXJ2aWNlIH0gZnJvbSAnLi4vb250aW1pemUtZXhwb3J0LWRhdGEtcHJvdmlkZXIuc2VydmljZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBPbnRpbWl6ZUV4cG9ydFNlcnZpY2UgZXh0ZW5kcyBCYXNlU2VydmljZTxTZXJ2aWNlUmVzcG9uc2U+IGltcGxlbWVudHMgSUV4cG9ydFNlcnZpY2Uge1xuXG4gIHB1YmxpYyBleHBvcnRQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBkb3dubG9hZFBhdGg6IHN0cmluZztcbiAgcHVibGljIHNlcnZpY2VQYXRoOiBzdHJpbmc7XG4gIHB1YmxpYyBleHBvcnREYXRhUHJvdmlkZXI6IElFeHBvcnREYXRhUHJvdmlkZXI7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGluamVjdG9yOiBJbmplY3Rvcikge1xuICAgIHN1cGVyKGluamVjdG9yKTtcbiAgICB0aGlzLmV4cG9ydERhdGFQcm92aWRlciA9IHRoaXMuaW5qZWN0b3IuZ2V0PE9udGltaXplRXhwb3J0RGF0YVByb3ZpZGVyU2VydmljZT4oT250aW1pemVFeHBvcnREYXRhUHJvdmlkZXJTZXJ2aWNlKTtcbiAgfVxuXG4gIHB1YmxpYyBjb25maWd1cmVTZXJ2aWNlKGNvbmZpZzogYW55KTogdm9pZCB7XG4gICAgc3VwZXIuY29uZmlndXJlU2VydmljZShjb25maWcpO1xuICAgIGlmIChjb25maWcuZXhwb3J0UGF0aCkge1xuICAgICAgdGhpcy5leHBvcnRQYXRoID0gY29uZmlnLmV4cG9ydFBhdGg7XG4gICAgfVxuICAgIGlmIChjb25maWcuZG93bmxvYWRQYXRoKSB7XG4gICAgICB0aGlzLmRvd25sb2FkUGF0aCA9IGNvbmZpZy5kb3dubG9hZFBhdGg7XG4gICAgfVxuICAgIGlmIChjb25maWcucGF0aCkge1xuICAgICAgdGhpcy5zZXJ2aWNlUGF0aCA9IGNvbmZpZy5wYXRoO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBidWlsZEhlYWRlcnMoKTogSHR0cEhlYWRlcnMge1xuICAgIGxldCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHsgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbic6ICcqJyB9KTtcbiAgICBjb25zdCBzZXNzaW9uSWQgPSB0aGlzLmF1dGhTZXJ2aWNlLmdldFNlc3Npb25JbmZvKCkuaWQ7XG4gICAgaWYgKFV0aWwuaXNEZWZpbmVkKHNlc3Npb25JZCkpIHtcbiAgICAgIGhlYWRlcnMgPSBoZWFkZXJzLmFwcGVuZCgnQXV0aG9yaXphdGlvbicsICdCZWFyZXIgJyArIHNlc3Npb25JZCk7XG4gICAgfVxuICAgIHJldHVybiBoZWFkZXJzO1xuICB9XG5cbiAgcHVibGljIGV4cG9ydERhdGEoZm9ybWF0OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIGNvbnN0IGVudGl0eSA9IHRoaXMuZXhwb3J0RGF0YVByb3ZpZGVyLmVudGl0eTtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybEJhc2V9JHt0aGlzLmV4cG9ydFBhdGggPyB0aGlzLmV4cG9ydFBhdGggOiAnJ30ke3RoaXMuc2VydmljZVBhdGh9LyR7ZW50aXR5fS8ke2Zvcm1hdH1gO1xuXG4gICAgY29uc3Qgb3B0aW9uczogSHR0cFJlcXVlc3RPcHRpb25zID0ge1xuICAgICAgaGVhZGVyczogdGhpcy5idWlsZEhlYWRlcnMoKS5hcHBlbmQoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9VVRGLTgnKSxcbiAgICAgIG9ic2VydmU6ICdyZXNwb25zZSdcbiAgICB9O1xuXG4gICAgY29uc3QgZXhwb3J0RGF0YSA9IHRoaXMuZXhwb3J0RGF0YVByb3ZpZGVyLmdldEV4cG9ydENvbmZpZ3VyYXRpb24oKTtcbiAgICBjb25zdCBib2R5ID0gSlNPTi5zdHJpbmdpZnkoZXhwb3J0RGF0YSk7XG4gICAgLy8gVE9ETzogdHJ5IG11bHRpcGFydFxuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlOiBPYnNlcnZhYmxlPFNlcnZpY2VSZXNwb25zZT4gPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXI6IFN1YnNjcmliZXI8U2VydmljZVJlc3BvbnNlPikgPT4ge1xuICAgICAgdGhpcy5odHRwQ2xpZW50LnBvc3Q8U2VydmljZVJlc3BvbnNlPih1cmwsIGJvZHksIG9wdGlvbnMpLnBpcGUoXG4gICAgICAgIG1hcCgocmVzRGF0YTogYW55KSA9PiB0aGlzLmFkYXB0ZXIuYWRhcHQocmVzRGF0YSkpXG4gICAgICApLnN1YnNjcmliZShyZXNwID0+IHtcbiAgICAgICAgdGhpcy5wYXJzZVN1Y2Nlc3NmdWxFeHBvcnREYXRhUmVzcG9uc2UoZm9ybWF0LCByZXNwLCBvYnNlcnZlcik7XG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIHRoaXMucGFyc2VVbnN1Y2Nlc3NmdWxSZXNwb25zZShlcnJvciwgb2JzZXJ2ZXIpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGRhdGFPYnNlcnZhYmxlLnBpcGUoc2hhcmUoKSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcGFyc2VTdWNjZXNzZnVsRXhwb3J0RGF0YVJlc3BvbnNlKGZvcm1hdDogc3RyaW5nLCByZXNwOiBTZXJ2aWNlUmVzcG9uc2UsIHN1YnNjcmliZXI6IFN1YnNjcmliZXI8U2VydmljZVJlc3BvbnNlPikge1xuICAgIGlmIChyZXNwICYmIHJlc3AuaXNVbmF1dGhvcml6ZWQoKSkge1xuICAgICAgdGhpcy5jbGllbnRFcnJvckZhbGxiYWNrKDQwMSk7XG4gICAgfSBlbHNlIGlmIChyZXNwICYmIHJlc3AuaXNGYWlsZWQoKSkge1xuICAgICAgc3Vic2NyaWJlci5lcnJvcihyZXNwLm1lc3NhZ2UpO1xuICAgIH0gZWxzZSBpZiAocmVzcCAmJiByZXNwLmlzU3VjY2Vzc2Z1bCgpKSB7XG4gICAgICB0aGlzLmRvd25sb2FkRmlsZShyZXNwLmRhdGFbMF1bZm9ybWF0ICsgJ0lkJ10sIGZvcm1hdClcbiAgICAgICAgLnN1YnNjcmliZShcbiAgICAgICAgICByID0+IHN1YnNjcmliZXIubmV4dChyKSxcbiAgICAgICAgICBlID0+IHN1YnNjcmliZXIuZXJyb3IoZSksXG4gICAgICAgICAgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpXG4gICAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFVua25vdyBzdGF0ZSAtPiBlcnJvclxuICAgICAgc3Vic2NyaWJlci5lcnJvcignU2VydmljZSB1bmF2YWlsYWJsZScpO1xuICAgIH1cblxuICB9XG5cbiAgcHVibGljIGRvd25sb2FkRmlsZShmaWxlSWQ6IHN0cmluZywgZmlsZUV4dGVuc2lvbjogc3RyaW5nKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICBjb25zdCB1cmwgPSBgJHt0aGlzLnVybEJhc2V9JHt0aGlzLmRvd25sb2FkUGF0aCA/IHRoaXMuZG93bmxvYWRQYXRoIDogJyd9JHt0aGlzLnNlcnZpY2VQYXRofS8ke2ZpbGVFeHRlbnNpb259LyR7ZmlsZUlkfWA7XG5cbiAgICBjb25zdCBvcHRpb25zOiBhbnkgPSB7XG4gICAgICBoZWFkZXJzOiB0aGlzLmJ1aWxkSGVhZGVycygpLFxuICAgICAgb2JzZXJ2ZTogJ3Jlc3BvbnNlJyxcbiAgICAgIHJlc3BvbnNlVHlwZTogJ2Jsb2InXG4gICAgfTtcblxuICAgIGNvbnN0IGRhdGFPYnNlcnZhYmxlID0gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xuICAgICAgLy8gLm1hcCgocmVzOiBhbnkpID0+IG5ldyBCbG9iKFtyZXMuYmxvYigpXSwgeyB0eXBlOiByZXNwb25zZVR5cGUgfSkpXG4gICAgICB0aGlzLmh0dHBDbGllbnQuZ2V0KHVybCwgb3B0aW9ucykuc3Vic2NyaWJlKFxuICAgICAgICAocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsZURhdGEgPSByZXNwLmJvZHk7XG4gICAgICAgICAgY29uc3QgZmlsZVVSTCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZURhdGEpO1xuICAgICAgICAgIGNvbnN0IGEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG4gICAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcbiAgICAgICAgICBhLmhyZWYgPSBmaWxlVVJMO1xuICAgICAgICAgIGEuZG93bmxvYWQgPSBmaWxlSWQgKyAnLicgKyBmaWxlRXh0ZW5zaW9uO1xuICAgICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGEpO1xuICAgICAgICAgIG9ic2VydmVyLm5leHQoZmlsZURhdGEpO1xuICAgICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwoZmlsZVVSTCk7XG4gICAgICAgIH0sIGVycm9yID0+IG9ic2VydmVyLmVycm9yKGVycm9yKSxcbiAgICAgICAgKCkgPT4gb2JzZXJ2ZXIuY29tcGxldGUoKVxuICAgICAgKTtcbiAgICB9KTtcbiAgICByZXR1cm4gZGF0YU9ic2VydmFibGUucGlwZShzaGFyZSgpKTtcbiAgfVxufVxuIl19