UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

80 lines (79 loc) 2.74 kB
/** * DevExtreme (esm/renovation/component_wrapper/template_wrapper.js) * Version: 21.1.4 * Build date: Mon Jun 21 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import _extends from "@babel/runtime/helpers/esm/extends"; import { InfernoComponent, InfernoEffect } from "@devextreme/vdom"; import { findDOMfromVNode } from "inferno"; import $ from "../../core/renderer"; import domAdapter from "../../core/dom_adapter"; import { getPublicElement } from "../../core/element"; import { removeDifferentElements } from "./utils"; import Number from "../../core/polyfills/number"; export class TemplateWrapper extends InfernoComponent { constructor(props) { super(props); this.renderTemplate = this.renderTemplate.bind(this) } renderTemplate() { var node = findDOMfromVNode(this.$LI, true); if (node) { var { parentNode: parentNode } = node; if (parentNode) { var _this$props$model; parentNode.removeChild(node); var $parent = $(parentNode); var $children = $parent.contents(); var { data: data, index: index } = null !== (_this$props$model = this.props.model) && void 0 !== _this$props$model ? _this$props$model : { data: {} }; Object.keys(data).forEach(name => { if (data[name] && domAdapter.isNode(data[name])) { data[name] = getPublicElement($(data[name])) } }); this.props.template.render(_extends({ container: getPublicElement($parent), transclude: this.props.transclude }, !this.props.transclude ? { model: data } : {}, !this.props.transclude && Number.isFinite(index) ? { index: index } : {})); return () => { removeDifferentElements($children, $parent.contents()); parentNode.appendChild(node) } } } return } createEffects() { return [new InfernoEffect(this.renderTemplate, [this.props.template, this.props.model])] } updateEffects() { this._effects[0].update([this.props.template, this.props.model]) } componentWillUnmount() {} render() { return null } }