UNPKG

@alifd/meet-react

Version:

Fusion Mobile React UI System Component

187 lines 9.64 kB
import { rpx2vw4style as __rpx2vw__ } from "@alifd/babel-runtime-jsx-style-transform"; function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } } function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } import { __rest } from "tslib"; import React, { createElement, forwardRef } from "react"; import classNames from 'classnames'; import { Text } from "@alifd/meet-react-component-one"; import View from '../view'; import Icon from '../icon'; import Picker from '../picker'; import Button from '../button'; import SelectDrawer from '../select-drawer'; import { useLocale } from '../locale'; import defaultLang from '../locale/lang/zh-cn'; import { isNumber } from '../utils'; import { useValue } from '../utils/hooks'; var getPageNumber = function getPageNumber(totalPage) { var pageNumberList = []; for (var i = 1; i <= totalPage; i++) { pageNumberList.push({ label: i, value: i }); } return [pageNumberList]; }; var getCurPageNum = function getCurPageNum(current, totalPage) { var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1; if (isNumber(current)) { if (current >= 1 && current <= totalPage) { return current; } else if (current > totalPage) { return totalPage; } else if (current < 1) { return defaultValue; } } else { return defaultValue; } }; var selectedValue = 1; var Pagination = function Pagination(props, ref) { var _props$size = props.size, size = _props$size === void 0 ? 'medium' : _props$size, _props$type = props.type, typeProp = _props$type === void 0 ? 'normal' : _props$type, _props$current = props.current, current = _props$current === void 0 ? 1 : _props$current, defaultCurrent = props.defaultCurrent, _props$total = props.total, totalProp = _props$total === void 0 ? 100 : _props$total, _props$pageSize = props.pageSize, pageSizeProp = _props$pageSize === void 0 ? 10 : _props$pageSize, _props$isOpenDisabled = props.isOpenDisabled, isOpenDisabled = _props$isOpenDisabled === void 0 ? true : _props$isOpenDisabled, _props$previousButton = props.previousButtonText, previousButtonText = _props$previousButton === void 0 ? 'Previous' : _props$previousButton, _props$nextButtonText = props.nextButtonText, nextButtonText = _props$nextButtonText === void 0 ? 'Next' : _props$nextButtonText, _props$onChange = props.onChange, onChange = _props$onChange === void 0 ? function () {} : _props$onChange, _props$style = props.style, style = _props$style === void 0 ? {} : _props$style, _props$prefix = props.prefix, prefix = _props$prefix === void 0 ? 'mt-' : _props$prefix, others = __rest(props, ["size", "type", "current", "defaultCurrent", "total", "pageSize", "isOpenDisabled", "previousButtonText", "nextButtonText", "onChange", "style", "prefix"]); var type = typeProp === 'simple' ? 'normal' : typeProp; var locale = useLocale('Pagination', others, defaultLang.Pagination); var pageSize = isNumber(pageSizeProp) && pageSizeProp > 0 ? pageSizeProp : 1; var total = isNumber(totalProp) && totalProp > 0 ? totalProp : 1; var totalPage = Math.ceil(total / pageSize) || 1; var pageNumberData = getPageNumber(totalPage); var _useValue = useValue(props, 1, { valueName: 'current', fitValue: function fitValue(v) { return getCurPageNum(v, totalPage); } }), _useValue2 = _slicedToArray(_useValue, 3), currentPageValue = _useValue2[0], setCurrentPageValue = _useValue2[1], isControlled = _useValue2[2]; selectedValue = currentPageValue; var previousButtonDisabled = currentPageValue === 1 && isOpenDisabled; var nextButtonDisabled = currentPageValue === totalPage && isOpenDisabled; var clsPrefix = "".concat(prefix, "pagination"); var classNameObj = { pagination: classNames(clsPrefix, "".concat(clsPrefix, "--").concat(size)), paginationTextMini: classNames("".concat(clsPrefix, "--").concat(size, "-text-mini")), paginationText: classNames("".concat(clsPrefix, "-text"), "".concat(clsPrefix, "--").concat(size, "-text")), paginationNumber: classNames("".concat(clsPrefix, "--").concat(size, "-text-number")), paginationTextCurrent: classNames("".concat(clsPrefix, "-text-current"), "".concat(clsPrefix, "--").concat(size, "-text-number")), paginationTextSelectDrawer: classNames("".concat(clsPrefix, "-text-select-drawer")), paginationIconFirst: classNames("".concat(clsPrefix, "-icon"), "".concat(clsPrefix, "--").concat(size, "-icon"), "".concat(clsPrefix, "-icon--first"), "".concat(clsPrefix, "--").concat(size, "-icon--first"), previousButtonDisabled ? "".concat(clsPrefix, "-icon--disabled") : ''), paginationIconLast: classNames("".concat(clsPrefix, "-icon"), "".concat(clsPrefix, "--").concat(size, "-icon"), "".concat(clsPrefix, "-icon--last"), "".concat(clsPrefix, "--").concat(size, "-icon--last"), nextButtonDisabled ? "".concat(clsPrefix, "-icon--disabled") : '') }; var handlePreviousButton = function handlePreviousButton(e) { if (currentPageValue <= 1) { return; } var prePageValue = currentPageValue - 1; if (!isControlled) { setCurrentPageValue(prePageValue); } if (onChange) { onChange(prePageValue, e); } }; var handleNextButton = function handleNextButton(e) { if (currentPageValue >= totalPage) { return; } var nextPageValue = currentPageValue + 1; if (!isControlled) { setCurrentPageValue(nextPageValue); } if (onChange) { onChange(nextPageValue, e); } }; var handleOk = function handleOk() { setCurrentPageValue(selectedValue); if (onChange) { onChange(selectedValue); } }; var handleCancel = function handleCancel() { selectedValue = currentPageValue; if (onChange) { onChange(selectedValue); } }; var changePageNumber = function changePageNumber(item) { selectedValue = item[0]; }; return /*#__PURE__*/React.createElement(View, _extends({}, others, { className: classNameObj.pagination, ref: ref }), /*#__PURE__*/React.createElement(Button, { size: size, model: "outline", disabled: previousButtonDisabled, onClick: handlePreviousButton }, /*#__PURE__*/React.createElement(Icon, { name: "arrow-left", className: classNameObj.paginationIconFirst }), /*#__PURE__*/React.createElement(Text, null, locale.prev || previousButtonText)), type === 'normal' ? /*#__PURE__*/React.createElement(View, null, /*#__PURE__*/React.createElement(SelectDrawer, { content: /*#__PURE__*/React.createElement(View, { className: classNameObj.paginationText }, /*#__PURE__*/React.createElement(Text, { className: classNameObj.paginationTextCurrent }, currentPageValue), /*#__PURE__*/React.createElement(Text, { className: classNameObj.paginationNumber }, "/", totalPage)), className: classNameObj.paginationTextSelectDrawer, placeholder: "", iconType: "", size: "small", drawerTitle: locale.tip, onOk: handleOk, onCancel: handleCancel, style: __rpx2vw__({ width: '100%' }) }, /*#__PURE__*/React.createElement(Picker, { data: pageNumberData, defaultValue: [currentPageValue], onChange: changePageNumber }))) : /*#__PURE__*/React.createElement(View, { className: classNameObj.paginationTextMini }), /*#__PURE__*/React.createElement(Button, { size: size, model: "outline", disabled: nextButtonDisabled, onClick: handleNextButton }, /*#__PURE__*/React.createElement(Text, null, locale.next || nextButtonText), /*#__PURE__*/React.createElement(Icon, { name: "arrow-right", className: classNameObj.paginationIconLast }))); }; Pagination.displayName = 'Pagination'; export default /*#__PURE__*/forwardRef(Pagination);