UNPKG

choerodon-ui

Version:

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

154 lines (134 loc) 5.15 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _react = _interopRequireWildcard(require("react")); var _icon = _interopRequireDefault(require("../../../../lib/icon")); var _button = _interopRequireDefault(require("../../button")); var _textField = _interopRequireDefault(require("../../text-field")); var _checkBox = _interopRequireDefault(require("../../check-box")); var _enum = require("../../button/enum"); var _localeContext = require("../../locale-context"); var FieldList = function FieldList(_ref) { var closeMenu = _ref.closeMenu, value = _ref.value, onSelect = _ref.onSelect, onUnSelect = _ref.onUnSelect, groups = _ref.groups, prefixCls = _ref.prefixCls; 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) { return o.get('name'); }))); }, []); }, [groups]); var hasSelect = (0, _react.useMemo)(function () { return value.length > 0; }, [value.length]); var hasSelectAll = (0, _react.useMemo)(function () { return value.length >= codes.length; }, [codes.length, 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 && _react["default"].createElement("div", { className: "".concat(prefixCls, "-section"), key: group.title }, _react["default"].createElement("div", { className: "".concat(prefixCls, "-title") }, group.title), _react["default"].createElement("div", { className: "".concat(prefixCls, "-list") }, group.fields.map(function (field) { var code = field.get('name'); var label = field.get('label'); var checked = isChecked(code); if (label.includes(searchText || '')) { return _react["default"].createElement("div", { className: "".concat(prefixCls, "-item"), key: code }, _react["default"].createElement(_checkBox["default"], { value: code, disabled: field.get('disabled'), checked: checked, onChange: function onChange() { return handleChange(code, !checked); } }, label)); } return null; }))); }, [handleChange, isChecked, searchText]); return _react["default"].createElement("div", { className: prefixCls }, _react["default"].createElement("div", { className: "".concat(prefixCls, "-search") }, _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) { // @ts-ignore setSearchText(e.target.value); }, prefix: _react["default"].createElement(_icon["default"], { type: "search" }), placeholder: (0, _localeContext.$l)('Table', 'enter_text_filter'), clearButton: true })), _react["default"].createElement("div", { className: "".concat(prefixCls, "-header") }, _react["default"].createElement(_checkBox["default"], { indeterminate: !hasSelectAll && hasSelect, checked: hasSelectAll, onChange: function onChange(checkAll) { if (checkAll) { // 避免焦点丢失时无法再次点击添加筛选 closeMenu(); // TODO: 过滤disabled的code 如果存在 handleChange(codes, true); } else { handleChange(codes, false); } } }, (0, _localeContext.$l)('Select', 'select_all')), _react["default"].createElement(_button["default"], { style: { display: hasSelect ? 'inline-block' : 'none' }, funcType: _enum.FuncType.flat, onClick: function onClick() { handleChange(codes, false); } }, (0, _localeContext.$l)('Table', 'clear_filter'))), _react["default"].createElement("div", { className: "".concat(prefixCls, "-content") }, groups.map(function (group) { return renderGroup(group); }))); }; var _default = FieldList; exports["default"] = _default; //# sourceMappingURL=FieldList.js.map