Skip to content

Commit 366dcb7

Browse files
committed
wip: vapor app.unmount + unmounted hooks
1 parent ac5f1cf commit 366dcb7

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

packages/runtime-vapor/src/apiCreateApp.ts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1-
import { insert } from './dom/node'
2-
import { type VaporComponent, createComponent } from './component'
1+
import {
2+
type VaporComponent,
3+
type VaporComponentInstance,
4+
createComponent,
5+
mountComponent,
6+
unmountComponent,
7+
} from './component'
38
import {
49
type AppMountFn,
510
type AppUnmountFn,
@@ -17,12 +22,12 @@ const mountApp: AppMountFn<ParentNode> = (app, container) => {
1722
container.textContent = ''
1823
}
1924
const instance = createComponent(app._component, app._props as RawProps)
20-
insert(instance, container)
25+
mountComponent(instance, container)
2126
return instance
2227
}
2328

2429
const unmountApp: AppUnmountFn = app => {
25-
// TODO
30+
unmountComponent(app._instance as VaporComponentInstance, app._container)
2631
}
2732

2833
export const createVaporApp: CreateAppFunction<

packages/runtime-vapor/src/component.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -399,12 +399,12 @@ export function createComponentWithFallback(
399399
export function mountComponent(
400400
instance: VaporComponentInstance,
401401
parent: ParentNode,
402-
anchor: Node | null | 0,
402+
anchor?: Node | null | 0,
403403
): void {
404404
if (!instance.isMounted) {
405405
if (instance.bm) invokeArrayFns(instance.bm)
406406
insert(instance.block, parent, anchor)
407-
// queuePostFlushCb(() => {
407+
// TODO queuePostFlushCb(() => {
408408
if (instance.m) invokeArrayFns(instance.m)
409409
instance.isMounted = true
410410
// })
@@ -415,19 +415,23 @@ export function mountComponent(
415415

416416
export function unmountComponent(
417417
instance: VaporComponentInstance,
418-
parent: ParentNode,
418+
parent?: ParentNode,
419419
): void {
420420
if (instance.isMounted && !instance.isUnmounted) {
421421
if (__DEV__ && instance.type.__hmrId) {
422422
unregisterHMR(instance)
423423
}
424424
if (instance.bum) invokeArrayFns(instance.bum)
425425
instance.scope.stop()
426-
// TODO invoke unmount recursively for children
427-
remove(instance.block, parent)
428-
// queuePostFlushCb(() => {
426+
for (const c of instance.children) {
427+
unmountComponent(c)
428+
}
429+
if (parent) remove(instance.block, parent)
430+
// TODO queuePostFlushCb(() => {
429431
if (instance.um) invokeArrayFns(instance.um)
430432
instance.isUnmounted = true
431433
// })
434+
} else if (parent) {
435+
remove(instance.block, parent)
432436
}
433437
}

0 commit comments

Comments
 (0)