UNPKG

react-stickerpipe

Version:
295 lines (220 loc) 9.7 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; 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 _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _reactOnclickoutside = require('react-onclickoutside'); var _reactOnclickoutside2 = _interopRequireDefault(_reactOnclickoutside); var _reactEventListener = require('react-event-listener'); var _reactEventListener2 = _interopRequireDefault(_reactEventListener); var _client = require('./client'); var _client2 = _interopRequireDefault(_client); var _storage = require('./storage'); var _storage2 = _interopRequireDefault(_storage); var _myStickerPacks = require('./components/my-sticker-packs'); var _myStickerPacks2 = _interopRequireDefault(_myStickerPacks); var _stickerPack = require('./components/sticker-pack'); var _stickerPack2 = _interopRequireDefault(_stickerPack); var _stickerShop = require('./components/sticker-shop'); var _stickerShop2 = _interopRequireDefault(_stickerShop); var _parseResponse = require('./parse-response'); var _parseResponse2 = _interopRequireDefault(_parseResponse); var _defaultColors = require('./default-colors'); var _defaultColors2 = _interopRequireDefault(_defaultColors); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } 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; } /* eslint no-console: ["error", { allow: ["error"] }] */ var StickerMenu = function (_Component) { _inherits(StickerMenu, _Component); function StickerMenu(props) { _classCallCheck(this, StickerMenu); var _this = _possibleConstructorReturn(this, (StickerMenu.__proto__ || Object.getPrototypeOf(StickerMenu)).call(this, props)); _this.handleClickOutside = function (event) { var hideMenu = _this.props.hideMenu; hideMenu(event); }; _this.handleKeyUp = function (event) { var hideMenu = _this.props.hideMenu; if (event.which === 27) { hideMenu(event); } }; _this.state = { stickerPacks: [], pack: {}, shop: false }; _this.client = new _client2.default(props.apiKey, props.userId, 'https://api.stickerpipe.com/api/v2'); _this.storage = new _storage2.default(props.userId); _this.getMyPacks = _this.getMyPacks.bind(_this); _this.showPack = _this.showPack.bind(_this); _this.toggleShop = _this.toggleShop.bind(_this); return _this; } _createClass(StickerMenu, [{ key: 'getChildContext', value: function getChildContext() { return { client: this.client, storage: this.storage }; } }, { key: 'componentDidMount', value: function componentDidMount() { this.getMyPacks(this.showPack); } }, { key: 'getMyPacks', value: function getMyPacks(callback) { var _this2 = this; var storedPacks = this.storage.getMyPacks(); if (storedPacks && storedPacks.length > 0) { if (callback) { callback(storedPacks[0].pack_name); } this.setState({ stickerPacks: storedPacks }); return false; } this.client.getMyPacks(function (err, res) { if (err) { console.error(err); return false; } var stickerPacks = (0, _parseResponse2.default)(res); if (callback) { callback(stickerPacks[0].pack_name); } _this2.storage.storeMyPacks(stickerPacks); _this2.setState({ stickerPacks: stickerPacks }); return false; }); return false; } }, { key: 'showPack', value: function showPack(packName) { var _this3 = this; var client = this.client, storage = this.storage; var storedPack = storage.getPack(packName); if (storedPack) { this.setState({ pack: storedPack, shop: false }); return false; } client.purchasePack(packName, function (err, res) { if (err) { console.error(err); return false; } var pack = (0, _parseResponse2.default)(res); storage.storePack(pack.pack_name, pack.title, pack.stickers); _this3.setState({ pack: pack, shop: false }); return false; }); return false; } }, { key: 'toggleShop', value: function toggleShop() { this.setState({ shop: !this.state.shop }); } }, { key: 'render', value: function render() { var _props = this.props, sendSticker = _props.sendSticker, toggleButton = _props.toggleButton, colors = _props.colors, open = _props.open, eventTypes = _props.eventTypes, outsideClickIgnoreClass = _props.outsideClickIgnoreClass, preventDefault = _props.preventDefault, stopPropagation = _props.stopPropagation, disableOnClickOutside = _props.disableOnClickOutside, enableOnClickOutside = _props.enableOnClickOutside, hideMenu = _props.hideMenu, apiKey = _props.apiKey, userId = _props.userId, custom = _objectWithoutProperties(_props, ['sendSticker', 'toggleButton', 'colors', 'open', 'eventTypes', 'outsideClickIgnoreClass', 'preventDefault', 'stopPropagation', 'disableOnClickOutside', 'enableOnClickOutside', 'hideMenu', 'apiKey', 'userId']); var _state = this.state, stickerPacks = _state.stickerPacks, pack = _state.pack, shop = _state.shop; if (!open) { return false; } var mergedColors = Object.assign(_defaultColors2.default, colors); return _react2.default.createElement( 'section', _extends({ className: 'sticker-menu' }, custom), toggleButton ? _react2.default.createElement( 'header', null, toggleButton ) : null, pack && pack.stickers && !shop ? _react2.default.createElement(_stickerPack2.default, { pack: pack, sendSticker: sendSticker }) : null, shop ? _react2.default.createElement(_stickerShop2.default, { getMyPacks: this.getMyPacks, colors: mergedColors }) : null, _react2.default.createElement(_myStickerPacks2.default, { stickerPacks: stickerPacks, showPack: this.showPack, toggleShop: this.toggleShop, shop: shop, colors: mergedColors }), _react2.default.createElement(_reactEventListener2.default, { target: 'window', onKeyUp: this.handleKeyUp }) ); } }]); return StickerMenu; }(_react.Component); StickerMenu.propTypes = { apiKey: _propTypes2.default.string.isRequired, userId: _propTypes2.default.string.isRequired, sendSticker: _propTypes2.default.func.isRequired, toggleButton: _propTypes2.default.element, colors: _propTypes2.default.shape({ primary: _propTypes2.default.string, secondary: _propTypes2.default.string }), /** Toggle the StickerMenu's visibility */ open: _propTypes2.default.bool, /** Function to hide the menu */ hideMenu: _propTypes2.default.func.isRequired }; StickerMenu.defaultProps = { colors: _defaultColors2.default, toggleButton: null, open: false }; StickerMenu.childContextTypes = { client: _propTypes2.default.shape({ getMyPacks: _propTypes2.default.func.isRequired, purchasePack: _propTypes2.default.func.isRequired }).isRequired, storage: _propTypes2.default.shape({ storePack: _propTypes2.default.func.isRequired, getPack: _propTypes2.default.func.isRequired }).isRequired }; exports.default = (0, _reactOnclickoutside2.default)(StickerMenu); module.exports = exports['default'];