UNPKG

apeman-react-dialog

Version:
62 lines (57 loc) 1.48 kB
/** * @function withDialog */ 'use strict' 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