UNPKG

shineout

Version:

Shein 前端组件库

318 lines (260 loc) 10.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = exports.RENDER_COL_GROUP_EVENT = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); 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 = _interopRequireDefault(require("react")); var _immer = _interopRequireDefault(require("immer")); var _component = require("../component"); var _shallowEqual = require("../utils/shallowEqual"); var _uid = require("../utils/uid"); var _Tr = _interopRequireDefault(require("./Tr")); var _styles = require("./styles"); var _is = require("../utils/is"); var RENDER_COL_GROUP_EVENT = 'RENDER_COL_GROUP_EVENT'; exports.RENDER_COL_GROUP_EVENT = RENDER_COL_GROUP_EVENT; function ignoreBorderRight(rows) { rows.forEach(function (row) { var lastColumn = row[row.length - 1]; if (lastColumn) { lastColumn.ignoreBorderRight = true; } }); } function format(columns, data, nextRow, index, expandKeys) { var row = columns.map(function (col, i) { var cell = { index: index, data: data, expandKeys: expandKeys }; cell.colSpan = typeof col.colSpan === 'function' ? col.colSpan(data, index) : 1; if (cell.colSpan < 1) cell.colSpan = 1; var rowSpan = col.rowSpan; if (rowSpan && nextRow && nextRow[i]) { if (col.type !== 'checkbox') { if (typeof col.render === 'string') { cell.content = data[col.render]; } else if ((0, _is.isFunc)(col.render)) { cell.content = col.render(data, index); } } var isEqual = rowSpan === true ? nextRow[i] && cell.content === nextRow[i].content : nextRow[i] && typeof rowSpan === 'function' && rowSpan(data, nextRow[i].data); var nextTd = nextRow[i]; if (isEqual && nextTd && nextTd.colSpan === cell.colSpan) { cell.rowSpan = (nextTd.rowSpan || 1) + 1; var j = cell.colSpan || 1; while (j) { j -= 1; nextRow[i + j] = null; } } } return cell; }); return row; } var Tbody = /*#__PURE__*/ function (_PureComponent) { (0, _inheritsLoose2.default)(Tbody, _PureComponent); function Tbody(props) { var _this; _this = _PureComponent.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "colgroupSetted", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "keys", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "body", void 0); _this.state = { expand: {} }; _this.bodyRender = _this.bodyRender.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.bindBody = _this.bindBody.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.renderTr = _this.renderTr.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.handleExpand = _this.handleExpand.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.findExpandFunc = _this.findExpandFunc.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); return _this; } var _proto = Tbody.prototype; _proto.componentDidMount = function componentDidMount() { _PureComponent.prototype.componentDidMount.call(this); this.bodyRender(); }; _proto.componentDidUpdate = function componentDidUpdate(prevProps) { var _this2 = this; var _this$props = this.props, onScrollTop = _this$props.onScrollTop, data = _this$props.data; if (onScrollTop && prevProps.data.length && data.length === 0) onScrollTop(); if (this.props.resize || !this.colgroupSetted || !(0, _shallowEqual.compareColumns)(prevProps.columns, this.props.columns)) { setTimeout(function () { _this2.bodyRender(); }); } }; _proto.bodyRender = function bodyRender() { var _this$props2 = this.props, onBodyRender = _this$props2.onBodyRender, datum = _this$props2.datum; if (!onBodyRender || !this.body) return; datum.unsubscribe(RENDER_COL_GROUP_EVENT, this.bodyRender); if (this.body.clientHeight === 0) { datum.subscribe(RENDER_COL_GROUP_EVENT, this.bodyRender); return; } var tr = this.body.querySelector('tr'); if (!tr) return; this.colgroupSetted = true; onBodyRender(tr.querySelectorAll('td')); }; _proto.bindBody = function bindBody(el) { this.body = el; }; _proto.handleExpand = function handleExpand(key, render) { this.setState((0, _immer.default)(function (draft) { if (render) draft.expand[key] = render;else delete draft.expand[key]; })); }; _proto.findExpandFunc = function findExpandFunc(key, i) { // // (rowData: DataItem, index?: number) => ReactNode var _this$props3 = this.props, columns = _this$props3.columns, expandKeys = _this$props3.expandKeys, data = _this$props3.data, externalExpandRender = _this$props3.externalExpandRender, index = _this$props3.index; var expandableObj = columns.find(function (c) { return c.type === 'expand' || c.type === 'row-expand'; }) || {}; var idx = i + index; if (expandKeys) { var expanded = expandKeys.find(function (k) { return k === key; }); if (externalExpandRender) return expanded !== undefined ? externalExpandRender(data[i], idx) : undefined; var expandObj = expanded !== undefined ? expandableObj : {}; var render = expandObj.render; return render && (0, _is.isFunc)(render) ? render(data[i], idx) : undefined; } if (this.state.expand[key]) { var _render = expandableObj.render; if (externalExpandRender) return externalExpandRender(data[i], idx); return _render && (0, _is.isFunc)(_render) ? _render(data[i], idx) : undefined; } return undefined; }; _proto.renderTr = function renderTr(row, i) { var _this$props4 = this.props, columns = _this$props4.columns, keygen = _this$props4.keygen, data = _this$props4.data, sorter = _this$props4.sorter, index = _this$props4.index, expandKeys = _this$props4.expandKeys, colgroup = _this$props4.colgroup, other = (0, _objectWithoutPropertiesLoose2.default)(_this$props4, ["columns", "keygen", "data", "sorter", "index", "expandKeys", "colgroup"]); var key = (0, _uid.getKey)(data[i], keygen, index + i); if (this.keys[key]) { var converted = key + "-" + (index + i); console.warn("Tr has same key: (" + key + "). Already converted with (" + converted + "), Please check the 'keygen' property."); key = converted; } this.keys[key] = true; var originKey = key; // seems to be useless code // if (sorter && sorter.order) { // key = `${key}-${sorter.index}-${sorter.order}` // } return _react.default.createElement(_Tr.default, (0, _extends2.default)({}, other, { index: i + index, key: key, originKey: originKey, data: row, rowData: data[i], columns: columns, rowKey: key, onExpand: this.handleExpand, expandRender: this.findExpandFunc(originKey, i) })); }; _proto.renderPlaceholderTr = function renderPlaceholderTr() { var _this$props5 = this.props, columns = _this$props5.columns, data = _this$props5.data; return _react.default.createElement("tr", { className: (0, _styles.tableClass)('placeholder-tr'), key: "so-placeholder-" + new Date().getTime() }, columns.map(function (v, i) { if (!v) return _react.default.createElement("td", { key: i }); if (v.minWidth) { return _react.default.createElement("td", { key: i, style: { padding: 0, border: 'none' } }, _react.default.createElement("div", { style: { width: v.minWidth } }, v.title && typeof v.title === 'function' ? v.title(data) : v.title)); } if (v.title) { return _react.default.createElement("td", { key: i }, _react.default.createElement("div", null, typeof v.title === 'function' ? v.title(data) : v.title)); } if (v.type === 'checkbox' || v.type === 'expand' || v.type === 'row-expand') { return _react.default.createElement("td", { key: i, className: (0, _styles.tableClass)('placeholder-checkbox') }); } return _react.default.createElement("td", { key: i }); })); }; _proto.renderTrs = function renderTrs(rows) { var _this$props6 = this.props, columns = _this$props6.columns, colgroup = _this$props6.colgroup; var minWidthSup = columns.find(function (d) { return d.minWidth; }); var trs = rows.map(this.renderTr); if (!minWidthSup || colgroup) return trs; return [this.renderPlaceholderTr()].concat(trs); }; _proto.render = function render() { var _this$props7 = this.props, index = _this$props7.index, data = _this$props7.data, columns = _this$props7.columns, expandKeys = _this$props7.expandKeys, bordered = _this$props7.bordered; var rows = []; for (var i = data.length - 1; i >= 0; i--) { var d = data[i]; rows.unshift(format(columns, d, rows[0], index + i, expandKeys).map(function (col) { delete col.content; return col; })); } if (rows.length > 0 && bordered) { ignoreBorderRight(rows); } this.keys = {}; return _react.default.createElement("tbody", { ref: this.bindBody }, this.renderTrs(rows)); }; return Tbody; }(_component.PureComponent); var _default = Tbody; exports.default = _default;