UNPKG

syber-lowcode-business-materials

Version:
88 lines (84 loc) 2.57 kB
import _extends from "@babel/runtime/helpers/extends"; import React from 'react'; import moment from 'moment'; import { get, set, has } from 'lodash'; function convertProps(props, list, mapper) { var out = {}; list.forEach(function (key) { if (has(props, key)) { set(out, key, mapper(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} />; // }); // } export function withWrap(Comp) { return function (props) { return /*#__PURE__*/React.createElement(Comp, props); }; } /** * 某些组件会用React.Children.only检查子节点 * 需要做处理避免报错 */ export function withSingleChild(Comp, needsConvert) { if (needsConvert === void 0) { needsConvert = ['children']; } return function (props) { var convertedProps = convertProps(props, needsConvert, function (prop) { var node = React.Children.toArray(prop)[0]; if (node === null || typeof node !== 'object') { node = /*#__PURE__*/React.createElement("div", null, node); } return node; }); return /*#__PURE__*/React.createElement(Comp, _extends({}, props, convertedProps)); }; } export 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.createElement(Comp, props, node); } return /*#__PURE__*/React.createElement("div", null, children); }; } /** * moment对象在序列化后会被转为字符串 * 需要让日期类组件支持接受字符串值 */ export 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.isMoment(v) ? v : moment(v); }); } return moment.isMoment(prop) ? prop : moment(prop); } }); return /*#__PURE__*/React.createElement(Comp, _extends({}, props, convertedProps)); }; }