wallet-core/node_modules/react-dom/lib/ReactDOMFiber.js
2017-08-14 05:02:09 +02:00

96 lines
2.8 KiB
JavaScript

/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*
*/
'use strict';
var ReactFiberReconciler = require('./ReactFiberReconciler');
var warning = require('fbjs/lib/warning');
function recursivelyAppendChildren(parent, child) {
if (!child) {
return;
}
/* $FlowFixMe: Element should have this property. */
if (child.nodeType === 1) {
/* $FlowFixMe: Refinement issue. I don't know how to express different. */
parent.appendChild(child);
} else {
/* As a result of the refinement issue this type isn't known. */
var node = child;
do {
recursivelyAppendChildren(parent, node.output);
} while (node = node.sibling);
}
}
var DOMRenderer = ReactFiberReconciler({
updateContainer: function (container, children) {
container.innerHTML = '';
recursivelyAppendChildren(container, children);
},
createInstance: function (type, props, children) {
var domElement = document.createElement(type);
recursivelyAppendChildren(domElement, children);
if (typeof props.children === 'string') {
domElement.textContent = props.children;
}
return domElement;
},
prepareUpdate: function (domElement, oldProps, newProps, children) {
return true;
},
commitUpdate: function (domElement, oldProps, newProps, children) {
domElement.innerHTML = '';
recursivelyAppendChildren(domElement, children);
if (typeof newProps.children === 'string') {
domElement.textContent = newProps.children;
}
},
deleteInstance: function (instance) {
// Noop
},
scheduleAnimationCallback: window.requestAnimationFrame,
scheduleDeferredCallback: window.requestIdleCallback
});
var warned = false;
function warnAboutUnstableUse() {
process.env.NODE_ENV !== 'production' ? warning(warned, 'You are using React DOM Fiber which is an experimental renderer. ' + 'It is likely to have bugs, breaking changes and is unsupported.') : void 0;
warned = true;
}
var ReactDOM = {
render: function (element, container) {
warnAboutUnstableUse();
if (!container._reactRootContainer) {
container._reactRootContainer = DOMRenderer.mountContainer(element, container);
} else {
DOMRenderer.updateContainer(element, container._reactRootContainer);
}
},
unmountComponentAtNode: function (container) {
warnAboutUnstableUse();
var root = container._reactRootContainer;
if (root) {
// TODO: Is it safe to reset this now or should I wait since this
// unmount could be deferred?
container._reactRootContainer = null;
DOMRenderer.unmountContainer(root);
}
}
};
module.exports = ReactDOM;