scichart-angular
Version:
Angular wrapper for SciChart JS
108 lines • 14.7 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild } from '@angular/core';
import { CommonModule } from '@angular/common';
import { ScichartFallbackComponent } from './scichart-fallback.component';
import { createChartFromConfig, createChartRoot } from "./utils";
import { wrongInitResultMessage } from './constants';
import * as i0 from "@angular/core";
import * as i1 from "@angular/common";
export class ScichartAngularComponent {
constructor() {
this.title = 'lib-scichart-angular';
this.config = ''; //TODO: type the config
this.innerContainerStyles = null;
this.onInit = new EventEmitter();
this.onDelete = new EventEmitter();
this.innerContainerStylesMerged = {
height: '100%',
width: '100%',
};
this.isInitialized = false;
this.hasCustomFallback = false;
this.isCancelled = false;
this.chartRoot = createChartRoot();
this.sciChartSurfaceRef = null;
this.initResultRef = null;
}
ngOnInit() {
if (this.innerContainerStyles) {
this.innerContainerStylesMerged = { ...this.innerContainerStylesMerged, ...this.innerContainerStyles };
}
}
ngAfterViewInit() {
const rootElement = this.innerContainerRef.nativeElement;
rootElement.appendChild(this.chartRoot);
const fallbackElement = this.fallbackContainer.nativeElement;
if (fallbackElement.childNodes.length > 0) {
this.hasCustomFallback = true;
}
const initializationFunction = this.initChart
? (this.initChart)
: createChartFromConfig(this.config);
const runInit = async () => new Promise((resolve, reject) => initializationFunction(this.chartRoot)
.then((initResult) => {
if (!initResult.sciChartSurface) {
throw new Error(wrongInitResultMessage);
}
this.sciChartSurfaceRef = initResult.sciChartSurface;
this.initResultRef = initResult;
if (!this.isCancelled) {
this.isInitialized = true;
}
resolve(initResult);
})
.catch(reject));
runInit().then(initResult => {
if (this.onInit && this.isInitialized) {
this.onInit.emit(initResult);
}
});
}
ngOnDestroy() {
this.isCancelled = true;
if (this.onDelete && this.isInitialized) {
this.onDelete.emit(this.initResultRef);
}
this.sciChartSurfaceRef?.delete();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ScichartAngularComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.1.2", type: ScichartAngularComponent, isStandalone: true, selector: "scichart-angular", inputs: { initChart: "initChart", config: "config", innerContainerStyles: "innerContainerStyles" }, outputs: { onInit: "onInit", onDelete: "onDelete" }, viewQueries: [{ propertyName: "innerContainerRef", first: true, predicate: ["innerContainerRef"], descendants: true }, { propertyName: "fallbackContainer", first: true, predicate: ["fallbackContainer"], descendants: true }], ngImport: i0, template: `
<div style="position: relative; height: 100%; width: 100%;">
<div #innerContainerRef [ngStyle]="innerContainerStylesMerged"></div>
<ng-content *ngIf="isInitialized"></ng-content>
<div *ngIf="!isInitialized" #fallbackContainer>
<ng-content select="[fallback]"></ng-content>
</div>
<scichart-fallback *ngIf="!hasCustomFallback && !isInitialized"></scichart-fallback>
</div>
`, isInline: true, styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: ScichartFallbackComponent, selector: "scichart-fallback" }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.2", ngImport: i0, type: ScichartAngularComponent, decorators: [{
type: Component,
args: [{ selector: 'scichart-angular', standalone: true, imports: [CommonModule, ScichartFallbackComponent], template: `
<div style="position: relative; height: 100%; width: 100%;">
<div #innerContainerRef [ngStyle]="innerContainerStylesMerged"></div>
<ng-content *ngIf="isInitialized"></ng-content>
<div *ngIf="!isInitialized" #fallbackContainer>
<ng-content select="[fallback]"></ng-content>
</div>
<scichart-fallback *ngIf="!hasCustomFallback && !isInitialized"></scichart-fallback>
</div>
` }]
}], propDecorators: { innerContainerRef: [{
type: ViewChild,
args: ['innerContainerRef']
}], fallbackContainer: [{
type: ViewChild,
args: ['fallbackContainer']
}], initChart: [{
type: Input
}], config: [{
type: Input
}], innerContainerStyles: [{
type: Input
}], onInit: [{
type: Output
}], onDelete: [{
type: Output
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NpY2hhcnQtYW5ndWxhci5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9zY2ljaGFydC1hbmd1bGFyL3NyYy9saWIvc2NpY2hhcnQtYW5ndWxhci5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDN0YsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBSy9DLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDakUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sYUFBYSxDQUFDOzs7QUFrQnJELE1BQU0sT0FBTyx3QkFBd0I7SUFoQnJDO1FBb0JFLFVBQUssR0FBRyxzQkFBc0IsQ0FBQztRQU10QixXQUFNLEdBQVEsRUFBRSxDQUFDLENBQUMsdUJBQXVCO1FBQ3pDLHlCQUFvQixHQUFrQixJQUFJLENBQUM7UUFFMUMsV0FBTSxHQUE4QixJQUFJLFlBQVksRUFBZSxDQUFDO1FBQ3BFLGFBQVEsR0FBOEIsSUFBSSxZQUFZLEVBQWUsQ0FBQztRQUV6RSwrQkFBMEIsR0FBVztZQUMxQyxNQUFNLEVBQUUsTUFBTTtZQUNkLEtBQUssRUFBRSxNQUFNO1NBQ2QsQ0FBQztRQUNLLGtCQUFhLEdBQVksS0FBSyxDQUFDO1FBQy9CLHNCQUFpQixHQUFZLEtBQUssQ0FBQztRQUNsQyxnQkFBVyxHQUFZLEtBQUssQ0FBQztRQUM3QixjQUFTLEdBQUcsZUFBZSxFQUFFLENBQUM7UUFFOUIsdUJBQWtCLEdBQW9CLElBQUksQ0FBQztRQUMzQyxrQkFBYSxHQUF1QixJQUFJLENBQUM7S0F3RGxEO0lBdERDLFFB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QUFvQjtzQkFBNUIsS0FBSztnQkFFSSxNQUFNO3NCQUFmLE1BQU07Z0JBQ0csUUFBUTtzQkFBakIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0LCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gIElTY2lDaGFydFN1cmZhY2VCYXNlLFxyXG59IGZyb20gXCJzY2ljaGFydFwiO1xyXG5pbXBvcnQgeyBJSW5pdFJlc3VsdCwgVEluaXRGdW5jdGlvbiB9IGZyb20gXCIuL3R5cGVzXCI7XHJcbmltcG9ydCB7IFNjaWNoYXJ0RmFsbGJhY2tDb21wb25lbnQgfSBmcm9tICcuL3NjaWNoYXJ0LWZhbGxiYWNrLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IGNyZWF0ZUNoYXJ0RnJvbUNvbmZpZywgY3JlYXRlQ2hhcnRSb290IH0gZnJvbSBcIi4vdXRpbHNcIjtcclxuaW1wb3J0IHsgd3JvbmdJbml0UmVzdWx0TWVzc2FnZSB9IGZyb20gJy4vY29uc3RhbnRzJztcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnc2NpY2hhcnQtYW5ndWxhcicsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbIENvbW1vbk1vZHVsZSwgU2NpY2hhcnRGYWxsYmFja0NvbXBvbmVudCBdLFxyXG4gIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlOyBoZWlnaHQ6IDEwMCU7IHdpZHRoOiAxMDAlO1wiPlxyXG4gICAgICA8ZGl2ICNpbm5lckNvbnRhaW5lclJlZiBbbmdTdHlsZV09XCJpbm5lckNvbnRhaW5lclN0eWxlc01lcmdlZFwiPjwvZGl2PlxyXG4gICAgICA8bmctY29udGVudCAqbmdJZj1cImlzSW5pdGlhbGl6ZWRcIj48L25nLWNvbnRlbnQ+XHJcbiAgICAgIDxkaXYgKm5nSWY9XCIhaXNJbml0aWFsaXplZFwiICNmYWxsYmFja0NvbnRhaW5lcj5cclxuICAgICAgICA8bmctY29udGVudCBzZWxlY3Q9XCJbZmFsbGJhY2tdXCI+PC9uZy1jb250ZW50PlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPHNjaWNoYXJ0LWZhbGxiYWNrICpuZ0lmPVwiIWhhc0N1c3RvbUZhbGxiYWNrICYmICFpc0luaXRpYWxpemVkXCI+PC9zY2ljaGFydC1mYWxsYmFjaz5cclxuICAgIDwvZGl2PlxyXG4gIGAsXHJcbiAgc3R5bGVzOiBgYFxyXG59KVxyXG5leHBvcnQgY2xhc3MgU2NpY2hhcnRBbmd1bGFyQ29tcG9uZW50PFxyXG4gICAgVFN1cmZhY2UgZXh0ZW5kcyBJU2NpQ2hhcnRTdXJmYWNlQmFzZSA9IElTY2lDaGFydFN1cmZhY2VCYXNlLFxyXG4gICAgVEluaXRSZXN1bHQgZXh0ZW5kcyBJSW5pdFJlc3VsdDxUU3VyZmFjZT4gPSBJSW5pdFJlc3VsdDxUU3VyZmFjZT5cclxuPiB7XHJcbiAgdGl0bGUgPSAnbGliLXNjaWNoYXJ0LWFuZ3VsYXInO1xyXG5cclxuICBAVmlld0NoaWxkKCdpbm5lckNvbnRhaW5lclJlZicpIGlubmVyQ29udGFpbmVyUmVmITogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD47XHJcbiAgQFZpZXdDaGlsZCgnZmFsbGJhY2tDb250YWluZXInKSBmYWxsYmFja0NvbnRhaW5lciE6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+O1xyXG5cclxuICBASW5wdXQoKSBpbml0Q2hhcnQhOiBUSW5pdEZ1bmN0aW9uPFRTdXJmYWNlLCBUSW5pdFJlc3VsdD47XHJcbiAgQElucHV0KCkgY29uZmlnOiBhbnkgPSAnJzsgLy9UT0RPOiB0eXBlIHRoZSBjb25maWdcclxuICBASW5wdXQoKSBpbm5lckNvbnRhaW5lclN0eWxlczogT2JqZWN0IHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIEBPdXRwdXQoKSBvbkluaXQ6IEV2ZW50RW1pdHRlcjxUSW5pdFJlc3VsdD4gPSBuZXcgRXZlbnRFbWl0dGVyPFRJbml0UmVzdWx0PigpO1xyXG4gIEBPdXRwdXQoKSBvbkRlbGV0ZTogRXZlbnRFbWl0dGVyPFRJbml0UmVzdWx0PiA9IG5ldyBFdmVudEVtaXR0ZXI8VEluaXRSZXN1bHQ+KCk7XHJcblxyXG4gIHB1YmxpYyBpbm5lckNvbnRhaW5lclN0eWxlc01lcmdlZDogT2JqZWN0ID0ge1xyXG4gICAgaGVpZ2h0OiAnMTAwJScsXHJcbiAgICB3aWR0aDogJzEwMCUnLFxyXG4gIH07XHJcbiAgcHVibGljIGlzSW5pdGlhbGl6ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgaGFzQ3VzdG9tRmFsbGJhY2s6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwcml2YXRlIGlzQ2FuY2VsbGVkOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBjaGFydFJvb3QgPSBjcmVhdGVDaGFydFJvb3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBzY2lDaGFydFN1cmZhY2VSZWY6IFRTdXJmYWNlIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBpbml0UmVzdWx0UmVmOiBUSW5pdFJlc3VsdCB8IG51bGwgPSBudWxsO1xyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmlubmVyQ29udGFpbmVyU3R5bGVzKSB7XHJcbiAgICAgIHRoaXMuaW5uZXJDb250YWluZXJTdHlsZXNNZXJnZWQgPSB7IC4uLnRoaXMuaW5uZXJDb250YWluZXJTdHlsZXNNZXJnZWQsIC4uLnRoaXMuaW5uZXJDb250YWluZXJTdHlsZXMgfTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcclxuICAgIGNvbnN0IHJvb3RFbGVtZW50ID0gdGhpcy5pbm5lckNvbnRhaW5lclJlZi5uYXRpdmVFbGVtZW50O1xyXG4gICAgcm9vdEVsZW1lbnQhLmFwcGVuZENoaWxkKHRoaXMuY2hhcnRSb290IGFzIE5vZGUpO1xyXG5cclxuICAgIGNvbnN0IGZhbGxiYWNrRWxlbWVudCA9IHRoaXMuZmFsbGJhY2tDb250YWluZXIubmF0aXZlRWxlbWVudDtcclxuICAgIGlmIChmYWxsYmFja0VsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHRoaXMuaGFzQ3VzdG9tRmFsbGJhY2sgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGluaXRpYWxpemF0aW9uRnVuY3Rpb24gPSB0aGlzLmluaXRDaGFydFxyXG4gICAgICA/ICh0aGlzLmluaXRDaGFydClcclxuICAgICAgOiBjcmVhdGVDaGFydEZyb21Db25maWc8VFN1cmZhY2U+KHRoaXMuY29uZmlnKSBhcyBUSW5pdEZ1bmN0aW9uPFRTdXJmYWNlLCBUSW5pdFJlc3VsdD47XHJcblxyXG4gICAgY29uc3QgcnVuSW5pdCA9IGFzeW5jICgpOiBQcm9taXNlPFRJbml0UmVzdWx0PiA9PlxyXG4gICAgICBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PlxyXG4gICAgICAgIGluaXRpYWxpemF0aW9uRnVuY3Rpb24odGhpcy5jaGFydFJvb3QgYXMgSFRNTERpdkVsZW1lbnQpXHJcbiAgICAgICAgICAudGhlbigoaW5pdFJlc3VsdDogVEluaXRSZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKCFpbml0UmVzdWx0LnNjaUNoYXJ0U3VyZmFjZSkge1xyXG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcih3cm9uZ0luaXRSZXN1bHRNZXNzYWdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNjaUNoYXJ0U3VyZmFjZVJlZiA9IGluaXRSZXN1bHQuc2NpQ2hhcnRTdXJmYWNlIGFzIFRTdXJmYWNlO1xyXG4gICAgICAgICAgICB0aGlzLmluaXRSZXN1bHRSZWYgPSBpbml0UmVzdWx0IGFzIFRJbml0UmVzdWx0O1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmlzQ2FuY2VsbGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5pc0luaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmVzb2x2ZShpbml0UmVzdWx0KTtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgICAuY2F0Y2gocmVqZWN0KVxyXG4gICAgICApO1xyXG5cclxuICAgIHJ1bkluaXQoKS50aGVuKGluaXRSZXN1bHQgPT4ge1xyXG4gICAgICBpZiAodGhpcy5vbkluaXQgJiYgdGhpcy5pc0luaXRpYWxpemVkKSB7XHJcbiAgICAgICAgdGhpcy5vbkluaXQuZW1pdChpbml0UmVzdWx0KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuaXNDYW5jZWxsZWQgPSB0cnVlO1xyXG5cclxuICAgIGlmICh0aGlzLm9uRGVsZXRlICYmIHRoaXMuaXNJbml0aWFsaXplZCkge1xyXG4gICAgICB0aGlzLm9uRGVsZXRlLmVtaXQodGhpcy5pbml0UmVzdWx0UmVmIGFzIFRJbml0UmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNjaUNoYXJ0U3VyZmFjZVJlZj8uZGVsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==