|
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>,
|
|
0 commit comments