Skip to content

Commit 6ec403f

Browse files
authored
feat(vapor): defineVaporAsyncComponent (#13059)
1 parent a697871 commit 6ec403f

File tree

12 files changed

+1115
-105
lines changed

12 files changed

+1115
-105
lines changed

packages-private/vapor-e2e-test/__tests__/vdomInterop.spec.ts

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,6 @@ const buffer = process.env.CI ? 50 : 20
4141
const transitionFinish = (time = duration) => timeout(time + buffer)
4242

4343
describe('vdom / vapor interop', () => {
44-
beforeEach(async () => {
45-
const baseUrl = `http://localhost:${port}/interop/`
46-
await page().goto(baseUrl)
47-
await page().waitForSelector('#app')
48-
})
49-
5044
test(
5145
'should work',
5246
async () => {
@@ -104,6 +98,21 @@ describe('vdom / vapor interop', () => {
10498
E2E_TIMEOUT,
10599
)
106100

101+
describe('async component', () => {
102+
const container = '.async-component-interop'
103+
test(
104+
'with-vdom-inner-component',
105+
async () => {
106+
const testContainer = `${container} .with-vdom-component`
107+
expect(await html(testContainer)).toBe('<span>loading...</span>')
108+
109+
await timeout(duration)
110+
expect(await html(testContainer)).toBe('<div>foo</div>')
111+
},
112+
E2E_TIMEOUT,
113+
)
114+
})
115+
107116
describe('keepalive', () => {
108117
test(
109118
'render vapor component',

packages-private/vapor-e2e-test/interop/App.vue

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
<script setup lang="ts">
2-
import { ref, shallowRef } from 'vue'
3-
import VaporComp from './VaporComp.vue'
2+
import { ref, defineVaporAsyncComponent, h, shallowRef } from 'vue'
3+
import VaporComp from './components/VaporComp.vue'
4+
import VdomFoo from './components/VdomFoo.vue'
45
import SimpleVaporComp from './components/SimpleVaporComp.vue'
56
import VaporCompA from '../transition/components/VaporCompA.vue'
67
import VdomComp from '../transition/components/VdomComp.vue'
@@ -9,6 +10,18 @@ import VaporSlot from '../transition/components/VaporSlot.vue'
910
const msg = ref('hello')
1011
const passSlot = ref(true)
1112
13+
const duration = typeof process !== 'undefined' && process.env.CI ? 200 : 50
14+
15+
const AsyncVDomFoo = defineVaporAsyncComponent({
16+
loader: () => {
17+
return new Promise(r => {
18+
setTimeout(() => {
19+
r(VdomFoo as any)
20+
}, duration)
21+
})
22+
},
23+
loadingComponent: () => h('span', 'loading...'),
24+
})
1225
;(window as any).calls = []
1326
;(window as any).getCalls = () => {
1427
const ret = (window as any).calls.slice()
@@ -43,6 +56,13 @@ const enterClick = () => items.value.push('d', 'e')
4356
<template #test v-if="passSlot">A test slot</template>
4457
</VaporComp>
4558

59+
<!-- async component -->
60+
<div class="async-component-interop">
61+
<div class="with-vdom-component">
62+
<AsyncVDomFoo />
63+
</div>
64+
</div>
65+
<!-- async component end -->
4666
<!-- keepalive -->
4767
<div class="render-vapor-component">
4868
<button class="btn-show" @click="show = !show">show</button>

packages-private/vapor-e2e-test/interop/VaporComp.vue renamed to packages-private/vapor-e2e-test/interop/components/VaporComp.vue

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ const slotProp = ref('slot prop')
2727
change slot prop
2828
</button>
2929
<div class="vdom-slot-in-vapor-default">
30-
#default: <slot :foo="slotProp" />
30+
#default:
31+
<slot :foo="slotProp" />
3132
</div>
3233
<div class="vdom-slot-in-vapor-test">
3334
#test: <slot name="test">fallback content</slot>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<script setup lang="ts"></script>
2+
3+
<template>
4+
<div>foo</div>
5+
</template>

0 commit comments

Comments
 (0)