wix-style-react
Version:
146 lines (120 loc) • 5.85 kB
JavaScript
;
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;