diff --git a/packages/react-art/src/ReactFiberConfigART.js b/packages/react-art/src/ReactFiberConfigART.js index f6e2be7715620..d5134c4f23c8b 100644 --- a/packages/react-art/src/ReactFiberConfigART.js +++ b/packages/react-art/src/ReactFiberConfigART.js @@ -343,16 +343,20 @@ export function shouldSetTextContent(type, props) { let currentUpdatePriority: EventPriority = NoEventPriority; -export function setCurrentUpdatePriority(newPriority: EventPriority) { +export function swapCurrentUpdatePriority( + newPriority: EventPriority, +): EventPriority { + const prevPriority = currentUpdatePriority; currentUpdatePriority = newPriority; + return prevPriority; } -export function getCurrentUpdatePriority() { +export function peekCurrentUpdatePriority(): EventPriority { return currentUpdatePriority; } -export function getCurrentEventPriority() { - return DefaultEventPriority; +export function resolveUpdatePriority(): EventPriority { + return currentUpdatePriority || DefaultEventPriority; } export function shouldAttemptEagerTransition() { diff --git a/packages/react-dom-bindings/src/client/ReactDOMUpdatePriority.js b/packages/react-dom-bindings/src/client/ReactDOMUpdatePriority.js index daf03cf941b8d..1259a8efef538 100644 --- a/packages/react-dom-bindings/src/client/ReactDOMUpdatePriority.js +++ b/packages/react-dom-bindings/src/client/ReactDOMUpdatePriority.js @@ -9,24 +9,45 @@ import type {EventPriority} from 'react-reconciler/src/ReactEventPriorities'; +import {getEventPriority} from '../events/ReactDOMEventListener'; +import { + NoEventPriority, + DefaultEventPriority, +} from 'react-reconciler/src/ReactEventPriorities'; + import ReactDOMSharedInternals from 'shared/ReactDOMSharedInternals'; const ReactDOMCurrentUpdatePriority = ReactDOMSharedInternals.ReactDOMCurrentUpdatePriority; -export function setCurrentUpdatePriority(newPriority: EventPriority): void { +export function swapCurrentUpdatePriority( + newPriority: EventPriority, +): EventPriority { + const current = ReactDOMCurrentUpdatePriority.current; ReactDOMCurrentUpdatePriority.current = newPriority; + return current; } -export function getCurrentUpdatePriority(): EventPriority { +export function peekCurrentUpdatePriority(): EventPriority { return ReactDOMCurrentUpdatePriority.current; } +export function resolveUpdatePriority(): EventPriority { + const updatePriority = ReactDOMCurrentUpdatePriority.current; + if (updatePriority !== NoEventPriority) { + return updatePriority; + } + const currentEvent = window.event; + if (currentEvent === undefined) { + return DefaultEventPriority; + } + return getEventPriority(currentEvent.type); +} + export function runWithPriority(priority: EventPriority, fn: () => T): T { - const previousPriority = getCurrentUpdatePriority(); + const previousPriority = swapCurrentUpdatePriority(priority); try { - setCurrentUpdatePriority(priority); return fn(); } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); } } diff --git a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js index 15118466f8fe0..90501346f8f77 100644 --- a/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js +++ b/packages/react-dom-bindings/src/client/ReactFiberConfigDOM.js @@ -7,7 +7,6 @@ * @flow */ -import type {EventPriority} from 'react-reconciler/src/ReactEventPriorities'; import type {DOMEventName} from '../events/DOMEventNames'; import type {Fiber, FiberRoot} from 'react-reconciler/src/ReactInternalTypes'; import type { @@ -29,14 +28,14 @@ import type { import {NotPending} from 'react-dom-bindings/src/shared/ReactDOMFormActions'; import {getCurrentRootHostContainer} from 'react-reconciler/src/ReactFiberHostContext'; -import {DefaultEventPriority} from 'react-reconciler/src/ReactEventPriorities'; import hasOwnProperty from 'shared/hasOwnProperty'; import {checkAttributeStringCoercion} from 'shared/CheckStringCoercion'; export { - setCurrentUpdatePriority, - getCurrentUpdatePriority, + peekCurrentUpdatePriority, + swapCurrentUpdatePriority, + resolveUpdatePriority, } from './ReactDOMUpdatePriority'; import { precacheFiberNode, @@ -73,7 +72,6 @@ import { import { isEnabled as ReactBrowserEventEmitterIsEnabled, setEnabled as ReactBrowserEventEmitterSetEnabled, - getEventPriority, } from '../events/ReactDOMEventListener'; import {SVG_NAMESPACE, MATH_NAMESPACE} from './DOMNamespaces'; import { @@ -576,14 +574,6 @@ export function createTextInstance( return textNode; } -export function getCurrentEventPriority(): EventPriority { - const currentEvent = window.event; - if (currentEvent === undefined) { - return DefaultEventPriority; - } - return getEventPriority(currentEvent.type); -} - let currentPopstateTransitionEvent: Event | null = null; export function shouldAttemptEagerTransition(): boolean { const event = window.event; diff --git a/packages/react-dom-bindings/src/events/ReactDOMEventListener.js b/packages/react-dom-bindings/src/events/ReactDOMEventListener.js index 073a0454d2e95..169d49469dbea 100644 --- a/packages/react-dom-bindings/src/events/ReactDOMEventListener.js +++ b/packages/react-dom-bindings/src/events/ReactDOMEventListener.js @@ -34,10 +34,7 @@ import { } from '../client/ReactDOMComponentTree'; import {dispatchEventForPluginEventSystem} from './DOMPluginEventSystem'; -import { - getCurrentUpdatePriority, - setCurrentUpdatePriority, -} from '../client/ReactDOMUpdatePriority'; +import {swapCurrentUpdatePriority} from '../client/ReactDOMUpdatePriority'; import { getCurrentPriorityLevel as getCurrentSchedulerPriorityLevel, @@ -117,14 +114,13 @@ function dispatchDiscreteEvent( container: EventTarget, nativeEvent: AnyNativeEvent, ) { - const previousPriority = getCurrentUpdatePriority(); const prevTransition = ReactCurrentBatchConfig.transition; ReactCurrentBatchConfig.transition = null; + const previousPriority = swapCurrentUpdatePriority(DiscreteEventPriority); try { - setCurrentUpdatePriority(DiscreteEventPriority); dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent); } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; } } @@ -135,14 +131,13 @@ function dispatchContinuousEvent( container: EventTarget, nativeEvent: AnyNativeEvent, ) { - const previousPriority = getCurrentUpdatePriority(); const prevTransition = ReactCurrentBatchConfig.transition; ReactCurrentBatchConfig.transition = null; + const previousPriority = swapCurrentUpdatePriority(ContinuousEventPriority); try { - setCurrentUpdatePriority(ContinuousEventPriority); dispatchEvent(domEventName, eventSystemFlags, container, nativeEvent); } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; } } diff --git a/packages/react-dom-bindings/src/events/ReactDOMEventReplaying.js b/packages/react-dom-bindings/src/events/ReactDOMEventReplaying.js index fc5e59eb839e5..2e4dae273e9f6 100644 --- a/packages/react-dom-bindings/src/events/ReactDOMEventReplaying.js +++ b/packages/react-dom-bindings/src/events/ReactDOMEventReplaying.js @@ -38,7 +38,7 @@ import {isHigherEventPriority} from 'react-reconciler/src/ReactEventPriorities'; import {isRootDehydrated} from 'react-reconciler/src/ReactFiberShellHydration'; import {dispatchReplayedFormAction} from './plugins/FormActionEventPlugin'; import { - getCurrentUpdatePriority, + peekCurrentUpdatePriority, runWithPriority as attemptHydrationAtPriority, } from '../client/ReactDOMUpdatePriority'; @@ -336,7 +336,7 @@ export function queueExplicitHydrationTarget(target: Node): void { // TODO: This will read the priority if it's dispatched by the React // event system but not native events. Should read window.event.type, like // we do for updates (getCurrentEventPriority). - const updatePriority = getCurrentUpdatePriority(); + const updatePriority = peekCurrentUpdatePriority(); const queuedTarget: QueuedHydrationTarget = { blockedOn: null, target: target, diff --git a/packages/react-native-renderer/src/ReactFiberConfigFabric.js b/packages/react-native-renderer/src/ReactFiberConfigFabric.js index 4c92813b83ad4..1fdc59a462c98 100644 --- a/packages/react-native-renderer/src/ReactFiberConfigFabric.js +++ b/packages/react-native-renderer/src/ReactFiberConfigFabric.js @@ -313,17 +313,23 @@ export function shouldSetTextContent(type: string, props: Props): boolean { } let currentUpdatePriority: EventPriority = NoEventPriority; -export function setCurrentUpdatePriority( - newEventPriority: EventPriority, -): void { - currentUpdatePriority = newEventPriority; +export function swapCurrentUpdatePriority( + newPriority: EventPriority, +): EventPriority { + const previousPriority = currentUpdatePriority; + currentUpdatePriority = newPriority; + return previousPriority; } -export function getCurrentUpdatePriority(): EventPriority { +export function peekCurrentUpdatePriority(): EventPriority { return currentUpdatePriority; } -export function getCurrentEventPriority(): EventPriority { +export function resolveUpdatePriority(): EventPriority { + if (currentUpdatePriority !== NoEventPriority) { + return currentUpdatePriority; + } + const currentEventPriority = fabricGetCurrentEventPriority ? fabricGetCurrentEventPriority() : null; diff --git a/packages/react-native-renderer/src/ReactFiberConfigNative.js b/packages/react-native-renderer/src/ReactFiberConfigNative.js index e5f8017c5e9c4..db0b7c5682d48 100644 --- a/packages/react-native-renderer/src/ReactFiberConfigNative.js +++ b/packages/react-native-renderer/src/ReactFiberConfigNative.js @@ -255,15 +255,22 @@ export function shouldSetTextContent(type: string, props: Props): boolean { } let currentUpdatePriority: EventPriority = NoEventPriority; -export function setCurrentUpdatePriority(newPriority: EventPriority): void { +export function swapCurrentUpdatePriority( + newPriority: EventPriority, +): EventPriority { + const previousPriority = currentUpdatePriority; currentUpdatePriority = newPriority; + return previousPriority; } -export function getCurrentUpdatePriority(): EventPriority { +export function peekCurrentUpdatePriority(): EventPriority { return currentUpdatePriority; } -export function getCurrentEventPriority(): EventPriority { +export function resolveUpdatePriority(): EventPriority { + if (currentUpdatePriority !== NoEventPriority) { + return currentUpdatePriority; + } return DefaultEventPriority; } diff --git a/packages/react-noop-renderer/src/createReactNoop.js b/packages/react-noop-renderer/src/createReactNoop.js index d8ef08854239f..de60af13b8760 100644 --- a/packages/react-noop-renderer/src/createReactNoop.js +++ b/packages/react-noop-renderer/src/createReactNoop.js @@ -510,10 +510,13 @@ function createReactNoop(reconciler: Function, useMutation: boolean) { resetAfterCommit(): void {}, - setCurrentUpdatePriority, - getCurrentUpdatePriority, + swapCurrentUpdatePriority, + peekCurrentUpdatePriority, - getCurrentEventPriority() { + resolveUpdatePriority() { + if (currentUpdatePriority !== NoEventPriority) { + return currentUpdatePriority; + } return currentEventPriority; }, @@ -788,11 +791,15 @@ function createReactNoop(reconciler: Function, useMutation: boolean) { const DEFAULT_ROOT_ID = ''; let currentUpdatePriority = NoEventPriority; - function setCurrentUpdatePriority(newPriority: EventPriority): void { + function swapCurrentUpdatePriority( + newPriority: EventPriority, + ): EventPriority { + const previousPriority = currentUpdatePriority; currentUpdatePriority = newPriority; + return previousPriority; } - function getCurrentUpdatePriority(): EventPriority { + function peekCurrentUpdatePriority(): EventPriority { return currentUpdatePriority; } @@ -1229,12 +1236,11 @@ function createReactNoop(reconciler: Function, useMutation: boolean) { priority: EventPriority, fn: () => T, ): T { - const previousPriority = getCurrentUpdatePriority(); + const previousPriority = swapCurrentUpdatePriority(priority); try { - setCurrentUpdatePriority(priority); return fn(); } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); } }, diff --git a/packages/react-reconciler/src/ReactEventPriorities.js b/packages/react-reconciler/src/ReactEventPriorities.js index 0f91c6c373eeb..e28223e9d89b1 100644 --- a/packages/react-reconciler/src/ReactEventPriorities.js +++ b/packages/react-reconciler/src/ReactEventPriorities.js @@ -48,6 +48,10 @@ export function isHigherEventPriority( return a !== 0 && a < b; } +export function eventPriorityToLane(updatePriority: EventPriority): Lane { + return updatePriority; +} + export function lanesToEventPriority(lanes: Lanes): EventPriority { const lane = getHighestPriorityLane(lanes); if (!isHigherEventPriority(DiscreteEventPriority, lane)) { diff --git a/packages/react-reconciler/src/ReactFiberHooks.js b/packages/react-reconciler/src/ReactFiberHooks.js index 0d4e803a7a130..eb88629715b6c 100644 --- a/packages/react-reconciler/src/ReactFiberHooks.js +++ b/packages/react-reconciler/src/ReactFiberHooks.js @@ -29,8 +29,8 @@ import type {TransitionStatus} from './ReactFiberConfig'; import { NotPendingTransition as NoPendingHostTransition, - setCurrentUpdatePriority, - getCurrentUpdatePriority, + swapCurrentUpdatePriority, + peekCurrentUpdatePriority, } from './ReactFiberConfig'; import ReactSharedInternals from 'shared/ReactSharedInternals'; import { @@ -2790,8 +2790,8 @@ function startTransition( callback: () => mixed, options?: StartTransitionOptions, ): void { - const previousPriority = getCurrentUpdatePriority(); - setCurrentUpdatePriority( + const previousPriority = peekCurrentUpdatePriority(); + swapCurrentUpdatePriority( higherEventPriority(previousPriority, ContinuousEventPriority), ); @@ -2877,7 +2877,7 @@ function startTransition( throw error; } } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; diff --git a/packages/react-reconciler/src/ReactFiberReconciler.js b/packages/react-reconciler/src/ReactFiberReconciler.js index 2656643b6c0df..06100010d0ee3 100644 --- a/packages/react-reconciler/src/ReactFiberReconciler.js +++ b/packages/react-reconciler/src/ReactFiberReconciler.js @@ -41,7 +41,7 @@ import getComponentNameFromFiber from 'react-reconciler/src/getComponentNameFrom import isArray from 'shared/isArray'; import {enableSchedulingProfiler} from 'shared/ReactFeatureFlags'; import ReactSharedInternals from 'shared/ReactSharedInternals'; -import {getPublicInstance, getCurrentUpdatePriority} from './ReactFiberConfig'; +import {getPublicInstance} from './ReactFiberConfig'; import { findCurrentUnmaskedContext, processChildContext, @@ -521,8 +521,6 @@ export function attemptHydrationAtCurrentPriority(fiber: Fiber): void { markRetryLaneIfNotHydrated(fiber, lane); } -export {getCurrentUpdatePriority}; - export {findHostInstance}; export {findHostInstanceWithWarning}; diff --git a/packages/react-reconciler/src/ReactFiberWorkLoop.js b/packages/react-reconciler/src/ReactFiberWorkLoop.js index 4de418bb0ee27..c8fbdcb20dcf5 100644 --- a/packages/react-reconciler/src/ReactFiberWorkLoop.js +++ b/packages/react-reconciler/src/ReactFiberWorkLoop.js @@ -70,13 +70,12 @@ import { cancelTimeout, noTimeout, afterActiveInstanceBlur, - getCurrentEventPriority, startSuspendingCommit, waitForCommitToBeReady, preloadInstance, supportsHydration, - getCurrentUpdatePriority, - setCurrentUpdatePriority, + swapCurrentUpdatePriority, + resolveUpdatePriority, } from './ReactFiberConfig'; import {createWorkInProgress, resetWorkInProgress} from './ReactFiber'; @@ -161,6 +160,7 @@ import { DefaultEventPriority, lowerEventPriority, lanesToEventPriority, + eventPriorityToLane, } from './ReactEventPriorities'; import {requestCurrentTransition} from './ReactFiberTransition'; import { @@ -641,25 +641,7 @@ export function requestUpdateLane(fiber: Fiber): Lane { requestTransitionLane(transition); } - // Updates originating inside certain React methods, like flushSync, have - // their priority set by tracking it with a context variable. - // - // The opaque type returned by the host config is internally a lane, so we can - // use that directly. - // TODO: Move this type conversion to the event priority module. - const updateLane: Lane = (getCurrentUpdatePriority(): any); - if (updateLane !== NoLane) { - return updateLane; - } - - // This update originated outside React. Ask the host environment for an - // appropriate priority, based on the type of event. - // - // The opaque type returned by the host config is internally a lane, so we can - // use that directly. - // TODO: Move this type conversion to the event priority module. - const eventLane: Lane = (getCurrentEventPriority(): any); - return eventLane; + return eventPriorityToLane(resolveUpdatePriority()); } function requestRetryLane(fiber: Fiber) { @@ -1446,15 +1428,14 @@ export function getExecutionContext(): ExecutionContext { } export function deferredUpdates(fn: () => A): A { - const previousPriority = getCurrentUpdatePriority(); const prevTransition = ReactCurrentBatchConfig.transition; + const previousPriority = swapCurrentUpdatePriority(DefaultEventPriority); try { ReactCurrentBatchConfig.transition = null; - setCurrentUpdatePriority(DefaultEventPriority); return fn(); } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; } } @@ -1492,14 +1473,13 @@ export function discreteUpdates( c: C, d: D, ): R { - const previousPriority = getCurrentUpdatePriority(); const prevTransition = ReactCurrentBatchConfig.transition; + const previousPriority = swapCurrentUpdatePriority(DiscreteEventPriority); try { ReactCurrentBatchConfig.transition = null; - setCurrentUpdatePriority(DiscreteEventPriority); return fn(a, b, c, d); } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; if (executionContext === NoContext) { resetRenderTimer(); @@ -1530,18 +1510,17 @@ export function flushSync(fn: (() => R) | void): R | void { executionContext |= BatchedContext; const prevTransition = ReactCurrentBatchConfig.transition; - const previousPriority = getCurrentUpdatePriority(); + const previousPriority = swapCurrentUpdatePriority(DiscreteEventPriority); try { ReactCurrentBatchConfig.transition = null; - setCurrentUpdatePriority(DiscreteEventPriority); if (fn) { return fn(); } else { return undefined; } } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; executionContext = prevExecutionContext; @@ -2713,12 +2692,13 @@ function commitRoot( ) { // TODO: This no longer makes any sense. We already wrap the mutation and // layout phases. Should be able to remove. - const previousUpdateLanePriority = getCurrentUpdatePriority(); const prevTransition = ReactCurrentBatchConfig.transition; + const previousUpdateLanePriority = swapCurrentUpdatePriority( + DiscreteEventPriority, + ); try { ReactCurrentBatchConfig.transition = null; - setCurrentUpdatePriority(DiscreteEventPriority); commitRootImpl( root, recoverableErrors, @@ -2729,7 +2709,7 @@ function commitRoot( ); } finally { ReactCurrentBatchConfig.transition = prevTransition; - setCurrentUpdatePriority(previousUpdateLanePriority); + swapCurrentUpdatePriority(previousUpdateLanePriority); } return null; @@ -2880,8 +2860,7 @@ function commitRootImpl( if (subtreeHasEffects || rootHasEffect) { const prevTransition = ReactCurrentBatchConfig.transition; ReactCurrentBatchConfig.transition = null; - const previousPriority = getCurrentUpdatePriority(); - setCurrentUpdatePriority(DiscreteEventPriority); + const previousPriority = swapCurrentUpdatePriority(DiscreteEventPriority); const prevExecutionContext = executionContext; executionContext |= CommitContext; @@ -2952,7 +2931,7 @@ function commitRootImpl( executionContext = prevExecutionContext; // Reset the priority to the previous non-sync value. - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; } else { // No effects. @@ -3184,14 +3163,13 @@ export function flushPassiveEffects(): boolean { const renderPriority = lanesToEventPriority(pendingPassiveEffectsLanes); const priority = lowerEventPriority(DefaultEventPriority, renderPriority); const prevTransition = ReactCurrentBatchConfig.transition; - const previousPriority = getCurrentUpdatePriority(); + const previousPriority = swapCurrentUpdatePriority(priority); try { ReactCurrentBatchConfig.transition = null; - setCurrentUpdatePriority(priority); return flushPassiveEffectsImpl(); } finally { - setCurrentUpdatePriority(previousPriority); + swapCurrentUpdatePriority(previousPriority); ReactCurrentBatchConfig.transition = prevTransition; // Once passive effects have run for the tree - giving components a diff --git a/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.internal.js b/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.internal.js index 043c93900a20d..5dec0635d02d1 100644 --- a/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.internal.js +++ b/packages/react-reconciler/src/__tests__/ReactFiberHostContext-test.internal.js @@ -71,13 +71,18 @@ describe('ReactFiberHostContext', () => { return null; }, clearContainer: function () {}, - setCurrentUpdatePriority: function (newPriority: any) { + swapCurrentUpdatePriority: function (newPriority: any) { + const previousPriority = updatePriority; updatePriority = newPriority; + return previousPriority; }, - getCurrentUpdatePriority: function () { + peekCurrentUpdatePriority: function () { return updatePriority; }, - getCurrentEventPriority: function () { + resolveUpdatePriority: function () { + if (updatePriority !== NoEventPriority) { + return updatePriority; + } return DefaultEventPriority; }, shouldAttemptEagerTransition() { diff --git a/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js b/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js index 310255c5087d4..4e35e67a923da 100644 --- a/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js +++ b/packages/react-reconciler/src/forks/ReactFiberConfig.custom.js @@ -65,9 +65,9 @@ export const afterActiveInstanceBlur = $$$config.afterActiveInstanceBlur; export const preparePortalMount = $$$config.preparePortalMount; export const prepareScopeUpdate = $$$config.prepareScopeUpdate; export const getInstanceFromScope = $$$config.getInstanceFromScope; -export const setCurrentUpdatePriority = $$$config.setCurrentUpdatePriority; -export const getCurrentUpdatePriority = $$$config.getCurrentUpdatePriority; -export const getCurrentEventPriority = $$$config.getCurrentEventPriority; +export const swapCurrentUpdatePriority = $$$config.swapCurrentUpdatePriority; +export const peekCurrentUpdatePriority = $$$config.peekCurrentUpdatePriority; +export const resolveUpdatePriority = $$$config.resolveUpdatePriority; export const shouldAttemptEagerTransition = $$$config.shouldAttemptEagerTransition; export const detachDeletedInstance = $$$config.detachDeletedInstance; diff --git a/packages/react-test-renderer/src/ReactFiberConfigTestHost.js b/packages/react-test-renderer/src/ReactFiberConfigTestHost.js index 683b4617c8806..ba8c681d449a1 100644 --- a/packages/react-test-renderer/src/ReactFiberConfigTestHost.js +++ b/packages/react-test-renderer/src/ReactFiberConfigTestHost.js @@ -203,15 +203,22 @@ export function createTextInstance( } let currentUpdatePriority: EventPriority = NoEventPriority; -export function setCurrentUpdatePriority(newPriority: EventPriority): void { +export function swapCurrentUpdatePriority( + newPriority: EventPriority, +): EventPriority { + const previousPriority = currentUpdatePriority; currentUpdatePriority = newPriority; + return previousPriority; } -export function getCurrentUpdatePriority(): EventPriority { +export function peekCurrentUpdatePriority(): EventPriority { return currentUpdatePriority; } -export function getCurrentEventPriority(): EventPriority { +export function resolveUpdatePriority(): EventPriority { + if (currentUpdatePriority !== NoEventPriority) { + return currentUpdatePriority; + } return DefaultEventPriority; } export function shouldAttemptEagerTransition(): boolean {