@@ -6,14 +6,17 @@ const ESCAPE_KEYCODE = 27;
6
6
7
7
export function Modal ( { title, body, onClose, isOpen, footer, staticBackdrop, scrollable, centered, size, keyboard } ) {
8
8
const modalRef = useRef ( null ) ;
9
+ const closeAndHide = useCallback ( ( ) => {
10
+ hideModal ( modalRef ) ;
11
+ onClose ( ) ;
12
+ } , [ onClose ] ) ;
9
13
const closeIfEscape = useCallback (
10
14
( event ) => {
11
15
if ( keyboard && event . which === ESCAPE_KEYCODE ) {
12
- hideModal ( modalRef ) ;
13
- onClose ( ) ;
16
+ closeAndHide ( ) ;
14
17
}
15
18
} ,
16
- [ modalRef , onClose , keyboard ]
19
+ [ keyboard , closeAndHide ]
17
20
) ;
18
21
19
22
useEffect ( ( ) => {
@@ -43,8 +46,7 @@ export function Modal({ title, body, onClose, isOpen, footer, staticBackdrop, sc
43
46
onClick = { ( e ) => {
44
47
e . stopPropagation ( ) ;
45
48
if ( ! staticBackdrop ) {
46
- hideModal ( modalRef ) ;
47
- onClose ( ) ;
49
+ closeAndHide ( ) ;
48
50
}
49
51
} }
50
52
>
@@ -58,12 +60,12 @@ export function Modal({ title, body, onClose, isOpen, footer, staticBackdrop, sc
58
60
< div className = "modal-content" >
59
61
< div className = "modal-header" >
60
62
< h5 className = "modal-title" > { title } </ h5 >
61
- < button type = "button" className = "close" onClick = { onClose } aria-label = "Close" >
63
+ < button type = "button" className = "close" onClick = { closeAndHide } aria-label = "Close" >
62
64
< span aria-hidden = "true" > ×</ span >
63
65
</ button >
64
66
</ div >
65
- < div className = "modal-body" > { renderObjectOrFunction ( body , { close : onClose } ) } </ div >
66
- { footer && < div className = "modal-footer" > { renderObjectOrFunction ( footer , { close : onClose } ) } </ div > }
67
+ < div className = "modal-body" > { renderObjectOrFunction ( body , { close : closeAndHide } ) } </ div >
68
+ { footer && < div className = "modal-footer" > { renderObjectOrFunction ( footer , { close : closeAndHide } ) } </ div > }
67
69
</ div >
68
70
</ div >
69
71
</ div >
0 commit comments