Skip to content

Commit 1916785

Browse files
authored
fix(runtime-vapor): TransitionGroup with v-for + v-if not applying transition hooks (#14590)
1 parent abe8fcd commit 1916785

3 files changed

Lines changed: 76 additions & 1 deletion

File tree

packages-private/vapor-e2e-test/__tests__/transition-group.spec.ts

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,59 @@ describe('vapor transition-group', () => {
146146
E2E_TIMEOUT,
147147
)
148148

149+
test(
150+
'for + if enter',
151+
async () => {
152+
const btnSelector = '.for-if-enter > button.toggle'
153+
const addBtnSelector = '.for-if-enter > button.add'
154+
const containerSelector = '.for-if-enter > div'
155+
expect(await html(containerSelector)).toBe(`<ul></ul>`)
156+
157+
expect(
158+
(await transitionStart(btnSelector, containerSelector)).innerHTML,
159+
).toBe(
160+
`<ul>` +
161+
`<li class="test v-enter-from v-enter-active">0</li>` +
162+
`<li class="test v-enter-from v-enter-active">1</li>` +
163+
`</ul>`,
164+
)
165+
166+
await waitForInnerHTML(
167+
containerSelector,
168+
`<ul>` +
169+
`<li class="test v-enter-active v-enter-to">0</li>` +
170+
`<li class="test v-enter-active v-enter-to">1</li>` +
171+
`</ul>`,
172+
)
173+
174+
await waitForInnerHTML(
175+
containerSelector,
176+
`<ul><li class="test">0</li><li class="test">1</li></ul>`,
177+
)
178+
179+
// add a new item
180+
expect(
181+
(await transitionStart(addBtnSelector, containerSelector)).innerHTML,
182+
).toBe(
183+
`<ul>` +
184+
`<li class="test">0</li>` +
185+
`<li class="test">1</li>` +
186+
`<li class="test v-enter-from v-enter-active">2</li>` +
187+
`</ul>`,
188+
)
189+
190+
await waitForInnerHTML(
191+
containerSelector,
192+
`<ul>` +
193+
`<li class="test">0</li>` +
194+
`<li class="test">1</li>` +
195+
`<li class="test">2</li>` +
196+
`</ul>`,
197+
)
198+
},
199+
E2E_TIMEOUT,
200+
)
201+
149202
test(
150203
'leave',
151204
async () => {
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<script setup vapor>
2+
import { ref } from 'vue'
3+
4+
const show = ref(false)
5+
const list = ref([0, 1])
6+
</script>
7+
8+
<template>
9+
<div class="for-if-enter">
10+
<button class="toggle" @click="show = !show">toggle button</button>
11+
<button class="add" @click="list.push(list.length)">add button</button>
12+
<div>
13+
<transition-group tag="ul">
14+
<template v-for="value in list">
15+
<li v-if="show" :key="value" class="test">
16+
{{ value }}
17+
</li>
18+
</template>
19+
</transition-group>
20+
</div>
21+
</div>
22+
</template>

packages/runtime-vapor/src/components/Transition.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ export function setTransitionHooksOnFragment(
360360
): void {
361361
if (isFragment(block)) {
362362
block.$transition = hooks
363-
if (block.nodes && isFragment(block.nodes)) {
363+
if (block.nodes && (isFragment(block.nodes) || isArray(block.nodes))) {
364364
setTransitionHooksOnFragment(block.nodes, hooks)
365365
}
366366
} else if (isArray(block)) {

0 commit comments

Comments
 (0)