11import _ from 'lodash'
22import PropTypes from 'prop-types'
3- import React , { Component } from 'react'
3+ import React from 'react'
44
55import { customPropTypes , getUnhandledProps } from '../../lib'
66import Button from '../../elements/Button'
@@ -10,55 +10,56 @@ import Modal from '../../modules/Modal'
1010 * A Confirm modal gives the user a choice to confirm or cancel an action/
1111 * @see Modal
1212 */
13- class Confirm extends Component {
14- handleCancel = ( e ) => {
15- _ . invoke ( this . props , 'onCancel' , e , this . props )
13+ const Confirm = React . forwardRef ( function ( props , ref ) {
14+ const { cancelButton, confirmButton, content, header, open, size } = props
15+ const rest = getUnhandledProps ( Confirm , props )
16+
17+ const handleCancel = ( e ) => {
18+ _ . invoke ( props , 'onCancel' , e , props )
1619 }
1720
18- handleCancelOverrides = ( predefinedProps ) => ( {
21+ const handleCancelOverrides = ( predefinedProps ) => ( {
1922 onClick : ( e , buttonProps ) => {
2023 _ . invoke ( predefinedProps , 'onClick' , e , buttonProps )
21- this . handleCancel ( e )
24+ handleCancel ( e )
2225 } ,
2326 } )
2427
25- handleConfirmOverrides = ( predefinedProps ) => ( {
28+ const handleConfirmOverrides = ( predefinedProps ) => ( {
2629 onClick : ( e , buttonProps ) => {
2730 _ . invoke ( predefinedProps , 'onClick' , e , buttonProps )
28- _ . invoke ( this . props , 'onConfirm' , e , this . props )
31+ _ . invoke ( props , 'onConfirm' , e , props )
2932 } ,
3033 } )
3134
32- render ( ) {
33- const { cancelButton, confirmButton, content, header, open, size } = this . props
34- const rest = getUnhandledProps ( Confirm , this . props )
35-
36- // `open` is auto controlled by the Modal
37- // It cannot be present (even undefined) with `defaultOpen`
38- // only apply it if the user provided an open prop
39- const openProp = { }
40- if ( _ . has ( this . props , 'open' ) ) openProp . open = open
41-
42- return (
43- < Modal { ...rest } { ...openProp } size = { size } onClose = { this . handleCancel } >
44- { Modal . Header . create ( header , { autoGenerateKey : false } ) }
45- { Modal . Content . create ( content , { autoGenerateKey : false } ) }
46- < Modal . Actions >
47- { Button . create ( cancelButton , {
48- autoGenerateKey : false ,
49- overrideProps : this . handleCancelOverrides ,
50- } ) }
51- { Button . create ( confirmButton , {
52- autoGenerateKey : false ,
53- defaultProps : { primary : true } ,
54- overrideProps : this . handleConfirmOverrides ,
55- } ) }
56- </ Modal . Actions >
57- </ Modal >
58- )
35+ // `open` is auto controlled by the Modal
36+ // It cannot be present (even undefined) with `defaultOpen`
37+ // only apply it if the user provided an open prop
38+ const openProp = { }
39+ if ( _ . has ( props , 'open' ) ) {
40+ openProp . open = open
5941 }
60- }
6142
43+ return (
44+ < Modal { ...rest } { ...openProp } size = { size } onClose = { handleCancel } ref = { ref } >
45+ { Modal . Header . create ( header , { autoGenerateKey : false } ) }
46+ { Modal . Content . create ( content , { autoGenerateKey : false } ) }
47+ < Modal . Actions >
48+ { Button . create ( cancelButton , {
49+ autoGenerateKey : false ,
50+ overrideProps : handleCancelOverrides ,
51+ } ) }
52+ { Button . create ( confirmButton , {
53+ autoGenerateKey : false ,
54+ defaultProps : { primary : true } ,
55+ overrideProps : handleConfirmOverrides ,
56+ } ) }
57+ </ Modal . Actions >
58+ </ Modal >
59+ )
60+ } )
61+
62+ Confirm . displayName = 'Confirm'
6263Confirm . propTypes = {
6364 /** The cancel button text. */
6465 cancelButton : customPropTypes . itemShorthand ,
0 commit comments