UNPKG

zrmc

Version:

ZRMC is an ES7 React wrapper for Material Components Web.

215 lines (180 loc) 6.05 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = undefined; var _objectWithoutProperties2 = require("babel-runtime/helpers/objectWithoutProperties"); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _classCallCheck2 = require("babel-runtime/helpers/classCallCheck"); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require("babel-runtime/helpers/createClass"); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require("babel-runtime/helpers/possibleConstructorReturn"); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require("babel-runtime/helpers/inherits"); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require("react"); var _react2 = _interopRequireDefault(_react); var _propTypes = require("prop-types"); var _propTypes2 = _interopRequireDefault(_propTypes); var _ = require("../"); var _2 = _interopRequireDefault(_); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * mdc-snackbar * * See: * https://material.io/develop/web/components/snackbars/ * */ var MDC_SNACKBAR = "mdc-snackbar"; /** * Copyright (c) 2015-present, CWB SAS * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var Snackbar = function (_Component) { (0, _inherits3.default)(Snackbar, _Component); function Snackbar(props) { (0, _classCallCheck3.default)(this, Snackbar); var _this = (0, _possibleConstructorReturn3.default)(this, (Snackbar.__proto__ || Object.getPrototypeOf(Snackbar)).call(this, props)); _this.desactivate = function () { _this.setState({ active: false }); clearTimeout(_this.timer); _this.timer = null; }; _this.onTransitionEnd = function () { if (!_this.state.transitionEnd && !_this.state.active) { _this.setState({ transitionEnd: true }); _this.props.onTimeout(); } }; _this.state = { active: false, message: props.message, transitionEnd: false }; return _this; } (0, _createClass3.default)(Snackbar, [{ key: "componentDidMount", value: function componentDidMount() { var _this2 = this; setTimeout(function () { _this2.setState({ active: true }, _this2.setTimer()); }, 1); } }, { key: "componentDidUpdate", value: function componentDidUpdate() { this.setTimer(); } }, { key: "updateMessage", value: function updateMessage(message) { this.setState({ active: true, message: message }); } }, { key: "setTimer", value: function setTimer() { var _this3 = this; if (this.state.active && !this.timer) { this.timer = setTimeout(function () { _this3.desactivate(); }, this.props.timeout); } } }, { key: "render", value: function render() { var _this4 = this; var _props = this.props, timeout = _props.timeout, onTimeout = _props.onTimeout, onAction = _props.onAction, actionText = _props.actionText, multiline = _props.multiline, actionOnBottom = _props.actionOnBottom, startAligned = _props.startAligned, props = (0, _objectWithoutProperties3.default)(_props, ["timeout", "onTimeout", "onAction", "actionText", "multiline", "actionOnBottom", "startAligned"]); var _state = this.state, message = _state.message, active = _state.active; var classes = MDC_SNACKBAR; if (active) { classes += " mdc-snackbar--active"; } if (multiline) { classes += " mdc-snackbar--multiline"; } if (actionOnBottom) { classes += " mdc-snackbar--action-on-bottom"; } if (startAligned) { classes += " mdc-snackbar--align-start"; } var actionWrapper = ""; if (onAction && actionText) { actionWrapper = _react2.default.createElement( "div", { className: "mdc-snackbar__action-wrapper" }, _react2.default.createElement( "button", { type: "button", className: "mdc-snackbar__action-button", onClick: function onClick() { _this4.desactivate(); onAction(); } }, actionText ) ); } return _2.default.render(_react2.default.createElement( "div", { className: classes, "aria-live": "assertive", "aria-atomic": "true", "aria-hidden": "true", onTransitionEnd: this.onTransitionEnd }, _react2.default.createElement( "div", { className: "mdc-snackbar__text" }, message ), actionWrapper ), props); } }]); return Snackbar; }(_react.Component); exports.default = Snackbar; Snackbar.defaultProps = { mdcElement: MDC_SNACKBAR, active: true, timeout: 2750, onAction: null, onTimeout: null, actionText: null, // Required if actionHandler multiline: false, actionOnBottom: false, startAligned: false }; Snackbar.propTypes = { mdcElement: _propTypes2.default.string, active: _propTypes2.default.bool, message: _propTypes2.default.string.isRequired, timeout: _propTypes2.default.number, onAction: _propTypes2.default.func, onTimeout: _propTypes2.default.func, actionText: _propTypes2.default.string, // Required if actionHandler multiline: _propTypes2.default.bool, actionOnBottom: _propTypes2.default.bool, startAligned: _propTypes2.default.bool };