UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 24.5 kB
{"version":3,"file":"pagination.mjs","sources":["../../../../../../packages/components/pagination/src/pagination.ts"],"sourcesContent":["import {\n computed,\n defineComponent,\n getCurrentInstance,\n h,\n provide,\n ref,\n watch,\n} from 'vue'\nimport { ArrowLeft, ArrowRight } from '@element-plus/icons-vue'\nimport {\n buildProps,\n debugWarn,\n definePropType,\n iconPropType,\n isNumber,\n mutable,\n} from '@element-plus/utils'\nimport {\n useDeprecated,\n useGlobalSize,\n useLocale,\n useNamespace,\n useSizeProp,\n} from '@element-plus/hooks'\nimport { CHANGE_EVENT } from '@element-plus/constants'\nimport { elPaginationKey } from './constants'\nimport Prev from './components/prev.vue'\nimport Next from './components/next.vue'\nimport Sizes from './components/sizes.vue'\nimport Jumper from './components/jumper.vue'\nimport Total from './components/total.vue'\nimport Pager from './components/pager.vue'\n\nimport type {\n CSSProperties,\n ExtractPropTypes,\n ExtractPublicPropTypes,\n VNode,\n} from 'vue'\n/**\n * It it user's responsibility to guarantee that the value of props.total... is number\n * (same as pageSize, defaultPageSize, currentPage, defaultCurrentPage, pageCount)\n * Otherwise we can reasonable infer that the corresponding field is absent\n */\nconst isAbsent = (v: unknown): v is undefined => typeof v !== 'number'\n\ntype LayoutKey =\n | 'prev'\n | 'pager'\n | 'next'\n | 'jumper'\n | '->'\n | 'total'\n | 'sizes'\n | 'slot'\n\nexport const paginationProps = buildProps({\n /**\n * @description options of item count per page\n */\n pageSize: Number,\n /**\n * @description default initial value of page size, not setting is the same as setting 10\n */\n defaultPageSize: Number,\n /**\n * @description total item count\n */\n total: Number,\n /**\n * @description total page count. Set either `total` or `page-count` and pages will be displayed; if you need `page-sizes`, `total` is required\n */\n pageCount: Number,\n /**\n * @description number of pagers. Pagination collapses when the total page count exceeds this value\n */\n pagerCount: {\n type: Number,\n validator: (value: unknown) => {\n return (\n isNumber(value) &&\n Math.trunc(value) === value &&\n value > 4 &&\n value < 22 &&\n value % 2 === 1\n )\n },\n default: 7,\n },\n /**\n * @description current page number\n */\n currentPage: Number,\n /**\n * @description default initial value of current-page, not setting is the same as setting 1\n */\n defaultCurrentPage: Number,\n /**\n * @description layout of Pagination, elements separated with a comma\n */\n layout: {\n type: String,\n default: (\n ['prev', 'pager', 'next', 'jumper', '->', 'total'] as LayoutKey[]\n ).join(', '),\n },\n /**\n * @description item count of each page\n */\n pageSizes: {\n type: definePropType<number[]>(Array),\n default: () => mutable([10, 20, 30, 40, 50, 100] as const),\n },\n /**\n * @description custom class name for the page size Select's dropdown\n */\n popperClass: {\n type: String,\n default: '',\n },\n /**\n * @description custom style for the page size Select's dropdown\n */\n popperStyle: {\n type: definePropType<string | CSSProperties>([String, Object]),\n },\n /**\n * @description text for the prev button\n */\n prevText: {\n type: String,\n default: '',\n },\n /**\n * @description icon for the prev button, higher priority of `prev-text`\n */\n prevIcon: {\n type: iconPropType,\n default: () => ArrowLeft,\n },\n /**\n * @description text for the next button\n */\n nextText: {\n type: String,\n default: '',\n },\n /**\n * @description icon for the next button, higher priority of `next-text`\n */\n nextIcon: {\n type: iconPropType,\n default: () => ArrowRight,\n },\n /**\n * @description whether Pagination size is teleported to body\n */\n teleported: {\n type: Boolean,\n default: true,\n },\n /**\n * @description whether to use small pagination\n */\n small: Boolean,\n /**\n * @description set page size\n */\n size: useSizeProp,\n /**\n * @description whether the buttons have a background color\n */\n background: Boolean,\n /**\n * @description whether Pagination is disabled\n */\n disabled: Boolean,\n /**\n * @description whether to hide when there's only one page\n */\n hideOnSinglePage: Boolean,\n /**\n * @description which element the size dropdown appends to.\n */\n appendSizeTo: String,\n} as const)\nexport type PaginationProps = ExtractPropTypes<typeof paginationProps>\nexport type PaginationPropsPublic = ExtractPublicPropTypes<\n typeof paginationProps\n>\n\nexport const paginationEmits = {\n 'update:current-page': (val: number) => isNumber(val),\n 'update:page-size': (val: number) => isNumber(val),\n 'size-change': (val: number) => isNumber(val),\n change: (currentPage: number, pageSize: number) =>\n isNumber(currentPage) && isNumber(pageSize),\n 'current-change': (val: number) => isNumber(val),\n 'prev-click': (val: number) => isNumber(val),\n 'next-click': (val: number) => isNumber(val),\n}\nexport type PaginationEmits = typeof paginationEmits\n\nconst componentName = 'ElPagination'\nexport default defineComponent({\n name: componentName,\n\n props: paginationProps,\n emits: paginationEmits,\n\n setup(props, { emit, slots }) {\n const { t } = useLocale()\n const ns = useNamespace('pagination')\n const vnodeProps = getCurrentInstance()!.vnode.props || {}\n const _globalSize = useGlobalSize()\n const _size = computed(() =>\n props.small ? 'small' : (props.size ?? _globalSize.value)\n )\n useDeprecated(\n {\n from: 'small',\n replacement: 'size',\n version: '3.0.0',\n scope: 'el-pagination',\n ref: 'https://element-plus.org/zh-CN/component/pagination.html',\n },\n computed(() => !!props.small)\n )\n // we can find @xxx=\"xxx\" props on `vnodeProps` to check if user bind corresponding events\n const hasCurrentPageListener =\n 'onUpdate:currentPage' in vnodeProps ||\n 'onUpdate:current-page' in vnodeProps ||\n 'onCurrentChange' in vnodeProps\n const hasPageSizeListener =\n 'onUpdate:pageSize' in vnodeProps ||\n 'onUpdate:page-size' in vnodeProps ||\n 'onSizeChange' in vnodeProps\n const assertValidUsage = computed(() => {\n // Users have to set either one, otherwise count of pages cannot be determined\n if (isAbsent(props.total) && isAbsent(props.pageCount)) return false\n // <el-pagination ...otherProps :current-page=\"xxx\" /> without corresponding listener is forbidden now\n // Users have to use two way binding of `currentPage`\n // If users just want to provide a default value, `defaultCurrentPage` is here for you\n if (!isAbsent(props.currentPage) && !hasCurrentPageListener) return false\n // When you want to change sizes, things get more complex, detailed below\n // Basically the most important value we need is page count\n // either directly from props.pageCount\n // or calculated from props.total\n // we will take props.pageCount precedence over props.total\n if (props.layout.includes('sizes')) {\n if (!isAbsent(props.pageCount)) {\n // if props.pageCount is assign by user, then user have to watch pageSize change\n // and recalculate pageCount\n if (!hasPageSizeListener) return false\n } else if (!isAbsent(props.total)) {\n // Otherwise, we will see if user have props.pageSize defined\n // If so, meaning user want to have pageSize controlled himself/herself from component\n // Thus page size listener is required\n // users are account for page size change\n if (!isAbsent(props.pageSize)) {\n if (!hasPageSizeListener) {\n return false\n }\n } else {\n // (else block just for explaination)\n // else page size is controlled by el-pagination internally\n }\n }\n }\n return true\n })\n\n const innerPageSize = ref(\n isAbsent(props.defaultPageSize) ? 10 : props.defaultPageSize\n )\n const innerCurrentPage = ref(\n isAbsent(props.defaultCurrentPage) ? 1 : props.defaultCurrentPage\n )\n\n const pageSizeBridge = computed({\n get() {\n return isAbsent(props.pageSize) ? innerPageSize.value : props.pageSize\n },\n set(v: number) {\n if (isAbsent(props.pageSize)) {\n innerPageSize.value = v\n }\n if (hasPageSizeListener) {\n emit('update:page-size', v)\n emit('size-change', v)\n }\n },\n })\n\n const pageCountBridge = computed<number>(() => {\n let pageCount = 0\n if (!isAbsent(props.pageCount)) {\n pageCount = props.pageCount\n } else if (!isAbsent(props.total)) {\n pageCount = Math.max(1, Math.ceil(props.total / pageSizeBridge.value))\n }\n return pageCount\n })\n\n const currentPageBridge = computed<number>({\n get() {\n return isAbsent(props.currentPage)\n ? innerCurrentPage.value\n : props.currentPage\n },\n set(v) {\n let newCurrentPage = v\n if (v < 1) {\n newCurrentPage = 1\n } else if (v > pageCountBridge.value) {\n newCurrentPage = pageCountBridge.value\n }\n if (isAbsent(props.currentPage)) {\n innerCurrentPage.value = newCurrentPage\n }\n if (hasCurrentPageListener) {\n emit('update:current-page', newCurrentPage)\n emit('current-change', newCurrentPage)\n }\n },\n })\n\n watch(pageCountBridge, (val) => {\n if (currentPageBridge.value > val) currentPageBridge.value = val\n })\n\n watch(\n [currentPageBridge, pageSizeBridge],\n (value) => {\n emit(CHANGE_EVENT, ...value)\n },\n { flush: 'post' }\n )\n\n function handleCurrentChange(val: number) {\n currentPageBridge.value = val\n }\n\n function handleSizeChange(val: number) {\n pageSizeBridge.value = val\n const newPageCount = pageCountBridge.value\n if (currentPageBridge.value > newPageCount) {\n currentPageBridge.value = newPageCount\n }\n }\n\n function prev() {\n if (props.disabled) return\n currentPageBridge.value -= 1\n emit('prev-click', currentPageBridge.value)\n }\n\n function next() {\n if (props.disabled) return\n currentPageBridge.value += 1\n emit('next-click', currentPageBridge.value)\n }\n\n function addClass(element: any, cls: string) {\n if (element) {\n if (!element.props) {\n element.props = {}\n }\n element.props.class = [element.props.class, cls].join(' ')\n }\n }\n\n provide(elPaginationKey, {\n pageCount: pageCountBridge,\n disabled: computed(() => props.disabled),\n currentPage: currentPageBridge,\n changeEvent: handleCurrentChange,\n handleSizeChange,\n })\n\n return () => {\n if (!assertValidUsage.value) {\n debugWarn(componentName, t('el.pagination.deprecationWarning'))\n return null\n }\n if (!props.layout) return null\n if (props.hideOnSinglePage && pageCountBridge.value <= 1) return null\n const rootChildren: Array<VNode | VNode[] | null> = []\n const rightWrapperChildren: Array<VNode | VNode[] | null> = []\n const rightWrapperRoot = h(\n 'div',\n { class: ns.e('rightwrapper') },\n rightWrapperChildren\n )\n const TEMPLATE_MAP: Record<\n Exclude<LayoutKey, '->'>,\n VNode | VNode[] | null\n > = {\n prev: h(Prev, {\n disabled: props.disabled,\n currentPage: currentPageBridge.value,\n prevText: props.prevText,\n prevIcon: props.prevIcon,\n onClick: prev,\n }),\n jumper: h(Jumper, {\n size: _size.value,\n }),\n pager: h(Pager, {\n currentPage: currentPageBridge.value,\n pageCount: pageCountBridge.value,\n pagerCount: props.pagerCount,\n onChange: handleCurrentChange,\n disabled: props.disabled,\n }),\n next: h(Next, {\n disabled: props.disabled,\n currentPage: currentPageBridge.value,\n pageCount: pageCountBridge.value,\n nextText: props.nextText,\n nextIcon: props.nextIcon,\n onClick: next,\n }),\n sizes: h(Sizes, {\n pageSize: pageSizeBridge.value,\n pageSizes: props.pageSizes,\n popperClass: props.popperClass,\n popperStyle: props.popperStyle,\n disabled: props.disabled,\n teleported: props.teleported,\n size: _size.value,\n appendSizeTo: props.appendSizeTo,\n }),\n slot: slots?.default?.() ?? null,\n total: h(Total, { total: isAbsent(props.total) ? 0 : props.total }),\n }\n\n const components = props.layout\n .split(',')\n .map((item: string) => item.trim()) as LayoutKey[]\n\n let haveRightWrapper = false\n\n components.forEach((c) => {\n if (c === '->') {\n haveRightWrapper = true\n return\n }\n if (!haveRightWrapper) {\n rootChildren.push(TEMPLATE_MAP[c])\n } else {\n rightWrapperChildren.push(TEMPLATE_MAP[c])\n }\n })\n\n addClass(rootChildren[0], ns.is('first'))\n addClass(rootChildren[rootChildren.length - 1], ns.is('last'))\n\n if (haveRightWrapper && rightWrapperChildren.length > 0) {\n addClass(rightWrapperChildren[0], ns.is('first'))\n addClass(\n rightWrapperChildren[rightWrapperChildren.length - 1],\n ns.is('last')\n )\n rootChildren.push(rightWrapperRoot)\n }\n return h(\n 'div',\n {\n class: [\n ns.b(),\n ns.is('background', props.background),\n ns.m(_size.value),\n ],\n },\n rootChildren\n )\n }\n },\n})\n"],"names":[],"mappings":"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"}