ant-design-vue
Version:
An enterprise-class UI design language and Vue-based implementation
137 lines • 4.63 kB
JavaScript
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
import _typeof from "@babel/runtime/helpers/esm/typeof";
import { Fragment as _Fragment, createVNode as _createVNode } from "vue";
import { defineComponent, computed, ref, watch } from 'vue';
import classNames from '../_util/classNames';
import ListItem from './ListItem';
import Pagination from '../pagination';
import PropTypes from '../_util/vue-types';
export var transferListBodyProps = {
prefixCls: String,
filteredRenderItems: PropTypes.array.def([]),
selectedKeys: PropTypes.array,
disabled: {
type: Boolean,
default: undefined
},
showRemove: {
type: Boolean,
default: undefined
},
pagination: PropTypes.any,
onItemSelect: Function,
onScroll: Function,
onItemRemove: Function
};
function parsePagination(pagination) {
if (!pagination) {
return null;
}
var defaultPagination = {
pageSize: 10
};
if (_typeof(pagination) === 'object') {
return _objectSpread(_objectSpread({}, defaultPagination), pagination);
}
return defaultPagination;
}
var ListBody = defineComponent({
compatConfig: {
MODE: 3
},
name: 'ListBody',
inheritAttrs: false,
props: transferListBodyProps,
emits: ['itemSelect', 'itemRemove', 'scroll'],
setup: function setup(props, _ref) {
var emit = _ref.emit,
expose = _ref.expose;
var current = ref(1);
var handleItemSelect = function handleItemSelect(item) {
var selectedKeys = props.selectedKeys;
var checked = selectedKeys.indexOf(item.key) >= 0;
emit('itemSelect', item.key, !checked);
};
var handleItemRemove = function handleItemRemove(item) {
emit('itemRemove', [item.key]);
};
var handleScroll = function handleScroll(e) {
emit('scroll', e);
};
var mergedPagination = computed(function () {
return parsePagination(props.pagination);
});
watch([mergedPagination, function () {
return props.filteredRenderItems;
}], function () {
if (mergedPagination.value) {
// Calculate the page number
var maxPageCount = Math.ceil(props.filteredRenderItems.length / mergedPagination.value.pageSize);
if (current.value > maxPageCount) {
current.value = maxPageCount;
}
}
}, {
immediate: true
});
var items = computed(function () {
var filteredRenderItems = props.filteredRenderItems;
var displayItems = filteredRenderItems;
if (mergedPagination.value) {
displayItems = filteredRenderItems.slice((current.value - 1) * mergedPagination.value.pageSize, current.value * mergedPagination.value.pageSize);
}
return displayItems;
});
var onPageChange = function onPageChange(cur) {
current.value = cur;
};
expose({
items: items
});
return function () {
var prefixCls = props.prefixCls,
filteredRenderItems = props.filteredRenderItems,
selectedKeys = props.selectedKeys,
globalDisabled = props.disabled,
showRemove = props.showRemove;
var paginationNode = null;
if (mergedPagination.value) {
paginationNode = _createVNode(Pagination, {
"simple": true,
"size": "small",
"disabled": globalDisabled,
"class": "".concat(prefixCls, "-pagination"),
"total": filteredRenderItems.length,
"pageSize": mergedPagination.value.pageSize,
"current": current.value,
"onChange": onPageChange
}, null);
}
var itemsList = items.value.map(function (_ref2) {
var renderedEl = _ref2.renderedEl,
renderedText = _ref2.renderedText,
item = _ref2.item;
var disabled = item.disabled;
var checked = selectedKeys.indexOf(item.key) >= 0;
return _createVNode(ListItem, {
"disabled": globalDisabled || disabled,
"key": item.key,
"item": item,
"renderedText": renderedText,
"renderedEl": renderedEl,
"checked": checked,
"prefixCls": prefixCls,
"onClick": handleItemSelect,
"onRemove": handleItemRemove,
"showRemove": showRemove
}, null);
});
return _createVNode(_Fragment, null, [_createVNode("ul", {
"class": classNames("".concat(prefixCls, "-content"), _defineProperty({}, "".concat(prefixCls, "-content-show-remove"), showRemove)),
"onScroll": handleScroll
}, [itemsList]), paginationNode]);
};
}
});
export default ListBody;