UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

375 lines (361 loc) 12.2 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator"; import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray"; import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; var _excluded = ["item"]; import _regeneratorRuntime from "@babel/runtime/regenerator"; import React, { useState, useEffect, useMemo } from 'react'; import Form from "../../form"; import Button from "../../button"; import Dropdown from "../../dropdown"; import Drawer from "../../drawer"; import Input from "../../input"; import Radio from "../../radio"; import Space from "../../space"; import Tag from "../../tag"; import IconFont from "../../icon-font"; import VirtualList from "../../virtual-list"; import { getIsHas, getFlatItem } from "../utils"; // import CustomModal from '../components/modal' import SelectFilter from "../components/SelectFilter"; import ValueDrawer from "./valueDrawer"; // 选中的筛选项 var ListItemChecked = function ListItemChecked(_ref) { var instance = _ref.instance, itemProps = _ref.item; var state = instance.state, dispatch = instance.dispatch, dataSource = instance.dataSource, locale = instance.locale; var complexDrawer = state.complexDrawer; var field = itemProps.field, _itemProps$value = itemProps.value, valueObj = _itemProps$value === void 0 ? {} : _itemProps$value; // 单项匹配数据, 根据字段名查找, 嵌套筛选时查询父级 var getItem = useMemo(function () { return dataSource.find(function (v) { return [field, valueObj.originField].includes(v.field); }); }, [field, valueObj.originField, dataSource]); // 选中值的处理 var resetValue = useMemo(function () { return valueObj.value; }, [valueObj.value]); // 选中的数据 var checkedValues = useMemo(function () { var checkedValue = valueObj.value; if (Array.isArray(checkedValue)) { var _getItem$data; if (['date'].includes(getItem.type)) { return [{ value: resetValue, label: "".concat(resetValue[0], " ~ ").concat(resetValue[1]) }]; } if (getItem.type === 'nested') { return checkedValue; } if (getItem.type === 'cascader') { return getFlatItem(getItem, checkedValue, 'parent'); } return (_getItem$data = getItem.data) === null || _getItem$data === void 0 ? void 0 : _getItem$data.filter(function (v) { return checkedValue.includes(v.value); }); } if (['input', 'date'].includes(getItem.type)) { return resetValue ? [{ value: resetValue, label: resetValue }] : []; } var filterValue = getItem.data.find(function (v) { return v.value === checkedValue; }); return filterValue ? [filterValue] : []; }, [getItem, valueObj.value]); // 编辑 var handleEdit = function handleEdit() { dispatch({ type: 'changeValueDrawer', valueDrawer: { visible: true, data: _objectSpread(_objectSpread({}, getItem), valueObj) } }); }; // 删除 var handleDelete = function handleDelete(e) { e.stopPropagation(); var filterValues = _objectSpread({}, complexDrawer.data); delete filterValues[field]; dispatch({ type: 'changeComplexDrawer', complexDrawer: { visible: true, data: filterValues } }); }; // 删除Tag var onTagClose = function onTagClose(val) { var originData = _objectSpread({}, complexDrawer.data); var nValue = ''; if (['select', 'checkbox'].includes(getItem.type)) { nValue = originData[field].value.filter(function (v) { return !v.includes(val); }); } if (['input'].includes(getItem.type)) { nValue = ''; } if (['cascader'].includes(getItem.type)) { nValue = []; } var filterValues = _objectSpread(_objectSpread({}, originData), {}, _defineProperty({}, field, _objectSpread(_objectSpread({}, originData[field]), {}, { value: nValue }))); dispatch({ type: 'changeComplexDrawer', complexDrawer: { visible: true, data: filterValues } }); }; // Tags显示 var tagElem = function tagElem() { return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Tag, { className: "add_tags" }, /*#__PURE__*/React.createElement(IconFont, { type: "lmweb-plus" }), " ", locale.drawerItemAdd), checkedValues === null || checkedValues === void 0 ? void 0 : checkedValues.map(function (v) { return /*#__PURE__*/React.createElement(Tag, { key: v.value, closable: true, onClose: function onClose() { return onTagClose(v.value); } }, v.label); })); }; // 模式 var modeLabel = useMemo(function () { return valueObj.mode === 'and' ? locale.and : locale.or; }, [valueObj.mode]); return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", { className: "item_box", onClick: handleEdit }, /*#__PURE__*/React.createElement("div", { className: "item_header" }, /*#__PURE__*/React.createElement("div", { className: "item_header_title" }, "".concat(getItem.title, "\uFF08").concat(modeLabel, "\uFF09")), /*#__PURE__*/React.createElement(IconFont, { type: "lmweb-close1", onClick: handleDelete, className: "item_header_icon" })), /*#__PURE__*/React.createElement("div", { className: "item_tags" }, tagElem()))); }; // 新增筛选项按钮 var DropdownBtn = function DropdownBtn(_ref2) { var instance = _ref2.instance; var dispatch = instance.dispatch, dataSource = instance.dataSource, locale = instance.locale; var _useState = useState(false), _useState2 = _slicedToArray(_useState, 2), visible = _useState2[0], setVisible = _useState2[1]; var selectInstance = { filterValue: '', setFilterValue: function setFilterValue(_, valObj) { setVisible(false); dispatch({ type: 'changeValueDrawer', valueDrawer: { visible: true, type: 'custom', data: _objectSpread(_objectSpread({}, valObj), {}, { value: [] }) } }); } }; var itemProps = { data: dataSource, fieldNames: { label: 'title', value: 'field' } }; return /*#__PURE__*/React.createElement(Dropdown, { trigger: ['click'], placement: "bottomLeft", visible: visible, onVisibleChange: function onVisibleChange(v) { return setVisible(v); }, overlay: /*#__PURE__*/React.createElement(SelectFilter, { instance: selectInstance, item: itemProps }), overlayClassName: "filter_dropdown_container_btn" }, /*#__PURE__*/React.createElement(Button, { block: true, type: "dashed", icon: /*#__PURE__*/React.createElement(IconFont, { type: "lmweb-plus" }), size: "middle" }, locale.customDrawerDropdownButton)); }; var Index = function Index(_ref3) { var instance = _ref3.instance; var state = instance.state, dispatch = instance.dispatch, locale = instance.locale; var customDrawer = state.customDrawer; var _Form$useForm = Form.useForm(), _Form$useForm2 = _slicedToArray(_Form$useForm, 1), form = _Form$useForm2[0]; // 过滤的内容转数组 var filterItemData = useMemo(function () { return getIsHas(customDrawer.data) ? Object.entries(customDrawer.data).map(function (v) { return { field: v[0], value: v[1] }; }) : []; }, [customDrawer.data]); // 关闭抽屉 var onClose = function onClose() { dispatch({ type: 'changeCustomDrawer', customDrawer: _objectSpread(_objectSpread({}, customDrawer), {}, { visible: false }) }); }; // 保存数据 var onSave = /*#__PURE__*/function () { var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee() { var val, nValue; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) switch (_context.prev = _context.next) { case 0: _context.prev = 0; _context.next = 3; return form.validateFields(); case 3: val = _context.sent; nValue = _objectSpread(_objectSpread({}, customDrawer), val); if (!nValue.value) { Object.assign(nValue, { value: "diy".concat(Date.now()) }); } dispatch({ type: 'changeSaveModal', saveModal: { visible: true, data: nValue } }); _context.next = 12; break; case 9: _context.prev = 9; _context.t0 = _context["catch"](0); console.log('error:', _context.t0); case 12: case "end": return _context.stop(); } }, _callee, null, [[0, 9]]); })); return function onSave() { return _ref4.apply(this, arguments); }; }(); // 弹窗配置项 var config = { title: customDrawer.type === 'edit' ? "".concat(locale.customDrawerEdit).concat(customDrawer.label) : locale.customDrawerTitle, visible: customDrawer.visible, onClose: onClose, width: 440, placement: 'right', destroyOnClose: true, className: 'lm_filter_drawer', extra: /*#__PURE__*/React.createElement(Space, null, /*#__PURE__*/React.createElement(Button, { onClick: onClose, size: "small" }, locale.customDrawerCancel), /*#__PURE__*/React.createElement(Button, { type: "primary", onClick: onSave, size: "small" }, locale.customDrawerOk)) }; useEffect(function () { if (customDrawer.visible) { form.resetFields(); } }, [customDrawer.visible, form]); return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(Drawer, config, /*#__PURE__*/React.createElement("div", { className: "custom_filter_body" }, /*#__PURE__*/React.createElement(Form, { form: form, initialValues: { label: customDrawer.label, default: !!customDrawer.default }, layout: "vertical" }, /*#__PURE__*/React.createElement("div", { className: "filter_drawer_group" }, /*#__PURE__*/React.createElement(Form.Item, { name: "label", label: locale.customDrawerInputLabel, rules: [{ required: true, message: locale.customDrawerInputMessage }] }, /*#__PURE__*/React.createElement(Input, { placeholder: locale.placeholder, size: "middle" }))), /*#__PURE__*/React.createElement("div", { className: "filter_drawer_group" }, /*#__PURE__*/React.createElement(Form.Item, { name: "default", label: locale.customDrawerDefault }, /*#__PURE__*/React.createElement(Radio.Group, { size: "small" }, /*#__PURE__*/React.createElement(Radio, { value: true }, locale.customDrawerDefaultRadioYes), /*#__PURE__*/React.createElement(Radio, { value: false }, locale.customDrawerDefaultRadioNo))))), /*#__PURE__*/React.createElement("div", { className: "filter_drawer_group" }, /*#__PURE__*/React.createElement("div", { className: "filter_drawer_group_add" }, /*#__PURE__*/React.createElement(DropdownBtn, { instance: instance })), /*#__PURE__*/React.createElement(VirtualList, { options: filterItemData, className: "filter_drawer_group_list" }, function (_ref5) { var item = _ref5.item, resetProps = _objectWithoutProperties(_ref5, _excluded); return /*#__PURE__*/React.createElement("div", _extends({}, resetProps, { className: "filter_drawer_group_item" }), /*#__PURE__*/React.createElement(ListItemChecked, { instance: instance, item: item })); }))), /*#__PURE__*/React.createElement(ValueDrawer, { instance: instance }))); }; export default Index;