UNPKG

lucid-ui

Version:

A UI component library from Xandr.

108 lines 7.23 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } }); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.PaginatorDumb = void 0; var lodash_1 = __importDefault(require("lodash")); var react_1 = __importDefault(require("react")); var prop_types_1 = __importDefault(require("prop-types")); var style_helpers_1 = require("../../util/style-helpers"); var reducers = __importStar(require("./Paginator.reducers")); var Paginator_selectors_1 = __importDefault(require("./Paginator.selectors")); var SingleSelect_1 = require("../SingleSelect/SingleSelect"); var TextField_1 = __importDefault(require("../TextField/TextField")); var Button_1 = require("../Button/Button"); var ArrowIcon_1 = __importDefault(require("../Icon/ArrowIcon/ArrowIcon")); var state_management_1 = require("../../util/state-management"); var cx = style_helpers_1.lucidClassNames.bind('&-Paginator'); var arrayOf = prop_types_1.default.arrayOf, bool = prop_types_1.default.bool, func = prop_types_1.default.func, number = prop_types_1.default.number, object = prop_types_1.default.object, oneOfType = prop_types_1.default.oneOfType, shape = prop_types_1.default.shape, string = prop_types_1.default.string; var Option = SingleSelect_1.SingleSelectDumb.Option; var defaultProps = { hasPageSizeSelector: false, isDisabled: false, objectLabel: 'Object', onPageSelect: lodash_1.default.noop, selectedPageIndex: 0, selectedPageSizeIndex: 0, showTotalObjects: false, totalCount: null, totalPages: undefined, pageSizeOptions: [10, 50, 100], SingleSelect: __assign(__assign({}, SingleSelect_1.SingleSelectDumb.defaultProps), { selectedIndex: 0 }), TextField: TextField_1.default.defaultProps, }; var Paginator = function (props) { var className = props.className, hasPageSizeSelector = props.hasPageSizeSelector, isDisabled = props.isDisabled, objectLabel = props.objectLabel, objectLabelPlural = props.objectLabelPlural, _a = props.onPageSelect, onPageSelect = _a === void 0 ? defaultProps.onPageSelect : _a, onPageSizeSelect = props.onPageSizeSelect, pageSizeOptions = props.pageSizeOptions, _b = props.selectedPageIndex, selectedPageIndex = _b === void 0 ? defaultProps.selectedPageIndex : _b, selectedPageSizeIndex = props.selectedPageSizeIndex, showTotalObjects = props.showTotalObjects, _c = props.totalPages, totalPages = _c === void 0 ? defaultProps.totalPages : _c, totalCount = props.totalCount, style = props.style, singleSelectProps = props.SingleSelect, textFieldProps = props.TextField; var handleTextFieldChange = function (pageNum, _a) { var props = _a.props, event = _a.event; var parsedPageNum = lodash_1.default.parseInt(pageNum); if (lodash_1.default.isNaN(parsedPageNum)) { return (onPageSelect && onPageSelect(selectedPageIndex, totalPages, { props: props, event: event })); } return (onPageSelect && onPageSelect(parsedPageNum - 1, totalPages, { props: props, event: event })); }; var isTextFieldDisabled = isDisabled || totalPages === 1; return (react_1.default.createElement("div", { style: style, className: cx('&', className) }, showTotalObjects && lodash_1.default.isNumber(totalCount) && (react_1.default.createElement("div", { className: cx('&-total-count') }, lodash_1.default.isFunction(showTotalObjects) ? showTotalObjects(totalCount) : totalCount.toLocaleString(), ' ', totalCount === 1 ? objectLabel : objectLabelPlural || "".concat(objectLabel, "s"))), hasPageSizeSelector ? (react_1.default.createElement("div", { className: cx('&-page-size-container') }, react_1.default.createElement("span", { className: cx('&-rows-per-page-label') }, "Rows per page:"), react_1.default.createElement(SingleSelect_1.SingleSelectDumb, __assign({}, singleSelectProps, { hasReset: false, isInvisible: true, isSelectionHighlighted: false, isDisabled: isDisabled, selectedIndex: selectedPageSizeIndex, onSelect: onPageSizeSelect }), lodash_1.default.map(pageSizeOptions, function (option) { return (react_1.default.createElement(Option, { key: option }, option)); })))) : null, react_1.default.createElement(Button_1.Button, { onClick: lodash_1.default.partial(onPageSelect, selectedPageIndex - 1, totalPages), isDisabled: isDisabled || selectedPageIndex === 0, kind: 'invisible', hasOnlyIcon: true }, react_1.default.createElement(ArrowIcon_1.default, { direction: 'left' })), react_1.default.createElement(TextField_1.default, __assign({ lazyLevel: 100 }, textFieldProps, { onBlur: handleTextFieldChange, onSubmit: handleTextFieldChange, isDisabled: isTextFieldDisabled, value: selectedPageIndex + 1 })), !lodash_1.default.isNil(totalPages) && react_1.default.createElement("span", null, "of ", totalPages.toLocaleString()), react_1.default.createElement(Button_1.Button, { kind: 'invisible', onClick: lodash_1.default.partial(onPageSelect, selectedPageIndex + 1, totalPages), isDisabled: isDisabled || selectedPageIndex === (totalPages || 0) - 1, hasOnlyIcon: true }, react_1.default.createElement(ArrowIcon_1.default, { direction: 'right' })))); }; exports.PaginatorDumb = Paginator; Paginator.displayName = 'Paginator'; Paginator.description = "A paginator that has an optional page size selector."; Paginator.categories = ['navigation']; Paginator.madeFrom = ['ArrowIcon', 'TextField', 'Button', 'SingleSelect']; Paginator.reducers = reducers; Paginator.selectors = Paginator_selectors_1.default; Paginator.defaultProps = defaultProps; exports.default = (0, state_management_1.buildModernHybridComponent)(Paginator, { reducers: reducers, selectors: Paginator_selectors_1.default }); //# sourceMappingURL=Paginator.js.map