From a03cf125fd60535a448ef6ed03e6b45e44ddacf5 Mon Sep 17 00:00:00 2001 From: dopamine Date: Sun, 2 Oct 2022 08:44:40 +0800 Subject: [PATCH] fix(components): [carousel] improper active item (#8904) * fix(components): [carousel] none of active item closed #8891 * fix: ts error * fix: guarantee items order when reusing carousel-item component * style: code format * fix: test fail * chore: correct type * fix: sorting failed in some cases * better implementation better implementation * impove code accroding to review comment --- .../carousel/__tests__/carousel.test.tsx | 26 +++++++++++ packages/components/carousel/src/carousel.vue | 40 ++++++++--------- packages/hooks/index.ts | 1 + packages/hooks/use-ordered-children/index.ts | 44 +++++++++++++++++++ packages/tokens/carousel.ts | 4 +- 5 files changed, 92 insertions(+), 23 deletions(-) create mode 100644 packages/hooks/use-ordered-children/index.ts diff --git a/packages/components/carousel/__tests__/carousel.test.tsx b/packages/components/carousel/__tests__/carousel.test.tsx index 3b49a52653..22bba380bc 100644 --- a/packages/components/carousel/__tests__/carousel.test.tsx +++ b/packages/components/carousel/__tests__/carousel.test.tsx @@ -195,4 +195,30 @@ describe('Carousel', () => { await wait(60) expect(items[1].classList.contains('is-active')).toBeTruthy() }) + it('should guarantee order of indicators', async () => { + const data = reactive([1, 2, 3, 4]) + wrapper = mount({ + setup() { + return () => ( +
+ + {data.map((value) => ( + + {value} + + ))} + +
+ ) + }, + }) + await nextTick() + + data.splice(1, 0, 5) + await nextTick() + const indicators = wrapper.findAll('.el-carousel__button') + data.forEach((value, index) => { + expect(indicators[index].element.textContent).toEqual(value.toString()) + }) + }) }) diff --git a/packages/components/carousel/src/carousel.vue b/packages/components/carousel/src/carousel.vue index 301e1bfee3..ab9047fbda 100644 --- a/packages/components/carousel/src/carousel.vue +++ b/packages/components/carousel/src/carousel.vue @@ -64,7 +64,7 @@