tabletable
Version:
A simple and extremely flexible table component written in React.
124 lines (123 loc) • 4.62 kB
JavaScript
// Tabletable - Copyright 2018 Zeroarc Software, LLC
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _reactFontawesome = require("@fortawesome/react-fontawesome");
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireDefault(require("react"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
var TabletablePager = function TabletablePager(_ref) {
var displayPages = _ref.displayPages,
_ref$maxPage = _ref.maxPage,
maxPage = _ref$maxPage === void 0 ? 1 : _ref$maxPage,
_ref$currentPage = _ref.currentPage,
currentPage = _ref$currentPage === void 0 ? 1 : _ref$currentPage,
onPageChange = _ref.onPageChange;
var pageChange = function pageChange(e) {
e.preventDefault();
var el = e.currentTarget.parentElement;
if (el) {
var page = parseInt(el.getAttribute('data-value') || '');
if (!isNaN(page)) onPageChange(page);
}
};
var previousPageChange = function previousPageChange(e) {
e.preventDefault();
if (currentPage > 1) {
onPageChange(currentPage - 1);
}
};
var nextPageChange = function nextPageChange(e) {
e.preventDefault();
if (currentPage < maxPage) {
onPageChange(currentPage + 1);
}
};
var firstPageChange = function firstPageChange(e) {
e.preventDefault();
onPageChange(1);
};
var lastPageChange = function lastPageChange(e) {
e.preventDefault();
onPageChange(maxPage);
};
var options = [];
var startIndex = Math.max(currentPage - Math.floor(displayPages / 2), 1);
var endIndex = Math.min(startIndex + (displayPages - 1), maxPage);
if (maxPage >= displayPages && endIndex - startIndex <= displayPages) {
startIndex = endIndex - (displayPages - 1);
}
for (var i = startIndex; i <= endIndex; i++) {
var thisButtonClasses = (0, _classnames["default"])('page-item', {
'active': currentPage === i
});
options.push(/*#__PURE__*/_react["default"].createElement("li", {
key: "option-".concat(i),
className: thisButtonClasses,
"aria-current": currentPage === i ? 'page' : false,
"data-value": i
}, /*#__PURE__*/_react["default"].createElement("a", {
href: "#",
onClick: pageChange,
className: "page-link"
}, i)));
}
var backButtonClasses = (0, _classnames["default"])('page-item', {
'disabled': currentPage === 1 || endIndex === 0
});
var forwardButtonClasses = (0, _classnames["default"])('page-item', {
'disabled': currentPage === maxPage || endIndex === 0
});
return /*#__PURE__*/_react["default"].createElement("nav", {
"aria-label": "Table navigation"
}, /*#__PURE__*/_react["default"].createElement("ul", {
className: "pagination pagination-sm justify-content-center mb-0"
}, /*#__PURE__*/_react["default"].createElement("li", {
className: backButtonClasses
}, /*#__PURE__*/_react["default"].createElement("a", {
href: "#",
onClick: firstPageChange,
className: "page-link",
"aria-label": "First"
}, /*#__PURE__*/_react["default"].createElement(_reactFontawesome.FontAwesomeIcon, {
icon: ['far', 'step-backward'],
fixedWidth: true,
"aria-hidden": "true"
}))), /*#__PURE__*/_react["default"].createElement("li", {
className: backButtonClasses
}, /*#__PURE__*/_react["default"].createElement("a", {
href: "#",
onClick: previousPageChange,
className: "page-link",
"aria-label": "Previous"
}, /*#__PURE__*/_react["default"].createElement(_reactFontawesome.FontAwesomeIcon, {
icon: ['far', 'chevron-left'],
fixedWidth: true,
"aria-hidden": "true"
}))), options, /*#__PURE__*/_react["default"].createElement("li", {
className: forwardButtonClasses
}, /*#__PURE__*/_react["default"].createElement("a", {
href: "#",
onClick: nextPageChange,
className: "page-link",
"aria-label": "Next"
}, /*#__PURE__*/_react["default"].createElement(_reactFontawesome.FontAwesomeIcon, {
icon: ['far', 'chevron-right'],
fixedWidth: true,
"aria-hidden": "true"
}))), /*#__PURE__*/_react["default"].createElement("li", {
className: forwardButtonClasses
}, /*#__PURE__*/_react["default"].createElement("a", {
href: "#",
onClick: lastPageChange,
className: "page-link",
"aria-label": "Last"
}, /*#__PURE__*/_react["default"].createElement(_reactFontawesome.FontAwesomeIcon, {
icon: ['far', 'step-forward'],
fixedWidth: true,
"aria-hidden": "true"
})))));
};
var _default = exports["default"] = TabletablePager;