UNPKG

devextreme-vue

Version:

DevExtreme UI and Visualization Components for Vue

96 lines (94 loc) 3.88 kB
/*! * devextreme-vue * Version: 25.2.7 * Build date: Tue May 05 2026 * * Copyright (c) 2012 - 2026 Developer Express Inc. ALL RIGHTS RESERVED * * This software may be modified and distributed under the terms * of the MIT license. See the LICENSE file in the root of the project for details. * * https://github.com/DevExpress/DevExtreme */ "use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.TemplatesManager = void 0; const dom_adapter_1 = __importDefault(require("devextreme/core/dom_adapter")); const events_1 = require("devextreme/events"); const templates_discovering_1 = require("./templates-discovering"); const constants_1 = require("./constants"); const helpers_1 = require("./helpers"); class TemplatesManager { constructor(component) { this._slots = {}; this._templates = {}; this._isDirty = false; this._component = component; this.discover(); } discover() { this._slots = { ...(0, templates_discovering_1.discover)(this._component), }; if (!(0, helpers_1.allKeysAreEqual)(this._templates, this._slots)) { this._prepareTemplates(); } } get templates() { return this._templates; } get isDirty() { return this._isDirty; } resetDirtyFlag() { this._isDirty = false; } _prepareTemplates() { this._templates = {}; for (const name of Object.keys(this._slots)) { this._templates[name] = this.createDxTemplate(name); } this._isDirty = true; } createDxTemplate(name) { return { render: (data) => { const rendered = ((onRendered, counter = 0) => () => { if (counter === 1 && onRendered) { onRendered(); } counter++; })(data.onRendered); const scopeData = { data: data.model, index: data.index, onRendered: rendered }; const placeholder = document.createElement('div'); const container = data.container.get ? data.container.get(0) : data.container; container.appendChild(placeholder); const mountedTemplate = (0, templates_discovering_1.mountTemplate)(() => this._slots[name], this._component, scopeData, name, placeholder); const element = mountedTemplate.$el; container.removeChild(placeholder); while (placeholder.firstChild) { container.appendChild(placeholder.firstChild); } dom_adapter_1.default.setClass(element, constants_1.DX_TEMPLATE_WRAPPER_CLASS, true); if (element.nodeType === Node.TEXT_NODE) { const removalListener = document.createElement(container.nodeName === 'TABLE' ? 'tbody' : 'span'); removalListener.style.display = 'none'; container.insertBefore(removalListener, container.firstChild); (0, events_1.one)(removalListener, constants_1.DX_REMOVE_EVENT, () => { mountedTemplate.$.appContext.app.unmount.bind(mountedTemplate)(); removalListener.remove(); }); } else { (0, events_1.one)(element, constants_1.DX_REMOVE_EVENT, mountedTemplate.$.appContext.app.unmount.bind(mountedTemplate)); } rendered(); return element; }, }; } } exports.TemplatesManager = TemplatesManager;