Home Reference Source Repository

src/dialog/DialogWindow.js

/**
 * @file melon/Dialog/DialogWindow
 * @author cxtom<[email protected]>
 */

import React, {Component, PropTypes} from 'react';
import {create} from 'melon-core/classname/cxBuilder';

const cx = create('DialogWindow');

export default class DialogWindow extends Component {

    shouldComponentUpdate(nextProps) {
        return nextProps.top !== this.props.top
            || nextProps.width !== this.props.width
            || nextProps.footer !== this.props.footer
            || nextProps.title !== this.props.title;
    }

    render() {

        const {
            children,
            top,
            title,
            footer,
            width,
            ...others
        } = this.props;

        let style = {
            transform: 'translate(0, ' + top + 'px)',
            WebkitTransform: 'translate(0, ' + top + 'px)',
            msTransform: 'translate(0, ' + top + 'px)',
            MozTransform: 'translate(0, ' + top + 'px)'
        };

        if (top === 0) {
            style = {};
        }

        if (typeof width === 'number' || !isNaN(+width)) {
            style.width = `${width}px`;
        }

        return (
            <div {...others} style={style} className={cx(this.props).build()}>
                {title}{children}{footer}
            </div>
        );
    }

}

DialogWindow.propTypes = {
    top: PropTypes.number.isRequired,
    footer: PropTypes.element,
    title: PropTypes.element
};