Skip to content

Commit 0ddaf60

Browse files
authored
fix(pager): [pager] fix align responsive cannot work and size docs (#3091)
* fix: pager unit test cases cannot be loaded * fix(pager): fix align responsive doesn't work * test(pager): add unit tests
1 parent 695e58b commit 0ddaf60

File tree

5 files changed

+153
-55
lines changed

5 files changed

+153
-55
lines changed

examples/sites/demos/apis/pager.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ export default {
237237
},
238238
{
239239
name: 'size',
240-
type: "'mini'",
240+
type: '"mini"',
241241
defaultValue: '',
242242
desc: {
243243
'zh-CN': '定义分页尺寸',

packages/renderless/src/pager/vue.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,7 @@ export const renderless = (
9393
totalText: computed(() => api.computedTotalText()),
9494
internalPageCount: computed(() => api.computedInternalPageCount()),
9595
showJumperSuffix: designConfig?.state?.showJumperSuffix ?? true,
96-
align: props.align || designConfig?.state?.align || 'right',
96+
align: computed(() => props.align || designConfig?.state?.align || 'right'),
9797
totalI18n: designConfig?.state?.totalI18n || 'totals',
9898
totalFixedLeft: computed(
9999
() => props.totalFixedLeft ?? designConfig?.state?.totalFixedLeft ?? props.mode !== 'simplest' ?? true

packages/vue/src/pager/__test__/pager.test.tsx

Lines changed: 0 additions & 51 deletions
This file was deleted.
Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
import { mountPcMode } from '@opentiny-internal/vue-test-utils'
2+
import { describe, expect, test, vi } from 'vitest'
3+
import Pager from '@opentiny/vue-pager'
4+
import { ref, nextTick } from 'vue'
5+
6+
describe('PC Mode', () => {
7+
const mount = mountPcMode
8+
9+
test('base 基本用法', () => {
10+
const wrapper = mount(() => <Pager layout="prev, pager, next"></Pager>)
11+
expect(wrapper.find('.tiny-pager__btn-prev').exists()).toBe(true)
12+
expect(wrapper.find('.tiny-pager__group').exists()).toBe(true)
13+
expect(wrapper.find('.tiny-pager__btn-next').exists()).toBe(true)
14+
})
15+
16+
test('current-change 当前页码发生改变时,触发current-change事件', async () => {
17+
const currentChange = vi.fn()
18+
const wrapper = mount(() => <Pager layout="prev, pager, next" onCurrentChange={currentChange} total={1000}></Pager>)
19+
const nextBtn = wrapper.find('.tiny-pager__btn-next')
20+
await nextBtn.trigger('click')
21+
expect(currentChange).toHaveBeenCalled()
22+
})
23+
24+
test('layout 自定义分页布局', () => {
25+
const SlotContent = () => <span>默认插槽</span>
26+
const wrapper = mount(() => (
27+
<Pager layout="sizes,slot, prev, pager, next, jumper, ->, total" total={1000}>
28+
<SlotContent></SlotContent>
29+
</Pager>
30+
))
31+
expect(wrapper.findComponent(SlotContent).exists()).toBe(true)
32+
})
33+
34+
describe('align 设置分页组件对齐方式', () => {
35+
;['left', 'center', 'right'].forEach((align) => {
36+
test(`对齐方式为${align}`, () => {
37+
const wrapper = mount(() => <Pager align={align} />)
38+
expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: ${align}`)
39+
})
40+
})
41+
42+
test('align 为响应式属性', async () => {
43+
const align = ref('left')
44+
const wrapper = mount(() => <Pager align={align.value} />)
45+
expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: left`)
46+
align.value = 'center'
47+
await nextTick()
48+
49+
expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: center`)
50+
51+
align.value = 'right'
52+
await nextTick()
53+
54+
expect(wrapper.find('.tiny-pager').attributes('style')).toContain(`text-align: right`)
55+
})
56+
})
57+
58+
test.todo('number 设置分页组件为number渲染模式')
59+
test.todo('fixed 设置分页组件为fixed渲染模式')
60+
test.todo('simple 设置分页组件为simple渲染模式')
61+
test.todo('complete 设置分页组件为complete渲染模式')
62+
test.todo('page-count 设置分页组件的总页数')
63+
test.skip('size-change 每页条数改变时触发size-change事件', async () => {
64+
const sizeChange = vi.fn()
65+
const wrapper = mount(() => <Pager onSizeChange={sizeChange} total={100} mode="number" />)
66+
wrapper.find('.tiny-pager__page-size-btn').trigger('click')
67+
await nextTick()
68+
const selected = document.querySelector('.is-selected')
69+
selected?.nextElementSibling?.click()
70+
await nextTick()
71+
expect(sizeChange).toHaveBeenCalledWith(20)
72+
})
73+
74+
test.skip('prev-click 切换至前一页时触发prev-click事件', () => {
75+
const prevClick = vi.fn()
76+
const currentPage = ref(2)
77+
const wrapper = mount(() => <Pager onPrevClick={prevClick} currentPage={currentPage} />)
78+
wrapper.find('.tiny-pager__btn-prev').trigger('click')
79+
expect(prevClick).toHaveBeenCalledWith(1)
80+
})
81+
82+
test('next-click 切换至后一页时触发next-click事件', () => {
83+
const nextClick = vi.fn()
84+
const wrapper = mount(() => <Pager onNextClick={nextClick} />)
85+
wrapper.find('.tiny-pager__btn-next').trigger('click')
86+
expect(nextClick).toHaveBeenCalledWith(2)
87+
})
88+
89+
describe('before-page-change 切换分页前事件', () => {
90+
test('开启事件', () => {
91+
const beforePageChange = vi.fn()
92+
const wrapper = mount(() => <Pager onBeforePageChange={beforePageChange} isBeforePageChange pageSize={5} />)
93+
wrapper.find('.tiny-pager__btn-next').trigger('click')
94+
expect(beforePageChange).toHaveBeenCalled()
95+
})
96+
97+
test('默认禁用', () => {
98+
const beforePageChange = vi.fn()
99+
const wrapper = mount(() => <Pager onBeforePageChange={beforePageChange} pageSize={5} />)
100+
wrapper.find('.tiny-pager__btn-next').trigger('click')
101+
expect(beforePageChange).not.toHaveBeenCalled()
102+
})
103+
})
104+
105+
test('popper-append-to-body 分页下拉框元素是否追加到body元素节点下', () => {
106+
const wrapper = mount(() => <Pager popperAppendToBody={false} layout="sizes" />)
107+
wrapper.find('.tiny-pager__page-size-btn').trigger('click')
108+
expect(wrapper.find('.tiny-pager__selector-body').exists()).toBe(true)
109+
})
110+
111+
test('popper-class 自定义分页下拉框的类名', () => {
112+
mount(() => <Pager popperClass="custom-pager" />)
113+
expect(document.querySelector('.custom-pager')).toBeDefined()
114+
})
115+
116+
test('pager-count 设置页码数量', () => {
117+
const wrapper = mount(() => <Pager pagerCount={10} total={1000} />)
118+
expect(wrapper.findAll('.tiny-pager__pages > li:not(.quicknext)')).toHaveLength(10)
119+
})
120+
121+
test('page-size 设置每页显示数量', () => {
122+
const wrapper = mount(() => <Pager mode="number" pageSize={100} />)
123+
expect(wrapper.find('.tiny-pager__page-size').text()).toBe('100')
124+
})
125+
126+
test('hide-on-single-page 只有一页时隐藏分页', () => {
127+
const wrapper = mount(() => <Pager hideOnSinglePage />)
128+
expect(wrapper.find('.tiny-pager').exists()).toBe(false)
129+
})
130+
131+
test('prev-text、next-text 自定义上下页按钮文本', () => {
132+
const wrapper = mount(() => <Pager prevText="上一页" nextText="下一页" />)
133+
expect(wrapper.find('.tiny-pager__btn-prev').text()).toBe('上一页')
134+
expect(wrapper.find('.tiny-pager__btn-next').text()).toBe('下一页')
135+
})
136+
137+
test.todo('Grid 表格分页,服务需要自行实现')
138+
139+
test('size 定义分页尺寸大小,可选值有 mini', () => {
140+
const wrapper = mount(() => <Pager size="mini" />)
141+
expect(wrapper.find('.tiny-pager').classes()).toContain('tiny-pager--mini')
142+
})
143+
144+
test('disabled 禁用分页所有功能', () => {
145+
const wrapper = mount(() => <Pager disabled />)
146+
expect(wrapper.find('.tiny-pager').classes()).toContain('is-disabled')
147+
})
148+
})

packages/vue/src/pager/src/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,12 @@ export const pagerProps = {
5959
total: Number,
6060
size: {
6161
type: String,
62-
default: ''
62+
default: '',
63+
validator: (value: string) => ['mini', ''].includes(value)
6364
},
6465
align: {
6566
type: String,
66-
validator: (value) => ['left', 'center', 'right'].includes(value)
67+
validator: (value: string) => ['left', 'center', 'right'].includes(value)
6768
},
6869
totalFixedLeft: {
6970
type: Boolean,

0 commit comments

Comments
 (0)