UNPKG

@blinkk/selective-edit

Version:
107 lines 3.52 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SelectiveEditor = void 0; const fields_1 = require("./fields"); const lit_html_1 = require("lit-html"); const autoFields_1 = require("./autoFields"); const mixins_1 = require("../mixins"); const classes_1 = require("../utility/classes"); const data_1 = require("../mixins/data"); const events_1 = require("./events"); class SelectiveEditor extends (0, data_1.DataMixin)(mixins_1.Base) { constructor(config, container) { super(); this.container = container; this.config = config; this.types = { fields: new classes_1.ClassManager(), globals: { FieldsCls: fields_1.Fields, AutoFieldsCls: autoFields_1.AutoFields, }, rules: new classes_1.ClassManager(), }; this.isRendering = false; this.isPendingRender = false; if (this.config.fieldTypes) { this.types.fields.registerClasses(this.config.fieldTypes); } if (this.config.ruleTypes) { this.types.rules.registerClasses(this.config.ruleTypes); } this.fields = new fields_1.Fields(this.types, { fields: this.config.fields, parentKey: '', }, this.config.global || {}); } addFieldType(key, FieldCls) { this.types.fields.registerClass(key, FieldCls); this.resetFields(); } addFieldTypes(fieldTypes) { this.types.fields.registerClasses(fieldTypes); this.resetFields(); } addRuleType(key, RuleCls) { this.types.rules.registerClass(key, RuleCls); } addRuleTypes(ruleTypes) { this.types.rules.registerClasses(ruleTypes); } guessFields() { const autoFields = new this.types.globals.AutoFieldsCls({}); if (!this.data) { this.config.fields = []; this.resetFields(); return this.config.fields; } this.config.fields = autoFields.guessFields(this.data?.obj); this.resetFields(); return this.config.fields; } get isClean() { return this.fields.isClean; } get isValid() { return this.fields.isValid; } template(editor, data) { return (0, lit_html_1.html) `<div class="selective"> ${editor.fields.template(editor, data)} </div>`; } render() { // When no container is defined, it is rendered externally. if (!this.container || !this.data) { return; } if (this.isRendering) { this.isPendingRender = true; return; } this.isPendingRender = false; this.isRendering = true; const isClean = this.isClean; const isValid = this.isValid; (0, lit_html_1.render)(this.template(this, this.data), this.container); this.isRendering = false; document.dispatchEvent(new CustomEvent(events_1.EVENT_RENDER_COMPLETE)); if (this.isPendingRender || this.isClean !== isClean || this.isValid !== isValid) { this.render(); } } resetFields() { this.fields = new fields_1.Fields(this.types, { fields: this.config.fields, parentKey: '', }, this.config.global || {}); this.render(); } get value() { return this.fields.value; } } exports.SelectiveEditor = SelectiveEditor; //# sourceMappingURL=editor.js.map