UNPKG

react-stripe-elements

Version:

React components for Stripe.js and Stripe Elements

137 lines (106 loc) 5.61 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports.elementContextTypes = exports.injectContextTypes = undefined; 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 _react = require('react'); var _react2 = _interopRequireDefault(_react); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _Provider = require('./Provider'); 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 _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } else { return Array.from(arr); } } 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 injectContextTypes = exports.injectContextTypes = { getRegisteredElements: _propTypes2.default.func.isRequired, elements: _propTypes2.default.object }; var elementContextTypes = exports.elementContextTypes = { addElementsLoadListener: _propTypes2.default.func.isRequired, registerElement: _propTypes2.default.func.isRequired, unregisterElement: _propTypes2.default.func.isRequired }; var Elements = function (_React$Component) { _inherits(Elements, _React$Component); function Elements(props, context) { _classCallCheck(this, Elements); var _this = _possibleConstructorReturn(this, _React$Component.call(this, props, context)); _this._elements = null; _this.handleRegisterElement = function (element, impliedTokenType, impliedSourceType, impliedPaymentMethodType) { _this.setState(function (prevState) { return { registeredElements: [].concat(_toConsumableArray(prevState.registeredElements), [_extends({ element: element }, impliedTokenType ? { impliedTokenType: impliedTokenType } : {}, impliedSourceType ? { impliedSourceType: impliedSourceType } : {}, impliedPaymentMethodType ? { impliedPaymentMethodType: impliedPaymentMethodType } : {})]) }; }); }; _this.handleUnregisterElement = function (el) { _this.setState(function (prevState) { return { registeredElements: prevState.registeredElements.filter(function (_ref) { var element = _ref.element; return element !== el; }) }; }); }; var _this$props = _this.props, children = _this$props.children, options = _objectWithoutProperties(_this$props, ['children']); if (_this.context.tag === 'sync') { _this._elements = _this.context.stripe.elements(options); } _this.state = { registeredElements: [] }; return _this; } Elements.prototype.getChildContext = function getChildContext() { var _this2 = this; return { addElementsLoadListener: function addElementsLoadListener(fn) { // Return the existing elements instance if we already have one. if (_this2.context.tag === 'sync') { // This is impossible, but we need to make flow happy. if (!_this2._elements) { throw new Error('Expected elements to be instantiated but it was not.'); } fn(_this2._elements); } else { _this2.context.addStripeLoadListener(function (stripe) { if (_this2._elements) { fn(_this2._elements); } else { var _props = _this2.props, _children = _props.children, options = _objectWithoutProperties(_props, ['children']); _this2._elements = stripe.elements(options); fn(_this2._elements); } }); } }, registerElement: this.handleRegisterElement, unregisterElement: this.handleUnregisterElement, getRegisteredElements: function getRegisteredElements() { return _this2.state.registeredElements; }, elements: this._elements }; }; Elements.prototype.render = function render() { return _react2.default.Children.only(this.props.children); }; return Elements; }(_react2.default.Component); Elements.childContextTypes = _extends({}, injectContextTypes, elementContextTypes); Elements.contextTypes = _Provider.providerContextTypes; Elements.defaultProps = { children: null }; exports.default = Elements;