UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

171 lines (164 loc) 6.71 kB
"use strict"; 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 _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _classnames = _interopRequireDefault(require("classnames")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _pick = _interopRequireDefault(require("lodash/pick")); var _react = _interopRequireWildcard(require("react")); var _iconFont = _interopRequireDefault(require("../../icon-font")); const TitleRender = ({ title, colon }) => { const str = `${title || ''}${colon ? ':' : ''}`; return /*#__PURE__*/_react.default.createElement("label", { className: "filter_item_label" }, str); }; const PlaceholderRender = ({ type, placeholder }) => { if (['dateRange', 'range'].includes(type) && Array.isArray(placeholder)) { return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, placeholder[0], /*#__PURE__*/_react.default.createElement(_iconFont.default, { type: "lm-icon-swap-right", style: { fontSize: 14 } }), placeholder[1]); } return /*#__PURE__*/_react.default.createElement("span", null, placeholder); }; // 格式化显示内容(同时判定value与type, 防止value与type不匹配时的显示问题) const ValueRender = props => { const { value, type, options, fieldNames, optionLabelProp } = props; const optionMap = (0, _react.useMemo)(() => new Map(options.map(option => [option[fieldNames.value], option[optionLabelProp || fieldNames.label]])), [options, fieldNames, optionLabelProp]); /** * 转换展示的格式([string, string, any...]) => 'string' | 'string、string' | 'string、+n' * @description 对于传入的数组仅前两项存在的话必须是字符串类型, 其余项不做类型要求 */ const transformText = labels => { const [first, ...others] = labels; const resetLabels = [first].concat(others.length > 1 ? `+${others.length}...` : others); return resetLabels.join('、'); }; if (['select'].includes(type)) { const label = optionMap.has(value) ? optionMap.get(value) : value; return /*#__PURE__*/_react.default.createElement("span", null, label); } // 日期的展示处理 if (['dateRange', 'range'].includes(type) && Array.isArray(value)) { return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, value[0], /*#__PURE__*/_react.default.createElement(_iconFont.default, { type: "lm-icon-swap-right", style: { fontSize: 14, color: 'var(--text-color)' } }), value[1]); } if (['checkbox'].includes(type) && Array.isArray(value)) { // 优化处理, 仅处理前两项 const firstTwoValue = value.slice(0, 2); const firstTwoLabels = firstTwoValue.map(item => optionMap.has(item) ? optionMap.get(item) : item); const others = value.slice(2); const str = transformText(firstTwoLabels.concat(others)); return /*#__PURE__*/_react.default.createElement("span", null, str); } // value: string[] | Array<string[]> if (['cascader'].includes(type) && Array.isArray(value)) { const firstTwoValue = value.slice(0, 2); const isCheckedMultiple = firstTwoValue.every(Array.isArray); const matchLabel = (checkedKeys = []) => { let checkedLabel; checkedKeys.reduce((pre, cur, index, array) => { const option = (pre || []).find(v => v[fieldNames.value] === cur) || {}; if (index + 1 === array.length) { checkedLabel = option[fieldNames.label] || cur; } return option[fieldNames.children] || []; }, options); return checkedLabel; }; // 优化处理, 仅处理前两项 if (isCheckedMultiple) { const firstTwoLabels = firstTwoValue.map(matchLabel); const others = value.slice(2); const str = transformText(firstTwoLabels.concat(others)); return /*#__PURE__*/_react.default.createElement("span", null, str); } const str = transformText([matchLabel(value)]); return /*#__PURE__*/_react.default.createElement("span", null, str); } if (['numberRange'].includes(type) && Array.isArray(value)) { const unitLabel = optionMap.has(value[2]) ? optionMap.get(value[2]) : value[2]; return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, value[0], " ~ ", value[1], unitLabel); } return /*#__PURE__*/_react.default.createElement("span", null, value); }; const ClearRender = ({ onChange }) => { return /*#__PURE__*/_react.default.createElement(_iconFont.default, { type: "lm-icon-a-shidia0shanchu", className: "filter_item_icon", onClick: e => { e.stopPropagation(); onChange(); } }); }; const SuffixRender = ({ type }) => { if (['date', 'range', 'dateRange'].includes(type)) { return /*#__PURE__*/_react.default.createElement(_iconFont.default, { className: "filter_item_icon", type: "lm-icon-a-tongyongaGrili" }); } return /*#__PURE__*/_react.default.createElement(_iconFont.default, { className: "filter_item_icon addon_after", type: "lm-icon-a-jiantoua2xialaxia" }); }; const LabelContainer = props => { const { value, onChange, type, open, size } = props; // 是否存在value const excitingValue = (0, _react.useMemo)(() => { if ((0, _isNil.default)(value)) return false; if (Array.isArray(value)) return !!value.length; return true; }, [value]); const AsProps = (0, _pick.default)(props, ['onMouseEnter', 'onMouseLeave', 'onFocus', 'onClick']); return /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({ className: (0, _classnames.default)('lm_filter_basic_item', size, { expand: open, active: excitingValue }) }, AsProps), /*#__PURE__*/_react.default.createElement(TitleRender, (0, _pick.default)(props, ['title', 'colon'])), /*#__PURE__*/_react.default.createElement("div", { className: "filter_item_value" }, excitingValue ? /*#__PURE__*/_react.default.createElement(ValueRender, (0, _pick.default)(props, ['type', 'value', 'options', 'fieldNames'])) : /*#__PURE__*/_react.default.createElement(PlaceholderRender, (0, _pick.default)(props, ['type', 'placeholder']))), excitingValue ? /*#__PURE__*/_react.default.createElement(ClearRender, { onChange: onChange }) : /*#__PURE__*/_react.default.createElement(SuffixRender, { type: type })); }; var _default = LabelContainer; exports.default = _default;