UNPKG

rc-table

Version:
1,444 lines (1,273 loc) 175 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react"), require("react-dom")); else if(typeof define === 'function' && define.amd) define(["react", "react-dom"], factory); else if(typeof exports === 'object') exports["rc-table"] = factory(require("react"), require("react-dom")); else root["rc-table"] = factory(root["React"], root["ReactDOM"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_6__, __WEBPACK_EXTERNAL_MODULE_33__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ((function(modules) { // Check all modules for deduplicated modules for(var i in modules) { if(Object.prototype.hasOwnProperty.call(modules, i)) { switch(typeof modules[i]) { case "function": break; case "object": // Module can be created from a template modules[i] = (function(_m) { var args = _m.slice(1), fn = modules[_m[0]]; return function (a,b,c) { fn.apply(this, [a,b,c].concat(args)); }; }(modules[i])); break; default: // Module is a copy of another module modules[i] = modules[modules[i]]; break; } } } return modules; }([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { __webpack_require__(1); __webpack_require__(2); __webpack_require__(3); module.exports = __webpack_require__(4); /***/ }), /* 1 */ /***/ (function(module, exports) { // removed by extract-text-webpack-plugin /***/ }), /* 2 */ 1, /* 3 */ 1, /* 4 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; var Table = __webpack_require__(5); var Column = __webpack_require__(38); var ColumnGroup = __webpack_require__(39); Table.Column = Column; Table.ColumnGroup = ColumnGroup; module.exports = Table; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = __webpack_require__(6); var _react2 = _interopRequireDefault(_react); var _propTypes = __webpack_require__(7); var _propTypes2 = _interopRequireDefault(_propTypes); var _TableRow = __webpack_require__(16); var _TableRow2 = _interopRequireDefault(_TableRow); var _TableHeader = __webpack_require__(25); var _TableHeader2 = _interopRequireDefault(_TableHeader); var _utils = __webpack_require__(26); var _shallowequal = __webpack_require__(20); var _shallowequal2 = _interopRequireDefault(_shallowequal); var _addEventListener = __webpack_require__(28); var _addEventListener2 = _interopRequireDefault(_addEventListener); var _ColumnManager = __webpack_require__(34); var _ColumnManager2 = _interopRequireDefault(_ColumnManager); var _createStore = __webpack_require__(35); var _createStore2 = _interopRequireDefault(_createStore); var _componentClasses = __webpack_require__(36); var _componentClasses2 = _interopRequireDefault(_componentClasses); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return obj; } function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); } var Table = function (_React$Component) { _inherits(Table, _React$Component); function Table(props) { _classCallCheck(this, Table); var _this = _possibleConstructorReturn(this, _React$Component.call(this, props)); _this.onExpanded = function (expanded, record, e, index) { if (e) { e.preventDefault(); e.stopPropagation(); } var info = _this.findExpandedRow(record); if (typeof info !== 'undefined' && !expanded) { _this.onRowDestroy(record, index); } else if (!info && expanded) { var expandedRows = _this.getExpandedRows().concat(); expandedRows.push(_this.getRowKey(record, index)); _this.onExpandedRowsChange(expandedRows); } _this.props.onExpand(expanded, record); }; _this.onRowDestroy = function (record, rowIndex) { var expandedRows = _this.getExpandedRows().concat(); var rowKey = _this.getRowKey(record, rowIndex); var index = -1; expandedRows.forEach(function (r, i) { if (r === rowKey) { index = i; } }); if (index !== -1) { expandedRows.splice(index, 1); } _this.onExpandedRowsChange(expandedRows); }; _this.handleWindowResize = function () { _this.syncFixedTableRowHeight(); _this.setScrollPositionClassName(); }; _this.syncFixedTableRowHeight = function () { var tableRect = _this.tableNode.getBoundingClientRect(); // If tableNode's height less than 0, suppose it is hidden and don't recalculate rowHeight. // see: https://github.com/ant-design/ant-design/issues/4836 if (tableRect.height !== undefined && tableRect.height <= 0) { return; } var prefixCls = _this.props.prefixCls; var headRows = _this.refs.headTable ? _this.refs.headTable.querySelectorAll('thead') : _this.refs.bodyTable.querySelectorAll('thead'); var bodyRows = _this.refs.bodyTable.querySelectorAll('.' + prefixCls + '-row') || []; var fixedColumnsHeadRowsHeight = [].map.call(headRows, function (row) { return row.getBoundingClientRect().height || 'auto'; }); var fixedColumnsBodyRowsHeight = [].map.call(bodyRows, function (row) { return row.getBoundingClientRect().height || 'auto'; }); if ((0, _shallowequal2.default)(_this.state.fixedColumnsHeadRowsHeight, fixedColumnsHeadRowsHeight) && (0, _shallowequal2.default)(_this.state.fixedColumnsBodyRowsHeight, fixedColumnsBodyRowsHeight)) { return; } _this.setState({ fixedColumnsHeadRowsHeight: fixedColumnsHeadRowsHeight, fixedColumnsBodyRowsHeight: fixedColumnsBodyRowsHeight }); }; _this.detectScrollTarget = function (e) { if (_this.scrollTarget !== e.currentTarget) { _this.scrollTarget = e.currentTarget; } }; _this.handleBodyScroll = function (e) { // Prevent scrollTop setter trigger onScroll event // http://stackoverflow.com/q/1386696 if (e.target !== _this.scrollTarget) { return; } var _this$props$scroll = _this.props.scroll, scroll = _this$props$scroll === undefined ? {} : _this$props$scroll; var _this$refs = _this.refs, headTable = _this$refs.headTable, bodyTable = _this$refs.bodyTable, fixedColumnsBodyLeft = _this$refs.fixedColumnsBodyLeft, fixedColumnsBodyRight = _this$refs.fixedColumnsBodyRight; if (scroll.x && e.target.scrollLeft !== _this.lastScrollLeft) { if (e.target === bodyTable && headTable) { headTable.scrollLeft = e.target.scrollLeft; } else if (e.target === headTable && bodyTable) { bodyTable.scrollLeft = e.target.scrollLeft; } _this.setScrollPositionClassName(e.target); } if (scroll.y) { if (fixedColumnsBodyLeft && e.target !== fixedColumnsBodyLeft) { fixedColumnsBodyLeft.scrollTop = e.target.scrollTop; } if (fixedColumnsBodyRight && e.target !== fixedColumnsBodyRight) { fixedColumnsBodyRight.scrollTop = e.target.scrollTop; } if (bodyTable && e.target !== bodyTable) { bodyTable.scrollTop = e.target.scrollTop; } } // Remember last scrollLeft for scroll direction detecting. _this.lastScrollLeft = e.target.scrollLeft; }; _this.handleRowHover = function (isHover, key) { _this.store.setState({ currentHoverKey: isHover ? key : null }); }; var expandedRowKeys = []; var rows = [].concat(_toConsumableArray(props.data)); _this.columnManager = new _ColumnManager2.default(props.columns, props.children); _this.store = (0, _createStore2.default)({ currentHoverKey: null, expandedRowsHeight: {} }); _this.setScrollPosition('left'); if (props.defaultExpandAllRows) { for (var i = 0; i < rows.length; i++) { var row = rows[i]; expandedRowKeys.push(_this.getRowKey(row, i)); rows = rows.concat(row[props.childrenColumnName] || []); } } else { expandedRowKeys = props.expandedRowKeys || props.defaultExpandedRowKeys; } _this.state = { expandedRowKeys: expandedRowKeys, currentHoverKey: null, fixedColumnsHeadRowsHeight: [], fixedColumnsBodyRowsHeight: [] }; return _this; } Table.prototype.componentDidMount = function componentDidMount() { if (this.columnManager.isAnyColumnsFixed()) { this.handleWindowResize(); this.debouncedWindowResize = (0, _utils.debounce)(this.handleWindowResize, 150); this.resizeEvent = (0, _addEventListener2.default)(window, 'resize', this.debouncedWindowResize); } }; Table.prototype.componentWillReceiveProps = function componentWillReceiveProps(nextProps) { if ('expandedRowKeys' in nextProps) { this.setState({ expandedRowKeys: nextProps.expandedRowKeys }); } if (nextProps.columns && nextProps.columns !== this.props.columns) { this.columnManager.reset(nextProps.columns); } else if (nextProps.children !== this.props.children) { this.columnManager.reset(null, nextProps.children); } }; Table.prototype.componentDidUpdate = function componentDidUpdate(prevProps) { if (this.columnManager.isAnyColumnsFixed()) { this.handleWindowResize(); } // when table changes to empty, reset scrollLeft if (prevProps.data.length > 0 && this.props.data.length === 0 && this.hasScrollX()) { this.resetScrollX(); } }; Table.prototype.componentWillUnmount = function componentWillUnmount() { if (this.resizeEvent) { this.resizeEvent.remove(); } if (this.debouncedWindowResize) { this.debouncedWindowResize.cancel(); } }; Table.prototype.onExpandedRowsChange = function onExpandedRowsChange(expandedRowKeys) { if (!this.props.expandedRowKeys) { this.setState({ expandedRowKeys: expandedRowKeys }); } this.props.onExpandedRowsChange(expandedRowKeys); }; Table.prototype.getRowKey = function getRowKey(record, index) { var rowKey = this.props.rowKey; var key = typeof rowKey === 'function' ? rowKey(record, index) : record[rowKey]; (0, _utils.warningOnce)(key !== undefined, 'Each record in table should have a unique `key` prop,' + 'or set `rowKey` to an unique primary key.'); return key === undefined ? index : key; }; Table.prototype.getExpandedRows = function getExpandedRows() { return this.props.expandedRowKeys || this.state.expandedRowKeys; }; Table.prototype.getHeader = function getHeader(columns, fixed) { var _props = this.props, showHeader = _props.showHeader, expandIconAsCell = _props.expandIconAsCell, prefixCls = _props.prefixCls; var rows = this.getHeaderRows(columns); if (expandIconAsCell && fixed !== 'right') { rows[0].unshift({ key: 'rc-table-expandIconAsCell', className: prefixCls + '-expand-icon-th', title: '', rowSpan: rows.length }); } var trStyle = fixed ? this.getHeaderRowStyle(columns, rows) : null; return showHeader ? _react2.default.createElement(_TableHeader2.default, { prefixCls: prefixCls, rows: rows, rowStyle: trStyle }) : null; }; Table.prototype.getHeaderRows = function getHeaderRows(columns) { var _this2 = this; var currentRow = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0; var rows = arguments[2]; rows = rows || []; rows[currentRow] = rows[currentRow] || []; columns.forEach(function (column) { if (column.rowSpan && rows.length < column.rowSpan) { while (rows.length < column.rowSpan) { rows.push([]); } } var cell = { key: column.key, className: column.className || '', children: column.title }; if (column.children) { _this2.getHeaderRows(column.children, currentRow + 1, rows); } if ('colSpan' in column) { cell.colSpan = column.colSpan; } if ('rowSpan' in column) { cell.rowSpan = column.rowSpan; } if (cell.colSpan !== 0) { rows[currentRow].push(cell); } }); return rows.filter(function (row) { return row.length > 0; }); }; Table.prototype.getExpandedRow = function getExpandedRow(key, content, visible, className, fixed) { var _props2 = this.props, prefixCls = _props2.prefixCls, expandIconAsCell = _props2.expandIconAsCell; var colCount = void 0; if (fixed === 'left') { colCount = this.columnManager.leftLeafColumns().length; } else if (fixed === 'right') { colCount = this.columnManager.rightLeafColumns().length; } else { colCount = this.columnManager.leafColumns().length; } var columns = [{ key: 'extra-row', render: function render() { return { props: { colSpan: colCount }, children: fixed !== 'right' ? content : '&nbsp;' }; } }]; if (expandIconAsCell && fixed !== 'right') { columns.unshift({ key: 'expand-icon-placeholder', render: function render() { return null; } }); } return _react2.default.createElement(_TableRow2.default, { columns: columns, visible: visible, className: className, key: key + '-extra-row', rowKey: key + '-extra-row', prefixCls: prefixCls + '-expanded-row', indent: 1, expandable: false, store: this.store, expandedRow: true, fixed: !!fixed }); }; Table.prototype.getRowsByData = function getRowsByData(data, visible, indent, columns, fixed) { var props = this.props; var childrenColumnName = props.childrenColumnName; var expandedRowRender = props.expandedRowRender; var expandRowByClick = props.expandRowByClick; var fixedColumnsBodyRowsHeight = this.state.fixedColumnsBodyRowsHeight; var rst = []; var rowClassName = props.rowClassName; var rowRef = props.rowRef; var expandedRowClassName = props.expandedRowClassName; var needIndentSpaced = props.data.some(function (record) { return record[childrenColumnName]; }); var onRowClick = props.onRowClick; var onRowDoubleClick = props.onRowDoubleClick; var expandIconAsCell = fixed !== 'right' ? props.expandIconAsCell : false; var expandIconColumnIndex = fixed !== 'right' ? props.expandIconColumnIndex : -1; for (var i = 0; i < data.length; i++) { var record = data[i]; var key = this.getRowKey(record, i); var childrenColumn = record[childrenColumnName]; var isRowExpanded = this.isRowExpanded(record, i); var expandedRowContent = void 0; if (expandedRowRender && isRowExpanded) { expandedRowContent = expandedRowRender(record, i, indent); } var className = rowClassName(record, i, indent); var onHoverProps = {}; if (this.columnManager.isAnyColumnsFixed()) { onHoverProps.onHover = this.handleRowHover; } var height = fixed && fixedColumnsBodyRowsHeight[i] ? fixedColumnsBodyRowsHeight[i] : null; var leafColumns = void 0; if (fixed === 'left') { leafColumns = this.columnManager.leftLeafColumns(); } else if (fixed === 'right') { leafColumns = this.columnManager.rightLeafColumns(); } else { leafColumns = this.columnManager.leafColumns(); } rst.push(_react2.default.createElement(_TableRow2.default, _extends({ indent: indent, indentSize: props.indentSize, needIndentSpaced: needIndentSpaced, className: className, record: record, expandIconAsCell: expandIconAsCell, onDestroy: this.onRowDestroy, index: i, visible: visible, expandRowByClick: expandRowByClick, onExpand: this.onExpanded, expandable: childrenColumn || expandedRowRender, expanded: isRowExpanded, prefixCls: props.prefixCls + '-row', childrenColumnName: childrenColumnName, columns: leafColumns, expandIconColumnIndex: expandIconColumnIndex, onRowClick: onRowClick, onRowDoubleClick: onRowDoubleClick, height: height }, onHoverProps, { key: key, hoverKey: key, ref: rowRef(record, i, indent), store: this.store }))); var subVisible = visible && isRowExpanded; if (expandedRowContent && isRowExpanded) { rst.push(this.getExpandedRow(key, expandedRowContent, subVisible, expandedRowClassName(record, i, indent), fixed)); } if (childrenColumn) { rst = rst.concat(this.getRowsByData(childrenColumn, subVisible, indent + 1, columns, fixed)); } } return rst; }; Table.prototype.getRows = function getRows(columns, fixed) { return this.getRowsByData(this.props.data, true, 0, columns, fixed); }; Table.prototype.getColGroup = function getColGroup(columns, fixed) { var cols = []; if (this.props.expandIconAsCell && fixed !== 'right') { cols.push(_react2.default.createElement('col', { className: this.props.prefixCls + '-expand-icon-col', key: 'rc-table-expand-icon-col' })); } var leafColumns = void 0; if (fixed === 'left') { leafColumns = this.columnManager.leftLeafColumns(); } else if (fixed === 'right') { leafColumns = this.columnManager.rightLeafColumns(); } else { leafColumns = this.columnManager.leafColumns(); } cols = cols.concat(leafColumns.map(function (c) { return _react2.default.createElement('col', { key: c.key, style: { width: c.width, minWidth: c.width } }); })); return _react2.default.createElement( 'colgroup', null, cols ); }; Table.prototype.getLeftFixedTable = function getLeftFixedTable() { return this.getTable({ columns: this.columnManager.leftColumns(), fixed: 'left' }); }; Table.prototype.getRightFixedTable = function getRightFixedTable() { return this.getTable({ columns: this.columnManager.rightColumns(), fixed: 'right' }); }; Table.prototype.getTable = function getTable() { var _this3 = this; var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var columns = options.columns, fixed = options.fixed; var _props3 = this.props, prefixCls = _props3.prefixCls, _props3$scroll = _props3.scroll, scroll = _props3$scroll === undefined ? {} : _props3$scroll, getBodyWrapper = _props3.getBodyWrapper; var useFixedHeader = this.props.useFixedHeader; var bodyStyle = _extends({}, this.props.bodyStyle); var headStyle = {}; var tableClassName = ''; if (scroll.x || fixed) { tableClassName = prefixCls + '-fixed'; bodyStyle.overflowX = bodyStyle.overflowX || 'auto'; } var innerBodyStyle = {}; if (scroll.y) { // maxHeight will make fixed-Table scrolling not working // so we only set maxHeight to body-Table here if (fixed) { innerBodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y; innerBodyStyle.overflowY = bodyStyle.overflowY || 'scroll'; } else { bodyStyle.maxHeight = bodyStyle.maxHeight || scroll.y; } bodyStyle.overflowY = bodyStyle.overflowY || 'scroll'; useFixedHeader = true; // Add negative margin bottom for scroll bar overflow bug var scrollbarWidth = (0, _utils.measureScrollbar)(); if (scrollbarWidth > 0) { (fixed ? bodyStyle : headStyle).marginBottom = '-' + scrollbarWidth + 'px'; (fixed ? bodyStyle : headStyle).paddingBottom = '0px'; } } var renderTable = function renderTable() { var hasHead = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; var hasBody = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; var tableStyle = {}; if (!fixed && scroll.x) { // not set width, then use content fixed width if (scroll.x === true) { tableStyle.tableLayout = 'fixed'; } else { tableStyle.width = scroll.x; } } var tableBody = hasBody ? getBodyWrapper(_react2.default.createElement( 'tbody', { className: prefixCls + '-tbody' }, _this3.getRows(columns, fixed) )) : null; return _react2.default.createElement( 'table', { className: tableClassName, style: tableStyle, key: 'table' }, _this3.getColGroup(columns, fixed), hasHead ? _this3.getHeader(columns, fixed) : null, tableBody ); }; var headTable = void 0; if (useFixedHeader) { headTable = _react2.default.createElement( 'div', { key: 'headTable', className: prefixCls + '-header', ref: fixed ? null : 'headTable', style: headStyle, onMouseOver: this.detectScrollTarget, onTouchStart: this.detectScrollTarget, onScroll: this.handleBodyScroll }, renderTable(true, false) ); } var bodyTable = _react2.default.createElement( 'div', { key: 'bodyTable', className: prefixCls + '-body', style: bodyStyle, ref: 'bodyTable', onMouseOver: this.detectScrollTarget, onTouchStart: this.detectScrollTarget, onScroll: this.handleBodyScroll }, renderTable(!useFixedHeader) ); if (fixed && columns.length) { var refName = void 0; if (columns[0].fixed === 'left' || columns[0].fixed === true) { refName = 'fixedColumnsBodyLeft'; } else if (columns[0].fixed === 'right') { refName = 'fixedColumnsBodyRight'; } delete bodyStyle.overflowX; delete bodyStyle.overflowY; bodyTable = _react2.default.createElement( 'div', { key: 'bodyTable', className: prefixCls + '-body-outer', style: _extends({}, bodyStyle) }, _react2.default.createElement( 'div', { className: prefixCls + '-body-inner', style: innerBodyStyle, ref: refName, onMouseOver: this.detectScrollTarget, onTouchStart: this.detectScrollTarget, onScroll: this.handleBodyScroll }, renderTable(!useFixedHeader) ) ); } return [headTable, bodyTable]; }; Table.prototype.getTitle = function getTitle() { var _props4 = this.props, title = _props4.title, prefixCls = _props4.prefixCls; return title ? _react2.default.createElement( 'div', { className: prefixCls + '-title', key: 'title' }, title(this.props.data) ) : null; }; Table.prototype.getFooter = function getFooter() { var _props5 = this.props, footer = _props5.footer, prefixCls = _props5.prefixCls; return footer ? _react2.default.createElement( 'div', { className: prefixCls + '-footer', key: 'footer' }, footer(this.props.data) ) : null; }; Table.prototype.getEmptyText = function getEmptyText() { var _props6 = this.props, emptyText = _props6.emptyText, prefixCls = _props6.prefixCls, data = _props6.data; return !data.length ? _react2.default.createElement( 'div', { className: prefixCls + '-placeholder', key: 'emptyText' }, typeof emptyText === 'function' ? emptyText() : emptyText ) : null; }; Table.prototype.getHeaderRowStyle = function getHeaderRowStyle(columns, rows) { var fixedColumnsHeadRowsHeight = this.state.fixedColumnsHeadRowsHeight; var headerHeight = fixedColumnsHeadRowsHeight[0]; if (headerHeight && columns) { if (headerHeight === 'auto') { return { height: 'auto' }; } return { height: headerHeight / rows.length }; } return null; }; Table.prototype.setScrollPosition = function setScrollPosition(position) { this.scrollPosition = position; if (this.tableNode) { var prefixCls = this.props.prefixCls; if (position === 'both') { (0, _componentClasses2.default)(this.tableNode).remove(new RegExp('^' + prefixCls + '-scroll-position-.+$')).add(prefixCls + '-scroll-position-left').add(prefixCls + '-scroll-position-right'); } else { (0, _componentClasses2.default)(this.tableNode).remove(new RegExp('^' + prefixCls + '-scroll-position-.+$')).add(prefixCls + '-scroll-position-' + position); } } }; Table.prototype.setScrollPositionClassName = function setScrollPositionClassName(target) { var node = target || this.refs.bodyTable; var scrollToLeft = node.scrollLeft === 0; var scrollToRight = node.scrollLeft + 1 >= node.children[0].getBoundingClientRect().width - node.getBoundingClientRect().width; if (scrollToLeft && scrollToRight) { this.setScrollPosition('both'); } else if (scrollToLeft) { this.setScrollPosition('left'); } else if (scrollToRight) { this.setScrollPosition('right'); } else if (this.scrollPosition !== 'middle') { this.setScrollPosition('middle'); } }; Table.prototype.resetScrollX = function resetScrollX() { if (this.refs.headTable) { this.refs.headTable.scrollLeft = 0; } if (this.refs.bodyTable) { this.refs.bodyTable.scrollLeft = 0; } }; Table.prototype.findExpandedRow = function findExpandedRow(record, index) { var _this4 = this; var rows = this.getExpandedRows().filter(function (i) { return i === _this4.getRowKey(record, index); }); return rows[0]; }; Table.prototype.isRowExpanded = function isRowExpanded(record, index) { return typeof this.findExpandedRow(record, index) !== 'undefined'; }; Table.prototype.hasScrollX = function hasScrollX() { var _props$scroll = this.props.scroll, scroll = _props$scroll === undefined ? {} : _props$scroll; return 'x' in scroll; }; Table.prototype.render = function render() { var _this5 = this; var props = this.props; var prefixCls = props.prefixCls; var className = props.prefixCls; if (props.className) { className += ' ' + props.className; } if (props.useFixedHeader || props.scroll && props.scroll.y) { className += ' ' + prefixCls + '-fixed-header'; } if (this.scrollPosition === 'both') { className += ' ' + prefixCls + '-scroll-position-left ' + prefixCls + '-scroll-position-right'; } else { className += ' ' + prefixCls + '-scroll-position-' + this.scrollPosition; } var isTableScroll = this.columnManager.isAnyColumnsFixed() || props.scroll.x || props.scroll.y; var content = [this.getTable({ columns: this.columnManager.groupedColumns() }), this.getEmptyText(), this.getFooter()]; var scrollTable = isTableScroll ? _react2.default.createElement( 'div', { className: prefixCls + '-scroll' }, content ) : content; return _react2.default.createElement( 'div', { ref: function ref(node) { return _this5.tableNode = node; }, className: className, style: props.style }, this.getTitle(), _react2.default.createElement( 'div', { className: prefixCls + '-content' }, scrollTable, this.columnManager.isAnyColumnsLeftFixed() && _react2.default.createElement( 'div', { className: prefixCls + '-fixed-left' }, this.getLeftFixedTable() ), this.columnManager.isAnyColumnsRightFixed() && _react2.default.createElement( 'div', { className: prefixCls + '-fixed-right' }, this.getRightFixedTable() ) ) ); }; return Table; }(_react2.default.Component); Table.propTypes = { data: _propTypes2.default.array, expandIconAsCell: _propTypes2.default.bool, defaultExpandAllRows: _propTypes2.default.bool, expandedRowKeys: _propTypes2.default.array, defaultExpandedRowKeys: _propTypes2.default.array, useFixedHeader: _propTypes2.default.bool, columns: _propTypes2.default.array, prefixCls: _propTypes2.default.string, bodyStyle: _propTypes2.default.object, style: _propTypes2.default.object, rowKey: _propTypes2.default.oneOfType([_propTypes2.default.string, _propTypes2.default.func]), rowClassName: _propTypes2.default.func, expandedRowClassName: _propTypes2.default.func, childrenColumnName: _propTypes2.default.string, onExpand: _propTypes2.default.func, onExpandedRowsChange: _propTypes2.default.func, indentSize: _propTypes2.default.number, onRowClick: _propTypes2.default.func, onRowDoubleClick: _propTypes2.default.func, expandIconColumnIndex: _propTypes2.default.number, showHeader: _propTypes2.default.bool, title: _propTypes2.default.func, footer: _propTypes2.default.func, emptyText: _propTypes2.default.oneOfType([_propTypes2.default.node, _propTypes2.default.func]), scroll: _propTypes2.default.object, rowRef: _propTypes2.default.func, getBodyWrapper: _propTypes2.default.func, children: _propTypes2.default.node }; Table.defaultProps = { data: [], useFixedHeader: false, expandIconAsCell: false, defaultExpandAllRows: false, defaultExpandedRowKeys: [], rowKey: 'key', rowClassName: function rowClassName() { return ''; }, expandedRowClassName: function expandedRowClassName() { return ''; }, onExpand: function onExpand() {}, onExpandedRowsChange: function onExpandedRowsChange() {}, onRowClick: function onRowClick() {}, onRowDoubleClick: function onRowDoubleClick() {}, prefixCls: 'rc-table', bodyStyle: {}, style: {}, childrenColumnName: 'children', indentSize: 15, expandIconColumnIndex: 0, showHeader: true, scroll: {}, rowRef: function rowRef() { return null; }, getBodyWrapper: function getBodyWrapper(body) { return body; }, emptyText: function emptyText() { return 'No Data'; } }; exports.default = Table; module.exports = exports['default']; /***/ }), /* 6 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_6__; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ if (process.env.NODE_ENV !== 'production') { var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element')) || 0xeac7; var isValidElement = function(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; }; // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = __webpack_require__(9)(isValidElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = __webpack_require__(15)(); } /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(8))) /***/ }), /* 8 */ /***/ (function(module, exports) { // shim for using process in browser var process = module.exports = {}; // cached from whatever global is present so that test runners that stub it // don't break things. But we need to wrap it in a try catch in case it is // wrapped in strict mode code which doesn't define any globals. It's inside a // function because try/catches deoptimize in certain engines. var cachedSetTimeout; var cachedClearTimeout; function defaultSetTimout() { throw new Error('setTimeout has not been defined'); } function defaultClearTimeout () { throw new Error('clearTimeout has not been defined'); } (function () { try { if (typeof setTimeout === 'function') { cachedSetTimeout = setTimeout; } else { cachedSetTimeout = defaultSetTimout; } } catch (e) { cachedSetTimeout = defaultSetTimout; } try { if (typeof clearTimeout === 'function') { cachedClearTimeout = clearTimeout; } else { cachedClearTimeout = defaultClearTimeout; } } catch (e) { cachedClearTimeout = defaultClearTimeout; } } ()) function runTimeout(fun) { if (cachedSetTimeout === setTimeout) { //normal enviroments in sane situations return setTimeout(fun, 0); } // if setTimeout wasn't available but was latter defined if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { cachedSetTimeout = setTimeout; return setTimeout(fun, 0); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedSetTimeout(fun, 0); } catch(e){ try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedSetTimeout.call(null, fun, 0); } catch(e){ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error return cachedSetTimeout.call(this, fun, 0); } } } function runClearTimeout(marker) { if (cachedClearTimeout === clearTimeout) { //normal enviroments in sane situations return clearTimeout(marker); } // if clearTimeout wasn't available but was latter defined if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { cachedClearTimeout = clearTimeout; return clearTimeout(marker); } try { // when when somebody has screwed with setTimeout but no I.E. maddness return cachedClearTimeout(marker); } catch (e){ try { // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally return cachedClearTimeout.call(null, marker); } catch (e){ // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. // Some versions of I.E. have different rules for clearTimeout vs setTimeout return cachedClearTimeout.call(this, marker); } } } var queue = []; var draining = false; var currentQueue; var queueIndex = -1; function cleanUpNextTick() { if (!draining || !currentQueue) { return; } draining = false; if (currentQueue.length) { queue = currentQueue.concat(queue); } else { queueIndex = -1; } if (queue.length) { drainQueue(); } } function drainQueue() { if (draining) { return; } var timeout = runTimeout(cleanUpNextTick); draining = true; var len = queue.length; while(len) { currentQueue = queue; queue = []; while (++queueIndex < len) { if (currentQueue) { currentQueue[queueIndex].run(); } } queueIndex = -1; len = queue.length; } currentQueue = null; draining = false; runClearTimeout(timeout); } process.nextTick = function (fun) { var args = new Array(arguments.length - 1); if (arguments.length > 1) { for (var i = 1; i < arguments.length; i++) { args[i - 1] = arguments[i]; } } queue.push(new Item(fun, args)); if (queue.length === 1 && !draining) { runTimeout(drainQueue); } }; // v8 likes predictible objects function Item(fun, array) { this.fun = fun; this.array = array; } Item.prototype.run = function () { this.fun.apply(null, this.array); }; process.title = 'browser'; process.browser = true; process.env = {}; process.argv = []; process.version = ''; // empty string to avoid regexp issues process.versions = {}; function noop() {} process.on = noop; process.addListener = noop; process.once = noop; process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; process.binding = function (name) { throw new Error('process.binding is not supported'); }; process.cwd = function () { return '/' }; process.chdir = function (dir) { throw new Error('process.chdir is not supported'); }; process.umask = function() { return 0; }; /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright 2013-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. */ 'use strict'; var emptyFunction = __webpack_require__(10); var invariant = __webpack_require__(11); var warning = __webpack_require__(12); var ReactPropTypesSecret = __webpack_require__(13); var checkPropTypes = __webpack_require__(14); module.exports = function(isValidElement, throwOnDirectAccess) { /* global Symbol */ var ITERATOR_SYMBOL = typeof Symbol === 'function' && Symbol.iterator; var FAUX_ITERATOR_SYMBOL = '@@iterator'; // Before Symbol spec. /** * Returns the iterator method function contained on the iterable object. * * Be sure to invoke the function with the iterable as context: * * var iteratorFn = getIteratorFn(myIterable); * if (iteratorFn) { * var iterator = iteratorFn.call(myIterable); * ... * } * * @param {?object} maybeIterable * @return {?function} */ function getIteratorFn(maybeIterable) { var iteratorFn = maybeIterable && (ITERATOR_SYMBOL && maybeIterable[ITERATOR_SYMBOL] || maybeIterable[FAUX_ITERATOR_SYMBOL]); if (typeof iteratorFn === 'function') { return iteratorFn; } } /** * Collection of methods that allow declaration and validation of props that are * supplied to React components. Example usage: * * var Props = require('ReactPropTypes'); * var MyArticle = React.createClass({ * propTypes: { * // An optional string prop named "description". * description: Props.string, * * // A required enum prop named "category". * category: Props.oneOf(['News','Photos']).isRequired, * * // A prop named "dialog" that requires an instance of Dialog. * dialog: Props.instanceOf(Dialog).isRequired * }, * render: function() { ... } * }); * * A more formal specification of how these methods are used: * * type := array|bool|func|object|number|string|oneOf([...])|instanceOf(...) * decl := ReactPropTypes.{type}(.isRequired)? * * Each and every declaration produces a function with the same signature. This * allows the creation of custom validation functions. For example: * * var MyLink = React.createClass({ * propTypes: { * // An optional string or URI prop named "href". * href: function(props, propName, componentName) { * var propValue = props[propName]; * if (propValue != null && typeof propValue !== 'string' && * !(propValue instanceof URI)) { * return new Error( * 'Expected a string or an URI for ' + propName + ' in ' + * componentName * ); * } * } * }, * render: function() {...} * }); * * @internal */ var ANONYMOUS = '<<anonymous>>'; // Important! // Keep this list in sync with production version in `./factoryWithThrowingShims.js`. var ReactPropTypes = { array: createPrimitiveTypeChecker('array'), bool: createPrimitiveTypeChecker('boolean'), func: createPrimitiveTypeChecker('function'), number: createPrimitiveTypeChecker('number'), object: createPrimitiveTypeChecker('object'), string: createPrimitiveTypeChecker('string'), symbol: createPrimitiveTypeChecker('symbol'), any: createAnyTypeChecker(), arrayOf: createArrayOfTypeChecker, element: createElementTypeChecker(), instanceOf: createInstanceTypeChecker, node: createNodeChecker(), objectOf: createObjectOfTypeChecker, oneOf: createEnumTypeChecker, oneOfType: createUnionTypeChecker, shape: createShapeTypeChecker }; /** * inlined Object.is polyfill to avoid requiring consumers ship their own * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is */ /*eslint-disable no-self-compare*/ function is(x, y) { // SameValue algorithm if (x === y) { // Steps 1-5, 7-10 // Steps 6.b-6.e: +0 != -0 return x !== 0 || 1 / x === 1 / y; } else { // Step 6.a: NaN == NaN return x !== x && y !== y; } } /*eslint-enable no-self-compare*/ /** * We use an Error-like object for backward compatibility as people may call * PropTypes directly and inspect their output. However, we don't use real * Errors anymore. We don't inspect their stack anyway, and creating them * is prohibitively expensive if they are created too often, such as what * happens in oneOfType() for any type before the one that matched. */ function PropTypeError(message) { this.message = message; this.stack = ''; } // Make `instanceof Error` still work for returned errors. PropTypeError.prototype = Error.prototype; function createChainableTypeChecker(validate) { if (process.env.NODE_ENV !== 'production') { var manualPropTypeCallCache = {}; var manualPropTypeWarningCount = 0; } function checkType(isRequired, props, propName, componentName, location, propFullName, secret) { componentName = componentName || ANONYMOUS; propFullName = propFullName || propName; if (secret !== ReactPropTypesSecret) { if (throwOnDirectAccess) { // New behavior only for users of `prop-types` package invariant( false, 'Calling PropTypes validators directly is not supported by the `prop-types` package. ' + 'Use `PropTypes.checkPropTypes()` to call them. ' + 'Read more at http://fb.me/use-check-prop-types' ); } else if (process.env.NODE_ENV !== 'production' && typeof console !== 'undefined') { // Old behavior for people using React.PropTypes var cacheKey = componentName + ':' + propName; if ( !manualPropTypeCallCache[cacheKey] && // Avoid spamming the console because they are often not actionable except for lib authors manualPropTypeWarningCount < 3 ) { warning( false, 'You are manually calling a React.PropTypes validation ' + 'function for the `%s` prop on `%s`. This is deprecated ' + 'and will throw in the standalone `prop-types` package. ' + 'You may be seeing this warning due to a third-party PropTypes ' + 'library. See https://fb.me/react-warning-dont-call-proptypes ' + 'for details.', propFullName, componentName ); manualPropTypeCallCache[cacheKey] = true; manualPropTypeWarningCount++; } } } if (props[propName] == null) { if (isRequired) { if (props[propName] === null) { return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required ' + ('in `' + componentName + '`, but its value is `null`.')); } return new PropTypeError('The ' + location + ' `' + propFullName + '` is marked as required in ' + ('`' + componentName + '`, but its value is `undefined`.')); } return null; } else { return validate(props, propName, componentName, location, propFullName); } } var chainedCheckType = checkType.bind(null, false); chainedCheckType.isRequired = checkType.bind(null, true); return chainedCheckType; } function createPrimitiveTypeChecker(expectedType) { function validate(props, propName, componentName, location, propFullName, secret) { var propValue = props[propName]; var propType = getPropType(propValue); if (propType !== expectedType) { // `propValue` being instance of, say, date/regexp, pass the 'object' // check, but we can offer a more precise error message here rather than // 'of type `object`'. var preciseType = getPreciseType(propValue); return new PropTypeError('Invalid ' + location + ' `' + propFullName + '` of type ' + ('`' + preciseType + '` supplied to `' + componentName + '`, expected ') + ('`' + expectedType + '`.')); } return null; } return createChainableTypeChecker(validate); } function createAnyTypeChecker() { return createChainableTypeChecker(emptyFun