// @flow // These should probably just be combined into one modal component import * as React from 'react'; import ReactModal from 'react-modal'; import Button from 'component/button'; import classnames from 'classnames'; type ModalProps = { type: string, overlay: boolean, confirmButtonLabel: string, abortButtonLabel: string, confirmButtonDisabled: boolean, abortButtonDisabled: boolean, onConfirmed?: any => any, onAborted?: any => any, className?: string, children?: React.Node, extraContent?: React.Node, expandButtonLabel?: string, hideButtonLabel?: string, title?: string | React.Node, }; export class Modal extends React.PureComponent { static defaultProps = { type: 'alert', overlay: true, confirmButtonLabel: __('OK'), abortButtonLabel: __('Cancel'), confirmButtonDisabled: false, abortButtonDisabled: false, }; render() { const { children, type, confirmButtonLabel, confirmButtonDisabled, onConfirmed, abortButtonLabel, abortButtonDisabled, onAborted, className, title, ...modalProps } = this.props; return ( {title &&

{title}

} {children} {type === 'custom' ? null : ( // custom modals define their own buttons
)}
); } } type State = { expanded: boolean, }; export class ExpandableModal extends React.PureComponent { static defaultProps = { confirmButtonLabel: __('OK'), expandButtonLabel: __('Show More...'), hideButtonLabel: __('Show Less'), }; constructor(props: ModalProps) { super(props); this.state = { expanded: false, }; } toggleExpanded() { this.setState({ expanded: !this.state.expanded, }); } render() { return ( {this.props.children} {this.state.expanded ?
{this.props.extraContent}
: null}
); } } export default Modal;