UNPKG

syber-lowcode-business-materials

Version:
96 lines (91 loc) 3.14 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.withMomentProps = withMomentProps; exports.withSingleChild = withSingleChild; exports.withSingleFunctionChild = withSingleFunctionChild; exports.withWrap = withWrap; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireDefault(require("react")); var _moment = _interopRequireDefault(require("moment")); var _lodash = require("lodash"); function convertProps(props, list, mapper) { var out = {}; list.forEach(function (key) { if ((0, _lodash.has)(props, key)) { (0, _lodash.set)(out, key, mapper((0, _lodash.get)(props, key), key)); } }); return out; } /** * 简单包装,不做任何处理 * 部分组件ref比较特殊,包一层会解决这个问题 */ // export function withWrap(Comp: ComponentType<any>) { // return forwardRef((props: any, ref: Ref<any>) => { // return <Comp {...props} ref={ref} />; // }); // } function withWrap(Comp) { return function (props) { return /*#__PURE__*/_react["default"].createElement(Comp, props); }; } /** * 某些组件会用React.Children.only检查子节点 * 需要做处理避免报错 */ function withSingleChild(Comp, needsConvert) { if (needsConvert === void 0) { needsConvert = ['children']; } return function (props) { var convertedProps = convertProps(props, needsConvert, function (prop) { var node = _react["default"].Children.toArray(prop)[0]; if (node === null || typeof node !== 'object') { node = /*#__PURE__*/_react["default"].createElement("div", null, node); } return node; }); return /*#__PURE__*/_react["default"].createElement(Comp, (0, _extends2["default"])({}, props, convertedProps)); }; } function withSingleFunctionChild(Comp) { return function (props) { var children = props.children; var node; if (typeof children === 'function') { node = children; } if (Array.isArray(children) && children.length === 1 && typeof children[0] === 'function') { node = children[0]; } if (node) { return /*#__PURE__*/_react["default"].createElement(Comp, props, node); } return /*#__PURE__*/_react["default"].createElement("div", null, children); }; } /** * moment对象在序列化后会被转为字符串 * 需要让日期类组件支持接受字符串值 */ function withMomentProps(Comp, needsConvert) { if (needsConvert === void 0) { needsConvert = ['value', 'defaultValue']; } return function (props) { var convertedProps = convertProps(props, needsConvert, function (prop) { if (prop) { if (Array.isArray(prop)) { return prop.map(function (v) { return _moment["default"].isMoment(v) ? v : (0, _moment["default"])(v); }); } return _moment["default"].isMoment(prop) ? prop : (0, _moment["default"])(prop); } }); return /*#__PURE__*/_react["default"].createElement(Comp, (0, _extends2["default"])({}, props, convertedProps)); }; }