Manual Reference Source

basic/PopupConfirm.js

import PropTypes from 'prop-types';
import React, { Component } from 'react';
import { Popup, Button, Header } from 'semantic-ui-react';

export default class PopupConfirm extends Component {
    constructor(props, context) {
        super(props, context);

        this.state = {
            showPopup: false,
            canConfirm: ''
        };
    }

    static propTypes = {
        trigger: PropTypes.any,
        content: PropTypes.string,
        onCancel: PropTypes.func,
        onConfirm: PropTypes.func,
        onCanConfirm: PropTypes.func
    };

    static defaultProps = {
        onCancel: () => {},
        onConfirm: () => {},
        onCanConfirm: () => {}
    };

    openPopup() {
        this.setState({ canConfirm: this.props.onCanConfirm(), showPopup: true });
    }

    closePopup() {
        this.setState({ showPopup: false });
    }

    handleCancel() {
        this.closePopup();
        this.props.onCancel();
    }

    handleConfirm() {
        this.closePopup();
        this.props.onConfirm();
    }

    render() {
        return (
            <Popup
                trigger={this.props.trigger}
                on="click"
                wide="very"
                hideOnScroll
                open={this.state.showPopup}
                onOpen={this.openPopup.bind(this)}
                onClose={this.closePopup.bind(this)}
            >
                <Header>{this.state.canConfirm ? this.state.canConfirm : this.props.content}</Header>

                {this.state.canConfirm ? (
                    <div className="rightFloated">
                        <Button icon="checkmark" content="Ok" color="green" onClick={this.handleCancel.bind(this)} />
                    </div>
                ) : (
                    <div className="rightFloated">
                        <Button icon="remove" content="Cancel" basic onClick={this.handleCancel.bind(this)} />
                        <Button icon="checkmark" content="Ok" color="green" onClick={this.handleConfirm.bind(this)} />
                    </div>
                )}
            </Popup>
        );
    }
}