@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
115 lines • 15.3 kB
JavaScript
import { Component, NgZone, ViewChild, ElementRef, forwardRef, Input, Output, EventEmitter } from '@angular/core';
import { NG_VALUE_ACCESSOR } from '@angular/forms';
import { LoadingComponent, ThemeSwitcherService } from '@c8y/ngx-components';
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
import { NgIf } from '@angular/common';
import * as i0 from "@angular/core";
import * as i1 from "@c8y/ngx-components";
export async function loadMonacoEditor() {
const monaco = await import('monaco-editor');
return monaco.default || monaco;
}
export class EditorComponent {
constructor(zone, theme) {
this.zone = zone;
this.theme = theme;
this.editorOptions = {};
this.editorInit = new EventEmitter();
this._readOnly = false;
this._currentValue = '';
this.themeChanges$ = this.theme.currentlyAppliedTheme$.pipe(takeUntilDestroyed());
}
writeValue(obj) {
if (typeof obj === 'string') {
this._currentValue = obj;
}
else {
this._currentValue = JSON.stringify(obj, null, 2);
}
if (this.editor) {
this.editor.setValue(this._currentValue);
}
}
registerOnChange(fn) {
this._onChanges = fn;
this.register();
}
registerOnTouched(fn) {
this._onTouched = fn;
this.register();
}
setDisabledState(isDisabled) {
this._readOnly = isDisabled;
}
async ngAfterViewInit() {
this.monaco = await loadMonacoEditor();
this.editor = this.monaco.editor.create(this._editorContainer.nativeElement, Object.assign({
value: this._currentValue || '',
language: 'json',
automaticLayout: true,
readOnly: this._readOnly
}, this.editorOptions));
window.monacoEditor = this.editor;
this.editorInit.emit(this.editor);
this.register();
this.themeChanges$.subscribe(theme => {
const themeToSet = theme === 'dark' ? `vs-dark` : 'vs';
this.monaco.editor.setTheme(themeToSet);
});
}
register() {
if (!this.editor) {
return;
}
if (this._onChanges) {
const onChanges = this._onChanges;
this.editor.onDidChangeModelContent(() => {
this.zone.run(() => {
const value = this.editor.getValue();
this._currentValue = value;
onChanges(value);
});
});
this._onChanges = undefined;
}
if (this._onTouched) {
const onTouched = this._onTouched;
this.editor.onDidChangeModelContent(() => {
this.zone.run(() => {
onTouched();
});
});
this._onTouched = undefined;
}
}
ngOnDestroy() {
this.editor.getModel().dispose();
this.editor.dispose();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorComponent, deps: [{ token: i0.NgZone }, { token: i1.ThemeSwitcherService }], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: EditorComponent, isStandalone: true, selector: "c8y-editor", inputs: { editorOptions: "editorOptions" }, outputs: { editorInit: "editorInit" }, providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => EditorComponent),
multi: true
}
], viewQueries: [{ propertyName: "_editorContainer", first: true, predicate: ["editorContainer"], descendants: true, static: true }], ngImport: i0, template: "<c8y-loading *ngIf=\"!monaco\"></c8y-loading>\n<div class=\"editor-container\" style=\"height: 100%\" #editorContainer></div>\n", dependencies: [{ kind: "component", type: LoadingComponent, selector: "c8y-loading", inputs: ["layout", "progress", "message"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: EditorComponent, decorators: [{
type: Component,
args: [{ selector: 'c8y-editor', standalone: true, imports: [LoadingComponent, NgIf], providers: [
{
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(() => EditorComponent),
multi: true
}
], template: "<c8y-loading *ngIf=\"!monaco\"></c8y-loading>\n<div class=\"editor-container\" style=\"height: 100%\" #editorContainer></div>\n" }]
}], ctorParameters: () => [{ type: i0.NgZone }, { type: i1.ThemeSwitcherService }], propDecorators: { editorOptions: [{
type: Input
}], editorInit: [{
type: Output
}], _editorContainer: [{
type: ViewChild,
args: ['editorContainer', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2VkaXRvci9lZGl0b3IuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vZWRpdG9yL2VkaXRvci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUdULE1BQU0sRUFDTixTQUFTLEVBQ1QsVUFBVSxFQUNWLFVBQVUsRUFDVixLQUFLLEVBQ0wsTUFBTSxFQUNOLFlBQVksRUFDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQXdCLGlCQUFpQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFekUsT0FBTyxFQUFFLGdCQUFnQixFQUFnQixvQkFBb0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQzNGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRWhFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQzs7O0FBRXZDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsZ0JBQWdCO0lBQ3BDLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdDLE9BQU8sTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7QUFDbEMsQ0FBQztBQWVELE1BQU0sT0FBTyxlQUFlO0lBYTFCLFlBQ1UsSUFBWSxFQUNaLEtBQTJCO1FBRDNCLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixVQUFLLEdBQUwsS0FBSyxDQUFzQjtRQWQ1QixrQkFBYSxHQUF1RCxFQUFFLENBQUM7UUFDdEUsZUFBVSxHQUFHLElBQUksWUFBWSxFQUF1QyxDQUFDO1FBSXZFLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsa0JBQWEsR0FBRyxFQUFFLENBQUM7UUFVekIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxrQkFB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IjpbImltcG9ydCB7XG4gIENvbXBvbmVudCxcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgT25EZXN0cm95LFxuICBOZ1pvbmUsXG4gIFZpZXdDaGlsZCxcbiAgRWxlbWVudFJlZixcbiAgZm9yd2FyZFJlZixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgRXZlbnRFbWl0dGVyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29udHJvbFZhbHVlQWNjZXNzb3IsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHR5cGUgKiBhcyBNb25hY28gZnJvbSAnbW9uYWNvLWVkaXRvcic7XG5pbXBvcnQgeyBMb2FkaW5nQ29tcG9uZW50LCBUaGVtZU9wdGlvbnMsIFRoZW1lU3dpdGNoZXJTZXJ2aWNlIH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyB0YWtlVW50aWxEZXN0cm95ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ0lmIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRNb25hY29FZGl0b3IoKSB7XG4gIGNvbnN0IG1vbmFjbyA9IGF3YWl0IGltcG9ydCgnbW9uYWNvLWVkaXRvcicpO1xuICByZXR1cm4gbW9uYWNvLmRlZmF1bHQgfHwgbW9uYWNvO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdjOHktZWRpdG9yJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXRvci5jb21wb25lbnQuaHRtbCcsXG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIGltcG9ydHM6IFtMb2FkaW5nQ29tcG9uZW50LCBOZ0lmXSxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBFZGl0b3JDb21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgRWRpdG9yQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95LCBDb250cm9sVmFsdWVBY2Nlc3NvciB7XG4gIEBJbnB1dCgpIGVkaXRvck9wdGlvbnM6IE1vbmFjby5lZGl0b3IuSVN0YW5kYWxvbmVFZGl0b3JDb25zdHJ1Y3Rpb25PcHRpb25zID0ge307XG4gIEBPdXRwdXQoKSBlZGl0b3JJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxNb25hY28uZWRpdG9yLklTdGFuZGFsb25lQ29kZUVkaXRvcj4oKTtcbiAgbW9uYWNvOiB0eXBlb2YgTW9uYWNvO1xuICBlZGl0b3I6IE1vbmFjby5lZGl0b3IuSVN0YW5kYWxvbmVDb2RlRWRpdG9yO1xuXG4gIHByaXZhdGUgX3JlYWRPbmx5ID0gZmFsc2U7XG4gIHByaXZhdGUgX2N1cnJlbnRWYWx1ZSA9ICcnO1xuICBwcml2YXRlIF9vbkNoYW5nZXM6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBwcml2YXRlIF9vblRvdWNoZWQ6ICgpID0+IHZvaWQ7XG4gIEBWaWV3Q2hpbGQoJ2VkaXRvckNvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIF9lZGl0b3JDb250YWluZXI6IEVsZW1lbnRSZWY7XG4gIHByaXZhdGUgdGhlbWVDaGFuZ2VzJDogT2JzZXJ2YWJsZTxUaGVtZU9wdGlvbnM+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgem9uZTogTmdab25lLFxuICAgIHByaXZhdGUgdGhlbWU6IFRoZW1lU3dpdGNoZXJTZXJ2aWNlXG4gICkge1xuICAgIHRoaXMudGhlbWVDaGFuZ2VzJCA9IHRoaXMudGhlbWUuY3VycmVudGx5QXBwbGllZFRoZW1lJC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCgpKTtcbiAgfVxuXG4gIHdyaXRlVmFsdWUob2JqOiBzdHJpbmcgfCBvYmplY3QpOiB2b2lkIHtcbiAgICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRWYWx1ZSA9IG9iajtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lZGl0b3IpIHtcbiAgICAgIHRoaXMuZWRpdG9yLnNldFZhbHVlKHRoaXMuX2N1cnJlbnRWYWx1ZSk7XG4gICAgfVxuICB9XG5cbiAgcmVnaXN0ZXJPbkNoYW5nZShmbjogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQpOiB2b2lkIHtcbiAgICB0aGlzLl9vbkNoYW5nZXMgPSBmbjtcbiAgICB0aGlzLnJlZ2lzdGVyKCk7XG4gIH1cblxuICByZWdpc3Rlck9uVG91Y2hlZChmbjogKCkgPT4gdm9pZCk6IHZvaWQge1xuICAgIHRoaXMuX29uVG91Y2hlZCA9IGZuO1xuICAgIHRoaXMucmVnaXN0ZXIoKTtcbiAgfVxuXG4gIHNldERpc2FibGVkU3RhdGUoaXNEaXNhYmxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIHRoaXMuX3JlYWRPbmx5ID0gaXNEaXNhYmxlZDtcbiAgfVxuXG4gIGFzeW5jIG5nQWZ0ZXJWaWV3SW5pdCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLm1vbmFjbyA9IGF3YWl0IGxvYWRNb25hY29FZGl0b3IoKTtcbiAgICB0aGlzLmVkaXRvciA9IHRoaXMubW9uYWNvLmVkaXRvci5jcmVhdGUoXG4gICAgICB0aGlzLl9lZGl0b3JDb250YWluZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogdGhpcy5fY3VycmVudFZhbHVlIHx8ICcnLFxuICAgICAgICAgIGxhbmd1YWdlOiAnanNvbicsXG4gICAgICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLFxuICAgICAgICAgIHJlYWRPbmx5OiB0aGlzLl9yZWFkT25seVxuICAgICAgICB9LFxuICAgICAgICB0aGlzLmVkaXRvck9wdGlvbnNcbiAgICAgIClcbiAgICApO1xuICAgICg8YW55PndpbmRvdykubW9uYWNvRWRpdG9yID0gdGhpcy5lZGl0b3I7XG4gICAgdGhpcy5lZGl0b3JJbml0LmVtaXQodGhpcy5lZGl0b3IpO1xuICAgIHRoaXMucmVnaXN0ZXIoKTtcbiAgICB0aGlzLnRoZW1lQ2hhbmdlcyQuc3Vic2NyaWJlKHRoZW1lID0+IHtcbiAgICAgIGNvbnN0IHRoZW1lVG9TZXQgPSB0aGVtZSA9PT0gJ2RhcmsnID8gYHZzLWRhcmtgIDogJ3ZzJztcbiAgICAgIHRoaXMubW9uYWNvLmVkaXRvci5zZXRUaGVtZSh0aGVtZVRvU2V0KTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlZ2lzdGVyKCkge1xuICAgIGlmICghdGhpcy5lZGl0b3IpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuX29uQ2hhbmdlcykge1xuICAgICAgY29uc3Qgb25DaGFuZ2VzID0gdGhpcy5fb25DaGFuZ2VzO1xuICAgICAgdGhpcy5lZGl0b3Iub25EaWRDaGFuZ2VNb2RlbENvbnRlbnQoKCkgPT4ge1xuICAgICAgICB0aGlzLnpvbmUucnVuKCgpID0+IHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZWRpdG9yLmdldFZhbHVlKCk7XG4gICAgICAgICAgdGhpcy5fY3VycmVudFZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgb25DaGFuZ2VzKHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX29uQ2hhbmdlcyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fb25Ub3VjaGVkKSB7XG4gICAgICBjb25zdCBvblRvdWNoZWQgPSB0aGlzLl9vblRvdWNoZWQ7XG4gICAgICB0aGlzLmVkaXRvci5vbkRpZENoYW5nZU1vZGVsQ29udGVudCgoKSA9PiB7XG4gICAgICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgICAgIG9uVG91Y2hlZCgpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy5fb25Ub3VjaGVkID0gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuZWRpdG9yLmdldE1vZGVsKCkuZGlzcG9zZSgpO1xuICAgIHRoaXMuZWRpdG9yLmRpc3Bvc2UoKTtcbiAgfVxufVxuIiwiPGM4eS1sb2FkaW5nICpuZ0lmPVwiIW1vbmFjb1wiPjwvYzh5LWxvYWRpbmc+XG48ZGl2IGNsYXNzPVwiZWRpdG9yLWNvbnRhaW5lclwiIHN0eWxlPVwiaGVpZ2h0OiAxMDAlXCIgI2VkaXRvckNvbnRhaW5lcj48L2Rpdj5cbiJdfQ==