11
11
* @module NiceModal
12
12
* */
13
13
14
- import React , { useEffect , useMemo , useContext , useReducer , ReactNode } from 'react' ;
14
+ import React , { useEffect , useCallback , useContext , useReducer , ReactNode } from 'react' ;
15
15
16
16
export interface NiceModalState {
17
17
id : string ;
@@ -305,30 +305,46 @@ export function useModal(modal?: any, args?: any): any {
305
305
306
306
const modalInfo = modals [ mid ] ;
307
307
308
- return useMemo < NiceModalHandler > (
309
- ( ) => ( {
310
- id : mid ,
311
- args : modalInfo ?. args ,
312
- visible : ! ! modalInfo ?. visible ,
313
- keepMounted : ! ! modalInfo ?. keepMounted ,
314
- show : ( args ?: Record < string , unknown > ) => show ( mid , args ) ,
315
- hide : ( ) => hide ( mid ) ,
316
- remove : ( ) => remove ( mid ) ,
317
- resolve : ( args ?: unknown ) => {
318
- modalCallbacks [ mid ] ?. resolve ( args ) ;
319
- delete modalCallbacks [ mid ] ;
320
- } ,
321
- reject : ( args ?: unknown ) => {
322
- modalCallbacks [ mid ] ?. reject ( args ) ;
323
- delete modalCallbacks [ mid ] ;
324
- } ,
325
- resolveHide : ( args ?: unknown ) => {
326
- hideModalCallbacks [ mid ] ?. resolve ( args ) ;
327
- delete hideModalCallbacks [ mid ] ;
328
- } ,
329
- } ) ,
330
- [ mid , modalInfo ?. args , modalInfo ?. keepMounted , modalInfo ?. visible ] ,
308
+ const showCallback = useCallback (
309
+ ( args ?: Record < string , unknown > ) => show ( mid , args ) ,
310
+ [ mid ]
331
311
) ;
312
+ const hideCallback = useCallback ( ( ) => hide ( mid ) , [ mid ] ) ;
313
+ const removeCallback = useCallback ( ( ) => remove ( mid ) , [ mid ] ) ;
314
+ const resolveCallback = useCallback (
315
+ ( args ?: unknown ) => {
316
+ modalCallbacks [ mid ] ?. resolve ( args ) ;
317
+ delete modalCallbacks [ mid ] ;
318
+ } ,
319
+ [ mid ]
320
+ ) ;
321
+ const rejectCallback = useCallback (
322
+ ( args ?: unknown ) => {
323
+ modalCallbacks [ mid ] ?. reject ( args ) ;
324
+ delete modalCallbacks [ mid ] ;
325
+ } ,
326
+ [ mid ]
327
+ ) ;
328
+ const resolveHide = useCallback (
329
+ ( args ?: unknown ) => {
330
+ hideModalCallbacks [ mid ] ?. resolve ( args ) ;
331
+ delete hideModalCallbacks [ mid ] ;
332
+ } ,
333
+ [ mid ]
334
+ ) ;
335
+
336
+ return {
337
+ id : mid ,
338
+ args : modalInfo ?. args ,
339
+ visible : ! ! modalInfo ?. visible ,
340
+ keepMounted : ! ! modalInfo ?. keepMounted ,
341
+ show : showCallback ,
342
+ hide : hideCallback ,
343
+ remove : removeCallback ,
344
+ resolve : resolveCallback ,
345
+ reject : rejectCallback ,
346
+ resolveHide,
347
+ } ;
332
348
}
333
349
export const create = < P extends Record < string , unknown > > (
334
350
Comp : React . ComponentType < P > ,
@@ -351,7 +367,7 @@ export const create = <P extends Record<string, unknown>>(
351
367
return ( ) => {
352
368
delete ALREADY_MOUNTED [ id ] ;
353
369
} ;
354
- } , [ id ] ) ; //eslint-disable-line
370
+ } , [ id , show , defaultVisible ] ) ;
355
371
356
372
useEffect ( ( ) => {
357
373
if ( keepMounted ) setFlags ( id , { keepMounted : true } ) ;
0 commit comments