Skip to content

Commit 971ec65

Browse files
committed
[Fiber] Trigger default indicator for isomorphic async actions with no root associated (facebook#33190)
Stacked on facebook#33160, facebook#33162, facebook#33186 and facebook#33188. We have a special case that's awkward for default indicators. When you start a new async Transition from `React.startTransition` then there's not yet any associated root with the Transition because you haven't necessarily `setState` on anything yet until the promise resolves. That's what `entangleAsyncAction` handles by creating a lane that everything entangles with until all async actions are done. If there are no sync updates before the end of the event, we should trigger a default indicator until either the async action completes without update or if it gets entangled with some roots we should keep it going until those roots are done. DiffTrain build for [3a5b326](facebook@3a5b326)
1 parent 24a28d2 commit 971ec65

24 files changed

+1316
-1027
lines changed

compiled-rn/VERSION_NATIVE_FB

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
19.2.0-native-fb-997c7bc9-20250513
1+
19.2.0-native-fb-3a5b326d-20250513

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-dev.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<0eb1c939f2a48a302b150ffd5ba2a699>>
10+
* @generated SignedSource<<0a7b41fab34de0b1e461be707a0c0381>>
1111
*/
1212

1313
"use strict";
@@ -404,5 +404,5 @@ __DEV__ &&
404404
exports.useFormStatus = function () {
405405
return resolveDispatcher().useHostTransitionStatus();
406406
};
407-
exports.version = "19.2.0-native-fb-997c7bc9-20250513";
407+
exports.version = "19.2.0-native-fb-3a5b326d-20250513";
408408
})();

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-prod.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<70fc5e6f78933604f9d0f366a0529fac>>
10+
* @generated SignedSource<<234e30397ebef552695a599d72f3453c>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.2.0-native-fb-997c7bc9-20250513";
206+
exports.version = "19.2.0-native-fb-3a5b326d-20250513";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOM-profiling.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<70fc5e6f78933604f9d0f366a0529fac>>
10+
* @generated SignedSource<<234e30397ebef552695a599d72f3453c>>
1111
*/
1212

