aboutsummaryrefslogtreecommitdiff
path: root/node_modules/react-dom/lib/ReactFiberUpdateQueue.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/react-dom/lib/ReactFiberUpdateQueue.js')
-rw-r--r--node_modules/react-dom/lib/ReactFiberUpdateQueue.js77
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