linkmore-design
Version:
π πlmη»δ»ΆεΊγπ
149 lines (148 loc) β’ 4.21 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.OmitProps = void 0;
var _classnames = _interopRequireDefault(require("classnames"));
var React = _interopRequireWildcard(require("react"));
var _pagination = _interopRequireDefault(require("../pagination"));
var _type = require("../_util/type");
var _ListItem = _interopRequireDefault(require("./ListItem"));
const OmitProps = (0, _type.tuple)('handleFilter', 'handleClear', 'checkedKeys');
exports.OmitProps = OmitProps;
function parsePagination(pagination) {
if (!pagination) {
return null;
}
const defaultPagination = {
pageSize: 10,
simple: true,
showSizeChanger: false,
showLessItems: false
};
if (typeof pagination === 'object') {
return {
...defaultPagination,
...pagination
};
}
return defaultPagination;
}
class ListBody extends React.Component {
state = {
current: 1
};
static getDerivedStateFromProps({
filteredRenderItems,
pagination
}, {
current
}) {
const mergedPagination = parsePagination(pagination);
if (mergedPagination) {
// Calculate the page number
const maxPageCount = Math.ceil(filteredRenderItems.length / mergedPagination.pageSize);
if (current > maxPageCount) {
return {
current: maxPageCount
};
}
}
return null;
}
onItemSelect = item => {
const {
onItemSelect,
selectedKeys
} = this.props;
const checked = selectedKeys.includes(item.key);
onItemSelect(item.key, !checked);
};
onItemRemove = item => {
const {
onItemRemove
} = this.props;
onItemRemove?.([item.key]);
};
onPageChange = current => {
this.setState({
current
});
};
getItems = () => {
const {
current
} = this.state;
const {
pagination,
filteredRenderItems
} = this.props;
const mergedPagination = parsePagination(pagination);
let displayItems = filteredRenderItems;
if (mergedPagination) {
displayItems = filteredRenderItems.slice((current - 1) * mergedPagination.pageSize, current * mergedPagination.pageSize);
}
return displayItems;
};
render() {
const {
current
} = this.state;
const {
prefixCls,
onScroll,
filteredRenderItems,
selectedKeys,
disabled: globalDisabled,
showRemove,
pagination
} = this.props;
const mergedPagination = parsePagination(pagination);
let paginationNode = null;
if (mergedPagination) {
paginationNode = /*#__PURE__*/React.createElement(_pagination.default, {
simple: mergedPagination.simple,
showSizeChanger: mergedPagination.showSizeChanger,
showLessItems: mergedPagination.showLessItems,
size: "small",
disabled: globalDisabled,
className: `${prefixCls}-pagination`,
total: filteredRenderItems.length,
pageSize: mergedPagination.pageSize,
current: current,
onChange: this.onPageChange
});
}
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("ul", {
className: (0, _classnames.default)(`${prefixCls}-content`, {
[`${prefixCls}-content-show-remove`]: showRemove
}),
onScroll: onScroll
}, this.getItems().map(({
renderedEl,
renderedText,
item
}) => {
const {
disabled
} = item;
const checked = selectedKeys.includes(item.key);
return /*#__PURE__*/React.createElement(_ListItem.default, {
disabled: globalDisabled || disabled,
key: item.key,
item: item,
renderedText: renderedText,
renderedEl: renderedEl,
checked: checked,
prefixCls: prefixCls,
onClick: this.onItemSelect,
onRemove: this.onItemRemove,
showRemove: showRemove
});
})), paginationNode);
}
}
var _default = ListBody;
exports.default = _default;