choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
220 lines (189 loc) • 8.06 kB
JavaScript
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard")["default"];
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = _interopRequireWildcard(require("react"));
var _classnames = _interopRequireDefault(require("classnames"));
var _icon = _interopRequireDefault(require("../../../../lib/icon"));
var _textField = _interopRequireDefault(require("../../text-field"));
var _checkBox = _interopRequireDefault(require("../../check-box"));
var _localeContext = require("../../locale-context");
var _TableDynamicFilterBar = require("./TableDynamicFilterBar");
var FieldList = function FieldList(_ref) {
var value = _ref.value,
onSelect = _ref.onSelect,
onUnSelect = _ref.onUnSelect,
groups = _ref.groups,
prefixCls = _ref.prefixCls,
queryDataSet = _ref.queryDataSet;
var _useState = (0, _react.useState)(''),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
searchText = _useState2[0],
setSearchText = _useState2[1];
var codes = (0, _react.useMemo)(function () {
return groups.reduce(function (res, current) {
return [].concat((0, _toConsumableArray2["default"])(res), (0, _toConsumableArray2["default"])(current.fields.map(function (o) {
var hasBindProps = function hasBindProps(propsName) {
return o && o.get(propsName) && o.get(propsName).bind;
};
if (!o.get('bind') && !hasBindProps('computedProps') && !hasBindProps('dynamicProps')) {
return o.get('name');
}
return undefined;
})));
}, []);
}, [groups]);
var labelCodes = (0, _react.useMemo)(function () {
return groups.reduce(function (res, current) {
return [].concat((0, _toConsumableArray2["default"])(res), (0, _toConsumableArray2["default"])(current.fields.map(function (o) {
var hasBindProps = function hasBindProps(propsName) {
return o && o.get(propsName) && o.get(propsName).bind;
};
if (!o.get('bind') && !hasBindProps('computedProps') && !hasBindProps('dynamicProps')) {
return [o.get('name'), o.get('label')];
}
return undefined;
})));
}, []);
}, [groups]);
var hasSelect = (0, _react.useMemo)(function () {
var isSelect = labelCodes.some(function (lc) {
if (lc && (lc[1] && lc[1].includes(searchText || '') || lc[1] === undefined)) {
return value.includes(lc[0]);
}
return false;
});
return isSelect;
}, [value.length, searchText]);
var hasSelectAll = (0, _react.useMemo)(function () {
var isAll = labelCodes.some(function (lc) {
if (lc && (lc[1] && lc[1].includes(searchText || '') || lc[1] === undefined)) {
return !value.includes(lc[0]);
}
return false;
});
return !isAll;
}, [searchText, value.length]);
var isChecked = (0, _react.useCallback)(function (code) {
return value.includes(code);
}, [value]);
var handleChange = (0, _react.useCallback)(function (code, select) {
if (select) {
onSelect(code);
} else {
onUnSelect(code);
}
}, [onSelect, onUnSelect]);
var renderGroup = (0, _react.useCallback)(function (group) {
return group.fields.length > 0 && /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-section"),
key: group.title
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-list")
}, group.fields.map(function (field) {
var code = field.get('name');
var label = field.get('label') || code;
var checked = isChecked(code);
var disabled = queryDataSet && (0, _TableDynamicFilterBar.fieldIsDisabled)(field, queryDataSet);
var hasBindProps = function hasBindProps(propsName) {
return field && field.get(propsName) && field.get(propsName).bind;
};
if (label && label.includes(searchText || '') && !field.get('bind') && !hasBindProps('computedProps') && !hasBindProps('dynamicProps')) {
var itemClassNames = (0, _classnames["default"])("".concat(prefixCls, "-item"), (0, _defineProperty2["default"])({}, "".concat(prefixCls, "-item-disabled"), disabled));
return /*#__PURE__*/_react["default"].createElement("div", {
className: itemClassNames,
key: code
}, /*#__PURE__*/_react["default"].createElement(_checkBox["default"], {
value: code,
checked: checked,
onChange: function onChange() {
return handleChange(code, !checked);
}
}, label));
}
return null;
})));
}, [handleChange, isChecked, searchText, queryDataSet]);
var selectItems = value.filter(function (v) {
return codes.includes(v);
});
return /*#__PURE__*/_react["default"].createElement("div", {
className: prefixCls
}, /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-search")
}, /*#__PURE__*/_react["default"].createElement(_textField["default"], {
style: {
flex: 1
},
value: searchText,
onClick: function onClick(e) {
e.preventDefault();
e.currentTarget.focus();
},
onChange: function onChange(v) {
setSearchText(v);
},
onInput: function onInput(e) {
setSearchText(e.target.value);
},
prefix: /*#__PURE__*/_react["default"].createElement(_icon["default"], {
type: "search"
}),
placeholder: (0, _localeContext.$l)('Table', 'enter_text_filter'),
clearButton: true
})), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-header")
}, /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-search-selected")
}, (0, _localeContext.$l)('Screening', 'selected'), /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-search-items")
}, selectItems.length), (0, _localeContext.$l)('Transfer', 'items')), /*#__PURE__*/_react["default"].createElement("span", {
className: "".concat(prefixCls, "-search-divide")
}), /*#__PURE__*/_react["default"].createElement("span", {
style: {
display: !hasSelectAll ? 'inline-block' : 'none'
},
className: "".concat(prefixCls, "-search-action"),
onClick: function onClick() {
var values = labelCodes.map(function (lc) {
if (lc && (lc[1] && lc[1].includes(searchText || '') || lc[1] === undefined)) {
return lc[0];
}
return undefined;
}).filter(function (v) {
return !!v;
});
handleChange(values, true);
}
}, (0, _localeContext.$l)('Select', 'select_all')), /*#__PURE__*/_react["default"].createElement("span", {
style: {
display: hasSelect ? 'inline-block' : 'none'
},
className: "".concat(prefixCls, "-search-action"),
onClick: function onClick() {
var values = labelCodes.map(function (lc) {
if (lc && (lc[1] && lc[1].includes(searchText || '') || lc[1] === undefined)) {
return lc[0];
}
return undefined;
}).filter(function (v) {
return !!v;
});
handleChange(values, false);
}
}, (0, _localeContext.$l)('Table', 'clear_filter'))), /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-content")
}, groups.map(function (group) {
return renderGroup(group);
})));
};
FieldList.displayName = 'FieldList';
var _default = /*#__PURE__*/(0, _react.memo)(FieldList);
exports["default"] = _default;
//# sourceMappingURL=FieldList.js.map
;