UNPKG

@aliretail/react-materials-components

Version:
126 lines (107 loc) 3.46 kB
import _Tree from "@alifd/next/es/tree"; import _Button from "@alifd/next/es/button"; import _Icon from "@alifd/next/es/icon"; import _inheritsLoose from "@babel/runtime/helpers/inheritsLoose"; import _Overlay from "@alifd/next/es/overlay"; import * as React from 'react'; import { tableSourceToTreeSource, getColumnKey } from "./util"; var Popup = _Overlay.Popup; var modClassName = 'aliretail-table-column-picker'; var ColumnPicker = /*#__PURE__*/function (_React$Component) { _inheritsLoose(ColumnPicker, _React$Component); function ColumnPicker(props) { var _this; _this = _React$Component.call(this, props) || this; _this.onDrop = function (info) { if (!info.dragNode) { return; } var dragKey = info.dragNode.props.eventKey; var dropKey = info.node.props.eventKey; var dropPosition = info.dropPosition; var loop = function loop(data, key, callback) { data.forEach(function (item, index, arr) { if (getColumnKey(item) === key) { return callback(item, index, arr); } if (item.children) { return loop(item.children, key, callback); } }); }; var data = [].concat(_this.props.dataSource); var dragObj; // 拖拽走了哪一个节点,删除此节点 loop(data, dragKey, function (item, index, arr) { arr.splice(index, 1); dragObj = item; }); if (info.dropPosition === 0) { loop(data, dropKey, function (item) { item.children = item.children || []; item.children.push(dragObj); }); } else { var ar; var i; loop(data, dropKey, function (item, index, arr) { ar = arr; i = index; }); if (dropPosition === -1) { ar.splice(i, 0, dragObj); } else { ar.splice(i + 1, 0, dragObj); } } _this.props.onColumnChange(data); }; _this.handleSelect = function (selectedKeys) { _this.props.onVisibleChange(selectedKeys); }; _this.state = { dataSource: tableSourceToTreeSource(props.dataSource) }; return _this; } ColumnPicker.getDerivedStateFromProps = function getDerivedStateFromProps(nextProps) { return { dataSource: tableSourceToTreeSource(nextProps.dataSource) }; }; var _proto = ColumnPicker.prototype; _proto.render = function render() { var value = this.props.value; var dataSource = this.state.dataSource; var trigger = /*#__PURE__*/React.createElement(_Button, { text: true, size: "large" }, /*#__PURE__*/React.createElement(_Icon, { type: "list" })); return /*#__PURE__*/React.createElement(Popup, { className: modClassName, trigger: trigger, container: function container(triggerNode) { return triggerNode.parentNode; }, triggerType: "click", align: "tr br" }, /*#__PURE__*/React.createElement("div", { className: modClassName + "-popup" }, /*#__PURE__*/React.createElement(_Tree, { style: { textAlign: 'left' }, checkable: true, selectable: false, defaultExpandAll: true, defaultCheckedKeys: value, draggable: true, onDrop: this.onDrop, onCheck: this.handleSelect, dataSource: dataSource }))); }; return ColumnPicker; }(React.Component); export default ColumnPicker;