UNPKG

react-virtualized

Version:

React components for efficiently rendering large, scrollable lists and tabular data

330 lines (328 loc) 14.6 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass")); var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn")); var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _immutable = _interopRequireDefault(require("immutable")); var _propTypes = _interopRequireDefault(require("prop-types")); var React = _interopRequireWildcard(require("react")); var _ContentBox = require("../demo/ContentBox"); var _LabeledInput = require("../demo/LabeledInput"); var _AutoSizer = _interopRequireDefault(require("../AutoSizer")); var _Grid = _interopRequireDefault(require("./Grid")); var _clsx2 = _interopRequireDefault(require("clsx")); var _GridExample2 = _interopRequireDefault(require("./Grid.example.css")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; } function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { (0, _defineProperty2["default"])(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } function _callSuper(t, o, e) { return o = (0, _getPrototypeOf2["default"])(o), (0, _possibleConstructorReturn2["default"])(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], (0, _getPrototypeOf2["default"])(t).constructor) : o.apply(t, e)); } function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); } var GridExample = exports["default"] = /*#__PURE__*/function (_React$PureComponent) { function GridExample(props, context) { var _this; (0, _classCallCheck2["default"])(this, GridExample); _this = _callSuper(this, GridExample, [props, context]); _this.state = { columnCount: 1000, height: 300, overscanColumnCount: 0, overscanRowCount: 10, rowHeight: 40, rowCount: 1000, scrollToColumn: undefined, scrollToRow: undefined, useDynamicRowHeight: false }; _this._cellRenderer = _this._cellRenderer.bind(_this); _this._getColumnWidth = _this._getColumnWidth.bind(_this); _this._getRowClassName = _this._getRowClassName.bind(_this); _this._getRowHeight = _this._getRowHeight.bind(_this); _this._noContentRenderer = _this._noContentRenderer.bind(_this); _this._onColumnCountChange = _this._onColumnCountChange.bind(_this); _this._onRowCountChange = _this._onRowCountChange.bind(_this); _this._onScrollToColumnChange = _this._onScrollToColumnChange.bind(_this); _this._onScrollToRowChange = _this._onScrollToRowChange.bind(_this); _this._renderBodyCell = _this._renderBodyCell.bind(_this); _this._renderLeftSideCell = _this._renderLeftSideCell.bind(_this); return _this; } (0, _inherits2["default"])(GridExample, _React$PureComponent); return (0, _createClass2["default"])(GridExample, [{ key: "render", value: function render() { var _this2 = this; var _this$state = this.state, columnCount = _this$state.columnCount, height = _this$state.height, overscanColumnCount = _this$state.overscanColumnCount, overscanRowCount = _this$state.overscanRowCount, rowHeight = _this$state.rowHeight, rowCount = _this$state.rowCount, scrollToColumn = _this$state.scrollToColumn, scrollToRow = _this$state.scrollToRow, useDynamicRowHeight = _this$state.useDynamicRowHeight; return /*#__PURE__*/React.createElement(_ContentBox.ContentBox, null, /*#__PURE__*/React.createElement(_ContentBox.ContentBoxHeader, { text: "Grid", sourceLink: "https://github.com/bvaughn/react-virtualized/blob/master/source/Grid/Grid.example.js", docsLink: "https://github.com/bvaughn/react-virtualized/blob/master/docs/Grid.md" }), /*#__PURE__*/React.createElement(_ContentBox.ContentBoxParagraph, null, "Renders tabular data with virtualization along the vertical and horizontal axes. Row heights and column widths must be calculated ahead of time and specified as a fixed size or returned by a getter function."), /*#__PURE__*/React.createElement(_ContentBox.ContentBoxParagraph, null, /*#__PURE__*/React.createElement("label", { className: _GridExample2["default"].checkboxLabel }, /*#__PURE__*/React.createElement("input", { "aria-label": "Use dynamic row height?", className: _GridExample2["default"].checkbox, type: "checkbox", value: useDynamicRowHeight, onChange: function onChange(event) { return _this2._updateUseDynamicRowHeights(event.target.checked); } }), "Use dynamic row height?")), /*#__PURE__*/React.createElement(_LabeledInput.InputRow, null, /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { label: "Num columns", name: "columnCount", onChange: this._onColumnCountChange, value: columnCount }), /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { label: "Num rows", name: "rowCount", onChange: this._onRowCountChange, value: rowCount }), /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { label: "Scroll to column", name: "onScrollToColumn", placeholder: "Index...", onChange: this._onScrollToColumnChange, value: scrollToColumn || '' }), /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { label: "Scroll to row", name: "onScrollToRow", placeholder: "Index...", onChange: this._onScrollToRowChange, value: scrollToRow || '' }), /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { label: "List height", name: "height", onChange: function onChange(event) { return _this2.setState({ height: parseInt(event.target.value, 10) || 1 }); }, value: height }), /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { disabled: useDynamicRowHeight, label: "Row height", name: "rowHeight", onChange: function onChange(event) { return _this2.setState({ rowHeight: parseInt(event.target.value, 10) || 1 }); }, value: rowHeight }), /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { label: "Overscan columns", name: "overscanColumnCount", onChange: function onChange(event) { return _this2.setState({ overscanColumnCount: parseInt(event.target.value, 10) || 0 }); }, value: overscanColumnCount }), /*#__PURE__*/React.createElement(_LabeledInput.LabeledInput, { label: "Overscan rows", name: "overscanRowCount", onChange: function onChange(event) { return _this2.setState({ overscanRowCount: parseInt(event.target.value, 10) || 0 }); }, value: overscanRowCount })), /*#__PURE__*/React.createElement(_AutoSizer["default"], { disableHeight: true }, function (_ref) { var width = _ref.width; return /*#__PURE__*/React.createElement(_Grid["default"], { cellRenderer: _this2._cellRenderer, className: _GridExample2["default"].BodyGrid, columnWidth: _this2._getColumnWidth, columnCount: columnCount, height: height, noContentRenderer: _this2._noContentRenderer, overscanColumnCount: overscanColumnCount, overscanRowCount: overscanRowCount, rowHeight: useDynamicRowHeight ? _this2._getRowHeight : rowHeight, rowCount: rowCount, scrollToColumn: scrollToColumn, scrollToRow: scrollToRow, width: width }); })); } }, { key: "_cellRenderer", value: function _cellRenderer(_ref2) { var columnIndex = _ref2.columnIndex, key = _ref2.key, rowIndex = _ref2.rowIndex, style = _ref2.style; if (columnIndex === 0) { return this._renderLeftSideCell({ columnIndex: columnIndex, key: key, rowIndex: rowIndex, style: style }); } else { return this._renderBodyCell({ columnIndex: columnIndex, key: key, rowIndex: rowIndex, style: style }); } } }, { key: "_getColumnWidth", value: function _getColumnWidth(_ref3) { var index = _ref3.index; switch (index) { case 0: return 50; case 1: return 100; case 2: return 300; default: return 80; } } }, { key: "_getDatum", value: function _getDatum(index) { var list = this.context.list; return list.get(index % list.size); } }, { key: "_getRowClassName", value: function _getRowClassName(row) { return row % 2 === 0 ? _GridExample2["default"].evenRow : _GridExample2["default"].oddRow; } }, { key: "_getRowHeight", value: function _getRowHeight(_ref4) { var index = _ref4.index; return this._getDatum(index).size; } }, { key: "_noContentRenderer", value: function _noContentRenderer() { return /*#__PURE__*/React.createElement("div", { className: _GridExample2["default"].noCells }, "No cells"); } }, { key: "_renderBodyCell", value: function _renderBodyCell(_ref5) { var columnIndex = _ref5.columnIndex, key = _ref5.key, rowIndex = _ref5.rowIndex, style = _ref5.style; var rowClass = this._getRowClassName(rowIndex); var datum = this._getDatum(rowIndex); var content; switch (columnIndex) { case 1: content = datum.name; break; case 2: content = datum.random; break; default: content = "r:".concat(rowIndex, ", c:").concat(columnIndex); break; } var classNames = (0, _clsx2["default"])(rowClass, _GridExample2["default"].cell, (0, _defineProperty2["default"])({}, _GridExample2["default"].centeredCell, columnIndex > 2)); return /*#__PURE__*/React.createElement("div", { className: classNames, key: key, style: style }, content); } }, { key: "_renderLeftSideCell", value: function _renderLeftSideCell(_ref6) { var key = _ref6.key, rowIndex = _ref6.rowIndex, style = _ref6.style; var datum = this._getDatum(rowIndex); var classNames = (0, _clsx2["default"])(_GridExample2["default"].cell, _GridExample2["default"].letterCell); // Don't modify styles. // These are frozen by React now (as of 16.0.0). // Since Grid caches and re-uses them, they aren't safe to modify. style = _objectSpread(_objectSpread({}, style), {}, { backgroundColor: datum.color }); return /*#__PURE__*/React.createElement("div", { className: classNames, key: key, style: style }, datum.name.charAt(0)); } }, { key: "_updateUseDynamicRowHeights", value: function _updateUseDynamicRowHeights(value) { this.setState({ useDynamicRowHeight: value }); } }, { key: "_onColumnCountChange", value: function _onColumnCountChange(event) { var columnCount = parseInt(event.target.value, 10) || 0; this.setState({ columnCount: columnCount }); } }, { key: "_onRowCountChange", value: function _onRowCountChange(event) { var rowCount = parseInt(event.target.value, 10) || 0; this.setState({ rowCount: rowCount }); } }, { key: "_onScrollToColumnChange", value: function _onScrollToColumnChange(event) { var columnCount = this.state.columnCount; var scrollToColumn = Math.min(columnCount - 1, parseInt(event.target.value, 10)); if (isNaN(scrollToColumn)) { scrollToColumn = undefined; } this.setState({ scrollToColumn: scrollToColumn }); } }, { key: "_onScrollToRowChange", value: function _onScrollToRowChange(event) { var rowCount = this.state.rowCount; var scrollToRow = Math.min(rowCount - 1, parseInt(event.target.value, 10)); if (isNaN(scrollToRow)) { scrollToRow = undefined; } this.setState({ scrollToRow: scrollToRow }); } }]); }(React.PureComponent); (0, _defineProperty2["default"])(GridExample, "contextTypes", { list: _propTypes["default"].instanceOf(_immutable["default"].List).isRequired });