@vrx-arco/pro-components
Version:
<p align="center"> <img src="https://vrx-arco.github.io/arco-design-pro/favicon.svg" width="200" height="250"> </p>
77 lines (76 loc) • 1.95 kB
JavaScript
import { proPaginationProps } from "../ProPagination/props.js";
import { ProList } from "../ProList/index.js";
import { createVNode, defineComponent, mergeProps, toRef } from "vue";
import { Card } from "@arco-design/web-vue";
import { useGrid } from "@vrx-arco/use";
const ProCardList = /* @__PURE__ */ defineComponent({
name: "vrx-arco-pro-card-list",
props: {
...proPaginationProps(),
bottomOffset: {
type: Number,
default: 0
},
rowKey: String,
dataKey: String,
loading: {
type: Boolean,
default: false
},
maxHeight: [Number, String],
column: {
type: [Number, Object],
default: () => ({
xs: 1,
sm: 2,
md: 2,
lg: 3,
xl: 3,
xxl: 4
})
},
gutter: {
type: [Number, Array],
default: 0
}
},
emits: {
pageChange: (page) => true,
pageSizeChange: (pageSize) => true,
itemClick: (item, index) => true
},
setup: (props, { emit, slots }) => {
const column = toRef(props, "column");
const gutter = toRef(props, "gutter");
const { gridProps } = useGrid(true, column, gutter);
return () => {
const { pagination, paginationProps, data, rowKey, bottomOffset, loading, dataKey, maxHeight } = props;
return createVNode(ProList, {
"data": data,
"bordered": false,
"split": false,
"pagination": pagination,
"paginationProps": paginationProps,
"onPageChange": (current) => {
emit("pageChange", current);
},
"onPageSizeChange": (pageSize) => {
emit("pageSizeChange", pageSize);
},
"rowKey": rowKey,
"dataKey": dataKey,
"loading": loading,
"bottomOffset": bottomOffset,
"maxHeight": maxHeight,
"gridProps": gridProps.value
}, {
header: slots.header,
item: ({ item, index }) => createVNode(Card, mergeProps({ "hoverable": true }, { onClick: () => emit("itemClick", item, index) }), { default: () => [slots.item?.({
item,
index
})] })
});
};
}
});
export { ProCardList };