react-stickerpipe
Version:
React Component for StickerPipe API
295 lines (220 loc) • 9.7 kB
JavaScript
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'];
;