UNPKG

shineout

Version:

Shein 前端组件库

303 lines (249 loc) 11.4 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard"); var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _uid = require("../utils/uid"); var _styles = require("./styles"); var _Sorter = _interopRequireDefault(require("./Sorter")); var _CheckboxAll = _interopRequireDefault(require("./CheckboxAll")); var _element = require("../utils/dom/element"); var _is = require("../utils/is"); var cacheGroup = new Map(); var MIN_RESIZABLE_WIDTH = 20; var Thead = /*#__PURE__*/ function (_PureComponent) { (0, _inheritsLoose2.default)(Thead, _PureComponent); function Thead(props) { var _this; _this = _PureComponent.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleMouseDown", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleMouseMove", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "handleMouseUp", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "resizingTh", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "resizingTable", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "columnLevel", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "resizingIndex", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "resizingCol", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "lastX", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "rightBorderRecord", void 0); _this.handleMouseDown = _this.handleResize.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'mousedown'); _this.handleMouseMove = _this.handleResize.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'mousemove'); _this.handleMouseUp = _this.handleResize.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), 'mouseup'); return _this; } var _proto = Thead.prototype; _proto.setColumns = function setColumns(columns, col, level, index) { if (index === void 0) { index = 0; } if (!col.group) { columns.push(col); return 1; } if (level > this.columnLevel) this.columnLevel = level; var g = Array.isArray(col.group) ? col.group : [col.group]; var last = columns[columns.length - 1]; if (!g[level]) { columns.push(col); return 1; } var colSpan = 0; if (last && last.name === g[level]) { colSpan = this.setColumns(last.columns, col, level + 1, index); last.colSpan += colSpan; if (col.fixed) last.fixed = col.fixed; if (col.lastFixed) last.lastFixed = true; } else { var sub = []; colSpan = this.setColumns(sub, col, level + 1, index); var group = g[level]; columns.push({ name: g[level], key: typeof g[level] === 'string' ? index + "-" + g[level] : cacheGroup.get(group) || cacheGroup.set(group, (0, _uid.getUidStr)()).get(group), colSpan: colSpan, level: level, fixed: col.fixed, firstFixed: col.firstFixed, columns: sub }); } return colSpan; }; _proto.resizeColgroup = function resizeColgroup(deltaX) { var columns = this.props.columns; var item = columns[this.resizingIndex]; var minWidth = item.minWidth, maxWidth = item.maxWidth; var oWidth = parseInt(this.resizingCol.style.width, 10); if (Number.isNaN(oWidth) || oWidth === 0) { oWidth = this.resizingTh.getBoundingClientRect().width; } var w = oWidth + deltaX; if ((0, _is.isNumber)(minWidth)) { w = Math.max(w, minWidth); } else { w = Math.max(w, MIN_RESIZABLE_WIDTH); } if ((0, _is.isNumber)(maxWidth)) { w = Math.min(w, maxWidth); } this.resizingCol.style.width = w + "px"; }; _proto.handleResize = function handleResize(type, e) { if (type === 'mousedown') { var target = e.target; this.resizingTh = (0, _element.getParent)(target, 'th'); this.resizingTable = (0, _element.getParent)(target, 'table'); var thList = (0, _element.getParent)(target, 'tr').children; var indexInTr = [].indexOf.call(thList, this.resizingTh); this.resizingIndex = [].slice.call(thList, 0, indexInTr).reduce(function (total, th) { var count = Number(th.getAttribute('colspan')) || 1; return total + count; }, 0); this.resizingCol = this.resizingTable.querySelectorAll('col')[this.resizingIndex]; this.resizingTable.classList.add((0, _styles.tableClass)('resizing')); this.resizingTh.classList.add((0, _styles.tableClass)('resizing-item')); document.addEventListener('mousemove', this.handleMouseMove); document.addEventListener('mouseup', this.handleMouseUp); } else if (type === 'mousemove') { var x = e.clientX; if (typeof this.lastX === 'number') { var deltaX = x - this.lastX; this.resizeColgroup(deltaX); } this.lastX = x; } else if (type === 'mouseup') { var _this$props = this.props, onColChange = _this$props.onColChange, colgroup = _this$props.colgroup; document.removeEventListener('mousemove', this.handleMouseMove); document.removeEventListener('mouseup', this.handleMouseUp); this.resizingTable.classList.remove((0, _styles.tableClass)('resizing')); this.resizingTh.classList.remove((0, _styles.tableClass)('resizing-item')); this.lastX = undefined; if (onColChange) onColChange(this.resizingIndex, parseInt(this.resizingCol.style.width, 10), colgroup); } }; _proto.createTh = function createTh(trs, col, level) { var _this2 = this; var columnResizable = this.props.columnResizable; var colTemp = col; var colTemp2 = col; var fixed = []; if (col.fixed) fixed.push("fixed-" + col.fixed); if (col.firstFixed) fixed.push('fixed-first'); if (col.lastFixed) fixed.push('fixed-last'); var _this$props2 = this.props, sorter = _this$props2.sorter, onSortChange = _this$props2.onSortChange, data = _this$props2.data, datum = _this$props2.datum, showSelectAll = _this$props2.showSelectAll, disabled = _this$props2.disabled, treeColumnsName = _this$props2.treeColumnsName, treeCheckAll = _this$props2.treeCheckAll; var isEmpty = !(data && data.length); var align = colTemp.align && "align-" + colTemp.align; var ignoreBorderRight = this.rightBorderRecord[col.key] && 'ignore-right-border'; var resize = level === 0 && !isEmpty && columnResizable && col.columnResizable !== false ? _react.default.createElement("span", { onMouseDown: this.handleMouseDown, className: (0, _styles.tableClass)('resize-spanner') }) : null; if (colTemp.title) { trs[level].push(_react.default.createElement("th", { className: (0, _classnames.default)(_styles.tableClass.apply(void 0, [level > 0 && 'condensed', align, ignoreBorderRight].concat(fixed)), col.className), rowSpan: this.columnLevel - level + 1, key: col.key }, _react.default.createElement("div", { className: (0, _styles.tableClass)(colTemp.sorter && 'has-sorter') }, _react.default.createElement("span", null, typeof colTemp.title === 'function' ? colTemp.title(data) : colTemp.title), colTemp.sorter && _react.default.createElement(_Sorter.default, (0, _extends2.default)({}, colTemp, { sorter: colTemp.sorter, current: sorter, keyStr: col.key, onChange: onSortChange, renderSorter: this.props.renderSorter })), resize))); return; } if (colTemp.type === 'checkbox') { trs[level].push(_react.default.createElement("th", { key: "checkbox", rowSpan: trs.length, className: (0, _classnames.default)(_styles.tableClass.apply(void 0, ['checkbox'].concat(fixed)), colTemp.className) }, showSelectAll && _react.default.createElement(_CheckboxAll.default, { disabled: disabled === true, data: data, datum: datum, treeColumnsName: treeCheckAll ? treeColumnsName : undefined, col: col }))); return; } var style = typeof colTemp2.name === 'string' ? undefined : { padding: 0 }; trs[level].push(_react.default.createElement("th", { className: (0, _classnames.default)(_styles.tableClass.apply(void 0, ['center', 'condensed', ignoreBorderRight].concat(fixed)), col.className), colSpan: colTemp2.colSpan, key: col.key, style: style }, colTemp2.name, resize)); if (colTemp2.columns) { colTemp2.columns.forEach(function (c) { return _this2.createTh(trs, c, level + 1); }); } }; _proto.ignoreRightBorder = function ignoreRightBorder(column) { var columnGroup = column; this.rightBorderRecord[column.key] = true; if (columnGroup.columns) this.ignoreRightBorder(columnGroup.columns[columnGroup.columns.length - 1]); }; _proto.formatColumns = function formatColumns() { var _this3 = this; this.columnLevel = 0; var columns = []; this.props.columns.forEach(function (col, index) { _this3.setColumns(columns, col, 0, index); }); this.rightBorderRecord = {}; if (columns.length > 0 && this.props.bordered) { this.ignoreRightBorder(columns[columns.length - 1]); } return columns; }; _proto.formatTrs = function formatTrs() { var _this4 = this; var columns = this.formatColumns(); var trs = []; for (var i = 0; i <= this.columnLevel; i++) { trs.push([]); } columns.forEach(function (col) { return _this4.createTh(trs, col, 0); }); return trs; }; _proto.render = function render() { var trs = this.formatTrs(); return _react.default.createElement("thead", null, trs.map(function (tr, i) { return _react.default.createElement("tr", { key: i }, tr); })); }; return Thead; }(_react.PureComponent); (0, _defineProperty2.default)(Thead, "defaultProps", { showSelectAll: true }); var _default = Thead; exports.default = _default;