@qn-pandora/pandora-visualization
Version:
Pandora 通用可视化库
56 lines (55 loc) • 2.33 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __rest = (this && this.__rest) || function (s, e) {
var t = {};
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
t[p] = s[p];
if (s != null && typeof Object.getOwnPropertySymbols === "function")
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
t[p[i]] = s[p[i]];
}
return t;
};
import * as React from 'react';
import { includes } from 'lodash';
/**
* 针对一个form的所有字段, 想要展示的字段子集
* e.g form的所有字段为 ['name', 'password', 'age']
* 如果只想展示name、password字段, 则fields可传['name', 'password'] 或 [{ field: 'name' }, { field: 'password' }]
* @param fields
*/
export function wrapper(fields) {
if (fields === void 0) { fields = []; }
return function (Item) {
return function (props) {
var fieldNames = fields.map(function (item) {
return typeof item === 'string' ? item : item.field;
});
if (!fields.length) {
return React.createElement(Item, __assign({}, props));
}
var fieldName = props.field;
if (Item && includes(fieldNames, fieldName)) {
// 成员为对象时, 覆盖原有属性
var currentField = fields.find(function (item) { return typeof item === 'object' && item.field === fieldName; });
if (currentField) {
var field = currentField.field, restProps = __rest(currentField, ["field"]);
return React.createElement(Item, __assign({}, props, restProps));
}
// 成员为字符串时, 返回原Item
return React.createElement(Item, __assign({}, props));
}
return null;
};
};
}