syber-lowcode-business-materials
Version:
syber-lowcode-business-materials
88 lines (84 loc) • 2.57 kB
JavaScript
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));
};
}