doly
Version:
doly ui components
67 lines (55 loc) • 2.35 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createTag;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _react = _interopRequireWildcard(require("react"));
var _pickBy = _interopRequireDefault(require("lodash/pickBy"));
/**
* createTag
* 创建标签
* tag 标签
* prop 替换 target
* propsToOmit 过滤 props
* propsToNested 传递 props
*/
function createTag() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
_ref$tag = _ref.tag,
defaultTag = _ref$tag === void 0 ? 'div' : _ref$tag,
_ref$prop = _ref.prop,
prop = _ref$prop === void 0 ? 'as' : _ref$prop,
name = _ref.name,
_ref$propsToOmit = _ref.propsToOmit,
propsToOmit = _ref$propsToOmit === void 0 ? [] : _ref$propsToOmit,
_ref$propsToNested = _ref.propsToNested,
propsToNested = _ref$propsToNested === void 0 ? [] : _ref$propsToNested;
return function (_ref2) {
var children = _ref2.children,
otherProps = (0, _objectWithoutProperties2.default)(_ref2, ["children"]);
var tag = otherProps[prop] || defaultTag;
var omitPropsKeys = [prop].concat((0, _toConsumableArray2.default)(propsToOmit));
var nestedPropsKeys = propsToNested;
var props = (0, _pickBy.default)(otherProps, function (value, key) {
return omitPropsKeys.indexOf(key) === -1;
});
var _children = children;
if (name && process.env.NODE_ENV !== 'production') props['ui-name'] = name;
if (propsToNested.length > 0) {
var childrenProps = (0, _pickBy.default)(otherProps, function (value, key) {
return nestedPropsKeys.indexOf(key) > -1;
});
_children = _react.Children.toArray(children).map(function (child) {
if ((0, _react.isValidElement)(child)) {
return (0, _react.cloneElement)(child, childrenProps);
}
return child;
});
}
return (0, _react.createElement)(tag, props, _children);
};
}