1313
"use strict";
@@ -203,4 +203,4 @@ exports.useFormState = function (action, initialState, permalink) {
203203
exports.useFormStatus = function () {
204204
return ReactSharedInternals.H.useHostTransitionStatus();
205205
};
206-
exports.version = "19.2.0-native-fb-997c7bc9-20250513";
206+
exports.version = "19.2.0-native-fb-3a5b326d-20250513";

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMClient-dev.js

Lines changed: 213 additions & 161 deletions
Large diffs are not rendered by default.

compiled-rn/facebook-fbsource/xplat/js/RKJSModules/vendor/react/react-dom/cjs/ReactDOMClient-prod.js

Lines changed: 111 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
* @noflow
88
* @nolint
99
* @preventMunge
10-
* @generated SignedSource<<d2ac2c6fc1d7b173066eae37c84b37cb>>
10+
* @generated SignedSource<<0bd1930d33a754a98f8f9076a5d36193>>
1111
*/
1212

1313
/*
@@ -2428,7 +2428,36 @@ function registerSimpleEvent(domEventName, reactName) {
24282428
topLevelEventsToReactNames.set(domEventName, reactName);
24292429
registerTwoPhaseEvent(reactName, [domEventName]);
24302430
}
2431-
var concurrentQueues = [],
2431+
var reportGlobalError =
2432+
"function" === typeof reportError
2433+
? reportError
2434+
: function (error) {
2435+
if (
2436+
"object" === typeof window &&
2437+
"function" === typeof window.ErrorEvent
2438+
) {
2439+
var event = new window.ErrorEvent("error", {
2440+
bubbles: !0,
2441+
cancelable: !0,
2442+
message:
2443+
"object" === typeof error &&
2444+
null !== error &&
2445+
"string" === typeof error.message
2446+
? String(error.message)
2447+
: String(error),
2448+
error: error
2449+
});
2450+
if (!window.dispatchEvent(event)) return;
2451+
} else if (
2452+
"object" === typeof process &&
2453+
"function" === typeof process.emit
2454+
) {
2455+
process.emit("uncaughtException", error);
2456+
return;
2457+
}
2458+
console.error(error);
2459+
},
2460+
concurrentQueues = [],
24322461
concurrentQueuesIndex = 0,
24332462
concurrentlyUpdatedLanes = 0;
24342463
function finishQueueingConcurrentUpdates() {
@@ -6101,35 +6130,6 @@ function resolveClassComponentProps(Component, baseProps) {
61016130
}
61026131
return newProps;
61036132
}
6104-
var reportGlobalError =
6105-
"function" === typeof reportError
6106-
? reportError
6107-
: function (error) {
6108-
if (
6109-
"object" === typeof window &&
6110-
"function" === typeof window.ErrorEvent
6111-
) {
6112-
var event = new window.ErrorEvent("error", {
6113-
bubbles: !0,
6114-
cancelable: !0,
6115-
message:
6116-
"object" === typeof error &&
6117-
null !== error &&
6118-
"string" === typeof error.message
6119-
? String(error.message)
6120-
: String(error),
6121-
error: error
6122-
});
6123-
if (!window.dispatchEvent(event)) return;
6124-
} else if (
6125-
"object" === typeof process &&
6126-
"function" === typeof process.emit
6127-
) {
6128-
process.emit("uncaughtException", error);
6129-
return;
6130-
}
6131-
console.error(error);
6132-
};
61336133
function defaultOnUncaughtError(error) {
61346134
reportGlobalError(error);
61356135
}
@@ -11350,8 +11350,7 @@ function requestUpdateLane(fiber) {
1135011350
: 0 !== (executionContext & 2) && 0 !== workInProgressRootRenderLanes
1135111351
? workInProgressRootRenderLanes & -workInProgressRootRenderLanes
1135211352
: null !== ReactSharedInternals.T
11353-
? ((fiber = currentEntangledLane),
11354-
0 !== fiber ? fiber : requestTransitionLane())
11353+
? requestTransitionLane()
1135511354
: resolveUpdatePriority();
1135611355
}
1135711356
function requestDeferredLane() {
@@ -12700,9 +12699,8 @@ function processRootScheduleInMicrotask() {
1270012699
mightHavePendingSyncWork = didScheduleMicrotask = !1;
1270112700
var syncTransitionLanes = 0;
1270212701
0 !== currentEventTransitionLane &&
12703-
(shouldAttemptEagerTransition() &&
12704-
(syncTransitionLanes = currentEventTransitionLane),
12705-
(currentEventTransitionLane = 0));
12702+
shouldAttemptEagerTransition() &&
12703+
(syncTransitionLanes = currentEventTransitionLane);
1270612704
for (
1270712705
var currentTime = now(), prev = null, root = firstScheduledRoot;
1270812706
null !== root;
@@ -12722,6 +12720,7 @@ function processRootScheduleInMicrotask() {
1272212720
}
1272312721
(0 !== pendingEffectsStatus && 5 !== pendingEffectsStatus) ||
1272412722
flushSyncWorkAcrossRoots_impl(syncTransitionLanes, !1);
12723+
0 !== currentEventTransitionLane && (currentEventTransitionLane = 0);
1272512724
}
1272612725
function scheduleTaskForRootDuringMicrotask(root, currentTime) {
1272712726
for (
@@ -12829,8 +12828,11 @@ function scheduleImmediateRootScheduleTask() {
1282912828
});
1283012829
}
1283112830
function requestTransitionLane() {
12832-
0 === currentEventTransitionLane &&
12833-
(currentEventTransitionLane = claimNextTransitionLane());
12831+
if (0 === currentEventTransitionLane) {
12832+
var actionScopeLane = currentEntangledLane;
12833+
currentEventTransitionLane =
12834+
0 !== actionScopeLane ? actionScopeLane : claimNextTransitionLane();
12835+
}
1283412836
return currentEventTransitionLane;
1283512837
}
1283612838
function coerceFormActionProp(actionProp) {
@@ -12963,20 +12965,20 @@ function debounceScrollEnd(targetInst, nativeEvent, nativeEventTarget) {
1296312965
(nativeEventTarget[internalScrollTimer] = targetInst));
1296412966
}
1296512967
for (
12966-
var i$jscomp$inline_1640 = 0;
12967-
i$jscomp$inline_1640 < simpleEventPluginEvents.length;
12968-
i$jscomp$inline_1640++
12968+
var i$jscomp$inline_1641 = 0;
12969+
i$jscomp$inline_1641 < simpleEventPluginEvents.length;
12970+
i$jscomp$inline_1641++
1296912971
) {
12970-
var eventName$jscomp$inline_1641 =
12971-
simpleEventPluginEvents[i$jscomp$inline_1640],
12972-
domEventName$jscomp$inline_1642 =
12973-
eventName$jscomp$inline_1641.toLowerCase(),
12974-
capitalizedEvent$jscomp$inline_1643 =
12975-
eventName$jscomp$inline_1641[0].toUpperCase() +
12976-
eventName$jscomp$inline_1641.slice(1);
12972+
var eventName$jscomp$inline_1642 =
12973+
simpleEventPluginEvents[i$jscomp$inline_1641],
12974+
domEventName$jscomp$inline_1643 =
12975+
eventName$jscomp$inline_1642.toLowerCase(),
12976+
capitalizedEvent$jscomp$inline_1644 =
12977+
eventName$jscomp$inline_1642[0].toUpperCase() +
12978+
eventName$jscomp$inline_1642.slice(1);
1297712979
registerSimpleEvent(
12978-
domEventName$jscomp$inline_1642,
12979-
"on" + capitalizedEvent$jscomp$inline_1643
12980+
domEventName$jscomp$inline_1643,
12981+
"on" + capitalizedEvent$jscomp$inline_1644
1298012982
);
1298112983
}
1298212984
registerSimpleEvent(ANIMATION_END, "onAnimationEnd");
@@ -17004,7 +17006,50 @@ function retryIfBlockedOn(unblocked) {
1700417006
}
1700517007
}
1700617008
function defaultOnDefaultTransitionIndicator() {
17007-
return function () {};
17009+
function handleNavigate(event) {
17010+
event.canIntercept &&
17011+
"react-transition" === event.info &&
17012+
event.intercept({
17013+
handler: function () {
17014+
return new Promise(function (resolve) {
17015+
return (pendingResolve = resolve);
17016+
});
17017+
},
17018+
focusReset: "manual",
17019+
scroll: "manual"
17020+
});
17021+
}
17022+
function handleNavigateComplete() {
17023+
null !== pendingResolve && (pendingResolve(), (pendingResolve = null));
17024+
isCancelled || startFakeNavigation();
17025+
}
17026+
function startFakeNavigation() {
17027+
if (!isCancelled && !navigation.transition) {
17028+
var currentEntry = navigation.currentEntry;
17029+
currentEntry &&
17030+
null != currentEntry.url &&
17031+
navigation.navigate(currentEntry.url, {
17032+
state: currentEntry.getState(),
17033+
info: "react-transition",
17034+
history: "replace"
17035+
});
17036+
}
17037+
}
17038+
if ("object" === typeof navigation) {
17039+
var isCancelled = !1,
17040+
pendingResolve = null;
17041+
navigation.addEventListener("navigate", handleNavigate);
17042+
navigation.addEventListener("navigatesuccess", handleNavigateComplete);
17043+
navigation.addEventListener("navigateerror", handleNavigateComplete);
17044+
setTimeout(startFakeNavigation, 100);
17045+
return function () {
17046+
isCancelled = !0;
17047+
navigation.removeEventListener("navigate", handleNavigate);
17048+
navigation.removeEventListener("navigatesuccess", handleNavigateComplete);
17049+
navigation.removeEventListener("navigateerror", handleNavigateComplete);
17050+
null !== pendingResolve && (pendingResolve(), (pendingResolve = null));
17051+
};
17052+
}
1700817053
}
1700917054
function ReactDOMRoot(internalRoot) {
1701017055
this._internalRoot = internalRoot;
@@ -17047,16 +17092,16 @@ ReactDOMHydrationRoot.prototype.unstable_scheduleHydration = function (target) {
1704717092
0 === i && attemptExplicitHydrationTarget(target);
1704817093
}
1704917094
};
17050-
var isomorphicReactPackageVersion$jscomp$inline_2015 = React.version;
17095+
var isomorphicReactPackageVersion$jscomp$inline_2017 = React.version;
1705117096
if (
17052-
"19.2.0-native-fb-997c7bc9-20250513" !==
17053-
isomorphicReactPackageVersion$jscomp$inline_2015
17097+
"19.2.0-native-fb-3a5b326d-20250513" !==
17098+
isomorphicReactPackageVersion$jscomp$inline_2017
1705417099
)
1705517100
throw Error(
1705617101
formatProdErrorMessage(
1705717102
527,
17058-
isomorphicReactPackageVersion$jscomp$inline_2015,
17059-
"19.2.0-native-fb-997c7bc9-20250513"
17103+
isomorphicReactPackageVersion$jscomp$inline_2017,
17104+
"19.2.0-native-fb-3a5b326d-20250513"
1706017105
)
1706117106
);
1706217107
ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
@@ -17076,24 +17121,24 @@ ReactDOMSharedInternals.findDOMNode = function (componentOrElement) {
1707617121
null === componentOrElement ? null : componentOrElement.stateNode;
1707717122
return componentOrElement;
1707817123
};
17079-
var internals$jscomp$inline_2534 = {
17124+
var internals$jscomp$inline_2536 = {
1708017125
bundleType: 0,
17081-
version: "19.2.0-native-fb-997c7bc9-20250513",
17126+
version: "19.2.0-native-fb-3a5b326d-20250513",
1708217127
rendererPackageName: "react-dom",
1708317128
currentDispatcherRef: ReactSharedInternals,
17084-
reconcilerVersion: "19.2.0-native-fb-997c7bc9-20250513"
17129+
reconcilerVersion: "19.2.0-native-fb-3a5b326d-20250513"
1708517130
};
1708617131
if ("undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__) {
17087-
var hook$jscomp$inline_2535 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
17132+
var hook$jscomp$inline_2537 = __REACT_DEVTOOLS_GLOBAL_HOOK__;
1708817133
if (
17089-
!hook$jscomp$inline_2535.isDisabled &&
17090-
hook$jscomp$inline_2535.supportsFiber
17134+
!hook$jscomp$inline_2537.isDisabled &&
17135+
hook$jscomp$inline_2537.supportsFiber
1709117136
)
1709217137
try {
17093-
(rendererID = hook$jscomp$inline_2535.inject(
17094-
internals$jscomp$inline_2534
17138+
(rendererID = hook$jscomp$inline_2537.inject(
17139+
internals$jscomp$inline_2536
1709517140
)),
17096-
(injectedHook = hook$jscomp$inline_2535);
17141+
(injectedHook = hook$jscomp$inline_2537);
1709717142
} catch (err) {}
1709817143
}
1709917144
exports.createRoot = function (container, options) {
@@ -17179,4 +17224,4 @@ exports.hydrateRoot = function (container, initialChildren, options) {
1717917224
listenToAllSupportedEvents(container);
1718017225
return new ReactDOMHydrationRoot(initialChildren);
1718117226
};
17182-
exports.version = "19.2.0-native-fb-997c7bc9-20250513";
17227+
exports.version = "19.2.0-native-fb-3a5b326d-20250513";

0 commit comments

Comments
 (0)