@superlogic/spree-pay 0.4.6 → 0.4.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Iframe3ds
3
- } from "./chunk-7I6EBCSI.js";
3
+ } from "./chunk-EXKCBGNL.js";
4
4
  import {
5
5
  InfoBanner,
6
6
  Legal,
@@ -12,7 +12,7 @@ import {
12
12
  useSpreePayRegister,
13
13
  useSpreePaymentMethod,
14
14
  useStaticConfig
15
- } from "./chunk-AGTOSFMT.js";
15
+ } from "./chunk-SKM7ZAUY.js";
16
16
 
17
17
  // src/components/CryptoComTab/CryptoComTab.tsx
18
18
  import { useCallback, useEffect } from "react";
@@ -2,7 +2,7 @@ import {
2
2
  CheckoutButton,
3
3
  PointsSwitch,
4
4
  cn as cn2
5
- } from "./chunk-FKAVWVFL.js";
5
+ } from "./chunk-W43VOUYP.js";
6
6
  import {
7
7
  Dialog,
8
8
  DialogContent,
@@ -16,7 +16,7 @@ import {
16
16
  useSpreePayConfig,
17
17
  useSpreePayRegister,
18
18
  useSpreePaymentMethod
19
- } from "./chunk-AGTOSFMT.js";
19
+ } from "./chunk-SKM7ZAUY.js";
20
20
 
21
21
  // src/components/CryptoTab/Crypto/CryptoWrapper.tsx
22
22
  import { useMemo as useMemo2 } from "react";
@@ -2,7 +2,7 @@ import {
2
2
  Dialog,
3
3
  DialogContent,
4
4
  DialogTitle
5
- } from "./chunk-AGTOSFMT.js";
5
+ } from "./chunk-SKM7ZAUY.js";
6
6
 
7
7
  // src/modals/Iframe3ds.tsx
8
8
  import { useEffect } from "react";
@@ -10,7 +10,7 @@ var PaymentType = /* @__PURE__ */ ((PaymentType2) => {
10
10
  })(PaymentType || {});
11
11
 
12
12
  // package.json
13
- var version = "0.4.6";
13
+ var version = "0.4.8";
14
14
 
15
15
  // src/utils/logger.ts
16
16
  var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
@@ -6,7 +6,7 @@ import {
6
6
  useSpreePayEnv,
7
7
  useSpreePaymentMethod,
8
8
  useStaticConfig
9
- } from "./chunk-AGTOSFMT.js";
9
+ } from "./chunk-SKM7ZAUY.js";
10
10
 
11
11
  // src/components/common/PointsSwitch.tsx
12
12
  import { useId } from "react";
