mobile-more
Version:
基于 antd-mobile v5 扩展移动端 UI 组件
45 lines • 2.05 kB
JavaScript
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
var _excluded = ["fieldNames", "valueEnum", "value", "defaultLabel", "match", "component"];
import * as React from 'react';
var BaseDictionary = function BaseDictionary(_ref) {
var fieldNames = _ref.fieldNames,
valueEnum = _ref.valueEnum,
value = _ref.value,
_ref$defaultLabel = _ref.defaultLabel,
defaultLabel = _ref$defaultLabel === void 0 ? '-' : _ref$defaultLabel,
match = _ref.match,
_ref$component = _ref.component,
component = _ref$component === void 0 ? 'span' : _ref$component,
restProps = _objectWithoutProperties(_ref, _excluded);
var _React$useMemo = React.useMemo(function () {
return _objectSpread({
label: 'label',
value: 'value',
props: 'props'
}, fieldNames);
}, [fieldNames]),
labelKey = _React$useMemo.label,
valueKey = _React$useMemo.value,
propsKey = _React$useMemo.props;
var matchMethod = React.useCallback(function (itemValue, value) {
return typeof match === 'function' ? match(itemValue, value) : itemValue === value;
}, [match]);
var ret = React.useMemo(function () {
return valueEnum.find(function (item) {
return matchMethod(item[valueKey], value);
});
}, [matchMethod, value, valueEnum, valueKey]);
var props = _objectSpread(_objectSpread({}, ret === null || ret === void 0 ? void 0 : ret[propsKey]), restProps);
var child = (ret === null || ret === void 0 ? void 0 : ret[labelKey]) || defaultLabel;
// html标签
if (typeof component === 'string') {
return /*#__PURE__*/React.createElement(component, props, child);
}
// 自定义组件
if (/*#__PURE__*/React.isValidElement(component)) {
return /*#__PURE__*/React.cloneElement(component, _objectSpread(_objectSpread({}, props), (component === null || component === void 0 ? void 0 : component.props) || {}), child);
}
return child;
};
export default BaseDictionary;