ngx-stimulsoft
Version:
Angular reporter for stimulsoftJS
98 lines • 15.1 kB
JavaScript
import { Component, computed, effect, inject, input, output, signal } from '@angular/core';
import { NgxSourceService } from 'ngx-source';
import { StimulsoftSourceName } from './stimulsoft-source-name.model';
import { StimulsoftService } from './stimulsoft.service';
import { UniqueComponentId } from './util';
import * as i0 from "@angular/core";
export class StimulsoftDesignerComponent {
id = input(UniqueComponentId());
licenseKey = input();
licenseFile = input();
local = input('en');
onLoadResourceFailed = output();
loading = output();
sourceService = inject(NgxSourceService);
stimulsoftService = inject(StimulsoftService);
isLoadedSource = signal(false);
failResourcesDownload = signal(false);
resourcesReady = computed(() => this.isLoadedSource() && !this.failResourcesDownload());
constructor() {
this.sourceService.addSources(...this.stimulsoftService.stimulsoftSourceStore);
this.loadResources().then();
effect(() => {
if (this.resourcesReady()) {
// eslint-disable-next-line
const dependencies = [this.id(), this.licenseKey(), this.licenseFile(), this.local()];
this.initializeDesigner(this.id());
}
});
}
async loadResources() {
this.loading.emit(true);
const sources = [StimulsoftSourceName.REPORTER_SCRIPT, StimulsoftSourceName.VIEWER_SCRIPT, StimulsoftSourceName.DESIGNER_SCRIPT];
if (this.stimulsoftService.viewerCssUrl) {
sources.push(StimulsoftSourceName.VIEWER_STYLE);
}
if (this.stimulsoftService.designerCssUrl) {
sources.push(StimulsoftSourceName.DESIGNER_STYLE);
}
try {
await this.sourceService.loadBySourceNames(...sources);
this.isLoadedSource.set(true);
}
catch (error) {
this.failResourcesDownload.set(true);
this.onLoadResourceFailed.emit({ source: 'stimulsoft', error });
}
finally {
this.loading.emit(false);
}
}
initializeDesigner(id) {
const container = document.getElementById(id);
if (!container) {
console.warn(`Container with id "${id}" not found.`);
return;
}
this.applyLicense();
const options = new Stimulsoft.Designer.StiDesignerOptions();
const designer = new Stimulsoft.Designer.StiDesigner(options, 'StiDesigner', false);
designer.report = new Stimulsoft.Report.StiReport();
this.applyLocalization();
designer.renderHtml(id);
}
applyLocalization() {
if (!this.stimulsoftService.localizationPath) {
return;
}
const stiLocalization = Stimulsoft.Base.Localization.StiLocalization;
const local = this.local();
if (local === 'en') {
stiLocalization.cultureName = 'English';
return;
}
const path = `${this.stimulsoftService.localizationPath.replace(/\/$/g, '')}/${local}.xml`;
stiLocalization.cultureName = stiLocalization.loadLocalizationFile(path);
}
applyLicense() {
const key = this.licenseKey() ?? this.stimulsoftService.stimulsoftConfig.licenseKey;
const file = this.licenseFile() ?? this.stimulsoftService.stimulsoftConfig.licenseFile;
if (key) {
Stimulsoft.Base.StiLicense.Key = key;
}
else if (file) {
Stimulsoft.Base.StiLicense.loadFromFile(file);
}
}
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StimulsoftDesignerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.13", type: StimulsoftDesignerComponent, isStandalone: true, selector: "ngx-stimulsoft-designer", inputs: { id: { classPropertyName: "id", publicName: "id", isSignal: true, isRequired: false, transformFunction: null }, licenseKey: { classPropertyName: "licenseKey", publicName: "licenseKey", isSignal: true, isRequired: false, transformFunction: null }, licenseFile: { classPropertyName: "licenseFile", publicName: "licenseFile", isSignal: true, isRequired: false, transformFunction: null }, local: { classPropertyName: "local", publicName: "local", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { onLoadResourceFailed: "onLoadResourceFailed", loading: "loading" }, ngImport: i0, template: ` <div dir="ltr" [id]="id()"></div>`, isInline: true });
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StimulsoftDesignerComponent, decorators: [{
type: Component,
args: [{
selector: 'ngx-stimulsoft-designer',
template: ` <div dir="ltr" [id]="id()"></div>`,
standalone: true,
}]
}], ctorParameters: () => [] });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RpbXVsc29mdC1kZXNpZ25lci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc3RpbXVsc29mdC9zdGltdWxzb2Z0LWRlc2lnbmVyLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUN0RSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN6RCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxRQUFRLENBQUM7O0FBUzNDLE1BQU0sT0FBTywyQkFBMkI7SUFDN0IsRUFBRSxHQUFHLEtBQUssQ0FBUyxpQkFBaUIsRUFBRSxDQUFDLENBQUM7SUFDeEMsVUFBVSxHQUFHLEtBQUssRUFBc0IsQ0FBQztJQUN6QyxXQUFXLEdBQUcsS0FBSyxFQUFzQixDQUFDO0lBQzFDLEtBQUssR0FBRyxLQUFLLENBQVMsSUFBSSxDQUFDLENBQUM7SUFFNUIsb0JBQW9CLEdBQUcsTUFBTSxFQUFrQyxDQUFDO0lBQ2hFLE9BQU8sR0FBRyxNQUFNLEVBQVcsQ0FBQztJQUVwQixhQUFhLEdBQUcsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7SUFDekMsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDOUMsY0FBYyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxxQkFBcUIsR0FBRyxNQUFNLENBQVUsS0FBSyxDQUFDLENBQUM7SUFFdEMsY0FBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJ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b0M7OzRGQUduQywyQkFBMkI7a0JBTHZDLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLHlCQUF5QjtvQkFDbkMsUUFBUSxFQUFFLG9DQUFvQztvQkFDOUMsVUFBVSxFQUFFLElBQUk7aUJBQ2pCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbmplY3QsIGlucHV0LCBvdXRwdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd4U291cmNlU2VydmljZSB9IGZyb20gJ25neC1zb3VyY2UnO1xuaW1wb3J0IHsgU3RpbXVsc29mdFNvdXJjZU5hbWUgfSBmcm9tICcuL3N0aW11bHNvZnQtc291cmNlLW5hbWUubW9kZWwnO1xuaW1wb3J0IHsgU3RpbXVsc29mdFNlcnZpY2UgfSBmcm9tICcuL3N0aW11bHNvZnQuc2VydmljZSc7XG5pbXBvcnQgeyBVbmlxdWVDb21wb25lbnRJZCB9IGZyb20gJy4vdXRpbCc7XG5cbmRlY2xhcmUgbGV0IFN0aW11bHNvZnQ6IGFueTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbmd4LXN0aW11bHNvZnQtZGVzaWduZXInLFxuICB0ZW1wbGF0ZTogYCA8ZGl2IGRpcj1cImx0clwiIFtpZF09XCJpZCgpXCI+PC9kaXY+YCxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgU3RpbXVsc29mdERlc2lnbmVyQ29tcG9uZW50IHtcbiAgcmVhZG9ubHkgaWQgPSBpbnB1dDxzdHJpbmc+KFVuaXF1ZUNvbXBvbmVudElkKCkpO1xuICByZWFkb25seSBsaWNlbnNlS2V5ID0gaW5wdXQ8c3RyaW5nIHwgdW5kZWZpbmVkPigpO1xuICByZWFkb25seSBsaWNlbnNlRmlsZSA9IGlucHV0PHN0cmluZyB8IHVuZGVmaW5lZD4oKTtcbiAgcmVhZG9ubHkgbG9jYWwgPSBpbnB1dDxzdHJpbmc+KCdlbicpO1xuXG4gIHJlYWRvbmx5IG9uTG9hZFJlc291cmNlRmFpbGVkID0gb3V0cHV0PHsgc291cmNlOiBzdHJpbmc7IGVycm9yOiBhbnkgfT4oKTtcbiAgcmVhZG9ubHkgbG9hZGluZyA9IG91dHB1dDxib29sZWFuPigpO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgc291cmNlU2VydmljZSA9IGluamVjdChOZ3hTb3VyY2VTZXJ2aWNlKTtcbiAgcHJpdmF0ZSByZWFkb25seSBzdGltdWxzb2Z0U2VydmljZSA9IGluamVjdChTdGltdWxzb2Z0U2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaXNMb2FkZWRTb3VyY2UgPSBzaWduYWwoZmFsc2UpO1xuICBwcml2YXRlIGZhaWxSZXNvdXJjZXNEb3dubG9hZCA9IHNpZ25hbDxib29sZWFuPihmYWxzZSk7XG5cbiAgcHJpdmF0ZSByZWFkb25seSByZXNvdXJjZXNSZWFkeSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuaXNMb2FkZWRTb3VyY2UoKSAmJiAhdGhpcy5mYWlsUmVzb3VyY2VzRG93bmxvYWQoKSk7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zb3VyY2VTZXJ2aWNlLmFkZFNvdXJjZXMoLi4udGhpcy5zdGltdWxzb2Z0U2VydmljZS5zdGltdWxzb2Z0U291cmNlU3RvcmUpO1xuICAgIHRoaXMubG9hZFJlc291cmNlcygpLnRoZW4oKTtcbiAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMucmVzb3VyY2VzUmVhZHkoKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgICAgY29uc3QgZGVwZW5kZW5jaWVzID0gW3RoaXMuaWQoKSwgdGhpcy5saWNlbnNlS2V5KCksIHRoaXMubGljZW5zZUZpbGUoKSwgdGhpcy5sb2NhbCgpXTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplRGVzaWduZXIodGhpcy5pZCgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgbG9hZFJlc291cmNlcygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLmxvYWRpbmcuZW1pdCh0cnVlKTtcblxuICAgIGNvbnN0IHNvdXJjZXMgPSBbU3RpbXVsc29mdFNvdXJjZU5hbWUuUkVQT1JURVJfU0NSSVBULCBTdGltdWxzb2Z0U291cmNlTmFtZS5WSUVXRVJfU0NSSVBULCBTdGltdWxzb2Z0U291cmNlTmFtZS5ERVNJR05FUl9TQ1JJUFRdO1xuXG4gICAgaWYgKHRoaXMuc3RpbXVsc29mdFNlcnZpY2Uudmlld2VyQ3NzVXJsKSB7XG4gICAgICBzb3VyY2VzLnB1c2goU3RpbXVsc29mdFNvdXJjZU5hbWUuVklFV0VSX1NUWUxFKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc3RpbXVsc29mdFNlcnZpY2UuZGVzaWduZXJDc3NVcmwpIHtcbiAgICAgIHNvdXJjZXMucHVzaChTdGltdWxzb2Z0U291cmNlTmFtZS5ERVNJR05FUl9TVFlMRSk7XG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuc291cmNlU2VydmljZS5sb2FkQnlTb3VyY2VOYW1lcyguLi5zb3VyY2VzKTtcbiAgICAgIHRoaXMuaXNMb2FkZWRTb3VyY2Uuc2V0KHRydWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmZhaWxSZXNvdXJjZXNEb3dubG9hZC5zZXQodHJ1ZSk7XG4gICAgICB0aGlzLm9uTG9hZFJlc291cmNlRmFpbGVkLmVtaXQoeyBzb3VyY2U6ICdzdGltdWxzb2Z0JywgZXJyb3IgfSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMubG9hZGluZy5lbWl0KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVEZXNpZ25lcihpZDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xuICAgIGlmICghY29udGFpbmVyKSB7XG4gICAgICBjb25zb2xlLndhcm4oYENvbnRhaW5lciB3aXRoIGlkIFwiJHtpZH1cIiBub3QgZm91bmQuYCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5hcHBseUxpY2Vuc2UoKTtcblxuICAgIGNvbnN0IG9wdGlvbnMgPSBuZXcgU3RpbXVsc29mdC5EZXNpZ25lci5TdGlEZXNpZ25lck9wdGlvbnMoKTtcbiAgICBjb25zdCBkZXNpZ25lciA9IG5ldyBTdGltdWxzb2Z0LkRlc2lnbmVyLlN0aURlc2lnbmVyKG9wdGlvbnMsICdTdGlEZXNpZ25lcicsIGZhbHNlKTtcbiAgICBkZXNpZ25lci5yZXBvcnQgPSBuZXcgU3RpbXVsc29mdC5SZXBvcnQuU3RpUmVwb3J0KCk7XG5cbiAgICB0aGlzLmFwcGx5TG9jYWxpemF0aW9uKCk7XG5cbiAgICBkZXNpZ25lci5yZW5kZXJIdG1sKGlkKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlMb2NhbGl6YXRpb24oKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnN0aW11bHNvZnRTZXJ2aWNlLmxvY2FsaXphdGlvblBhdGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzdGlMb2NhbGl6YXRpb24gPSBTdGltdWxzb2Z0LkJhc2UuTG9jYWxpemF0aW9uLlN0aUxvY2FsaXphdGlvbjtcbiAgICBjb25zdCBsb2NhbCA9IHRoaXMubG9jYWwoKTtcblxuICAgIGlmIChsb2NhbCA9PT0gJ2VuJykge1xuICAgICAgc3RpTG9jYWxpemF0aW9uLmN1bHR1cmVOYW1lID0gJ0VuZ2xpc2gnO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhdGggPSBgJHt0aGlzLnN0aW11bHNvZnRTZXJ2aWNlLmxvY2FsaXphdGlvblBhdGgucmVwbGFjZSgvXFwvJC9nLCAnJyl9LyR7bG9jYWx9LnhtbGA7XG4gICAgc3RpTG9jYWxpemF0aW9uLmN1bHR1cmVOYW1lID0gc3RpTG9jYWxpemF0aW9uLmxvYWRMb2NhbGl6YXRpb25GaWxlKHBhdGgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhcHBseUxpY2Vuc2UoKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5saWNlbnNlS2V5KCkgPz8gdGhpcy5zdGltdWxzb2Z0U2VydmljZS5zdGltdWxzb2Z0Q29uZmlnLmxpY2Vuc2VLZXk7XG4gICAgY29uc3QgZmlsZSA9IHRoaXMubGljZW5zZUZpbGUoKSA/PyB0aGlzLnN0aW11bHNvZnRTZXJ2aWNlLnN0aW11bHNvZnRDb25maWcubGljZW5zZUZpbGU7XG5cbiAgICBpZiAoa2V5KSB7XG4gICAgICBTdGltdWxzb2Z0LkJhc2UuU3RpTGljZW5zZS5LZXkgPSBrZXk7XG4gICAgfSBlbHNlIGlmIChmaWxlKSB7XG4gICAgICBTdGltdWxzb2Z0LkJhc2UuU3RpTGljZW5zZS5sb2FkRnJvbUZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG59XG4iXX0=