From 6887f732ee8e14625459a0576460523845cb0a6d Mon Sep 17 00:00:00 2001 From: "Haytham A. Salama" Date: Sun, 24 Sep 2023 12:36:35 +0300 Subject: [PATCH] fix(Accordion): close other items in circular order (#735) --- src/runtime/components/elements/Accordion.vue | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/runtime/components/elements/Accordion.vue b/src/runtime/components/elements/Accordion.vue index aaf8fcc0ba..448b6ee683 100644 --- a/src/runtime/components/elements/Accordion.vue +++ b/src/runtime/components/elements/Accordion.vue @@ -100,16 +100,21 @@ export default defineComponent({ const buttonRefs = ref([]) - function closeOthers (itemIndex: number) { - if (!props.items[itemIndex].closeOthers && props.multiple) { + function closeOthers (currentIndex: number) { + if (!props.items[currentIndex].closeOthers && props.multiple) { return } - buttonRefs.value.forEach((close, index) => { - if (index === itemIndex) return + const totalItems = buttonRefs.value.length + const order = Array.from({ length: totalItems }, (_, i) => (currentIndex + i) % totalItems) + .filter(index => index !== currentIndex) + .reverse() + + for (const index of order) { + const close = buttonRefs.value[index] close() - }) + } } function onEnter (el: HTMLElement, done) {