@prefect9/ui
Version:
UI React components
119 lines (118 loc) • 4.34 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
require("core-js/modules/es.parse-float.js");
require("core-js/modules/web.dom-collections.iterator.js");
var _react = require("react");
var _isType = require("@prefect9/is-type");
var _icons = _interopRequireDefault(require("../icons"));
var _jsxRuntime = require("react/jsx-runtime");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function TablePages(_ref) {
let {
page,
setPage,
pages
} = _ref;
const [activePrevious, activeNext, map] = (0, _react.useMemo)(() => {
let parsedPage = parseFloat(page);
if (parsedPage < 1) parsedPage = 1;
let parsedPages = parseFloat(pages);
if (parsedPage > parsedPages) parsedPage = parsedPages;
let activePrevious = false;
let activeNext = false;
const map = [];
if (parsedPage > 1) activePrevious = true;
if (parsedPage < parsedPages) activeNext = true;
if (parsedPage != 1) map.push({
type: "page",
number: 1
});
if (parsedPage - 2 > 2) map.push({
type: "dots"
});
if (parsedPage - 2 > 1) map.push({
type: "page",
number: parsedPage - 2
});
if (parsedPage - 1 > 1) map.push({
type: "page",
number: parsedPage - 1
});
map.push({
type: "page",
number: parsedPage,
active: true
});
if (parsedPage + 1 < parsedPages) map.push({
type: "page",
number: parsedPage + 1
});
if (parsedPage + 2 < parsedPages) map.push({
type: "page",
number: parsedPage + 2
});
if (parsedPage + 2 < parsedPages - 1) map.push({
type: "dots"
});
if (parsedPage != parsedPages) map.push({
type: "page",
number: parsedPages
});
return [activePrevious, activeNext, map];
}, [page, pages]);
const setPageHandler = (0, _react.useCallback)((e, page) => {
e.preventDefault();
if (!(0, _isType.isFunc)(setPage)) return;
setPage(page);
}, [setPage]);
const previousHandler = (0, _react.useCallback)(e => {
e.preventDefault();
const parsedPage = parseFloat(page);
if (parsedPage <= 1) return;
setPageHandler(e, parsedPage - 1);
}, [page, setPageHandler]);
const nextHandler = (0, _react.useCallback)(e => {
e.preventDefault();
const parsedPage = parseFloat(page);
const parsedPages = parseFloat(pages);
if (parsedPage >= parsedPages) return;
setPageHandler(e, parsedPage + 1);
}, [page, pages, setPageHandler]);
const pagesList = (0, _react.useMemo)(() => {
const result = [];
for (let index in map) {
const page = map[index];
if (page.type === 'page') result.push( /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: "prefect9-table__page ".concat((0, _isType.isTrue)(page.active) ? 'prefect9-table__page-active' : ''),
onClick: e => setPageHandler(e, page.number),
onMouseDown: e => e.preventDefault(),
children: page.number
}, index));else if (page.type === 'dots') result.push( /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: "prefect9-table__page prefect9-table__page-dots",
children: "..."
}, index));else throw new Error("Invalid page type ".concat(page.type));
}
return result;
}, [map, setPageHandler]);
return /*#__PURE__*/(0, _jsxRuntime.jsxs)("div", {
className: "prefect9-table__pages",
children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: "prefect9-table__pages-previous ".concat(!(0, _isType.isTrue)(activePrevious) ? 'prefect9-table__pages-previous-disabled' : ''),
onClick: previousHandler,
onMouseDown: e => e.preventDefault(),
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.default.ArrowLeft, {})
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: "prefect9-table__pages-list",
children: pagesList
}), /*#__PURE__*/(0, _jsxRuntime.jsx)("div", {
className: "prefect9-table__pages-next ".concat(!(0, _isType.isTrue)(activeNext) ? 'prefect9-table__pages-next-disabled' : ''),
onClick: nextHandler,
onMouseDown: e => e.preventDefault(),
children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_icons.default.ArrowRight, {})
})]
});
}
var _default = exports.default = TablePages;