UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

74 lines (73 loc) 2.32 kB
/** * DevExtreme (esm/__internal/core/m_inferno_renderer.js) * Version: 24.2.6 * Build date: Mon Mar 17 2025 * * Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import { hydrate, InfernoEffectHost } from "@devextreme/runtime/inferno"; import domAdapter from "../../core/dom_adapter"; import { cleanDataRecursive } from "../../core/element_data"; import injector from "../../core/utils/dependency_injector"; import { render } from "inferno"; import { createElement } from "inferno-create-element"; const remove = element => { const { parentNode: parentNode } = element; if (parentNode) { const { nextSibling: nextSibling } = element; cleanDataRecursive(element); parentNode.$V = element.$V; render(null, parentNode); parentNode.insertBefore(element, nextSibling); element.innerHTML = ""; delete parentNode.$V } delete element.$V }; const infernoRenderer = injector({ createElement: (component, props) => createElement(component, props), remove: remove, onAfterRender: () => { InfernoEffectHost.callEffects() }, onPreRender: () => { InfernoEffectHost.lock() }, render: (component, props, container, replace) => { if (!replace) { const { parentNode: parentNode } = container; const nextNode = null === container || void 0 === container ? void 0 : container.nextSibling; const rootNode = domAdapter.createElement("div"); rootNode.appendChild(container); const mountNode = domAdapter.createDocumentFragment().appendChild(rootNode); const vNodeAlreadyExists = !!container.$V; vNodeAlreadyExists && remove(container); hydrate(createElement(component, props), mountNode); container.$V = mountNode.$V; if (parentNode) { parentNode.insertBefore(container, nextNode) } } else { render(createElement(component, props), container) } } }); export { infernoRenderer };