UNPKG

wix-style-react

Version:
167 lines (150 loc) • 5.25 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _testUtils = require('react-dom/test-utils'); var _testUtils2 = _interopRequireDefault(_testUtils); var _wixEventually = require('wix-eventually'); var _wixEventually2 = _interopRequireDefault(_wixEventually); var _last = require('lodash/last'); var _last2 = _interopRequireDefault(_last); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var arrowDirectionToPlacement = { top: 'bottom', bottom: 'top', left: 'right', right: 'left' }; var tooltipDriverFactory = function tooltipDriverFactory(_ref) { var element = _ref.element; var getContentRoot = function getContentRoot() { var contentRootHook = element.getAttribute('data-content-hook'); if (!contentRootHook) { throw new Error('Tooltip.driver: contentRootHook attribute must exist on the Toolrip\'s root element'); } return document.body.querySelector('[data-hook="' + contentRootHook + '"]'); }; var getTooltipContent = function getTooltipContent() { return getContentRoot().querySelector('.tooltip'); }; var mouseEnter = function mouseEnter() { return _testUtils2.default.Simulate.mouseEnter(element); }; var mouseLeave = function mouseLeave() { return _testUtils2.default.Simulate.mouseLeave(element); }; var isShown = function isShown() { return !!getContentRoot(); }; var getContent = function getContent() { var content = getTooltipContent(); while (content.children.length > 0) { content = content.children[0]; } return content.innerHTML; }; var contentHasElement = function contentHasElement(selector) { var content = getContentRoot(); return content && !!content.querySelector(selector); }; return { exists: function exists() { return !!element; }, isShown: isShown, focus: function focus() { return _testUtils2.default.Simulate.focus(element); }, blur: function blur() { return _testUtils2.default.Simulate.blur(element); }, click: function click() { return _testUtils2.default.Simulate.click(element); }, mouseEnter: mouseEnter, mouseLeave: mouseLeave, hasErrorTheme: function hasErrorTheme() { return contentHasElement('.error'); }, hasDarkTheme: function hasDarkTheme() { return contentHasElement('.dark'); }, hasLightTheme: function hasLightTheme() { return contentHasElement('.light'); }, hasAnimationClass: function hasAnimationClass() { return contentHasElement('.fadeIn'); }, hasArrow: function hasArrow() { return contentHasElement('[data-hook="tooltip-arrow"]'); }, getTooltipWrapper: getTooltipContent, getChildren: function getChildren() { return element.innerHTML; }, getPlacement: function getPlacement() { var content = getContentRoot(); var arrowDirection = (0, _last2.default)(content.querySelectorAll('[data-hook="tooltip-arrow"]')).className.split(' ')[2]; return arrowDirectionToPlacement[arrowDirection]; }, getContent: getContent, hoverAndGetContent: function hoverAndGetContent() { var _ref2 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref2$timeout = _ref2.timeout, timeout = _ref2$timeout === undefined ? 1000 : _ref2$timeout, _ref2$interval = _ref2.interval, interval = _ref2$interval === undefined ? 50 : _ref2$interval; mouseEnter(); return (0, _wixEventually2.default)(function () { if (!isShown()) { throw new Error('Tooltip not visible'); } var content = getContent(); mouseLeave(); return content; }, { timeout: timeout, interval: interval }); }, getMaxWidth: function getMaxWidth() { var content = getTooltipContent(); var values = content.style._values; return values['max-width']; }, getMinWidth: function getMinWidth() { var content = getTooltipContent(); var values = content.style._values; return values['min-width']; }, getAlignment: function getAlignment() { var content = getTooltipContent(); var values = content.style._values; return values['text-align']; }, getPadding: function getPadding() { var content = getTooltipContent(); var values = content.style._values; return values.padding; } }; }; exports.default = assertExistsWrapper(tooltipDriverFactory, 'The Tooltip testkit could not be initialized, please make sure that a dataHook is directly applied to the Tooltip component and passed to the tooltipTestkitFactory.'); function assertExistsWrapper(driver, msg) { return function () { return ( /* eslint-disable no-restricted-globals */ new Proxy(driver.apply(undefined, arguments), { /* eslint-enable no-restricted-globals */ get: function get(_driver, prop) { if (_driver.exists && prop !== 'exists') { if (!_driver.exists()) { throw new Error(msg); } } return _driver[prop]; } }) ); }; }