UNPKG

shineout

Version:

Shein 前端组件库

366 lines (310 loc) 11.8 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = 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 _deepEql = _interopRequireDefault(require("deep-eql")); var _pagable = _interopRequireDefault(require("../hoc/pagable")); var _Table = _interopRequireDefault(require("./Table")); var _func = require("../utils/func"); var _is = require("../utils/is"); var _TreeExpand = _interopRequireDefault(require("./TreeExpand")); var TableWithPagination = (0, _pagable.default)(_Table.default); var TableWithTree = (0, _TreeExpand.default)(_Table.default); var TableWithPT = (0, _func.compose)(_pagable.default, _TreeExpand.default)(_Table.default); var TableIndex = /*#__PURE__*/ function (_React$Component) { (0, _inheritsLoose2.default)(TableIndex, _React$Component); function TableIndex(props) { var _this; _this = _React$Component.call(this, props) || this; (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "cacheDefaultSorterList", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "oldColumns", void 0); (0, _defineProperty2.default)((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this)), "cachedColumns", void 0); _this.state = { sorter: [] }; _this.handleSortChange = _this.handleSortChange.bind((0, _assertThisInitialized2.default)((0, _assertThisInitialized2.default)(_this))); _this.cacheDefaultSorterList = []; return _this; } var _proto = TableIndex.prototype; _proto.getTreeColumnsName = function getTreeColumnsName() { var columns = this.getFilteredColumn(); if (!Array.isArray(columns)) return undefined; var has = columns.filter(function (v) { return typeof v.treeColumnsName === 'string'; }); if (has.length === 0) return undefined; return has[0].treeColumnsName; }; _proto.getColumns = function getColumns(columns) { if (columns === void 0) { columns = []; } if ((0, _deepEql.default)(columns, this.oldColumns)) { return this.cachedColumns; } var _this$props = this.props, onRowSelect = _this$props.onRowSelect, datum = _this$props.datum; columns = columns.filter(function (c) { return typeof c === 'object'; }); var left = -1; var right = -1; columns.forEach(function (c, i) { if (c.fixed === 'left') left = i; if (c.fixed === 'right' && right < 0) right = i; }); var setDefaultOrder = false; this.cachedColumns = columns.map(function (c, i) { return (0, _immer.default)(c, function (draft) { draft.index = i; if (draft.key === undefined) draft.key = i; if (i <= left) draft.fixed = 'left'; if (i === left) draft.lastFixed = true; if (i >= right && right > 0) draft.fixed = 'right'; if (i === right) draft.firstFixed = true; if (typeof draft.sorter !== 'object') { if (draft.defaultOrder && setDefaultOrder) delete draft.defaultOrder; if (draft.defaultOrder) setDefaultOrder = true; } // if (draft.type === 'expand' && !draft.width) draft.width = 48 }); }); if (this.cachedColumns.find(function (v) { return typeof v.sorter !== 'object' && v.defaultOrder; })) { this.cachedColumns = this.cachedColumns.map(function (v) { return (0, _immer.default)(v, function (draft) { if (typeof draft.sorter === 'object' && draft.defaultOrder) delete draft.defaultOrder; }); }); } // filter checkbox var haveCheckbox = columns.find(function (v) { return v.type === 'checkbox'; }); if ((onRowSelect || datum) && this.cachedColumns[0] && this.cachedColumns[0].type !== 'checkbox' && !haveCheckbox) { this.cachedColumns.unshift({ index: -1, key: 'checkbox', type: 'checkbox', // width: 48, fixed: left >= 0 ? 'left' : undefined }); } this.oldColumns = columns; return this.cachedColumns; }; _proto.getTableSorter = function getTableSorter() { var tableSorter = this.props.sorter; if (!tableSorter) { console.error('You need to specify a sorter as a sort function for the table. Default alphabetical order.'); tableSorter = function tableSorter(sorter, order) { return function (a, b) { var a1 = (a[sorter] || '').toString(); var b1 = (b[sorter] || '').toString(); return order === 'asc' ? a1.localeCompare(b1) : b1.localeCompare(a1); }; }; } return tableSorter; }; _proto.getFilteredColumn = function getFilteredColumn() { var columns = this.props.columns; if (!columns) return columns; return columns.filter(function (v) { return !(['expand', 'row-expand'].indexOf(v.type) > -1 && v.hide); }); }; _proto.getExternalExpandObj = function getExternalExpandObj() { var columns = this.props.columns; if (!columns) return undefined; var obj = columns.find(function (v) { return ['expand', 'row-expand'].indexOf(v.type) > -1 && v.hide; }); if (obj && typeof obj === 'object') return obj; return undefined; }; _proto.handleSortChange = function handleSortChange(order, sorter, key, cancelOrder, manual) { var _this2 = this; var onSortCancel = this.props.onSortCancel; // cancel sorter if (!order) { this.setState((0, _immer.default)(function (state) { var item = state.sorter.find(function (v) { return v.key === key; }); if (item) { item.order = undefined; item.manual = true; item.deleted = true; } }), function () { var rpm = _this2.state.sorter.filter(function (v) { return v.order && !v.deleted; }).map(function (v) { return { order: v.order, key: v.key, weight: v.weight, manual: v.manual }; }); if (typeof sorter === 'object' && typeof sorter.rule === 'function') { sorter.rule(rpm); } if (onSortCancel) onSortCancel(cancelOrder, key, rpm, sorter); }); return; } if (typeof sorter === 'object') { this.setState((0, _immer.default)(function (state) { var rpm = state.sorter.map(function (v) { return { order: v.order, key: v.key, weight: v.weight, manual: v.manual, deleted: v.deleted }; }); var item = state.sorter.find(function (v) { return v.key === key; }); if (state.sorter.length === 1 && !state.sorter[0].multiple) { state.sorter = []; rpm = []; } if (item) { item.order = order; item.manual = manual; item.deleted = false; var rpmItem = rpm.find(function (v) { return v.key === key; }); rpmItem.order = order; rpmItem.manual = manual; rpm = rpm.filter(function (v) { return v.order && !v.deleted; }); var sort = typeof sorter.rule === 'string' ? _this2.getTableSorter()(sorter.rule, order, rpm) : undefined; item.sort = sort; } else { if (manual) { _this2.cacheDefaultSorterList = []; rpm.push({ order: order, key: key, weight: sorter.weight, manual: manual, deleted: false }); rpm = rpm.filter(function (v) { return v.order && !v.deleted; }); } if (!manual) { _this2.cacheDefaultSorterList.push({ order: order, key: key, weight: sorter.weight, deleted: false, multiple: false, manual: manual }); rpm = _this2.cacheDefaultSorterList; } var _sort = typeof sorter.rule === 'string' ? _this2.getTableSorter()(sorter.rule, order, rpm) : undefined; state.sorter.push({ order: order, key: key, sort: _sort, manual: manual, multiple: true, weight: sorter.weight, deleted: false }); state.sorter.sort(function (a, b) { var a1 = (a.weight || 0).toString(); var b1 = (b.weight || 0).toString(); return a1.localeCompare(b1); }); } if (typeof sorter.rule === 'function') { rpm = rpm.filter(function (v) { return v.order && !v.deleted; }); sorter.rule(rpm); } })); } else { var sort = typeof sorter === 'string' ? this.getTableSorter()(sorter, order, [{ order: order, key: key, manual: manual }]) : sorter(order); this.setState((0, _immer.default)(function (state) { state.sorter = []; state.sorter.push({ order: order, key: key, sort: sort, manual: manual, multiple: false, deleted: false }); })); } }; _proto.render = function render() { var _this$props2 = this.props, onRowSelect = _this$props2.onRowSelect, props = (0, _objectWithoutPropertiesLoose2.default)(_this$props2, ["onRowSelect"]); var columns = this.getFilteredColumn(); var sorter = this.state.sorter; if (!columns) return _react.default.createElement(_Table.default, props); var data = this.props.data; sorter.filter(function (v) { return !v.deleted; }).forEach(function (v) { if (v.sort) data = (0, _immer.default)(data, function (draft) { return draft.sort(v.sort); }); }); var treeColumnsName = this.getTreeColumnsName(); var Component = _Table.default; if (props.pagination && treeColumnsName) { Component = TableWithPT; } else if (props.pagination) { Component = TableWithPagination; } else if (treeColumnsName) { Component = TableWithTree; } var externalExpandRender = (this.getExternalExpandObj() || {}).render; var externalExpandOnClick = (this.getExternalExpandObj() || {}).onClick; var ComponentPT = Component; return _react.default.createElement(ComponentPT, (0, _extends2.default)({}, props, { onChange: onRowSelect, columns: this.getColumns(columns), data: data, sorter: sorter, onSortChange: this.handleSortChange, treeColumnsName: treeColumnsName, externalExpandRender: (0, _is.isFunc)(externalExpandRender) ? externalExpandRender : undefined, externalExpandClick: externalExpandOnClick })); }; return TableIndex; }(_react.default.Component); exports.default = TableIndex; (0, _defineProperty2.default)(TableIndex, "displayName", 'ShineoutTable'); (0, _defineProperty2.default)(TableIndex, "defaultProps", { data: [] });