pay-sdk-react
Version:
A cross-platform payment SDK for React, supporting Alipay, WeChat Pay, PayPal, Stripe, Payssion, and Airwallex, compatible with H5, PC, and App environments.
70 lines (69 loc) • 3.94 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime-corejs3/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime-corejs3/helpers/extends"));
var _react = _interopRequireWildcard(require("react"));
var _stripePopup = _interopRequireDefault(require("./stripe-popup"));
var _stripeModal = _interopRequireDefault(require("./stripe-modal"));
var _Button = _interopRequireDefault(require("../Button"));
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
const StripeButton = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => {
const {
children = 'Stripe',
onClick,
displayType = 'popup',
stripePopupProps,
stripeModalProps,
createOrder,
...others
} = props;
const stripeButtonRef = (0, _react.useRef)({
nativeElement: null
});
const stripePopupRef = (0, _react.useRef)(null);
const stripeModalRef = (0, _react.useRef)(null);
(0, _react.useImperativeHandle)(ref, () => stripeButtonRef.current);
const handlePayCreateOrder = (0, _react.useCallback)(async () => {
if (createOrder) {
// 1. 业务侧创建订单,获取参数
const options = await createOrder();
if (options !== null && options !== void 0 && options.clientSecret && options !== null && options !== void 0 && options.stripeKey) {
// 2. 唤起弹窗
if (displayType === 'modal') {
var _stripeModalRef$curre;
(_stripeModalRef$curre = stripeModalRef.current) === null || _stripeModalRef$curre === void 0 || _stripeModalRef$curre.open(options);
} else {
var _stripePopupRef$curre;
(_stripePopupRef$curre = stripePopupRef.current) === null || _stripePopupRef$curre === void 0 || _stripePopupRef$curre.open(options);
}
}
}
}, [createOrder, displayType]);
const handleClick = (0, _react.useCallback)(e => {
if (createOrder) {
handlePayCreateOrder();
} else {
if (displayType === 'modal') {
var _stripeModalRef$curre2;
stripeModalRef === null || stripeModalRef === void 0 || (_stripeModalRef$curre2 = stripeModalRef.current) === null || _stripeModalRef$curre2 === void 0 || _stripeModalRef$curre2.open();
} else {
var _stripePopupRef$curre2;
stripePopupRef === null || stripePopupRef === void 0 || (_stripePopupRef$curre2 = stripePopupRef.current) === null || _stripePopupRef$curre2 === void 0 || _stripePopupRef$curre2.open();
}
}
onClick === null || onClick === void 0 || onClick(e);
}, [onClick, createOrder, handlePayCreateOrder, displayType]);
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_Button.default, (0, _extends2.default)({
ref: stripeButtonRef,
onClick: handleClick
}, others), children), displayType === 'popup' && /*#__PURE__*/_react.default.createElement(_stripePopup.default, (0, _extends2.default)({
ref: stripePopupRef
}, stripePopupProps)), displayType === 'modal' && /*#__PURE__*/_react.default.createElement(_stripeModal.default, (0, _extends2.default)({
ref: stripeModalRef
}, stripeModalProps)));
});
StripeButton.displayName = 'StripeButton';
var _default = exports.default = /*#__PURE__*/(0, _react.memo)(StripeButton);