UNPKG

wix-style-react

Version:
146 lines (120 loc) • 5.85 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.wait = exports.storyOfAllPermutations = void 0; var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof")); var _autodocsRegistry = _interopRequireDefault(require("../../../autodocs-registry/autodocs-registry.json")); var _react = require("@storybook/react"); var _react2 = _interopRequireDefault(require("react")); var _Layout = require("../../../src/Layout"); var _Tooltip = _interopRequireDefault(require("../../../src/Tooltip")); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function getTestValues(_ref, _ref2) { var type = _ref.type, required = _ref.required, defaultValue = _ref.defaultValue; var skipUndefinedValue = _ref2.skipUndefinedValue; var testValues = []; if (!skipUndefinedValue && !required && !defaultValue) { testValues.push(undefined); } switch (type.name) { case 'bool': testValues.push(false, true); break; case 'string': testValues.push('Hello World'); break; case 'number': testValues.push(5); break; case 'enum': type.value.forEach(function (value) { if (value.computed) { testValues.push(value.value); } else { // eslint-disable-next-line no-eval testValues.push(eval(value.value)); } }); break; default: } return testValues; } function getPropsPermutations(componentName, options) { var props = options.props; var permutations = []; var component = _autodocsRegistry["default"][componentName]; var propsMap = {}; props.forEach(function (propName) { if (typeof propName === 'string') { if (!component.props[propName]) throw new Error("prop ".concat(propName, " does not exist in component ").concat(componentName)); propsMap[propName] = getTestValues(component.props[propName], options); } else if ((0, _typeof2["default"])(propName) === 'object') { if (!component.props[propName.name]) throw new Error("prop ".concat(propName, " does not exist in component ").concat(componentName)); propsMap[propName.name] = propName.values; } }); Object.keys(propsMap).forEach(function (key) { if (permutations.length === 0) { propsMap[key].forEach(function (value) { return permutations.push((0, _defineProperty2["default"])({}, key, value)); }); } else { var arr = []; propsMap[key].forEach(function (value) { return permutations.forEach(function (group) { return arr.push(_objectSpread(_objectSpread({}, group), {}, (0, _defineProperty2["default"])({}, key, value))); }); }); permutations = arr; } }); return permutations; } /** * Create a story of props permutations * @param Story - A renderable node * @param Component - The component class * @param options - { * props - string[] - Names of the props to test * skipUndefinedValue - boolean - If true, will not test undefined values * } */ var storyOfAllPermutations = function storyOfAllPermutations(Story, Component) { var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var permutations = getPropsPermutations(Component.displayName, options); var _options$storyName = options.storyName, storyName = _options$storyName === void 0 ? 'Props Permutations' : _options$storyName, _options$testWithThem = options.testWithTheme, testWithTheme = _options$testWithThem === void 0 ? function (i) { return i; } : _options$testWithThem, themeName = options.themeName; (0, _react.storiesOf)("".concat(themeName ? "".concat(themeName, "|") : '').concat(Component.displayName), module).add(storyName, function () { return testWithTheme( /*#__PURE__*/_react2["default"].createElement(_Layout.Layout, null, permutations.map(function (props, key) { return /*#__PURE__*/_react2["default"].createElement(_Layout.Cell, { key: key }, /*#__PURE__*/_react2["default"].createElement(_Layout.Layout, null, /*#__PURE__*/_react2["default"].createElement(_Layout.Cell, { span: 1 }, /*#__PURE__*/_react2["default"].createElement(_Tooltip["default"], { content: JSON.stringify(props) }, /*#__PURE__*/_react2["default"].createElement("span", null, key))), /*#__PURE__*/_react2["default"].createElement(_Layout.Cell, { span: 11 }, /*#__PURE__*/_react2["default"].createElement(Story, props)))); }))); }); }; /** A simple wait function to test components with animations */ exports.storyOfAllPermutations = storyOfAllPermutations; var wait = function wait(timeToDelay) { return new Promise(function (resolve) { return setTimeout(resolve, timeToDelay); }); }; exports.wait = wait;