@@ -115,17 +115,17 @@ export function Modal(props: DialogProps) {
115115 const [ dialog , setDialog ] = createSignal < HTMLDialogElement | null > ( null ) ;
116116 const [ local , rest ] = splitProps ( props , [ 'children' , 'id' , 'open' , 'onError' , 'onReload' ] ) ;
117117
118- // Open state
119- const [ open , setOpen ] = createSignal < boolean | undefined > ( ) ;
118+ // Mounting state
119+ const [ mounted , setMounted ] = createSignal < boolean | undefined > ( ) ;
120120 createRenderEffect ( ( ) => {
121121 if ( local . open !== false ) {
122- setOpen ( true ) ;
122+ setMounted ( true ) ;
123123 return ;
124124 }
125125
126126 // Defer updating closed state for a set amount of time to allow for transitions
127127 // This can be long since there are other things
128- const timeout = setTimeout ( ( ) => setOpen ( false ) , MODAL_CLOSE_SYNC_DELAY ) ;
128+ const timeout = setTimeout ( ( ) => setMounted ( false ) , MODAL_CLOSE_SYNC_DELAY ) ;
129129 onCleanup ( ( ) => clearTimeout ( timeout ) ) ;
130130 } ) ;
131131
@@ -135,7 +135,7 @@ export function Modal(props: DialogProps) {
135135 // Handle open state changes after mount
136136 createEffect ( ( ) => {
137137 const dialogElm = dialog ( ) ;
138- if ( ! dialogElm ) return ;
138+ if ( ! dialogElm || ! mounted ( ) ) return ;
139139 if ( local . open ) {
140140 openModal ( dialogElm ) ;
141141 } else if ( local . open === false && dialogElm . open ) {
@@ -154,7 +154,7 @@ export function Modal(props: DialogProps) {
154154 return (
155155 // local.open being undefined implies we should show and rely on the dialog's
156156 // own open state to control visibility
157- < Show when = { open ( ) } >
157+ < Show when = { mounted ( ) } >
158158 < ModalContext . Provider value = { id } >
159159 < dialog
160160 { ...rest }
0 commit comments