package/build/index.cjs CHANGED
@@ -69,7 +69,7 @@ var init_payments = __esm({
69
69
  var version;
70
70
  var init_package = __esm({
71
71
  "package.json"() {
72
- version = "0.4.6";
72
+ version = "0.4.8";
73
73
  }
74
74
  });
75
75
 
@@ -3137,6 +3137,7 @@ var useCards = () => {
3137
3137
  init_useSlapiBalance();
3138
3138
  init_useSpreePayConfig();
3139
3139
  init_errors();
3140
+ init_payments();
3140
3141
  init_split();
3141
3142
  init_CheckoutButton();
3142
3143
 
@@ -3463,9 +3464,8 @@ var StripeWrapper = ({ onCancel, saveNewCard, publicKey }) => {
3463
3464
  const stripePromise = (0, import_react9.useMemo)(() => (0, import_stripe_js.loadStripe)(publicKey), [publicKey]);
3464
3465
  return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_stripe_js2.Elements, { stripe: stripePromise, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(CreditCardForm, { cancel: onCancel, saveCard: saveNewCard }) });
3465
3466
  };
3466
- var CreditCard = () => {
3467
+ var CreditCard = ({ newCards, setNewCards }) => {
3467
3468
  const [showForm, setShowForm] = (0, import_react9.useState)(false);
3468
- const [newCards, setNewCards] = (0, import_react9.useState)([]);
3469
3469
  const { selectedPaymentMethod, setSelectedPaymentMethod } = useSpreePaymentMethod();
3470
3470
  const { spreePayConfig } = useSpreePayConfig();
3471
3471
  const setCard = (card) => {
@@ -3481,9 +3481,12 @@ var CreditCard = () => {
3481
3481
  setCard(newCard);
3482
3482
  setShowForm(false);
3483
3483
  };
3484
- const removeNewCard = (0, import_react9.useCallback)((card) => {
3485
- setNewCards((prev) => prev.filter((c) => c.id !== card.id));
3486
- }, []);
3484
+ const removeNewCard = (0, import_react9.useCallback)(
3485
+ (card) => {
3486
+ setNewCards((prev) => prev.filter((c) => c.id !== card.id));
3487
+ },
3488
+ [setNewCards]
3489
+ );
3487
3490
  const handleCancel = () => {
3488
3491
  setShowForm(false);
3489
3492
  };
@@ -4734,8 +4737,9 @@ var CreditCardTab = ({ isLoggedIn }) => {
4734
4737
  const { appProps } = useStaticConfig();
4735
4738
  const { spreePayConfig } = useSpreePayConfig();
4736
4739
  const { register } = useSpreePayRegister();
4737
- const { mutateCards } = useCards();
4740
+ const { cards, mutateCards } = useCards();
4738
4741
  const { mutateBalance } = useSlapiBalance();
4742
+ const [newCards, setNewCards] = (0, import_react15.useState)([]);
4739
4743
  const isWeb3Enabled = Boolean(useWeb3Points);
4740
4744
  const { cardPayment } = useCardPayment();
4741
4745
  const { splitPayment } = useSplitCardPayments(isWeb3Enabled ? "web3" : "web2");
@@ -4760,14 +4764,24 @@ var CreditCardTab = ({ isLoggedIn }) => {
4760
4764
  } catch (_) {
4761
4765
  return Promise.reject(new PaymentError("Payment failed", "FAILED" /* FAILED */));
4762
4766
  } finally {
4763
- if ("token" in (selectedPaymentMethod.method || {})) {
4764
- setSelectedPaymentMethod({ ...selectedPaymentMethod, type: "CREDIT_CARD" /* CREDIT_CARD */, method: null });
4765
- }
4766
- mutateCards();
4767
4767
  mutateBalance();
4768
+ if (selectedPaymentMethod.type === "CREDIT_CARD" /* CREDIT_CARD */ && selectedPaymentMethod.method && isNewCard(selectedPaymentMethod.method)) {
4769
+ const knownIds = new Set(cards.map((c) => c.id));
4770
+ const updated = await mutateCards();
4771
+ const newSavedCard = (updated?.data ?? []).find((c) => c.active && !knownIds.has(c.id));
4772
+ setSelectedPaymentMethod({
4773
+ ...selectedPaymentMethod,
4774
+ type: "CREDIT_CARD" /* CREDIT_CARD */,
4775
+ method: newSavedCard ?? null
4776
+ });
4777
+ setNewCards([]);
4778
+ } else {
4779
+ mutateCards();
4780
+ }
4768
4781
  }
4769
4782
  },
4770
4783
  [
4784
+ cards,
4771
4785
  mutateCards,
4772
4786
  selectedPaymentMethod,
4773
4787
  pointsPayment,
@@ -4783,7 +4797,7 @@ var CreditCardTab = ({ isLoggedIn }) => {
4783
4797
  register(handlePay);
4784
4798
  }, [register, handlePay]);
4785
4799
  return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { children: [
4786
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "border-b border-b-(--border-component-specific-card) px-5 py-5 md:px-7 md:py-6", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CreditCard, {}) }),
4800
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "border-b border-b-(--border-component-specific-card) px-5 py-5 md:px-7 md:py-6", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CreditCard, { newCards, setNewCards }) }),
4787
4801
  !spreePayConfig?.creditCard.hidePoints && /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "flex flex-col gap-4 border-b border-b-(--border-component-specific-card) px-5 pt-5 pb-5 md:px-7 md:pt-6 md:pb-7", children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Points, {}) }),
4788
4802
  /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(CheckoutButton, { isLoggedIn })
4789
4803
  ] });
package/build/index.js CHANGED
@@ -8,10 +8,10 @@ import {
8
8
  getSplitAmount,
9
9
  getTransactionFee,
10
10
  useSlapiBalance
11
- } from "./chunk-FKAVWVFL.js";
11
+ } from "./chunk-W43VOUYP.js";
12
12
  import {
13
13
  Iframe3ds
14
- } from "./chunk-7I6EBCSI.js";
14
+ } from "./chunk-EXKCBGNL.js";
15
15
  import {
16
16
  InfoBanner,
17
17
  LogLevel,
@@ -32,10 +32,10 @@ import {
32
32
  useSpreePayRegister,
33
33
  useSpreePaymentMethod,
34
34
  useStaticConfig
35
- } from "./chunk-AGTOSFMT.js";
35
+ } from "./chunk-SKM7ZAUY.js";
36
36
 
37
37
  // src/SpreePay.tsx
38
- import { useCallback as useCallback8, useEffect as useEffect8, useMemo as useMemo9, useState as useState11 } from "react";
38
+ import { useCallback as useCallback8, useEffect as useEffect8, useMemo as useMemo9, useState as useState12 } from "react";
39
39
  import NiceModal4 from "@ebay/nice-modal-react";
40
40
  import { SWRConfig } from "swr";
41
41
 
@@ -43,7 +43,7 @@ import { SWRConfig } from "swr";
43
43
  import { Suspense, lazy } from "react";
