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';
export function setCurrentUpdatePriority(
newPriority: EventPriority,
IntentionallyUnusedArgument?: empty,
): void {
ReactDOMSharedInternals.p = newPriority;
}
export function getCurrentUpdatePriority(): EventPriority {
return ReactDOMSharedInternals.p;
}
export function resolveUpdatePriority(): EventPriority {
const updatePriority = ReactDOMSharedInternals.p;
if (updatePriority !== NoEventPriority) {
return updatePriority;
}
const currentEvent = window.event;
if (currentEvent === undefined) {
return DefaultEventPriority;
}
return getEventPriority(currentEvent.type);
}
export function runWithPriority<T>(priority: EventPriority, fn: () => T): T {
const previousPriority = getCurrentUpdatePriority();
try {
setCurrentUpdatePriority(priority);
return fn();
} finally {
setCurrentUpdatePriority(previousPriority);
}
}