25
},
26
};
27
28
-var needsRestoreState = false;
28
+var restoreTarget = null;
29
+var restoreQueue = null;
30
+
31
+function restoreStateOfTarget(internalInstance) {
32
+ if (typeof internalInstance.tag === 'number') {
33
+ invariant(
34
+ fiberHostComponent &&
35
+ typeof fiberHostComponent.restoreControlledState === 'function',
36
+ 'Fiber needs to be injected to handle a fiber target for controlled ' +
37
+ 'events.'
38
+ );
39
+ fiberHostComponent.restoreControlledState(internalInstance);
40
+ }
41
+ invariant(
42
+ typeof internalInstance.restoreControlledState === 'function',
43
+ 'The internal instance must be a React host component.'
44
+ );
45
+ // If it is not a Fiber, we can just use dynamic dispatch.
46
+ internalInstance.restoreControlledState();
47
+}
48
49
var ReactControlledComponent = {
50
injection: ReactControlledComponentInjection,
51
33
- enqueueStateRestore() {
34
- needsRestoreState = true;
52
+ enqueueStateRestore(target) {
53
+ if (restoreTarget) {
54
+ if (restoreQueue) {
55
+ restoreQueue.push(target);
56
+ } else {
57
+ restoreQueue = [target];
58
+ }
59
+ } else {
60
+ restoreTarget = target;
61
+ }
62
},
63
37
- restoreStateIfNeeded(internalInstance) {
38
- if (!needsRestoreState) {
64
+ restoreStateIfNeeded() {
65
+ if (!restoreTarget) {
66
return;
67
}
41
- needsRestoreState = false;
42
- if (typeof internalInstance.tag === 'number') {
43
- invariant(
44
- fiberHostComponent &&
45
- typeof fiberHostComponent.restoreControlledState === 'function',
46
- 'Fiber needs to be injected to handle a fiber target for controlled ' +
47
- 'events.'
48
- );
49
- fiberHostComponent.restoreControlledState(internalInstance);
68
+ var target = restoreTarget;
69
+ var queuedTargets = restoreQueue;
70
+ restoreTarget = null;
71
+ restoreQueue = null;
72
+
73
+ restoreStateOfTarget(target);
74
+ if (queuedTargets) {
75
+ for (var i = 0; i < queuedTargets.length; i++) {
76
+ restoreStateOfTarget(queuedTargets[i]);
77
+ }
78
}
51
- invariant(
52
- typeof internalInstance.restoreControlledState === 'function',
53
- 'The internal instance must be a React host component.'
54
- );
55
- // If it is not a Fiber, we can just use dynamic dispatch.
56
- internalInstance.restoreControlledState();
79
},
80
};
81