UNPKG

customizable-datatable

Version:

customizable/resuable material-UI datatable component

216 lines (182 loc) 8.06 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; require("core-js/modules/web.dom-collections.iterator.js"); var _react = _interopRequireWildcard(require("react")); var _ChevronLeft = _interopRequireDefault(require("@material-ui/icons/ChevronLeft")); var _ChevronRight = _interopRequireDefault(require("@material-ui/icons/ChevronRight")); var _FirstPage = _interopRequireDefault(require("@material-ui/icons/FirstPage")); var _LastPage = _interopRequireDefault(require("@material-ui/icons/LastPage")); var _Menu = _interopRequireDefault(require("@material-ui/core/Menu")); var _MenuItem = _interopRequireDefault(require("@material-ui/core/MenuItem")); var _ArrowDropDown = _interopRequireDefault(require("@material-ui/icons/ArrowDropDown")); require("../CSS/css.css"); var _propTypes = _interopRequireDefault(require("prop-types")); var _Tooltip = _interopRequireDefault(require("@material-ui/core/Tooltip")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } const propTypes = { items: _propTypes.default.array.isRequired, onChangePage: _propTypes.default.func.isRequired, initialPage: _propTypes.default.number, pageSize: _propTypes.default.number }; const defaultProps = { initialPage: 1, pageSize: 10 }; class pagination extends _react.Component { constructor(props) { super(props); _defineProperty(this, "handleClick", event => { this.setState({ anchorEl: event.currentTarget }); }); _defineProperty(this, "handleClose", () => { this.setState({ anchorEl: null }); }); _defineProperty(this, "handelChangeValue", e => { this.setState({ selectValue: Number(e.target.innerText), anchorEl: null, pageSize: Number(e.target.innerText) }, () => this.setPage()); }); this.state = { anchorEl: "", pager: {}, selectValue: 10, pageSize: this.props.pageSize }; } componentWillMount() { // set page if items array isn't empty if (this.props.items && this.props.items.length) { this.setPage(this.props.initialPage); } } componentDidUpdate(prevProps, prevState) { // reset page if items array has changed if (this.props.items !== prevProps.items) { this.setPage(this.props.initialPage); } } setPage(page) { var { items } = this.props; var { pageSize } = this.state; var pager = this.state.pager; if (page < 1 || page > pager.totalPages) { return; } pager = this.getPager(items.length, page, pageSize); var pageOfItems = items.slice(pager.startIndex, pager.endIndex + 1); this.setState({ pager: pager }); this.props.onChangePage(pageOfItems); } getPager(totalItems, currentPage, pageSize) { currentPage = currentPage || 1; pageSize = pageSize || pageSize; var totalPages = Math.ceil(totalItems / pageSize); var startPage, endPage; if (totalPages <= pageSize) { startPage = 1; endPage = totalPages; } else { if (currentPage <= pageSize) { startPage = 1; endPage = pageSize; } else if (currentPage + 4 >= totalPages) { startPage = totalPages - 9; endPage = totalPages; } else { startPage = currentPage - 5; endPage = currentPage + 4; } } var startIndex = (currentPage - 1) * pageSize; var endIndex = Math.min(startIndex + pageSize - 1, totalItems - 1); var pages = [...Array(endPage + 1 - startPage).keys()].map(i => startPage + i); return { totalItems: totalItems, currentPage: currentPage, pageSize: pageSize, totalPages: totalPages, startPage: startPage, endPage: endPage, startIndex: startIndex, endIndex: endIndex, pages: pages }; } render() { var pager = this.state.pager; const { items, rowsPerPageOptions } = this.props; return /*#__PURE__*/_react.default.createElement("div", { className: "d-flex justify-content-between" }, /*#__PURE__*/_react.default.createElement("div", { className: "d-flex" }, /*#__PURE__*/_react.default.createElement("div", null, "Rows per page:"), /*#__PURE__*/_react.default.createElement("div", { className: "d-flex" }, /*#__PURE__*/_react.default.createElement("div", { className: "pagination-ico-left" }, this.state.pageSize), /*#__PURE__*/_react.default.createElement(_ArrowDropDown.default, { onClick: this.handleClick }), /*#__PURE__*/_react.default.createElement(_Menu.default, { id: "simple-menu", anchorEl: this.state.anchorEl, keepMounted: true, open: Boolean(this.state.anchorEl), onClose: this.handleClose }, " ", rowsPerPageOptions.map(data => /*#__PURE__*/_react.default.createElement(_MenuItem.default, { onClick: e => this.handelChangeValue(e) }, data))))), /*#__PURE__*/_react.default.createElement("div", { className: "d-flex" }, " ", /*#__PURE__*/_react.default.createElement(_Tooltip.default, { title: "First" }, /*#__PURE__*/_react.default.createElement(_FirstPage.default, { className: "pagination-icon-second", color: pager.currentPage === 1 ? "disabled" : "", onClick: () => this.setPage(1) })), /*#__PURE__*/_react.default.createElement(_Tooltip.default, { title: "Previous" }, /*#__PURE__*/_react.default.createElement(_ChevronLeft.default, { className: "pagination-icon", onClick: () => this.setPage(pager.currentPage - 1), color: pager.currentPage === 1 ? "disabled" : "" })), /*#__PURE__*/_react.default.createElement("div", { className: "pagination-text" }, "Page ", pager.currentPage, " - ", this.state.pageSize, " of ", items.length), /*#__PURE__*/_react.default.createElement(_Tooltip.default, { title: "Next" }, /*#__PURE__*/_react.default.createElement(_ChevronRight.default, { className: "pagination-icon pagination-ico-left", onClick: () => this.setPage(pager.currentPage + 1), color: pager.currentPage === pager.totalPages ? "disabled" : "" })), /*#__PURE__*/_react.default.createElement(_Tooltip.default, { title: "Last" }, /*#__PURE__*/_react.default.createElement(_LastPage.default, { className: "pagination-icon-second", onClick: () => this.setPage(pager.totalPages), color: pager.currentPage === pager.totalPages ? "disabled" : "" })))); } } pagination.propTypes = propTypes; pagination.defaultProps = defaultProps; var _default = pagination; exports.default = _default;