From 62561891002a0c19f71cb1649d73f104f1de6740 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Wed, 22 Sep 2021 01:19:04 +0800 Subject: [PATCH] refactor(components): refactor pagination (#3526) * refactor(components): refactor pagination * fix: tests * fix: emits * refactor: improve props --- .../pagination/__tests__/pagination.spec.ts | 2 +- packages/components/pagination/index.ts | 15 +- .../src/{ => components}/jumper.vue | 24 +- .../pagination/src/{ => components}/next.vue | 40 +- .../pagination/src/{ => components}/pager.vue | 39 +- .../pagination/src/{ => components}/prev.vue | 31 +- .../pagination/src/{ => components}/sizes.vue | 50 +-- .../pagination/src/{ => components}/total.vue | 21 +- packages/components/pagination/src/index.ts | 346 ----------------- .../components/pagination/src/pagination.ts | 362 ++++++++++++++++-- .../pagination/src/usePagination.ts | 13 +- packages/tokens/index.ts | 1 + packages/tokens/pagination.ts | 12 + packages/utils/props.ts | 3 + packages/utils/types.ts | 2 + 15 files changed, 474 insertions(+), 487 deletions(-) rename packages/components/pagination/src/{ => components}/jumper.vue (73%) rename packages/components/pagination/src/{ => components}/next.vue (64%) rename packages/components/pagination/src/{ => components}/pager.vue (94%) rename packages/components/pagination/src/{ => components}/prev.vue (65%) rename packages/components/pagination/src/{ => components}/sizes.vue (69%) rename packages/components/pagination/src/{ => components}/total.vue (58%) delete mode 100644 packages/components/pagination/src/index.ts create mode 100644 packages/tokens/pagination.ts diff --git a/packages/components/pagination/__tests__/pagination.spec.ts b/packages/components/pagination/__tests__/pagination.spec.ts index d90c0e8b14..032ee2a8f6 100644 --- a/packages/components/pagination/__tests__/pagination.spec.ts +++ b/packages/components/pagination/__tests__/pagination.spec.ts @@ -1,6 +1,6 @@ import { nextTick, ref, h } from 'vue' import { mount } from '@vue/test-utils' -import Pagination from '../src/index' +import Pagination from '../src/pagination' import type { VueWrapper } from '@vue/test-utils' const assertElementsExistence = ( diff --git a/packages/components/pagination/index.ts b/packages/components/pagination/index.ts index e415f7ba44..ea97112bb4 100644 --- a/packages/components/pagination/index.ts +++ b/packages/components/pagination/index.ts @@ -1,15 +1,8 @@ -import Pagination from './src' +import { withInstall } from '@element-plus/utils/with-install' -import type { App } from 'vue' -import type { SFCWithInstall } from '@element-plus/utils/types' +import Pagination from './src/pagination' -const _Pagination = Pagination as SFCWithInstall - -_Pagination.install = (app: App) => { - app.component(_Pagination.name, _Pagination) -} - -export default _Pagination -export const ElPagination = _Pagination +export const ElPagination = withInstall(Pagination) +export default ElPagination export * from './src/pagination' diff --git a/packages/components/pagination/src/jumper.vue b/packages/components/pagination/src/components/jumper.vue similarity index 73% rename from packages/components/pagination/src/jumper.vue rename to packages/components/pagination/src/components/jumper.vue index 7cd77c33ad..48e80bc597 100644 --- a/packages/components/pagination/src/jumper.vue +++ b/packages/components/pagination/src/components/jumper.vue @@ -20,37 +20,37 @@ import { computed, defineComponent, ref } from 'vue' import { useLocaleInject } from '@element-plus/hooks' import ElInput from '@element-plus/components/input' -import { usePagination } from './usePagination' - -import type { Nullable } from '@element-plus/utils/types' +import { usePagination } from '../usePagination' export default defineComponent({ + name: 'ElPaginationJumper', components: { ElInput, }, + setup() { const { t } = useLocaleInject() - const { pagination, pageCount, disabled, currentPage } = usePagination() - const userInput = ref>(null) - const innerValue = computed(() => userInput.value ?? currentPage.value) + const { pageCount, disabled, currentPage, changeEvent } = usePagination() + const userInput = ref() + const innerValue = computed(() => userInput.value ?? currentPage?.value) function handleInput(val: number | string) { - userInput.value = Number(val) + userInput.value = +val } function handleChange(val: number | string) { - pagination?.changeEvent(Number(val)) - userInput.value = null + changeEvent?.(+val) + userInput.value = undefined } return { - t, - userInput, pageCount, disabled, + innerValue, + + t, handleInput, handleChange, - innerValue, } }, }) diff --git a/packages/components/pagination/src/next.vue b/packages/components/pagination/src/components/next.vue similarity index 64% rename from packages/components/pagination/src/next.vue rename to packages/components/pagination/src/components/next.vue index 693f130295..3f34ff300d 100644 --- a/packages/components/pagination/src/next.vue +++ b/packages/components/pagination/src/components/next.vue @@ -4,7 +4,7 @@ class="btn-next" :disabled="internalDisabled" :aria-disabled="internalDisabled" - @click.self.prevent + @click="$emit('click', $event)" > {{ nextText }} @@ -13,23 +13,29 @@