11import type { Component } from 'vue'
22import { h , markRaw , reactive } from 'vue'
3- import { tryOnUnmounted } from '@vueuse/core'
43import { isString , objectEntries } from './utils'
54import { DynamicModal } from './components/DynamicModal'
6- import { isC2VOptions } from './useC2v'
7- import { pushVNode , removeVNode } from './useVfm'
8- import type { C2VOptions , UseModalOptions , UseModalOptionsPrivate , UseModalReturnType } from '.'
5+ import { isVNodeOptions , useVNode } from './useVNode'
6+ import type { CreateVNodeOptions , UseModalOptions , UseModalOptionsPrivate , UseModalReturnType } from '.'
97import { VueFinalModal } from '.'
108
119/**
@@ -25,20 +23,20 @@ export function useModal<T extends Component = typeof VueFinalModal>(_options: U
2523
2624 const vNode = h ( DynamicModal , { modal : options , key : id } )
2725
28- tryOnUnmounted ( ( ) => {
29- tryRemoveVNode ( )
26+ const { show , hide } = useVNode ( vNode , {
27+ tryOnUnmounted : ( ) => tryRemoveVNode ( ) ,
3028 } )
3129
3230 if ( options . modelValue === true )
33- pushVNode ( vNode )
31+ show ( )
3432
3533 function open ( ) : Promise < string > {
3634 if ( options . modelValue )
3735 return Promise . resolve ( '[Vue Final Modal] modal is already opened.' )
3836
3937 tryRemoveVNode ( )
4038 options . modelValue = true
41- pushVNode ( vNode )
39+ show ( )
4240
4341 return new Promise ( ( resolve ) => {
4442 options . resolveOpened = ( ) => resolve ( 'opened' )
@@ -61,7 +59,7 @@ export function useModal<T extends Component = typeof VueFinalModal>(_options: U
6159 function tryRemoveVNode ( ) {
6260 if ( options . keepAlive )
6361 return
64- removeVNode ( vNode )
62+ hide ( )
6563 }
6664
6765 function patchOptions ( _options : Partial < UseModalOptions < T > > ) {
@@ -81,7 +79,7 @@ export function useModal<T extends Component = typeof VueFinalModal>(_options: U
8179 const originSlot = options . slots ! [ name ]
8280 if ( isString ( originSlot ) )
8381 options . slots ! [ name ] = slot
84- else if ( isC2VOptions ( originSlot ) && isC2VOptions ( slot ) )
82+ else if ( isVNodeOptions ( originSlot ) && isVNodeOptions ( slot ) )
8583 patchComponentOptions ( originSlot , slot )
8684 else
8785 options . slots ! [ name ] = slot
@@ -94,7 +92,7 @@ export function useModal<T extends Component = typeof VueFinalModal>(_options: U
9492 open,
9593 close,
9694 patchOptions,
97- destroy : ( ) => removeVNode ( vNode ) ,
95+ destroy : ( ) => hide ( ) ,
9896 }
9997}
10098
@@ -107,7 +105,7 @@ function withMarkRaw<T extends Component>(options: Partial<UseModalOptions<T>>,
107105 if ( isString ( maybeComponent ) )
108106 return [ name , maybeComponent ] as const
109107
110- if ( isC2VOptions ( maybeComponent ) ) {
108+ if ( isVNodeOptions ( maybeComponent ) ) {
111109 return [ name , {
112110 ...maybeComponent ,
113111 component : markRaw ( maybeComponent . component ) ,
@@ -125,8 +123,8 @@ function withMarkRaw<T extends Component>(options: Partial<UseModalOptions<T>>,
125123}
126124
127125function patchComponentOptions < T extends Component > (
128- options : UseModalOptions < T > | C2VOptions < Component > ,
129- newOptions : Partial < UseModalOptions < T > > | C2VOptions < Component > ,
126+ options : UseModalOptions < T > | CreateVNodeOptions < Component > ,
127+ newOptions : Partial < UseModalOptions < T > > | CreateVNodeOptions < Component > ,
130128) {
131129 if ( newOptions . component )
132130 options . component = newOptions . component
0 commit comments