@@ -45,14 +45,13 @@ const DialogProvider = ({
4545 return {
4646 ...state ,
4747 [ id ] : {
48+ ...state [ id ] ,
4849 open : false ,
49- dialog : state [ id ] . dialog ,
50- data : state [ id ] . data ,
50+ resolve : undefined ,
5151 } ,
5252 } ;
53- } else {
54- return removeKey ( state , id ) ;
5553 }
54+ return removeKey ( state , id ) ;
5655 } ) ;
5756 } , [ ] ) ;
5857
@@ -69,6 +68,32 @@ const DialogProvider = ({
6968 clearTimeout ( unmountDelayTimeoutRefs . current [ id ] ) ;
7069 }
7170
71+ function resolveFn ( ) {
72+ setDialogState ( ( state ) => {
73+ if ( ! state [ id ] ) return state ;
74+
75+ if ( state [ id ] . unmountDelay ) {
76+ if ( unmountDelayTimeoutRefs . current [ id ] !== undefined ) {
77+ clearTimeout ( unmountDelayTimeoutRefs . current [ id ] ) ;
78+ }
79+
80+ unmountDelayTimeoutRefs . current [ id ] = setTimeout ( ( ) => {
81+ setDialogState ( ( state2 ) => removeKey ( state2 , id ) ) ;
82+ } , state [ id ] . unmountDelay ) ;
83+
84+ return {
85+ ...state ,
86+ [ id ] : {
87+ ...state [ id ] ,
88+ open : false ,
89+ resolve : undefined ,
90+ } ,
91+ } ;
92+ }
93+ return removeKey ( state , id ) ;
94+ } ) ;
95+ }
96+
7297 setDialogState ( ( state ) => {
7398 if ( state [ id ] ?. open ) {
7499 resolve ( undefined ) ;
@@ -84,15 +109,15 @@ const DialogProvider = ({
84109 data,
85110 resolve : ( value : any ) => {
86111 resolve ?.( value ) ;
87- hide ( id ) ;
112+ resolveFn ( ) ;
88113 } ,
89114 unmountDelay : unmountDelay ?? defaultUnmountDelayInMs ,
90115 } ,
91116 } ;
92117 } ) ;
93118 } ) ;
94119 } ,
95- [ hide , defaultUnmountDelayInMs ] ,
120+ [ defaultUnmountDelayInMs ] ,
96121 ) ;
97122
98123 /**
0 commit comments