diff options
Diffstat (limited to 'node_modules/react-dom/lib/ReactFiberUpdateQueue.js')
-rw-r--r-- | node_modules/react-dom/lib/ReactFiberUpdateQueue.js | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/node_modules/react-dom/lib/ReactFiberUpdateQueue.js b/node_modules/react-dom/lib/ReactFiberUpdateQueue.js new file mode 100644 index 000000000..f104a5a36 --- /dev/null +++ b/node_modules/react-dom/lib/ReactFiberUpdateQueue.js @@ -0,0 +1,77 @@ +/** + * 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 _assign = require('object-assign'); + +exports.createUpdateQueue = function (partialState) { + var queue = { + partialState: partialState, + callback: null, + callbackWasCalled: false, + next: null, + isReplace: false, + isForced: false, + tail: null + }; + queue.tail = queue; + return queue; +}; + +exports.addToQueue = function (queue, partialState) { + var node = { + partialState: partialState, + callback: null, + callbackWasCalled: false, + next: null + }; + queue.tail.next = node; + queue.tail = node; + return queue; +}; + +exports.addCallbackToQueue = function (queue, callback) { + if (queue.tail.callback) { + // If the tail already as a callback, add an empty node to queue + exports.addToQueue(queue, null); + } + queue.tail.callback = callback; + return queue; +}; + +exports.callCallbacks = function (queue, context) { + var node = queue; + while (node) { + if (node.callback && !node.callbackWasCalled) { + node.callbackWasCalled = true; + node.callback.call(context); + } + node = node.next; + } +}; + +exports.mergeUpdateQueue = function (queue, prevState, props) { + var node = queue; + var state = queue.isReplace ? null : _assign({}, prevState); + while (node) { + var _partialState = void 0; + if (typeof node.partialState === 'function') { + var updateFn = node.partialState; + _partialState = updateFn(state, props); + } else { + _partialState = node.partialState; + } + state = _assign(state || {}, _partialState); + node = node.next; + } + return state; +};
\ No newline at end of file |