74 lines
1.5 KiB
JavaScript
74 lines
1.5 KiB
JavaScript
import React, { Component } from 'react';
|
|
|
|
import { hideDialog } from '../actions';
|
|
import { DIALOG_PROP_TYPES } from '../constants';
|
|
|
|
/**
|
|
* Abstract dialog to display dialogs.
|
|
*/
|
|
export default class AbstractDialog extends Component {
|
|
|
|
/**
|
|
* Abstract Dialog component's property types.
|
|
*
|
|
* @static
|
|
*/
|
|
static propTypes = {
|
|
...DIALOG_PROP_TYPES,
|
|
|
|
/**
|
|
* Used to show/hide the dialog on cancel.
|
|
*/
|
|
dispatch: React.PropTypes.func
|
|
};
|
|
|
|
/**
|
|
* Initializes a new Dialog instance.
|
|
*
|
|
* @param {Object} props - The read-only properties with which the new
|
|
* instance is to be initialized.
|
|
*/
|
|
constructor(props) {
|
|
super(props);
|
|
|
|
this._onCancel = this._onCancel.bind(this);
|
|
this._onSubmit = this._onSubmit.bind(this);
|
|
}
|
|
|
|
/**
|
|
* Dispatches action to hide the dialog.
|
|
*
|
|
* @returns {void}
|
|
*/
|
|
_onCancel() {
|
|
let hide = true;
|
|
|
|
if (this.props.onCancel) {
|
|
hide = this.props.onCancel();
|
|
}
|
|
|
|
if (hide) {
|
|
this.props.dispatch(hideDialog());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Dispatches the action when submitting the dialog.
|
|
*
|
|
* @private
|
|
* @param {string} value - The submitted value if any.
|
|
* @returns {void}
|
|
*/
|
|
_onSubmit(value) {
|
|
let hide = true;
|
|
|
|
if (this.props.onSubmit) {
|
|
hide = this.props.onSubmit(value);
|
|
}
|
|
|
|
if (hide) {
|
|
this.props.dispatch(hideDialog());
|
|
}
|
|
}
|
|
}
|