ontimize-web-ngx
Version:
Ontimize Web framework using Angular 15
97 lines • 16.3 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 { 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=