UNPKG

focus-components-v3

Version:

Focus web components to build applications (based on Material Design)

123 lines (90 loc) 10.2 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _class; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _button = require('../button'); var _button2 = _interopRequireDefault(_button); var _scroll = require('../behaviours/scroll'); var _scroll2 = _interopRequireDefault(_scroll); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(obj, key, value); } } return 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) : _defaults(subClass, superClass); } var ButtonBackToTop = (0, _scroll2.default)(_class = function (_Component) { _inherits(ButtonBackToTop, _Component); function ButtonBackToTop(props) { _classCallCheck(this, ButtonBackToTop); var _this = _possibleConstructorReturn(this, _Component.call(this, props)); _this._scrollSpy = function () { var currentScrollPosition = _this.scrollPosition(); if (currentScrollPosition.top > _this.props.scrollStart) { if (!_this.state.isVisible) { _this.setState({ isVisible: true }); } } else { if (_this.state.isVisible) { _this.setState({ isVisible: false }); } } }; _this.goBackToTop = function () { //TODO: Add animation scrollTo(undefined, 0); }; _this.render = function () { var isVisible = _this.state.isVisible; return isVisible ? _react2.default.createElement( 'div', { 'data-focus': 'back-to-top' }, _react2.default.createElement(_button2.default, { color: 'colored', handleOnClick: _this.goBackToTop, icon: 'expand_less', shape: 'fab', type: 'button' }) ) : null; }; _this.state = { isVisible: false }; return _this; } /** * Component did mount, attach the scroll spy */ ButtonBackToTop.prototype.componentDidMount = function componentDidMount() { this._scrollCarrier = window; this._scrollCarrier.addEventListener('scroll', this._scrollSpy); this._scrollCarrier.addEventListener('resize', this._scrollSpy); this._scrollSpy(); }; ButtonBackToTop.prototype.componentWillUnmount = function componentWillUnmount() { this._scrollCarrier.removeEventListener('scroll', this._scrollSpy); this._scrollCarrier.removeEventListener('resize', this._scrollSpy); }; /** * The scroll event handler * @private */ /** * Go back to the top of the page. */ return ButtonBackToTop; }(_react.Component)) || _class; ButtonBackToTop.displayName = 'ButtonBackToTop'; ButtonBackToTop.defaultProps = { iconPrefix: 'fa fa-', iconName: 'arrow-circle-up', duration: 100, scrollStart: 100 }; ButtonBackToTop.propTypes = { duration: _react.PropTypes.number, iconName: _react.PropTypes.string, iconPrefix: _react.PropTypes.string, scrollStart: _react.PropTypes.number }; exports.default = ButtonBackToTop; module.exports = exports['default']; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZyLUZSLmpzIl0sIm5hbWVzIjpbIkJ1dHRvbkJhY2tUb1RvcCIsInByb3BzIiwiX3Njcm9sbFNweSIsImN1cnJlbnRTY3JvbGxQb3NpdGlvbiIsInNjcm9sbFBvc2l0aW9uIiwidG9wIiwic2Nyb2xsU3RhcnQiLCJzdGF0ZSIsImlzVmlzaWJsZSIsInNldFN0YXRlIiwiZ29CYWNrVG9Ub3AiLCJzY3JvbGxUbyIsInVuZGVmaW5lZCIsInJlbmRlciIsImNvbXBvbmVudERpZE1vdW50IiwiX3Njcm9sbENhcnJpZXIiLCJ3aW5kb3ciLCJhZGRFdmVudExpc3RlbmVyIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlzcGxheU5hbWUiLCJkZWZhdWx0UHJvcHMiLCJpY29uUHJlZml4IiwiaWNvbk5hbWUiLCJkdXJhdGlvbiIsInByb3BUeXBlcyIsIm51bWJlciIsInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7Ozs7SUFHTUEsZTtjQUFBQSxlOztBQUNGLGFBREVBLGVBQ0YsQ0FBWUMsS0FBWixFQUFtQjtBQUFBLDhCQURqQkQsZUFDaUI7O0FBQUEscURBQ2Ysc0JBQU1DLEtBQU4sQ0FEZTs7QUFBQSxjQTBCbkJDLFVBMUJtQixHQTBCTixZQUFNO0FBQ2YsZ0JBQU1DLHdCQUF3QixNQUFLQyxjQUFMLEVBQTlCO0FBQ0EsZ0JBQUlELHNCQUFzQkUsR0FBdEIsR0FBNEIsTUFBS0osS0FBTCxDQUFXSyxXQUEzQyxFQUF3RDtBQUNwRCxvQkFBSSxDQUFDLE1BQUtDLEtBQUwsQ0FBV0MsU0FBaEIsRUFBMkI7QUFDdkIsMEJBQUtDLFFBQUwsQ0FBYyxFQUFDRCxXQUFXLElBQVosRUFBZDtBQUNIO0FBQ0osYUFKRCxNQUlPO0FBQ0gsb0JBQUksTUFBS0QsS0FBTCxDQUFXQyxTQUFmLEVBQTBCO0FBQ3RCLDBCQUFLQyxRQUFMLENBQWMsRUFBQ0QsV0FBVyxLQUFaLEVBQWQ7QUFDSDtBQUNKO0FBQ0osU0FyQ2tCOztBQUFBLGNBMENuQkUsV0ExQ21CLEdBMENMLFlBQU07QUFDaEI7QUFDQUMscUJBQVNDLFNBQVQsRUFBb0IsQ0FBcEI7QUFDSCxTQTdDa0I7O0FBQUEsY0ErQ25CQyxNQS9DbUIsR0ErQ1YsWUFBTTtBQUFBLGdCQUNKTCxTQURJLEdBQ1MsTUFBS0QsS0FEZCxDQUNKQyxTQURJOztBQUVYLG1CQUFPQSxZQUFZO0FBQUE7QUFBQSxrQkFBSyxjQUFXLGFBQWhCO0FBQThCLGtFQUFRLE9BQU0sU0FBZCxFQUF3QixlQUFlLE1BQUtFLFdBQTVDLEVBQXlELE1BQUssYUFBOUQsRUFBNEUsT0FBTSxLQUFsRixFQUF3RixNQUFLLFFBQTdGO0FBQTlCLGFBQVosR0FBMkosSUFBbEs7QUFDSCxTQWxEa0I7O0FBRWYsY0FBS0gsS0FBTCxHQUFhO0FBQ1RDLHVCQUFXO0FBREYsU0FBYjtBQUZlO0FBS2xCOztBQUVEOzs7OztBQVJFUixtQixXQVdGYyxpQixnQ0FBb0I7QUFDaEIsYUFBS0MsY0FBTCxHQUFzQkMsTUFBdEI7QUFDQSxhQUFLRCxjQUFMLENBQW9CRSxnQkFBcEIsQ0FBcUMsUUFBckMsRUFBK0MsS0FBS2YsVUFBcEQ7QUFDQSxhQUFLYSxjQUFMLENBQW9CRSxnQkFBcEIsQ0FBcUMsUUFBckMsRUFBK0MsS0FBS2YsVUFBcEQ7QUFDQSxhQUFLQSxVQUFMO0FBQ0gsSzs7QUFoQkNGLG1CLFdBa0JGa0Isb0IsbUNBQXVCO0FBQ25CLGFBQUtILGNBQUwsQ0FBb0JJLG1CQUFwQixDQUF3QyxRQUF4QyxFQUFrRCxLQUFLakIsVUFBdkQ7QUFDQSxhQUFLYSxjQUFMLENBQW9CSSxtQkFBcEIsQ0FBd0MsUUFBeEMsRUFBa0QsS0FBS2pCLFVBQXZEO0FBQ0gsSzs7QUFFRDs7Ozs7O0FBaUJBOzs7OztXQXhDRUYsZTs7O0FBc0ROQSxnQkFBZ0JvQixXQUFoQixHQUE4QixpQkFBOUI7QUFDQXBCLGdCQUFnQnFCLFlBQWhCLEdBQStCO0FBQzNCQyxnQkFBWSxRQURlO0FBRTNCQyxjQUFVLGlCQUZpQjtBQUczQkMsY0FBVSxHQUhpQjtBQUkzQmxCLGlCQUFhO0FBSmMsQ0FBL0I7QUFNQU4sZ0JBQWdCeUIsU0FBaEIsR0FBNEI7QUFDeEJELGNBQVUsaUJBQVVFLE1BREk7QUFFeEJILGNBQVUsaUJBQVVJLE1BRkk7QUFHeEJMLGdCQUFZLGlCQUFVSyxNQUhFO0FBSXhCckIsaUJBQWEsaUJBQVVvQjtBQUpDLENBQTVCO2tCQU1lMUIsZSIsImZpbGUiOiJmci1GUi5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge0NvbXBvbmVudCwgUHJvcFR5cGVzfSBmcm9tICdyZWFjdCc7XHJcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xyXG5pbXBvcnQgQnV0dG9uIGZyb20gJy4uL2J1dHRvbic7XHJcbmltcG9ydCBTY3JvbGwgZnJvbSAnLi4vYmVoYXZpb3Vycy9zY3JvbGwnO1xyXG5cclxuQFNjcm9sbFxyXG5jbGFzcyBCdXR0b25CYWNrVG9Ub3AgZXh0ZW5kcyBDb21wb25lbnQge1xyXG4gICAgY29uc3RydWN0b3IocHJvcHMpIHtcclxuICAgICAgICBzdXBlcihwcm9wcyk7XHJcbiAgICAgICAgdGhpcy5zdGF0ZSA9IHtcclxuICAgICAgICAgICAgaXNWaXNpYmxlOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIENvbXBvbmVudCBkaWQgbW91bnQsIGF0dGFjaCB0aGUgc2Nyb2xsIHNweVxyXG4gICAgKi9cclxuICAgIGNvbXBvbmVudERpZE1vdW50KCkge1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbENhcnJpZXIgPSB3aW5kb3c7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsQ2Fycmllci5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLl9zY3JvbGxTcHkpO1xyXG4gICAgICAgIHRoaXMuX3Njcm9sbENhcnJpZXIuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgdGhpcy5fc2Nyb2xsU3B5KTtcclxuICAgICAgICB0aGlzLl9zY3JvbGxTcHkoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcclxuICAgICAgICB0aGlzLl9zY3JvbGxDYXJyaWVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMuX3Njcm9sbFNweSk7XHJcbiAgICAgICAgdGhpcy5fc2Nyb2xsQ2Fycmllci5yZW1vdmVFdmVudExpc3RlbmVyKCdyZXNpemUnLCB0aGlzLl9zY3JvbGxTcHkpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgKiBUaGUgc2Nyb2xsIGV2ZW50IGhhbmRsZXJcclxuICAgICogQHByaXZhdGVcclxuICAgICovXHJcbiAgICBfc2Nyb2xsU3B5ID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRTY3JvbGxQb3NpdGlvbiA9IHRoaXMuc2Nyb2xsUG9zaXRpb24oKTtcclxuICAgICAgICBpZiAoY3VycmVudFNjcm9sbFBvc2l0aW9uLnRvcCA+IHRoaXMucHJvcHMuc2Nyb2xsU3RhcnQpIHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLnN0YXRlLmlzVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRTdGF0ZSh7aXNWaXNpYmxlOiB0cnVlfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zdGF0ZS5pc1Zpc2libGUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0U3RhdGUoe2lzVmlzaWJsZTogZmFsc2V9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICogR28gYmFjayB0byB0aGUgdG9wIG9mIHRoZSBwYWdlLlxyXG4gICAgKi9cclxuICAgIGdvQmFja1RvVG9wID0gKCkgPT4ge1xyXG4gICAgICAgIC8vVE9ETzogQWRkIGFuaW1hdGlvblxyXG4gICAgICAgIHNjcm9sbFRvKHVuZGVmaW5lZCwgMCk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVuZGVyID0gKCkgPT4ge1xyXG4gICAgICAgIGNvbnN0IHtpc1Zpc2libGV9ID0gdGhpcy5zdGF0ZTtcclxuICAgICAgICByZXR1cm4gaXNWaXNpYmxlID8gPGRpdiBkYXRhLWZvY3VzPSdiYWNrLXRvLXRvcCc+PEJ1dHRvbiBjb2xvcj0nY29sb3JlZCcgaGFuZGxlT25DbGljaz17dGhpcy5nb0JhY2tUb1RvcH0gaWNvbj0nZXhwYW5kX2xlc3MnIHNoYXBlPSdmYWInIHR5cGU9J2J1dHRvbicgLz48L2Rpdj4gOiBudWxsO1xyXG4gICAgfVxyXG59XHJcblxyXG5CdXR0b25CYWNrVG9Ub3AuZGlzcGxheU5hbWUgPSAnQnV0dG9uQmFja1RvVG9wJztcclxuQnV0dG9uQmFja1RvVG9wLmRlZmF1bHRQcm9wcyA9IHtcclxuICAgIGljb25QcmVmaXg6ICdmYSBmYS0nLFxyXG4gICAgaWNvbk5hbWU6ICdhcnJvdy1jaXJjbGUtdXAnLFxyXG4gICAgZHVyYXRpb246IDEwMCxcclxuICAgIHNjcm9sbFN0YXJ0OiAxMDBcclxufTtcclxuQnV0dG9uQmFja1RvVG9wLnByb3BUeXBlcyA9IHtcclxuICAgIGR1cmF0aW9uOiBQcm9wVHlwZXMubnVtYmVyLFxyXG4gICAgaWNvbk5hbWU6IFByb3BUeXBlcy5zdHJpbmcsXHJcbiAgICBpY29uUHJlZml4OiBQcm9wVHlwZXMuc3RyaW5nLFxyXG4gICAgc2Nyb2xsU3RhcnQ6IFByb3BUeXBlcy5udW1iZXJcclxufTtcclxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFja1RvVG9wO1xyXG4iXX0=