UNPKG

1.74 kBJavaScriptView Raw
1/**
2 * Copyright (c) 2013-present, Facebook, Inc.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 *
7 *
8 */
9
10'use strict';
11
12var _assign = require('object-assign');
13
14exports.createUpdateQueue = function (partialState) {
15 var queue = {
16 partialState: partialState,
17 callback: null,
18 callbackWasCalled: false,
19 next: null,
20 isReplace: false,
21 isForced: false,
22 tail: null
23 };
24 queue.tail = queue;
25 return queue;
26};
27
28exports.addToQueue = function (queue, partialState) {
29 var node = {
30 partialState: partialState,
31 callback: null,
32 callbackWasCalled: false,
33 next: null
34 };
35 queue.tail.next = node;
36 queue.tail = node;
37 return queue;
38};
39
40exports.addCallbackToQueue = function (queue, callback) {
41 if (queue.tail.callback) {
42 // If the tail already as a callback, add an empty node to queue
43 exports.addToQueue(queue, null);
44 }
45 queue.tail.callback = callback;
46 return queue;
47};
48
49exports.callCallbacks = function (queue, context) {
50 var node = queue;
51 while (node) {
52 if (node.callback && !node.callbackWasCalled) {
53 node.callbackWasCalled = true;
54 node.callback.call(context);
55 }
56 node = node.next;
57 }
58};
59
60exports.mergeUpdateQueue = function (queue, prevState, props) {
61 var node = queue;
62 var state = queue.isReplace ? null : _assign({}, prevState);
63 while (node) {
64 var _partialState = void 0;
65 if (typeof node.partialState === 'function') {
66 var updateFn = node.partialState;
67 _partialState = updateFn(state, props);
68 } else {
69 _partialState = node.partialState;
70 }
71 state = _assign(state || {}, _partialState);
72 node = node.next;
73 }
74 return state;
75};
\No newline at end of file