shineout
Version:
Shein 前端组件库
163 lines (126 loc) • 4.13 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = void 0;
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireWildcard(require("react"));
var _icons = _interopRequireDefault(require("../icons"));
var _styles = require("./styles");
var _Item = _interopRequireDefault(require("./Item"));
var _Prev = _interopRequireDefault(require("./Prev"));
var _Next = _interopRequireDefault(require("./Next"));
var _config = require("../config");
var _classname = require("../utils/classname");
var DefaultValue = {
span: 5,
text: {}
};
var renderIcon = function renderIcon(isPrev) {
var rtl = (0, _config.isRTL)();
if (isPrev && rtl || !isPrev && !rtl) {
return _icons.default.AngleDoubleRight;
}
return _icons.default.AngleDoubleLeft;
};
var Links =
/*#__PURE__*/
function (_PureComponent) {
(0, _inheritsLoose2.default)(Links, _PureComponent);
function Links() {
return _PureComponent.apply(this, arguments) || this;
}
var _proto = Links.prototype;
_proto.getLinks = function getLinks() {
var _this$props = this.props,
current = _this$props.current,
total = _this$props.total,
pageSize = _this$props.pageSize,
_this$props$span = _this$props.span,
span = _this$props$span === void 0 ? DefaultValue.span : _this$props$span;
if (total === 0) return {
links: [],
max: 0
};
var max = Math.ceil(total / pageSize);
var links = [];
var right;
var left = current - Math.floor(span / 2);
if (left < 3) {
left = 3;
}
right = left + span;
if (right + 1 >= max) {
right = max - 1;
left = right - span;
if (left < 1) {
left = 1;
}
} else {
right -= left > 1 ? 1 : 0;
}
if (left > 1) {
links.push(1);
}
if (left === 3) {
links.push(2);
} else if (left > 3) {
links.push('<<');
}
for (var i = left; i < right + 1; i++) {
links.push(i);
}
if (right === max - 2) {
links.push(max - 1);
} else if (right < max - 1) {
links.push('>>');
}
if (right < max) {
links.push(max);
}
return {
links: links,
max: max
};
};
_proto.render = function render() {
var _this$props2 = this.props,
current = _this$props2.current,
onChange = _this$props2.onChange,
_this$props2$span = _this$props2.span,
span = _this$props2$span === void 0 ? DefaultValue.span : _this$props2$span,
disabled = _this$props2.disabled;
var _this$getLinks = this.getLinks(),
links = _this$getLinks.links,
max = _this$getLinks.max;
return _react.default.createElement("div", {
className: (0, _styles.paginationClass)('links', (0, _classname.getDirectionClass)('section'))
}, _react.default.createElement(_Prev.default, this.props), links.map(function (p) {
if (typeof p === 'number') {
return _react.default.createElement(_Item.default, {
key: p,
disabled: disabled,
isCurrent: current === p,
page: p,
onClick: onChange
}, p);
}
var isPrev = p === '<<';
var page = isPrev ? current - span : current + span;
if (page < 1) page = 1;
if (page > max) page = max;
return _react.default.createElement(_Item.default, {
key: p,
disabled: disabled,
page: page,
className: "no-border " + (isPrev ? 'more-left' : 'more-right'),
onClick: onChange
}, renderIcon(isPrev));
}), _react.default.createElement(_Next.default, this.props));
};
return Links;
}(_react.PureComponent);
(0, _defineProperty2.default)(Links, "defaultProps", DefaultValue);
var _default = Links;
exports.default = _default;