44
44
 
45
45
  // src/components/CreditCardTab/CreditCardTab.tsx
46
- import { useCallback as useCallback6, useEffect as useEffect6 } from "react";
46
+ import { useCallback as useCallback6, useEffect as useEffect6, useState as useState10 } from "react";
47
47
 
48
48
  // src/hooks/payments/useCardPayment.ts
49
49
  import NiceModal from "@ebay/nice-modal-react";
@@ -868,9 +868,8 @@ var StripeWrapper = ({ onCancel, saveNewCard, publicKey }) => {
868
868
  const stripePromise = useMemo3(() => loadStripe(publicKey), [publicKey]);
869
869
  return /* @__PURE__ */ jsx5(Elements, { stripe: stripePromise, children: /* @__PURE__ */ jsx5(CreditCardForm, { cancel: onCancel, saveCard: saveNewCard }) });
870
870
  };
871
- var CreditCard = () => {
871
+ var CreditCard = ({ newCards, setNewCards }) => {
872
872
  const [showForm, setShowForm] = useState3(false);
873
- const [newCards, setNewCards] = useState3([]);
874
873
  const { selectedPaymentMethod, setSelectedPaymentMethod } = useSpreePaymentMethod();
875
874
  const { spreePayConfig } = useSpreePayConfig();
876
875
  const setCard = (card) => {
@@ -886,9 +885,12 @@ var CreditCard = () => {
886
885
  setCard(newCard);
887
886
  setShowForm(false);
888
887
  };
889
- const removeNewCard = useCallback2((card) => {
890
- setNewCards((prev) => prev.filter((c) => c.id !== card.id));
891
- }, []);
888
+ const removeNewCard = useCallback2(
889
+ (card) => {
890
+ setNewCards((prev) => prev.filter((c) => c.id !== card.id));
891
+ },
892
+ [setNewCards]
893
+ );
892
894
  const handleCancel = () => {
893
895
  setShowForm(false);
894
896
  };
@@ -2119,8 +2121,9 @@ var CreditCardTab = ({ isLoggedIn }) => {
2119
2121
  const { appProps } = useStaticConfig();
2120
2122
  const { spreePayConfig } = useSpreePayConfig();
2121
2123
  const { register } = useSpreePayRegister();
2122
- const { mutateCards } = useCards();
2124
+ const { cards, mutateCards } = useCards();
2123
2125
  const { mutateBalance } = useSlapiBalance();
2126
+ const [newCards, setNewCards] = useState10([]);
2124
2127
  const isWeb3Enabled = Boolean(useWeb3Points);
2125
2128
  const { cardPayment } = useCardPayment();
2126
2129
  const { splitPayment } = useSplitCardPayments(isWeb3Enabled ? "web3" : "web2");
@@ -2145,14 +2148,24 @@ var CreditCardTab = ({ isLoggedIn }) => {
2145
2148
  } catch (_) {
2146
2149
  return Promise.reject(new PaymentError("Payment failed", "FAILED" /* FAILED */));
2147
2150
  } finally {
2148
- if ("token" in (selectedPaymentMethod.method || {})) {
2149
- setSelectedPaymentMethod({ ...selectedPaymentMethod, type: "CREDIT_CARD" /* CREDIT_CARD */, method: null });
2150
- }
2151
- mutateCards();
2152
2151
  mutateBalance();
2152
+ if (selectedPaymentMethod.type === "CREDIT_CARD" /* CREDIT_CARD */ && selectedPaymentMethod.method && isNewCard(selectedPaymentMethod.method)) {
2153
+ const knownIds = new Set(cards.map((c) => c.id));
2154
+ const updated = await mutateCards();
2155
+ const newSavedCard = (updated?.data ?? []).find((c) => c.active && !knownIds.has(c.id));
2156
+ setSelectedPaymentMethod({
2157
+ ...selectedPaymentMethod,
2158
+ type: "CREDIT_CARD" /* CREDIT_CARD */,
2159
+ method: newSavedCard ?? null
2160
+ });
2161
+ setNewCards([]);
2162
+ } else {
2163
+ mutateCards();
2164
+ }
2153
2165
  }
2154
2166
  },
2155
2167
  [
2168
+ cards,
2156
2169
  mutateCards,
2157
2170
  selectedPaymentMethod,
2158
2171
  pointsPayment,
@@ -2168,7 +2181,7 @@ var CreditCardTab = ({ isLoggedIn }) => {
2168
2181
  register(handlePay);
2169
2182
  }, [register, handlePay]);
2170
2183
  return /* @__PURE__ */ jsxs9("div", { children: [
2171
- /* @__PURE__ */ jsx16("div", { className: "border-b border-b-(--border-component-specific-card) px-5 py-5 md:px-7 md:py-6", children: /* @__PURE__ */ jsx16(CreditCard, {}) }),
2184
+ /* @__PURE__ */ jsx16("div", { className: "border-b border-b-(--border-component-specific-card) px-5 py-5 md:px-7 md:py-6", children: /* @__PURE__ */ jsx16(CreditCard, { newCards, setNewCards }) }),
2172
2185
  !spreePayConfig?.creditCard.hidePoints && /* @__PURE__ */ jsx16("div", { className: "flex flex-col gap-4 border-b border-b-(--border-component-specific-card) px-5 pt-5 pb-5 md:px-7 md:pt-6 md:pb-7", children: /* @__PURE__ */ jsx16(Points, {}) }),
2173
2186
  /* @__PURE__ */ jsx16(CheckoutButton, { isLoggedIn })
2174
2187
  ] });
@@ -2246,9 +2259,9 @@ var TabButtons = (props) => {
2246
2259
 
2247
2260
  // src/SpreePayContent.tsx
2248
2261
  import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
2249
- var CryptoTab = lazy(() => import("./CryptoTab-7EG23TQW.js").then((module) => ({ default: module.CryptoTab })));
2262
+ var CryptoTab = lazy(() => import("./CryptoTab-DQCQF6BG.js").then((module) => ({ default: module.CryptoTab })));
2250
2263
  var CryptoComTab = lazy(
2251
- () => import("./CryptoComTab-5662XFNI.js").then((module) => ({ default: module.CryptoComTab }))
2264
+ () => import("./CryptoComTab-3SEGMLPB.js").then((module) => ({ default: module.CryptoComTab }))
2252
2265
  );
2253
2266
  var TabLoadingFallback = () => /* @__PURE__ */ jsx18("div", { className: "flex items-center justify-center px-5 py-8 md:px-7", children: /* @__PURE__ */ jsxs11("div", { className: "flex flex-col items-center gap-3", children: [
2254
2267
  /* @__PURE__ */ jsx18("div", { className: "h-8 w-8 animate-spin rounded-full border-4 border-(--border-component-specific-card) border-t-(--brand-primary)" }),
@@ -2318,7 +2331,7 @@ var ErrorBoundary = class extends Component {
2318
2331
  };
2319
2332
 
2320
2333
  // src/hooks/useKeycloakSSO.ts
2321
- import { useCallback as useCallback7, useEffect as useEffect7, useRef as useRef7, useState as useState10 } from "react";
2334
+ import { useCallback as useCallback7, useEffect as useEffect7, useRef as useRef7, useState as useState11 } from "react";
2322
2335
  import Keycloak from "keycloak-js";
2323
2336
  var refreshAheadSeconds = 60;
2324
2337
  var keycloakLogger = logger.child("keycloak");
@@ -2329,9 +2342,9 @@ function useKeycloakSSO(config) {
2329
2342
  const refreshTimerRef = useRef7(null);
2330
2343
  const scheduleRefreshRef = useRef7(() => {
2331
2344
  });
2332
- const [error, setError] = useState10(null);
2333
- const [isChecking, setIsChecking] = useState10(enabled);
2334
- const [accessToken, setAccessToken] = useState10(null);
2345
+ const [error, setError] = useState11(null);
2346
+ const [isChecking, setIsChecking] = useState11(enabled);
2347
+ const [accessToken, setAccessToken] = useState11(null);
2335
2348
  const scheduleRefresh = useCallback7(() => {
2336
2349
  const kc = kcRef.current;
2337
2350
  if (!kc || !kc.tokenParsed || !kc.tokenParsed.exp) {
@@ -2406,7 +2419,7 @@ var isTokenExpired = (token) => {
2406
2419
  // src/SpreePay.tsx
2407
2420
  import { jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
2408
2421
  var SpreePayInner = () => {
2409
- const [portalEl, setPortalEl] = useState11(null);
2422
+ const [portalEl, setPortalEl] = useState12(null);
2410
2423
  const rootRef = useCallback8((node) => {
2411
2424
  if (!node) return;
2412
2425
  const el = node.querySelector(":scope > .sl-spreepay__portal");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@superlogic/spree-pay",
3
- "version": "0.4.6",
3
+ "version": "0.4.8",
4
4
  "description": "Spree-pay React component and utilities",
5
5
  "private": false,
6
6
  "type": "module",
@@ -41,7 +41,7 @@
41
41
  },
42
42
  "dependencies": {
43
43
  "@ebay/nice-modal-react": "^1.2.13",
44
- "@mocanetwork/airkit": "^1.7.0",
44
+ "@mocanetwork/airkit": "1.7.0",
45
45
  "@radix-ui/react-checkbox": "^1.1.3",
46
46
  "@radix-ui/react-dialog": "^1.1.15",
47
47
  "@radix-ui/react-label": "^2.1.8",