material-ui-datetime-range-picker
Version:
React Datetime Range Picker Component that Implements Google's Material Design Via Material-UI.
189 lines (147 loc) • 16 kB
JavaScript
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 _simpleAssign = require('simple-assign');
var _simpleAssign2 = _interopRequireDefault(_simpleAssign);
var _react = require('react');
var _react2 = _interopRequireDefault(_react);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _reactDom = require('react-dom');
var _reactDom2 = _interopRequireDefault(_reactDom);
var _shallowEqual = require('recompose/shallowEqual');
var _shallowEqual2 = _interopRequireDefault(_shallowEqual);
var _autoPrefix = require('../utils/autoPrefix');
var _autoPrefix2 = _interopRequireDefault(_autoPrefix);
var _transitions = require('../styles/transitions');
var _transitions2 = _interopRequireDefault(_transitions);
var _ScaleIn = require('./ScaleIn');
var _ScaleIn2 = _interopRequireDefault(_ScaleIn);
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 _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
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 pulsateDuration = 750;
var FocusRipple = function (_Component) {
_inherits(FocusRipple, _Component);
function FocusRipple() {
var _ref;
var _temp, _this, _ret;
_classCallCheck(this, FocusRipple);
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = FocusRipple.__proto__ || Object.getPrototypeOf(FocusRipple)).call.apply(_ref, [this].concat(args))), _this), _this.pulsate = function () {
var innerCircle = _reactDom2.default.findDOMNode(_this.refs.innerCircle);
if (!innerCircle) return;
var startScale = 'scale(1)';
var endScale = 'scale(0.85)';
var currentScale = innerCircle.style.transform || startScale;
var nextScale = currentScale === startScale ? endScale : startScale;
_autoPrefix2.default.set(innerCircle.style, 'transform', nextScale);
_this.timeout = setTimeout(_this.pulsate, pulsateDuration);
}, _temp), _possibleConstructorReturn(_this, _ret);
}
_createClass(FocusRipple, [{
key: 'componentDidMount',
value: function componentDidMount() {
if (this.props.show) {
this.setRippleSize();
this.pulsate();
}
}
}, {
key: 'shouldComponentUpdate',
value: function shouldComponentUpdate(nextProps, nextState) {
return !(0, _shallowEqual2.default)(this.props, nextProps) || !(0, _shallowEqual2.default)(this.state, nextState);
}
}, {
key: 'componentDidUpdate',
value: function componentDidUpdate() {
if (this.props.show) {
this.setRippleSize();
this.pulsate();
} else {
if (this.timeout) clearTimeout(this.timeout);
}
}
}, {
key: 'componentWillUnmount',
value: function componentWillUnmount() {
clearTimeout(this.timeout);
}
}, {
key: 'getRippleElement',
value: function getRippleElement(props) {
var color = props.color,
innerStyle = props.innerStyle,
opacity = props.opacity;
var _context$muiTheme = this.context.muiTheme,
prepareStyles = _context$muiTheme.prepareStyles,
ripple = _context$muiTheme.ripple;
var innerStyles = (0, _simpleAssign2.default)({
position: 'absolute',
height: '100%',
width: '100%',
borderRadius: '50%',
opacity: opacity ? opacity : 0.16,
backgroundColor: color || ripple.color,
transition: _transitions2.default.easeOut(pulsateDuration + 'ms', 'transform', null, _transitions2.default.easeInOutFunction)
}, innerStyle);
return _react2.default.createElement('div', { ref: 'innerCircle', style: prepareStyles((0, _simpleAssign2.default)({}, innerStyles)) });
}
}, {
key: 'setRippleSize',
value: function setRippleSize() {
var el = _reactDom2.default.findDOMNode(this.refs.innerCircle);
var height = el.offsetHeight;
var width = el.offsetWidth;
var size = Math.max(height, width);
var oldTop = 0;
// For browsers that don't support endsWith()
if (el.style.top.indexOf('px', el.style.top.length - 2) !== -1) {
oldTop = parseInt(el.style.top);
}
el.style.height = size + 'px';
el.style.top = height / 2 - size / 2 + oldTop + 'px';
}
}, {
key: 'render',
value: function render() {
var _props = this.props,
show = _props.show,
style = _props.style;
var mergedRootStyles = (0, _simpleAssign2.default)({
height: '100%',
width: '100%',
position: 'absolute',
top: 0,
left: 0
}, style);
var ripple = show ? this.getRippleElement(this.props) : null;
return _react2.default.createElement(
_ScaleIn2.default,
{
maxScale: 0.85,
style: mergedRootStyles
},
ripple
);
}
}]);
return FocusRipple;
}(_react.Component);
FocusRipple.propTypes = {
color: _propTypes2.default.string,
innerStyle: _propTypes2.default.object,
opacity: _propTypes2.default.number,
show: _propTypes2.default.bool,
style: _propTypes2.default.object
};
FocusRipple.contextTypes = {
muiTheme: _propTypes2.default.object.isRequired
};
exports.default = FocusRipple;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9pbnRlcm5hbC9Gb2N1c1JpcHBsZS5qcyJdLCJuYW1lcyI6WyJwdWxzYXRlRHVyYXRpb24iLCJGb2N1c1JpcHBsZSIsInB1bHNhdGUiLCJpbm5lckNpcmNsZSIsIlJlYWN0RE9NIiwiZmluZERPTU5vZGUiLCJyZWZzIiwic3RhcnRTY2FsZSIsImVuZFNjYWxlIiwiY3VycmVudFNjYWxlIiwic3R5bGUiLCJ0cmFuc2Zvcm0iLCJuZXh0U2NhbGUiLCJhdXRvUHJlZml4Iiwic2V0IiwidGltZW91dCIsInNldFRpbWVvdXQiLCJwcm9wcyIsInNob3ciLCJzZXRSaXBwbGVTaXplIiwibmV4dFByb3BzIiwibmV4dFN0YXRlIiwic3RhdGUiLCJjbGVhclRpbWVvdXQiLCJjb2xvciIsImlubmVyU3R5bGUiLCJvcGFjaXR5IiwiY29udGV4dCIsIm11aVRoZW1lIiwicHJlcGFyZVN0eWxlcyIsInJpcHBsZSIsImlubmVyU3R5bGVzIiwicG9zaXRpb24iLCJoZWlnaHQiLCJ3aWR0aCIsImJvcmRlclJhZGl1cyIsImJhY2tncm91bmRDb2xvciIsInRyYW5zaXRpb24iLCJ0cmFuc2l0aW9ucyIsImVhc2VPdXQiLCJlYXNlSW5PdXRGdW5jdGlvbiIsImVsIiwib2Zmc2V0SGVpZ2h0Iiwib2Zmc2V0V2lkdGgiLCJzaXplIiwiTWF0aCIsIm1heCIsIm9sZFRvcCIsInRvcCIsImluZGV4T2YiLCJsZW5ndGgiLCJwYXJzZUludCIsIm1lcmdlZFJvb3RTdHlsZXMiLCJsZWZ0IiwiZ2V0UmlwcGxlRWxlbWVudCIsIkNvbXBvbmVudCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsInN0cmluZyIsIm9iamVjdCIsIm51bWJlciIsImJvb2wiLCJjb250ZXh0VHlwZXMiLCJpc1JlcXVpcmVkIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsSUFBTUEs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b20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3RET00gZnJvbSAncmVhY3QtZG9tJztcbmltcG9ydCBzaGFsbG93RXF1YWwgZnJvbSAncmVjb21wb3NlL3NoYWxsb3dFcXVhbCc7XG5pbXBvcnQgYXV0b1ByZWZpeCBmcm9tICcuLi91dGlscy9hdXRvUHJlZml4JztcbmltcG9ydCB0cmFuc2l0aW9ucyBmcm9tICcuLi9zdHlsZXMvdHJhbnNpdGlvbnMnO1xuaW1wb3J0IFNjYWxlSW4gZnJvbSAnLi9TY2FsZUluJztcblxuY29uc3QgcHVsc2F0ZUR1cmF0aW9uID0gNzUwO1xuXG5jbGFzcyBGb2N1c1JpcHBsZSBleHRlbmRzIENvbXBvbmVudCB7XG4gIHN0YXRpYyBwcm9wVHlwZXMgPSB7XG4gICAgY29sb3I6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgaW5uZXJTdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgICBvcGFjaXR5OiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIHNob3c6IFByb3BUeXBlcy5ib29sLFxuICAgIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICB9O1xuXG4gIHN0YXRpYyBjb250ZXh0VHlwZXMgPSB7XG4gICAgbXVpVGhlbWU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZCxcbiAgfTtcblxuICBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICBpZiAodGhpcy5wcm9wcy5zaG93KSB7XG4gICAgICB0aGlzLnNldFJpcHBsZVNpemUoKTtcbiAgICAgIHRoaXMucHVsc2F0ZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICAgIHJldHVybiAoXG4gICAgICAhc2hhbGxvd0VxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHxcbiAgICAgICFzaGFsbG93RXF1YWwodGhpcy5zdGF0ZSwgbmV4dFN0YXRlKVxuICAgICk7XG4gIH1cblxuICBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgaWYgKHRoaXMucHJvcHMuc2hvdykge1xuICAgICAgdGhpcy5zZXRSaXBwbGVTaXplKCk7XG4gICAgICB0aGlzLnB1bHNhdGUoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudGltZW91dCkgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gICAgfVxuICB9XG5cbiAgY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dCk7XG4gIH1cblxuICBnZXRSaXBwbGVFbGVtZW50KHByb3BzKSB7XG4gICAgY29uc3Qge1xuICAgICAgY29sb3IsXG4gICAgICBpbm5lclN0eWxlLFxuICAgICAgb3BhY2l0eSxcbiAgICB9ID0gcHJvcHM7XG5cbiAgICBjb25zdCB7cHJlcGFyZVN0eWxlcywgcmlwcGxlfSA9IHRoaXMuY29udGV4dC5tdWlUaGVtZTtcblxuICAgIGNvbnN0IGlubmVyU3R5bGVzID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIGhlaWdodDogJzEwMCUnLFxuICAgICAgd2lkdGg6ICcxMDAlJyxcbiAgICAgIGJvcmRlclJhZGl1czogJzUwJScsXG4gICAgICBvcGFjaXR5OiBvcGFjaXR5ID8gb3BhY2l0eSA6IDAuMTYsXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yIHx8IHJpcHBsZS5jb2xvcixcbiAgICAgIHRyYW5zaXRpb246IHRyYW5zaXRpb25zLmVhc2VPdXQoYCR7cHVsc2F0ZUR1cmF0aW9ufW1zYCwgJ3RyYW5zZm9ybScsIG51bGwsIHRyYW5zaXRpb25zLmVhc2VJbk91dEZ1bmN0aW9uKSxcbiAgICB9LCBpbm5lclN0eWxlKTtcblxuICAgIHJldHVybiA8ZGl2IHJlZj1cImlubmVyQ2lyY2xlXCIgc3R5bGU9e3ByZXBhcmVTdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgaW5uZXJTdHlsZXMpKX0gLz47XG4gIH1cblxuICBwdWxzYXRlID0gKCkgPT4ge1xuICAgIGNvbnN0IGlubmVyQ2lyY2xlID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcy5yZWZzLmlubmVyQ2lyY2xlKTtcbiAgICBpZiAoIWlubmVyQ2lyY2xlKSByZXR1cm47XG5cbiAgICBjb25zdCBzdGFydFNjYWxlID0gJ3NjYWxlKDEpJztcbiAgICBjb25zdCBlbmRTY2FsZSA9ICdzY2FsZSgwLjg1KSc7XG4gICAgY29uc3QgY3VycmVudFNjYWxlID0gaW5uZXJDaXJjbGUuc3R5bGUudHJhbnNmb3JtIHx8IHN0YXJ0U2NhbGU7XG4gICAgY29uc3QgbmV4dFNjYWxlID0gY3VycmVudFNjYWxlID09PSBzdGFydFNjYWxlID8gZW5kU2NhbGUgOiBzdGFydFNjYWxlO1xuXG4gICAgYXV0b1ByZWZpeC5zZXQoaW5uZXJDaXJjbGUuc3R5bGUsICd0cmFuc2Zvcm0nLCBuZXh0U2NhbGUpO1xuICAgIHRoaXMudGltZW91dCA9IHNldFRpbWVvdXQodGhpcy5wdWxzYXRlLCBwdWxzYXRlRHVyYXRpb24pO1xuICB9O1xuXG4gIHNldFJpcHBsZVNpemUoKSB7XG4gICAgY29uc3QgZWwgPSBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzLnJlZnMuaW5uZXJDaXJjbGUpO1xuICAgIGNvbnN0IGhlaWdodCA9IGVsLm9mZnNldEhlaWdodDtcbiAgICBjb25zdCB3aWR0aCA9IGVsLm9mZnNldFdpZHRoO1xuICAgIGNvbnN0IHNpemUgPSBNYXRoLm1heChoZWlnaHQsIHdpZHRoKTtcblxuICAgIGxldCBvbGRUb3AgPSAwO1xuICAgIC8vIEZvciBicm93c2VycyB0aGF0IGRvbid0IHN1cHBvcnQgZW5kc1dpdGgoKVxuICAgIGlmIChlbC5zdHlsZS50b3AuaW5kZXhPZigncHgnLCBlbC5zdHlsZS50b3AubGVuZ3RoIC0gMikgIT09IC0xKSB7XG4gICAgICBvbGRUb3AgPSBwYXJzZUludChlbC5zdHlsZS50b3ApO1xuICAgIH1cbiAgICBlbC5zdHlsZS5oZWlnaHQgPSBgJHtzaXplfXB4YDtcbiAgICBlbC5zdHlsZS50b3AgPSBgJHsoaGVpZ2h0IC8gMikgLSAoc2l6ZSAvIDIgKSArIG9sZFRvcH1weGA7XG4gIH1cblxuICByZW5kZXIoKSB7XG4gICAgY29uc3Qge1xuICAgICAgc2hvdyxcbiAgICAgIHN0eWxlLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuXG4gICAgY29uc3QgbWVyZ2VkUm9vdFN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgICAgaGVpZ2h0OiAnMTAwJScsXG4gICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICB0b3A6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgIH0sIHN0eWxlKTtcblxuICAgIGNvbnN0IHJpcHBsZSA9IHNob3cgPyB0aGlzLmdldFJpcHBsZUVsZW1lbnQodGhpcy5wcm9wcykgOiBudWxsO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxTY2FsZUluXG4gICAgICAgIG1heFNjYWxlPXswLjg1fVxuICAgICAgICBzdHlsZT17bWVyZ2VkUm9vdFN0eWxlc31cbiAgICAgID5cbiAgICAgICAge3JpcHBsZX1cbiAgICAgIDwvU2NhbGVJbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvY3VzUmlwcGxlO1xuIl19
;