apeman-react-dialog
Version:
apeman react package for dialog component.
62 lines (57 loc) • 1.48 kB
JSX
/**
* @function withDialog
*/
import React from 'react'
import {wrap} from 'breact'
import {clone} from 'asobj'
import ApYesnoDialog from './ap_yesno_dialog'
function withDialog (Component) {
return wrap(Component, {
getInitialState () {
return {
dialog: null
}
},
render () {
const s = this
let { props, state } = s
let { dialog } = state
let componentProps = clone(props, {
without: []
})
return (
<Component { ...componentProps}
askYesNoWithDialog={ s.askYesNo }
dialog={ dialog }
/>
)
},
// --------------------
// Custom
// --------------------
askYesNo ({ title, text, yesText, noText, closeIcon }) {
const s = this
return new Promise((resolve, reject) => {
let dialog = (
<ApYesnoDialog { ...{ title, yesText, noText, closeIcon } }
present
onYes={ () => resolve(true) }
onNo={ () => resolve(false) }
onClose={ () => resolve() }
>{ text } </ApYesnoDialog>
)
s.setState({ dialog })
})
.then((answer) => {
s.setState({ dialog: null })
return answer
})
.catch((err) => {
s.setState({ dialog: null })
return Promise.reject(err)
})
}
})
}
export default withDialog