material-components
Version:
Stateless UI components for react that follow material design
239 lines (205 loc) • 8.39 kB
JavaScript
'use strict';
Object.defineProperty(exports, '__esModule', {
value: true
});
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
var _get = function get(_x, _x2, _x3) { var _again = true; _function: while (_again) { var object = _x, property = _x2, receiver = _x3; _again = false; if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === undefined) { var parent = Object.getPrototypeOf(object); if (parent === null) { return undefined; } else { _x = parent; _x2 = property; _x3 = receiver; _again = true; desc = parent = undefined; continue _function; } } else if ('value' in desc) { return desc.value; } else { var getter = desc.get; if (getter === undefined) { return undefined; } return getter.call(receiver); } } };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
function _inherits(subClass, superClass) { if (typeof superClass !== 'function' && superClass !== null) { throw new TypeError('Super expression must either be null or a function, not ' + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactTransitionGroup = require('react-transition-group');
var _classnames = require('classnames');
var _classnames2 = _interopRequireDefault(_classnames);
var _mask = require('./mask');
var _mask2 = _interopRequireDefault(_mask);
var _divider = require('./divider');
var _divider2 = _interopRequireDefault(_divider);
var _button = require('./button');
var _button2 = _interopRequireDefault(_button);
var _helpersScreen = require('./helpers/screen');
var _helpersScreen2 = _interopRequireDefault(_helpersScreen);
var Dialog = (function (_Component) {
_inherits(Dialog, _Component);
function Dialog() {
_classCallCheck(this, Dialog);
_get(Object.getPrototypeOf(Dialog.prototype), 'constructor', this).apply(this, arguments);
}
_createClass(Dialog, [{
key: 'componentDidMount',
value: function componentDidMount() {
var _this = this;
if (!this.props.ignoreResizeEvents) {
window.addEventListener('resize', this._resize = function () {
return _this.forceUpdate();
});
}
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
if (!this.props.ignoreResizeEvents) {
window.removeEventListener('resize', this._resize);
}
}
}, {
key: 'button',
value: function button(label, onClick) {
if (!label) {
return null;
}
return _react2['default'].createElement(
_button2['default'],
{
style: {
margin: '8px 8px 8px 0',
padding: '0 8px'
},
primary: true,
flat: true,
onClick: onClick },
label
);
}
}, {
key: 'render',
value: function render() {
var _props = this.props;
var cancelLabel = _props.cancelLabel;
var children = _props.children;
var className = _props.className;
var height = _props.height;
var hideDivider = _props.hideDivider;
var isOpen = _props.isOpen;
var noPadding = _props.noPadding;
var okLabel = _props.okLabel;
var onCancel = _props.onCancel;
var onOk = _props.onOk;
var style = _props.style;
var title = _props.title;
var width = _props.width;
var screenSize = _helpersScreen2['default'].getSize();
var top = screenSize.height / 2 - height / 2;
top = top < 24 ? 24 : top;
var maxWidth = width > screenSize.width - 80 ? screenSize.width - 80 : width;
var left = (screenSize.width - maxWidth) / 2;
var maxHeight = screenSize.height - 48;
var maxContentHeight = maxHeight - 48;
var footer = null;
if (okLabel || cancelLabel) {
footer = _react2['default'].createElement(
'div',
{
style: {
height: '56px',
textAlign: 'right'
} },
hideDivider ? null : _react2['default'].createElement(_divider2['default'], { style: { margin: 0 } }),
this.button(cancelLabel, onCancel),
this.button(okLabel, onOk)
);
maxContentHeight -= 56;
}
var titleElement = null;
if (title) {
titleElement = _react2['default'].createElement(
'div',
{
style: {
fontSize: '20px',
fontWeight: 400,
marginBottom: children ? '24px' : 0
} },
title
);
maxContentHeight -= 49;
}
var dialog = isOpen ? _react2['default'].createElement(
_reactTransitionGroup.CSSTransition,
{ key: 'dialog', classNames: 'popup', timeout: { enter: 400, exit: 400 } },
_react2['default'].createElement(
'div',
{ style: { zIndex: 1000 } },
_react2['default'].createElement(_mask2['default'], null),
_react2['default'].createElement(
'div',
{
className: (0, _classnames2['default'])('paper2', 'transition', className),
style: Object.assign({
position: 'fixed',
zIndex: 1001,
top: top + 'px',
left: left + 'px',
width: maxWidth + 'px',
maxHeight: maxHeight + 'px'
}, style) },
_react2['default'].createElement(
'div',
{ style: { padding: noPadding ? 0 : '24px' } },
titleElement,
_react2['default'].createElement(
'div',
{
style: {
maxHeight: maxContentHeight + 'px',
overflow: 'auto',
margin: '0 -24px',
padding: '0 24px'
} },
children
)
),
footer
)
)
) : null;
return _react2['default'].createElement(
_reactTransitionGroup.TransitionGroup,
{ style: { zIndex: 1000 } },
dialog
);
}
}], [{
key: 'displayName',
value: 'Dialog',
enumerable: true
}, {
key: 'propTypes',
value: {
cancelLabel: _propTypes2['default'].string,
children: _propTypes2['default'].node,
className: _propTypes2['default'].string,
height: _propTypes2['default'].number,
hideDivider: _propTypes2['default'].bool,
ignoreResizeEvents: _propTypes2['default'].bool,
isOpen: _propTypes2['default'].bool,
noPadding: _propTypes2['default'].bool,
okLabel: _propTypes2['default'].string,
onCancel: _propTypes2['default'].func,
onOk: _propTypes2['default'].func,
style: _propTypes2['default'].object,
title: _propTypes2['default'].string,
width: _propTypes2['default'].number
},
enumerable: true
}, {
key: 'defaultProps',
value: {
className: '',
height: 130,
hideDivider: false,
ignoreResizeEvents: false,
isOpen: false,
noPadding: false,
style: {},
width: 280
},
enumerable: true
}]);
return Dialog;
})(_react.Component);
exports['default'] = Dialog;
module.exports = exports['default'];