wix-style-react
Version:
wix-style-react
75 lines • 2.95 kB
JavaScript
/* This file is taken from @testing-library/react in order to solve act compatibility issues
resulting in following warning: The current testing environment is not configured to support act.
It's needed because we cannot use '@testing-library/react' in our testkits, as not all of our consumers use this library.
It's meant to be used only in ReactBase.js and should be removed once ReactBase is removed.
*/
import * as testUtils from 'react-dom/test-utils';
const domAct = testUtils.act;
function getGlobalThis() {
if (typeof globalThis !== 'undefined') {
// eslint-disable-next-line no-undef
return globalThis;
}
if (typeof self !== 'undefined') {
return self;
}
if (typeof window !== 'undefined') {
return window;
}
if (typeof global !== 'undefined') {
return global;
}
throw new Error('unable to locate global object');
}
function setIsReactActEnvironment(isReactActEnvironment) {
getGlobalThis().IS_REACT_ACT_ENVIRONMENT = isReactActEnvironment;
}
function getIsReactActEnvironment() {
return getGlobalThis().IS_REACT_ACT_ENVIRONMENT;
}
function withGlobalActEnvironment(actImplementation) {
return callback => {
const previousActEnvironment = getIsReactActEnvironment();
setIsReactActEnvironment(true);
try {
// The return value of `act` is always a thenable.
let callbackNeedsToBeAwaited = false;
const actResult = actImplementation(() => {
const result = callback();
if (result !== null &&
typeof result === 'object' &&
typeof result.then === 'function') {
callbackNeedsToBeAwaited = true;
}
return result;
});
if (callbackNeedsToBeAwaited) {
const thenable = actResult;
return {
then: (resolve, reject) => {
thenable.then(returnValue => {
setIsReactActEnvironment(previousActEnvironment);
resolve(returnValue);
}, error => {
setIsReactActEnvironment(previousActEnvironment);
reject(error);
});
},
};
}
else {
setIsReactActEnvironment(previousActEnvironment);
return actResult;
}
}
catch (error) {
// Can't be a `finally {}` block since we don't know if we have to immediately restore IS_REACT_ACT_ENVIRONMENT
// or if we have to await the callback first.
setIsReactActEnvironment(previousActEnvironment);
throw error;
}
};
}
const act = withGlobalActEnvironment(domAct);
export { act };
//# sourceMappingURL=actCompat.js.map