UNPKG

choerodon-ui

Version:

An enterprise-class UI design language and React-based implementation

197 lines (181 loc) 6.93 kB
import _defineProperty from "@babel/runtime/helpers/defineProperty"; import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray"; import _slicedToArray from "@babel/runtime/helpers/slicedToArray"; import React, { useCallback, useMemo, useState, memo } from 'react'; import classNames from 'classnames'; import Icon from '../../../../es/icon'; import TextField from '../../text-field'; import CheckBox from '../../check-box'; import { $l } from '../../locale-context'; import { fieldIsDisabled } from './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 = useState(''), _useState2 = _slicedToArray(_useState, 2), searchText = _useState2[0], setSearchText = _useState2[1]; var codes = useMemo(function () { return groups.reduce(function (res, current) { return [].concat(_toConsumableArray(res), _toConsumableArray(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 = useMemo(function () { return groups.reduce(function (res, current) { return [].concat(_toConsumableArray(res), _toConsumableArray(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 = 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 = 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 = useCallback(function (code) { return value.includes(code); }, [value]); var handleChange = useCallback(function (code, select) { if (select) { onSelect(code); } else { onUnSelect(code); } }, [onSelect, onUnSelect]); var renderGroup = useCallback(function (group) { return group.fields.length > 0 && /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-section"), key: group.title }, /*#__PURE__*/React.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 && 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 = classNames("".concat(prefixCls, "-item"), _defineProperty({}, "".concat(prefixCls, "-item-disabled"), disabled)); return /*#__PURE__*/React.createElement("div", { className: itemClassNames, key: code }, /*#__PURE__*/React.createElement(CheckBox, { 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.createElement("div", { className: prefixCls }, /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-search") }, /*#__PURE__*/React.createElement(TextField, { 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.createElement(Icon, { type: "search" }), placeholder: $l('Table', 'enter_text_filter'), clearButton: true })), /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-header") }, /*#__PURE__*/React.createElement("span", { className: "".concat(prefixCls, "-search-selected") }, $l('Screening', 'selected'), /*#__PURE__*/React.createElement("span", { className: "".concat(prefixCls, "-search-items") }, selectItems.length), $l('Transfer', 'items')), /*#__PURE__*/React.createElement("span", { className: "".concat(prefixCls, "-search-divide") }), /*#__PURE__*/React.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); } }, $l('Select', 'select_all')), /*#__PURE__*/React.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); } }, $l('Table', 'clear_filter'))), /*#__PURE__*/React.createElement("div", { className: "".concat(prefixCls, "-content") }, groups.map(function (group) { return renderGroup(group); }))); }; FieldList.displayName = 'FieldList'; export default /*#__PURE__*/memo(FieldList); //# sourceMappingURL=FieldList.js.map