UNPKG

wix-style-react

Version:
75 lines 2.95 kB
/* 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