choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
76 lines (66 loc) • 2.52 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import { Children, isValidElement } from 'react';
import DataSet from '../data-set/DataSet';
import { DataSetSelection, FieldType } from '../data-set/enum';
function getOptionsFromChildren(elements, data, fields, textField, valueField, disabledField) {
var groups = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : [];
if (elements) {
Children.forEach(elements, function (child) {
if (isValidElement(child)) {
var type = child.type;
if (type.__PRO_OPT_GROUP) {
var props = child.props;
getOptionsFromChildren(props.children, data, fields, textField, valueField, disabledField, groups.concat(props.label || ''));
} else if (type.__PRO_OPTION) {
var _groups$reduce;
var _child$props = child.props,
value = _child$props.value,
children = _child$props.children,
disabled = _child$props.disabled;
data.push(groups.reduce(function (obj, group, index) {
var name = "group-".concat(index);
obj[name] = group;
if (!fields.find(function (field) {
return field.name === name;
})) {
fields.push({
name: name,
type: FieldType.reactNode,
group: groups.length - 1
});
}
return obj;
}, (_groups$reduce = {}, _defineProperty(_groups$reduce, textField, children), _defineProperty(_groups$reduce, valueField, value === undefined && isValidElement(children) ? children : value), _defineProperty(_groups$reduce, disabledField, disabled), _groups$reduce)));
}
}
});
}
}
export default function normalizeOptions(_ref) {
var textField = _ref.textField,
valueField = _ref.valueField,
disabledField = _ref.disabledField,
multiple = _ref.multiple,
children = _ref.children;
var data = [];
var fields = [{
name: textField,
type: FieldType.reactNode
}, {
name: valueField
}, {
name: disabledField,
type: FieldType["boolean"]
}];
if (children) {
getOptionsFromChildren(children, data, fields, textField, valueField, disabledField);
}
return new DataSet({
data: data,
fields: fields,
paging: false,
selection: multiple ? DataSetSelection.multiple : DataSetSelection.single,
autoLocateFirst: false
});
}
//# sourceMappingURL=normalizeOptions.js.map