wix-style-react
Version:
wix-style-react
179 lines (175 loc) • 8.59 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
var _exportNames = {
createRendererWithDriver: true,
createRendererWithUniDriver: true,
createAsyncRendererWithUniDriver: true
};
exports.createAsyncRendererWithUniDriver = createAsyncRendererWithUniDriver;
exports.createRendererWithDriver = createRendererWithDriver;
exports.createRendererWithUniDriver = createRendererWithUniDriver;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _react = require("@testing-library/react");
Object.keys(_react).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _react[key]) return;
exports[key] = _react[key];
});
var _unidriverJsdomReact = require("@wix/unidriver-jsdom-react");
var _runAbsolutelyAllTimers = require("./runAbsolutelyAllTimers");
Object.keys(_runAbsolutelyAllTimers).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
if (key in exports && exports[key] === _runAbsolutelyAllTimers[key]) return;
exports[key] = _runAbsolutelyAllTimers[key];
});
var _excluded = ["dataHook"],
_excluded2 = ["dataHook"];
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2.default)(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
var getElement = _ref => {
var {
rendered,
dataHook
} = _ref;
var element = dataHook ? rendered.container.querySelector("[data-hook=\"".concat(dataHook, "\"]")) : rendered.container.firstElementChild;
return element;
};
function createAsyncRendererBase(createDriver, defaultOptions) {
return /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2.default)(function* (jsx) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
var _defaultOptions$optio = _objectSpread(_objectSpread({}, defaultOptions), options),
{
dataHook
} = _defaultOptions$optio,
reactTestingLibraryOptions = (0, _objectWithoutProperties2.default)(_defaultOptions$optio, _excluded);
var renderResult;
yield (0, _react.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () {
renderResult = (0, _react.render)(jsx, reactTestingLibraryOptions);
}));
// non-null/undef assertion used here because renderResult is already assigned
var rendered = renderResult;
var element = getElement({
rendered,
dataHook
});
var actWrappedRerender = /*#__PURE__*/function () {
var _ref4 = (0, _asyncToGenerator2.default)(function* (jsxElement) {
yield (0, _react.act)(/*#__PURE__*/(0, _asyncToGenerator2.default)(function* () {
rendered.rerender(jsxElement);
}));
});
return function actWrappedRerender(_x2) {
return _ref4.apply(this, arguments);
};
}();
return _objectSpread(_objectSpread({}, rendered), {}, {
rerender: actWrappedRerender,
driver: createDriver({
rendered,
element,
component: jsx,
dataHook
})
});
});
return function (_x) {
return _ref2.apply(this, arguments);
};
}();
}
function createRendererBase(createDriver, defaultOptions) {
return function (jsx) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultOptions;
var _defaultOptions$optio2 = _objectSpread(_objectSpread({}, defaultOptions), options),
{
dataHook
} = _defaultOptions$optio2,
reactTestingLibraryOptions = (0, _objectWithoutProperties2.default)(_defaultOptions$optio2, _excluded2);
var rendered = (0, _react.render)(jsx, reactTestingLibraryOptions);
var element = getElement({
rendered,
dataHook
});
return _objectSpread(_objectSpread({}, rendered), {}, {
driver: createDriver({
rendered,
element,
component: jsx,
dataHook
})
});
};
}
/**
* Creates a `render` function that returns the same object as `@testing-library/react`'s render, but
* with and extra `driver` property. Designed for usage with legacy drivers. Deprecated.
*
* The returned render function arguments:
* @param [React.Element] jsx a jsx element to render
* @param [object] options - render-options for @testing-library/react. The options may also contain a `dataHook` prop which if provided then the driver would be created with the element which is found by the dataHook. If not provided then it assumes that the rendered root element is the component's root element and it will be used for the driver.
*/
function createRendererWithDriver(driverFactory) {
var defaultOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var createDriver = _ref6 => {
var {
rendered,
element,
dataHook
} = _ref6;
return driverFactory({
element: element,
wrapper: rendered.container,
eventTrigger: _react.fireEvent,
dataHook: dataHook
});
};
return createRendererBase(createDriver, defaultOptions);
}
function driverFactoryWrapper(driverFactory) {
return _ref7 => {
var {
element,
dataHook
} = _ref7;
return driverFactory(
// non-null/undef assertion used here because of wrong external types, element CAN be null here
(0, _unidriverJsdomReact.jsdomReactUniDriver)(element), (0, _unidriverJsdomReact.jsdomReactUniDriver)(document.body),
// non-null/undef assertion used here because of wrong external types, dataHook is optional
{
dataHook: dataHook
});
};
}
/**
* Creates a `render` function that returns the same object as `@testing-library/react`'s render, but
* with and extra `driver` property which is a Unidriver.
*
* The returned render function arguments:
* @param [React.Element] jsx a jsx element to render
* @param [object] options - render-options for @testing-library/react. The options may also contain a `dataHook` prop which if provided then the driver would be created with the element which is found by the dataHook. If not provided then it assumes that the rendered root element is the component's root element and it will be used for the driver.
*/
function createRendererWithUniDriver(driverFactory) {
var defaultOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var createDriver = driverFactoryWrapper(driverFactory);
return createRendererBase(createDriver, defaultOptions);
}
/**
* Creates a `render` function that returns Promise of the same object as `@testing-library/react`'s render, but
* with and extra `driver` property which is a Unidriver. Internally wraps 'render' with async 'act', to settle the async state updates after component renders.
*
* The returned render function arguments:
* @param [React.Element] jsx a jsx element to render
* @param [object] options - render-options for @testing-library/react. The options may also contain a `dataHook` prop which if provided then the driver would be created with the element which is found by the dataHook. If not provided then it assumes that the rendered root element is the component's root element and it will be used for the driver.
*/
function createAsyncRendererWithUniDriver(driverFactory) {
var defaultOptions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var createDriver = driverFactoryWrapper(driverFactory);
return createAsyncRendererBase(createDriver, defaultOptions);
}
//# sourceMappingURL=index.js.map