Skip to content

Commit afc732e

Browse files
committed
wip: vdom interop
1 parent 14f102a commit afc732e

File tree

4 files changed

+30
-14
lines changed

4 files changed

+30
-14
lines changed

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

+9-2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
assertNumber,
88
compatUtils,
99
h,
10+
renderSlot,
1011
} from '@vue/runtime-core'
1112
import { extend, isArray, isObject, toNumber } from '@vue/shared'
1213

@@ -101,9 +102,15 @@ const decorate = (t: typeof Transition) => {
101102
export const Transition: FunctionalComponent<TransitionProps> =
102103
/*@__PURE__*/ decorate((props, { slots }) => {
103104
const resolvedProps = resolveTransitionProps(props)
104-
if (slots._vapor) {
105-
// vapor transition
105+
if (slots.__inVapor) {
106106
return vaporTransitionImpl!.applyTransition(resolvedProps, slots as any)
107+
} else if (slots._vapor) {
108+
const children = vaporTransitionImpl!.applyTransition(
109+
resolvedProps,
110+
slots as any,
111+
)
112+
const vaporSlots = { default: () => children, _vapor: true }
113+
return renderSlot(vaporSlots as any, 'default')
107114
}
108115

109116
return h(BaseTransition, resolvedProps, slots)

packages/runtime-vapor/src/component.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ import {
5656
type VaporSlot,
5757
dynamicSlotsProxyHandlers,
5858
getSlot,
59-
vaporSlotsProxyHandler,
59+
staticSlotsProxyHandler,
6060
} from './componentSlots'
6161
import { hmrReload, hmrRerender } from './hmr'
6262

@@ -417,7 +417,7 @@ export class VaporComponentInstance implements GenericComponentInstance {
417417
this.slots = rawSlots
418418
? rawSlots.$
419419
? new Proxy(rawSlots, dynamicSlotsProxyHandlers)
420-
: new Proxy(rawSlots, vaporSlotsProxyHandler)
420+
: new Proxy(rawSlots, staticSlotsProxyHandler)
421421
: EMPTY_OBJ
422422
}
423423

packages/runtime-vapor/src/componentSlots.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,10 @@ export type DynamicSlot = { name: string; fn: VaporSlot }
1616
export type DynamicSlotFn = () => DynamicSlot | DynamicSlot[]
1717
export type DynamicSlotSource = StaticSlots | DynamicSlotFn
1818

19-
export const vaporSlotsProxyHandler: ProxyHandler<any> = {
19+
export const staticSlotsProxyHandler: ProxyHandler<any> = {
2020
get(target, key) {
21-
if (key === '_vapor') {
22-
return target
21+
if (key === '__inVapor') {
22+
return true
2323
} else {
2424
return target[key]
2525
}
@@ -28,8 +28,8 @@ export const vaporSlotsProxyHandler: ProxyHandler<any> = {
2828

2929
export const dynamicSlotsProxyHandlers: ProxyHandler<RawSlots> = {
3030
get: (target, key: string) => {
31-
if (key === '_vapor') {
32-
return target
31+
if (key === '__inVapor') {
32+
return true
3333
} else {
3434
return getSlot(target, key)
3535
}

packages/runtime-vapor/src/vdomInterop.ts

+14-5
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,7 @@ import {
2929
import { type Block, VaporFragment, insert, remove } from './block'
3030
import { EMPTY_OBJ, extend, isFunction } from '@vue/shared'
3131
import { type RawProps, rawPropsProxyHandlers } from './componentProps'
32-
import {
33-
type RawSlots,
34-
type VaporSlot,
35-
vaporSlotsProxyHandler,
36-
} from './componentSlots'
32+
import type { RawSlots, VaporSlot } from './componentSlots'
3733
import { renderEffect } from './renderEffect'
3834
import { createTextNode } from './dom/node'
3935
import { optimizePropertyLookup } from './dom/prop'
@@ -133,6 +129,16 @@ const vaporSlotPropsProxyHandler: ProxyHandler<
133129
},
134130
}
135131

132+
const vaporSlotsProxyHandler: ProxyHandler<any> = {
133+
get(target, key) {
134+
if (key === '_vapor') {
135+
return target
136+
} else {
137+
return target[key]
138+
}
139+
},
140+
}
141+
136142
/**
137143
* Mount vdom component in vapor
138144
*/
@@ -170,6 +176,8 @@ function createVDOMComponent(
170176
}
171177

172178
frag.insert = (parentNode, anchor) => {
179+
const prev = currentInstance
180+
simpleSetCurrentInstance(parentInstance)
173181
if (!isMounted) {
174182
internals.mt(
175183
vnode,
@@ -192,6 +200,7 @@ function createVDOMComponent(
192200
parentInstance as any,
193201
)
194202
}
203+
simpleSetCurrentInstance(prev)
195204
}
196205

197206
frag.remove = unmount

0 commit comments

Comments
 (0)