@easypayment/medusa-paypal-ui 1.0.33 β 1.0.35
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.
- package/dist/index.cjs +25 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +25 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/src/components/PayPalAdvancedCard.tsx +298 -287
- package/src/components/PayPalSmartButtons.tsx +138 -131
package/dist/index.cjs
CHANGED
|
@@ -196,7 +196,10 @@ function PayPalSmartButtons(props) {
|
|
|
196
196
|
}
|
|
197
197
|
}
|
|
198
198
|
),
|
|
199
|
-
/* @__PURE__ */ jsxRuntime.
|
|
199
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "center" }, children: [
|
|
200
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 13, color: "#374151", fontWeight: 500 }, children: "Processing your payment\u2026" }),
|
|
201
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
|
|
202
|
+
] })
|
|
200
203
|
]
|
|
201
204
|
}
|
|
202
205
|
),
|
|
@@ -212,12 +215,12 @@ function PayPalSmartButtons(props) {
|
|
|
212
215
|
},
|
|
213
216
|
createOrder: async () => {
|
|
214
217
|
setError(null);
|
|
215
|
-
setProcessing(true);
|
|
216
218
|
const r = await api.createOrder(cartId);
|
|
217
219
|
return r.id;
|
|
218
220
|
},
|
|
219
221
|
onApprove: async (data) => {
|
|
220
222
|
try {
|
|
223
|
+
setProcessing(true);
|
|
221
224
|
setError(null);
|
|
222
225
|
const orderId = String(data?.orderID || "");
|
|
223
226
|
const result = await api.captureOrder(cartId, orderId);
|
|
@@ -226,10 +229,12 @@ function PayPalSmartButtons(props) {
|
|
|
226
229
|
const msg = e instanceof Error ? e.message : "Payment capture failed";
|
|
227
230
|
setError(msg);
|
|
228
231
|
onError?.(msg);
|
|
229
|
-
} finally {
|
|
230
232
|
setProcessing(false);
|
|
231
233
|
}
|
|
232
234
|
},
|
|
235
|
+
onCancel: () => {
|
|
236
|
+
setProcessing(false);
|
|
237
|
+
},
|
|
233
238
|
onError: (err) => {
|
|
234
239
|
setProcessing(false);
|
|
235
240
|
const msg = err instanceof Error ? err.message : err?.message || "PayPal error";
|
|
@@ -299,7 +304,8 @@ var labelStyle = {
|
|
|
299
304
|
};
|
|
300
305
|
function SubmitButton({
|
|
301
306
|
disabled,
|
|
302
|
-
label
|
|
307
|
+
label,
|
|
308
|
+
onSubmit
|
|
303
309
|
}) {
|
|
304
310
|
const { cardFieldsForm } = reactPaypalJs.usePayPalCardFields();
|
|
305
311
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -307,7 +313,10 @@ function SubmitButton({
|
|
|
307
313
|
{
|
|
308
314
|
type: "button",
|
|
309
315
|
disabled: disabled || !cardFieldsForm,
|
|
310
|
-
onClick: () =>
|
|
316
|
+
onClick: () => {
|
|
317
|
+
onSubmit();
|
|
318
|
+
cardFieldsForm?.submit();
|
|
319
|
+
},
|
|
311
320
|
style: {
|
|
312
321
|
width: "100%",
|
|
313
322
|
height: 52,
|
|
@@ -387,8 +396,8 @@ function PayPalAdvancedCard(props) {
|
|
|
387
396
|
}
|
|
388
397
|
),
|
|
389
398
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { textAlign: "center" }, children: [
|
|
390
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your
|
|
391
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close this page" })
|
|
399
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your payment\u2026" }),
|
|
400
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
|
|
392
401
|
] })
|
|
393
402
|
]
|
|
394
403
|
}
|
|
@@ -404,7 +413,6 @@ function PayPalAdvancedCard(props) {
|
|
|
404
413
|
},
|
|
405
414
|
onApprove: async (data) => {
|
|
406
415
|
try {
|
|
407
|
-
setSubmitting(true);
|
|
408
416
|
setError(null);
|
|
409
417
|
const orderId = String(data?.orderID || "");
|
|
410
418
|
const result = await api.captureOrder(cartId, orderId);
|
|
@@ -413,14 +421,17 @@ function PayPalAdvancedCard(props) {
|
|
|
413
421
|
const msg = e instanceof Error ? e.message : "Card payment failed";
|
|
414
422
|
setError(msg);
|
|
415
423
|
onError?.(msg);
|
|
416
|
-
} finally {
|
|
417
424
|
setSubmitting(false);
|
|
418
425
|
}
|
|
419
426
|
},
|
|
427
|
+
onCancel: () => {
|
|
428
|
+
setSubmitting(false);
|
|
429
|
+
},
|
|
420
430
|
onError: (e) => {
|
|
421
431
|
const msg = e instanceof Error ? e.message : e?.message || "CardFields error";
|
|
422
432
|
setError(msg);
|
|
423
433
|
onError?.(msg);
|
|
434
|
+
setSubmitting(false);
|
|
424
435
|
},
|
|
425
436
|
children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
426
437
|
"div",
|
|
@@ -479,7 +490,11 @@ function PayPalAdvancedCard(props) {
|
|
|
479
490
|
SubmitButton,
|
|
480
491
|
{
|
|
481
492
|
disabled: submitting,
|
|
482
|
-
label: submitting ? "Processing..." : "Pay by Card"
|
|
493
|
+
label: submitting ? "Processing..." : "Pay by Card",
|
|
494
|
+
onSubmit: () => {
|
|
495
|
+
setError(null);
|
|
496
|
+
setSubmitting(true);
|
|
497
|
+
}
|
|
483
498
|
}
|
|
484
499
|
) }),
|
|
485
500
|
error ? /* @__PURE__ */ jsxRuntime.jsx(
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/client/http.ts","../src/client/paypal.ts","../src/hooks/usePayPalConfig.ts","../src/components/PayPalProvider.tsx","../src/components/PayPalCurrencyNotice.tsx","../src/components/PayPalSmartButtons.tsx","../src/components/PayPalAdvancedCard.tsx","../src/adapters/MedusaNextPayPalAdapter.tsx"],"names":["useMemo","useState","useEffect","jsx","PayPalScriptProvider","jsxs","PayPalButtons","SPIN_STYLE","usePayPalCardFields","PayPalCardFieldsProvider","PayPalNumberField","PayPalExpiryField","PayPalCVVField","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["export type HttpOptions = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n}\r\n\r\nfunction toHeaderRecord(headers?: RequestInit[\"headers\"]): Record<string, string> {\r\n if (!headers) {\r\n return {}\r\n }\r\n\r\n if (headers instanceof Headers) {\r\n return Object.fromEntries(headers.entries())\r\n }\r\n\r\n if (Array.isArray(headers)) {\r\n return Object.fromEntries(headers)\r\n }\r\n\r\n return { ...headers }\r\n}\r\n\r\nexport function createHttpClient(opts: HttpOptions) {\r\n const base = opts.baseUrl.replace(/\\/+$/, \"\")\r\n\r\n async function request<T>(path: string, init?: RequestInit): Promise<T> {\r\n const url = `${base}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`\r\n const headers: Record<string, string> = {\r\n Accept: \"application/json\",\r\n ...toHeaderRecord(init?.headers),\r\n }\r\n\r\n if (opts.publishableApiKey) {\r\n headers[\"x-publishable-api-key\"] = opts.publishableApiKey\r\n }\r\n\r\n const res = await fetch(url, { ...init, headers, credentials: \"include\" })\r\n const text = await res.text().catch(() => \"\")\r\n\r\n if (!res.ok) {\r\n if (res.status === 401) {\r\n throw new Error(\r\n \"[PayPal] Unauthorized (401) β check that your publishable API key is correct and set in NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY\"\r\n )\r\n }\r\n if (res.status === 403) {\r\n throw new Error(\r\n \"[PayPal] Forbidden (403) β this request is not allowed. Check your CORS and API key settings.\"\r\n )\r\n }\r\n throw new Error(text || `Request failed (${res.status})`)\r\n }\r\n if (!text) return {} as T\r\n\r\n const contentType = res.headers.get(\"content-type\") || \"\"\r\n if (!contentType.includes(\"application/json\")) {\r\n console.warn(\"[PayPal] Unexpected non-JSON response:\", contentType, text.slice(0, 200))\r\n return {} as T\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T\r\n } catch {\r\n console.warn(\"[PayPal] Failed to parse JSON response:\", text.slice(0, 200))\r\n return {} as T\r\n }\r\n }\r\n\r\n return { request }\r\n}\r\n","import type { PayPalConfig, PayPalSettingsResponse } from \"./types\"\r\nimport { createHttpClient, type HttpOptions } from \"./http\"\r\n\r\nexport function createPayPalStoreApi(opts: HttpOptions) {\r\n const http = createHttpClient(opts)\r\n\r\n return {\r\n getConfig(cartId?: string, signal?: AbortSignal) {\r\n const q = cartId ? `?cart_id=${encodeURIComponent(cartId)}` : \"\"\r\n return http.request<PayPalConfig>(`/store/paypal/config${q}`, { signal })\r\n },\r\n\r\n getSettings() {\r\n return http.request<PayPalSettingsResponse>(`/store/paypal/settings`)\r\n },\r\n\r\n createOrder(cartId: string, isCardPayment = false) {\r\n return http.request<{ id: string }>(`/store/paypal/create-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, is_card_payment: isCardPayment }),\r\n })\r\n },\r\n\r\n captureOrder(cartId: string, orderId: string) {\r\n return http.request<Record<string, unknown>>(`/store/paypal/capture-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, order_id: orderId }),\r\n })\r\n },\r\n }\r\n}\r\n","import { useEffect, useMemo, useState } from \"react\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\ntype Args = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId?: string\r\n enabled?: boolean\r\n}\r\n\r\nexport function usePayPalConfig({ baseUrl, publishableApiKey, cartId, enabled = true }: Args) {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [config, setConfig] = useState<PayPalConfig | null>(null)\r\n const [loading, setLoading] = useState(false)\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setLoading(false)\r\n setError(null)\r\n setConfig(null)\r\n return\r\n }\r\n\r\n let mounted = true\r\n const controller = new AbortController()\r\n ;(async () => {\r\n try {\r\n setLoading(true)\r\n setError(null)\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (mounted) setConfig(cfg)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (mounted) setError(e?.message || \"Failed to load PayPal config\")\r\n } finally {\r\n if (mounted) setLoading(false)\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, cartId, enabled])\r\n\r\n return { config, loading, error }\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useMemo } from \"react\"\r\nimport { PayPalScriptProvider } from \"@paypal/react-paypal-js\"\r\nimport type { ReactPayPalScriptOptions } from \"@paypal/react-paypal-js\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nexport function PayPalProvider(props: {\r\n config: PayPalConfig\r\n intent?: \"capture\" | \"authorize\"\r\n disableFunding?: string\r\n children: React.ReactNode\r\n}) {\r\n const { config, intent = \"capture\", disableFunding, children } = props\r\n\r\n const options = useMemo((): ReactPayPalScriptOptions => {\r\n return {\r\n clientId: config.client_id,\r\n \"client-id\": config.client_id,\r\n currency: config.currency,\r\n intent,\r\n components: config.client_token ? \"buttons,card-fields\" : \"buttons\",\r\n \"data-client-token\": config.client_token || undefined,\r\n \"disable-funding\": disableFunding,\r\n }\r\n }, [config, intent, disableFunding])\r\n\r\n return <PayPalScriptProvider options={options}>{children}</PayPalScriptProvider>\r\n}\r\n","\"use client\"\n\nimport React from \"react\"\nimport type { PayPalConfig } from \"../client/types\"\n\nexport function PayPalCurrencyNotice({ config }: { config: PayPalConfig }) {\n if (config.currency_supported) return null\n\n return (\n <div style={{ padding: 12, border: \"1px solid #ddd\", borderRadius: 10 }}>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>PayPal currency issue</div>\n <ul style={{ margin: 0, paddingLeft: 18 }}>\n {(config.currency_errors || []).map((e, i) => (\n <li key={i}>{e}</li>\n ))}\n </ul>\n </div>\n )\n}\n","\"use client\"\nimport React, { useMemo, useState } from \"react\"\nimport { PayPalButtons } from \"@paypal/react-paypal-js\"\nimport { createPayPalStoreApi } from \"../client/paypal\"\nimport type { PayPalConfig } from \"../client/types\"\n\n// βββ Spinner keyframes ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\nconst BUTTON_WIDTH_MAP: Record<string, string> = {\n small: \"300px\",\n medium: \"400px\",\n large: \"500px\",\n responsive: \"100%\",\n}\n\nexport function PayPalSmartButtons(props: {\n baseUrl: string\n publishableApiKey?: string\n cartId: string\n config: PayPalConfig\n onPaid?: (result: Record<string, unknown>) => void\n onError?: (message: string) => void\n}) {\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\n const api = useMemo(\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\n [baseUrl, publishableApiKey]\n )\n\n const [error, setError] = useState<string | null>(null)\n // ββ ADDED: track when PayPal payment is in-flight βββββββββββββββββββββββββ\n const [processing, setProcessing] = useState(false)\n\n if (!config.currency_supported) return null\n\n const containerWidth = BUTTON_WIDTH_MAP[config.button_width ?? \"responsive\"] ?? \"100%\"\n\n return (\n // ββ CHANGED: added position: relative so the overlay can sit on top ββββββ\n <div style={{ width: containerWidth, position: \"relative\" }}>\n <style>{SPIN_STYLE}</style>\n\n {/* ββ ADDED: processing overlay ββββββββββββββββββββββββββββββββββββββ */}\n {processing && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 10,\n background: \"rgba(255,255,255,0.90)\",\n borderRadius: 8,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 10,\n minHeight: 60,\n }}\n >\n <div\n style={{\n width: 28,\n height: 28,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#0070ba\",\n animation: \"_pp_spin .7s linear infinite\",\n }}\n />\n <span style={{ fontSize: 13, color: \"#374151\", fontWeight: 500 }}>\n Processing paymentβ¦\n </span>\n </div>\n )}\n\n <PayPalButtons\n style={{\n layout: \"vertical\",\n color: config.button_color,\n shape: config.button_shape,\n label: config.button_label,\n height: config.button_height,\n }}\n createOrder={async () => {\n setError(null)\n setProcessing(true) // ββ ADDED: show spinner immediately βββββββββββ\n const r = await api.createOrder(cartId)\n return r.id\n }}\n onApprove={async (data: { orderID?: string }) => {\n try {\n setError(null)\n const orderId = String(data?.orderID || \"\")\n const result = await api.captureOrder(cartId, orderId)\n onPaid?.(result)\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : \"Payment capture failed\"\n setError(msg)\n onError?.(msg)\n } finally {\n setProcessing(false) // ββ ADDED: always hide spinner when done ββββ\n }\n }}\n onError={(err: Error | { message?: string }) => {\n setProcessing(false) // ββ ADDED: hide spinner on PayPal error ββββββββ\n const msg = err instanceof Error ? err.message : err?.message || \"PayPal error\"\n setError(msg)\n onError?.(msg)\n }}\n />\n\n {/* ββ CHANGED: styled error box instead of plain crimson text ββββββββ */}\n {error ? (\n <div\n style={{\n marginTop: 10,\n padding: \"8px 12px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 6,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {error}\n </div>\n ) : null}\n </div>\n )\n}\n","\"use client\"\n\nimport React, { useMemo, useState } from \"react\"\nimport {\n PayPalCardFieldsProvider,\n PayPalNumberField,\n PayPalExpiryField,\n PayPalCVVField,\n usePayPalCardFields,\n} from \"@paypal/react-paypal-js\"\n\nimport { createPayPalStoreApi } from \"../client/paypal\"\nimport type { PayPalConfig } from \"../client/types\"\n\n// βββ Spinner keyframes ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\nconst cardStyle = {\n input: {\n \"font-size\": \"16px\",\n \"font-family\": \"Helvetica, Arial, sans-serif\",\n \"font-weight\": \"400\",\n color: \"#2f2f2f\",\n padding: \"0 14px\",\n height: \"44px\",\n \"border-radius\": \"4px\",\n border: \"1px solid #c7c7c7\",\n background: \"#ffffff\",\n \"box-shadow\": \"none\",\n },\n\n \"::placeholder\": {\n color: \"#a0aec0\",\n },\n\n \".invalid\": {\n color: \"#b42318\",\n border: \"1px solid #d92d20\",\n \"box-shadow\": \"none\",\n },\n\n \".valid\": {\n color: \"#2f2f2f\",\n border: \"1px solid #c7c7c7\",\n \"box-shadow\": \"none\",\n },\n\n \"input:focus\": {\n outline: \"none\",\n border: \"1px solid #c7c7c7\",\n \"box-shadow\": \"none\",\n },\n}\n\nconst labelStyle: React.CSSProperties = {\n display: \"block\",\n fontSize: 15,\n lineHeight: \"22px\",\n fontWeight: 700,\n color: \"#4a4a4a\",\n marginBottom: 10,\n}\n\nfunction SubmitButton({\n disabled,\n label,\n}: {\n disabled: boolean\n label: string\n}) {\n const { cardFieldsForm } = usePayPalCardFields()\n\n return (\n <button\n type=\"button\"\n disabled={disabled || !cardFieldsForm}\n onClick={() => cardFieldsForm?.submit()}\n style={{\n width: \"100%\",\n height: 52,\n padding: \"0 16px\",\n borderRadius: 4,\n border: \"1px solid #c7c7c7\",\n background: \"#f5f5f5\",\n color: \"#2f363d\",\n fontSize: 16,\n fontWeight: 700,\n fontFamily: \"Helvetica, Arial, sans-serif\",\n cursor: disabled ? \"not-allowed\" : \"pointer\",\n opacity: disabled ? 0.7 : 1,\n boxShadow: \"none\",\n }}\n >\n {label}\n </button>\n )\n}\n\nexport function PayPalAdvancedCard(props: {\n baseUrl: string\n publishableApiKey?: string\n cartId: string\n config: PayPalConfig\n onPaid?: (result: Record<string, unknown>) => void\n onError?: (message: string) => void\n}) {\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\n\n const api = useMemo(\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\n [baseUrl, publishableApiKey]\n )\n\n const [error, setError] = useState<string | null>(null)\n const [submitting, setSubmitting] = useState(false)\n\n if (!config.currency_supported) return null\n\n if (!config.client_token) {\n return (\n <div\n style={{\n padding: 12,\n border: \"1px solid #ddd\",\n borderRadius: 4,\n fontSize: 13,\n color: \"#3c434a\",\n }}\n >\n CardFields unavailable: missing client_token from backend.\n </div>\n )\n }\n\n const isSandbox = config.environment === \"sandbox\"\n\n return (\n // ββ ADDED: wrapper div with position relative so overlay works ββββββββββββ\n <div style={{ position: \"relative\" }}>\n <style>{SPIN_STYLE}</style>\n\n {/* ββ ADDED: full overlay shown while card payment processes βββββββββββ */}\n {submitting && (\n <div\n style={{\n position: \"absolute\",\n inset: 0,\n zIndex: 20,\n background: \"rgba(255,255,255,0.90)\",\n borderRadius: 8,\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 12,\n minHeight: 120,\n }}\n >\n <div\n style={{\n width: 32,\n height: 32,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#1877f2\",\n animation: \"_pp_spin .7s linear infinite\",\n }}\n />\n <div style={{ textAlign: \"center\" }}>\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#111827\" }}>\n Processing your cardβ¦\n </div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 4 }}>\n Please do not close this page\n </div>\n </div>\n </div>\n )}\n\n {/* ββ UNCHANGED: PayPalCardFieldsProvider and all its children are exactly as before ββ */}\n <PayPalCardFieldsProvider\n style={cardStyle}\n createOrder={async () => {\n setError(null)\n const r = await api.createOrder(cartId)\n return r.id\n }}\n onApprove={async (data: { orderID?: string }) => {\n try {\n setSubmitting(true)\n setError(null)\n\n const orderId = String(data?.orderID || \"\")\n const result = await api.captureOrder(cartId, orderId)\n\n onPaid?.(result)\n } catch (e: unknown) {\n const msg = e instanceof Error ? e.message : \"Card payment failed\"\n setError(msg)\n onError?.(msg)\n } finally {\n setSubmitting(false)\n }\n }}\n onError={(e: Error | { message?: string }) => {\n const msg =\n e instanceof Error ? e.message : e?.message || \"CardFields error\"\n\n setError(msg)\n onError?.(msg)\n }}\n >\n <div\n style={{\n display: \"grid\",\n gap: 18,\n width: \"100%\",\n maxWidth: 516,\n }}\n >\n {isSandbox && (\n <div\n style={{\n fontSize: 15,\n lineHeight: 1.5,\n color: \"#4a4a4a\",\n marginBottom: 2,\n }}\n >\n Sandbox Mode Enabled.\n <br />\n Use test card <strong>4111 1111 1111 1111</strong> with any future\n expiration date and any CVV.\n </div>\n )}\n\n <div style={{ width: \"100%\" }}>\n <label style={labelStyle}>Card number</label>\n <PayPalNumberField />\n </div>\n\n <div\n style={{\n display: \"grid\",\n gridTemplateColumns: \"minmax(0, 1fr) minmax(0, 1fr)\",\n columnGap: 18,\n alignItems: \"start\",\n }}\n >\n <div>\n <label style={labelStyle}>Expiration date</label>\n <PayPalExpiryField />\n </div>\n\n <div>\n <label style={labelStyle}>Security code</label>\n <PayPalCVVField />\n </div>\n </div>\n\n <div style={{ marginTop: 2 }}>\n <SubmitButton\n disabled={submitting}\n label={submitting ? \"Processing...\" : \"Pay by Card\"}\n />\n </div>\n\n {/* ββ CHANGED: styled error box instead of plain colored text ββββ */}\n {error ? (\n <div\n style={{\n padding: \"8px 12px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 6,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {error}\n </div>\n ) : null}\n </div>\n </PayPalCardFieldsProvider>\n </div>\n )\n}\n","\"use client\"\n\nimport React, { useCallback } from \"react\"\nimport { PayPalCurrencyNotice } from \"../components/PayPalCurrencyNotice\"\nimport { PayPalAdvancedCard } from \"../components/PayPalAdvancedCard\"\nimport { PayPalProvider } from \"../components/PayPalProvider\"\nimport { PayPalSmartButtons } from \"../components/PayPalSmartButtons\"\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\n\nconst DEFAULT_PAYPAL_PROVIDER_ID = \"pp_paypal_paypal\"\nconst DEFAULT_PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\"\n\n// βββ Spinner keyframes (injected once, scoped to this component) ββββββββββββββ\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\n// βββ Loading card β replaces the old plain \"Loading PayPalβ¦\" div βββββββββββββ\nfunction PayPalLoadingCard() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n padding: \"14px 16px\",\n background: \"#f9fafb\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 10,\n }}\n >\n <style>{SPIN_STYLE}</style>\n <div\n style={{\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#0070ba\",\n animation: \"_pp_spin .7s linear infinite\",\n flexShrink: 0,\n }}\n />\n <div>\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\n Connecting to PayPalβ¦\n </div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\n Setting up secure payment\n </div>\n </div>\n </div>\n )\n}\n\n// βββ Error card β replaces the old plain crimson div βββββββββββββββββββββββββ\nfunction PayPalErrorCard({ message }: { message: string }) {\n return (\n <div\n style={{\n padding: \"12px 16px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 10,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {message}\n </div>\n )\n}\n\nexport type MedusaNextPayPalAdapterProps = {\n cartId: string\n selectedProviderId: string | null | undefined\n baseUrl: string\n publishableApiKey?: string\n providerIds?: {\n paypal?: string\n paypalCard?: string\n }\n /**\n * Called after PayPal capture succeeds.\n * The storefront must call placeOrder(cartId) here β that is the only\n * correct way to clear the _medusa_cart_id cookie, because placeOrder\n * is a Next.js Server Action that calls removeCartId() server-side.\n * A client-side fetch cannot clear an httpOnly cookie set by the server.\n */\n onSuccess?: (cartId: string) => void\n onError?: (message: string) => void\n /** @deprecated use onSuccess */\n onPaid?: (result: unknown) => void\n}\n\nexport function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps) {\n const {\n cartId,\n selectedProviderId,\n baseUrl,\n publishableApiKey,\n providerIds,\n onSuccess,\n onError,\n onPaid,\n } = props\n\n const paypalProviderId = providerIds?.paypal || DEFAULT_PAYPAL_PROVIDER_ID\n const paypalCardProviderId = providerIds?.paypalCard || DEFAULT_PAYPAL_CARD_PROVIDER_ID\n\n const shouldRender =\n selectedProviderId === paypalProviderId ||\n selectedProviderId === paypalCardProviderId\n\n const { config, loading, error } = usePayPalConfig({\n baseUrl,\n publishableApiKey,\n cartId,\n enabled: shouldRender,\n })\n\n // After capture succeeds: call both the legacy onPaid and the new onSuccess.\n // Cart completion and cookie clearing must happen in the storefront via\n // placeOrder() β we intentionally do NOT call /store/carts/:id/complete here\n // because that endpoint does not clear the Next.js server-side cart cookie.\n const handlePaid = useCallback(\n (captureResult: unknown) => {\n onPaid?.(captureResult)\n onSuccess?.(cartId)\n },\n [cartId, onPaid, onSuccess]\n )\n\n if (!shouldRender) return null\n\n // ββ CHANGED: was <div>Loading PayPalβ¦</div> βββββββββββββββββββββββββββββββ\n if (loading) return <PayPalLoadingCard />\n\n // ββ CHANGED: was <div style={{ color: \"crimson\" }}>{error}</div> ββββββββββ\n if (error) return <PayPalErrorCard message={error} />\n\n if (!config) return null\n if (config.paypal_enabled === false) return null\n\n const isCardProvider = selectedProviderId === paypalCardProviderId\n if (selectedProviderId === paypalCardProviderId && config.card_enabled === false) return null\n\n const disableFunding = Array.isArray(config.disable_buttons)\n ? config.disable_buttons.join(\",\")\n : undefined\n\n return (\n <div style={{ display: \"grid\", gap: 12 }}>\n <PayPalCurrencyNotice config={config} />\n <PayPalProvider\n config={config}\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\n disableFunding={disableFunding}\n >\n {selectedProviderId === paypalCardProviderId ? (\n <PayPalAdvancedCard\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n ) : (\n <PayPalSmartButtons\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n )}\n </PayPalProvider>\n </div>\n )\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/client/http.ts","../src/client/paypal.ts","../src/hooks/usePayPalConfig.ts","../src/components/PayPalProvider.tsx","../src/components/PayPalCurrencyNotice.tsx","../src/components/PayPalSmartButtons.tsx","../src/components/PayPalAdvancedCard.tsx","../src/adapters/MedusaNextPayPalAdapter.tsx"],"names":["useMemo","useState","useEffect","jsx","PayPalScriptProvider","jsxs","PayPalButtons","SPIN_STYLE","usePayPalCardFields","PayPalCardFieldsProvider","PayPalNumberField","PayPalExpiryField","PayPalCVVField","useCallback"],"mappings":"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","file":"index.cjs","sourcesContent":["export type HttpOptions = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n}\r\n\r\nfunction toHeaderRecord(headers?: RequestInit[\"headers\"]): Record<string, string> {\r\n if (!headers) {\r\n return {}\r\n }\r\n\r\n if (headers instanceof Headers) {\r\n return Object.fromEntries(headers.entries())\r\n }\r\n\r\n if (Array.isArray(headers)) {\r\n return Object.fromEntries(headers)\r\n }\r\n\r\n return { ...headers }\r\n}\r\n\r\nexport function createHttpClient(opts: HttpOptions) {\r\n const base = opts.baseUrl.replace(/\\/+$/, \"\")\r\n\r\n async function request<T>(path: string, init?: RequestInit): Promise<T> {\r\n const url = `${base}${path.startsWith(\"/\") ? \"\" : \"/\"}${path}`\r\n const headers: Record<string, string> = {\r\n Accept: \"application/json\",\r\n ...toHeaderRecord(init?.headers),\r\n }\r\n\r\n if (opts.publishableApiKey) {\r\n headers[\"x-publishable-api-key\"] = opts.publishableApiKey\r\n }\r\n\r\n const res = await fetch(url, { ...init, headers, credentials: \"include\" })\r\n const text = await res.text().catch(() => \"\")\r\n\r\n if (!res.ok) {\r\n if (res.status === 401) {\r\n throw new Error(\r\n \"[PayPal] Unauthorized (401) β check that your publishable API key is correct and set in NEXT_PUBLIC_MEDUSA_PUBLISHABLE_KEY\"\r\n )\r\n }\r\n if (res.status === 403) {\r\n throw new Error(\r\n \"[PayPal] Forbidden (403) β this request is not allowed. Check your CORS and API key settings.\"\r\n )\r\n }\r\n throw new Error(text || `Request failed (${res.status})`)\r\n }\r\n if (!text) return {} as T\r\n\r\n const contentType = res.headers.get(\"content-type\") || \"\"\r\n if (!contentType.includes(\"application/json\")) {\r\n console.warn(\"[PayPal] Unexpected non-JSON response:\", contentType, text.slice(0, 200))\r\n return {} as T\r\n }\r\n\r\n try {\r\n return JSON.parse(text) as T\r\n } catch {\r\n console.warn(\"[PayPal] Failed to parse JSON response:\", text.slice(0, 200))\r\n return {} as T\r\n }\r\n }\r\n\r\n return { request }\r\n}\r\n","import type { PayPalConfig, PayPalSettingsResponse } from \"./types\"\r\nimport { createHttpClient, type HttpOptions } from \"./http\"\r\n\r\nexport function createPayPalStoreApi(opts: HttpOptions) {\r\n const http = createHttpClient(opts)\r\n\r\n return {\r\n getConfig(cartId?: string, signal?: AbortSignal) {\r\n const q = cartId ? `?cart_id=${encodeURIComponent(cartId)}` : \"\"\r\n return http.request<PayPalConfig>(`/store/paypal/config${q}`, { signal })\r\n },\r\n\r\n getSettings() {\r\n return http.request<PayPalSettingsResponse>(`/store/paypal/settings`)\r\n },\r\n\r\n createOrder(cartId: string, isCardPayment = false) {\r\n return http.request<{ id: string }>(`/store/paypal/create-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, is_card_payment: isCardPayment }),\r\n })\r\n },\r\n\r\n captureOrder(cartId: string, orderId: string) {\r\n return http.request<Record<string, unknown>>(`/store/paypal/capture-order`, {\r\n method: \"POST\",\r\n headers: { \"Content-Type\": \"application/json\" },\r\n body: JSON.stringify({ cart_id: cartId, order_id: orderId }),\r\n })\r\n },\r\n }\r\n}\r\n","import { useEffect, useMemo, useState } from \"react\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\ntype Args = {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId?: string\r\n enabled?: boolean\r\n}\r\n\r\nexport function usePayPalConfig({ baseUrl, publishableApiKey, cartId, enabled = true }: Args) {\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [config, setConfig] = useState<PayPalConfig | null>(null)\r\n const [loading, setLoading] = useState(false)\r\n const [error, setError] = useState<string | null>(null)\r\n\r\n useEffect(() => {\r\n if (!enabled) {\r\n setLoading(false)\r\n setError(null)\r\n setConfig(null)\r\n return\r\n }\r\n\r\n let mounted = true\r\n const controller = new AbortController()\r\n ;(async () => {\r\n try {\r\n setLoading(true)\r\n setError(null)\r\n const cfg = await api.getConfig(cartId, controller.signal)\r\n if (mounted) setConfig(cfg)\r\n } catch (e: any) {\r\n if (e?.name === \"AbortError\") return\r\n if (mounted) setError(e?.message || \"Failed to load PayPal config\")\r\n } finally {\r\n if (mounted) setLoading(false)\r\n }\r\n })()\r\n\r\n return () => {\r\n mounted = false\r\n controller.abort()\r\n }\r\n }, [api, cartId, enabled])\r\n\r\n return { config, loading, error }\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useMemo } from \"react\"\r\nimport { PayPalScriptProvider } from \"@paypal/react-paypal-js\"\r\nimport type { ReactPayPalScriptOptions } from \"@paypal/react-paypal-js\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\nexport function PayPalProvider(props: {\r\n config: PayPalConfig\r\n intent?: \"capture\" | \"authorize\"\r\n disableFunding?: string\r\n children: React.ReactNode\r\n}) {\r\n const { config, intent = \"capture\", disableFunding, children } = props\r\n\r\n const options = useMemo((): ReactPayPalScriptOptions => {\r\n return {\r\n clientId: config.client_id,\r\n \"client-id\": config.client_id,\r\n currency: config.currency,\r\n intent,\r\n components: config.client_token ? \"buttons,card-fields\" : \"buttons\",\r\n \"data-client-token\": config.client_token || undefined,\r\n \"disable-funding\": disableFunding,\r\n }\r\n }, [config, intent, disableFunding])\r\n\r\n return <PayPalScriptProvider options={options}>{children}</PayPalScriptProvider>\r\n}\r\n","\"use client\"\n\nimport React from \"react\"\nimport type { PayPalConfig } from \"../client/types\"\n\nexport function PayPalCurrencyNotice({ config }: { config: PayPalConfig }) {\n if (config.currency_supported) return null\n\n return (\n <div style={{ padding: 12, border: \"1px solid #ddd\", borderRadius: 10 }}>\n <div style={{ fontWeight: 600, marginBottom: 6 }}>PayPal currency issue</div>\n <ul style={{ margin: 0, paddingLeft: 18 }}>\n {(config.currency_errors || []).map((e, i) => (\n <li key={i}>{e}</li>\n ))}\n </ul>\n </div>\n )\n}\n","\"use client\"\r\nimport React, { useMemo, useState } from \"react\"\r\nimport { PayPalButtons } from \"@paypal/react-paypal-js\"\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\n// βββ Spinner keyframes ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nconst BUTTON_WIDTH_MAP: Record<string, string> = {\r\n small: \"300px\",\r\n medium: \"400px\",\r\n large: \"500px\",\r\n responsive: \"100%\",\r\n}\r\n\r\nexport function PayPalSmartButtons(props: {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId: string\r\n config: PayPalConfig\r\n onPaid?: (result: Record<string, unknown>) => void\r\n onError?: (message: string) => void\r\n}) {\r\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n // ββ ADDED: track when PayPal payment is in-flight βββββββββββββββββββββββββ\r\n const [processing, setProcessing] = useState(false)\r\n\r\n if (!config.currency_supported) return null\r\n\r\n const containerWidth = BUTTON_WIDTH_MAP[config.button_width ?? \"responsive\"] ?? \"100%\"\r\n\r\n return (\r\n // ββ CHANGED: added position: relative so the overlay can sit on top ββββββ\r\n <div style={{ width: containerWidth, position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {/* ββ ADDED: processing overlay ββββββββββββββββββββββββββββββββββββββ */}\r\n {processing && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n inset: 0,\r\n zIndex: 10,\r\n background: \"rgba(255,255,255,0.90)\",\r\n borderRadius: 8,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: 10,\r\n minHeight: 60,\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 28,\r\n height: 28,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#0070ba\",\r\n animation: \"_pp_spin .7s linear infinite\",\r\n }}\r\n />\r\n <div style={{ textAlign: \"center\" }}>\r\n <div style={{ fontSize: 13, color: \"#374151\", fontWeight: 500 }}>\r\n Processing your paymentβ¦\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 4 }}>\r\n Please do not close or refresh this page\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n <PayPalButtons\r\n style={{\r\n layout: \"vertical\",\r\n color: config.button_color,\r\n shape: config.button_shape,\r\n label: config.button_label,\r\n height: config.button_height,\r\n }}\r\n createOrder={async () => {\r\n setError(null)\r\n const r = await api.createOrder(cartId)\r\n return r.id\r\n }}\r\n onApprove={async (data: { orderID?: string }) => {\r\n try {\r\n setProcessing(true)\r\n setError(null)\r\n const orderId = String(data?.orderID || \"\")\r\n const result = await api.captureOrder(cartId, orderId)\r\n onPaid?.(result)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : \"Payment capture failed\"\r\n setError(msg)\r\n onError?.(msg)\r\n setProcessing(false)\r\n }\r\n }}\r\n onCancel={() => {\r\n setProcessing(false)\r\n }}\r\n onError={(err: Error | { message?: string }) => {\r\n setProcessing(false)\r\n const msg = err instanceof Error ? err.message : err?.message || \"PayPal error\"\r\n setError(msg)\r\n onError?.(msg)\r\n }}\r\n />\r\n\r\n {/* ββ CHANGED: styled error box instead of plain crimson text ββββββββ */}\r\n {error ? (\r\n <div\r\n style={{\r\n marginTop: 10,\r\n padding: \"8px 12px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 6,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {error}\r\n </div>\r\n ) : null}\r\n </div>\r\n )\r\n}\r\n","\"use client\"\r\n\r\nimport React, { useMemo, useState } from \"react\"\r\nimport {\r\n PayPalCardFieldsProvider,\r\n PayPalNumberField,\r\n PayPalExpiryField,\r\n PayPalCVVField,\r\n usePayPalCardFields,\r\n} from \"@paypal/react-paypal-js\"\r\n\r\nimport { createPayPalStoreApi } from \"../client/paypal\"\r\nimport type { PayPalConfig } from \"../client/types\"\r\n\r\n// βββ Spinner keyframes ββββββββββββββββββββββββββββββββββββββββββββββββββββββββ\r\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\r\n\r\nconst cardStyle = {\r\n input: {\r\n \"font-size\": \"16px\",\r\n \"font-family\": \"Helvetica, Arial, sans-serif\",\r\n \"font-weight\": \"400\",\r\n color: \"#2f2f2f\",\r\n padding: \"0 14px\",\r\n height: \"44px\",\r\n \"border-radius\": \"4px\",\r\n border: \"1px solid #c7c7c7\",\r\n background: \"#ffffff\",\r\n \"box-shadow\": \"none\",\r\n },\r\n\r\n \"::placeholder\": {\r\n color: \"#a0aec0\",\r\n },\r\n\r\n \".invalid\": {\r\n color: \"#b42318\",\r\n border: \"1px solid #d92d20\",\r\n \"box-shadow\": \"none\",\r\n },\r\n\r\n \".valid\": {\r\n color: \"#2f2f2f\",\r\n border: \"1px solid #c7c7c7\",\r\n \"box-shadow\": \"none\",\r\n },\r\n\r\n \"input:focus\": {\r\n outline: \"none\",\r\n border: \"1px solid #c7c7c7\",\r\n \"box-shadow\": \"none\",\r\n },\r\n}\r\n\r\nconst labelStyle: React.CSSProperties = {\r\n display: \"block\",\r\n fontSize: 15,\r\n lineHeight: \"22px\",\r\n fontWeight: 700,\r\n color: \"#4a4a4a\",\r\n marginBottom: 10,\r\n}\r\n\r\nfunction SubmitButton({\r\n disabled,\r\n label,\r\n onSubmit,\r\n}: {\r\n disabled: boolean\r\n label: string\r\n onSubmit: () => void\r\n}) {\r\n const { cardFieldsForm } = usePayPalCardFields()\r\n\r\n return (\r\n <button\r\n type=\"button\"\r\n disabled={disabled || !cardFieldsForm}\r\n onClick={() => {\r\n onSubmit()\r\n cardFieldsForm?.submit()\r\n }}\r\n style={{\r\n width: \"100%\",\r\n height: 52,\r\n padding: \"0 16px\",\r\n borderRadius: 4,\r\n border: \"1px solid #c7c7c7\",\r\n background: \"#f5f5f5\",\r\n color: \"#2f363d\",\r\n fontSize: 16,\r\n fontWeight: 700,\r\n fontFamily: \"Helvetica, Arial, sans-serif\",\r\n cursor: disabled ? \"not-allowed\" : \"pointer\",\r\n opacity: disabled ? 0.7 : 1,\r\n boxShadow: \"none\",\r\n }}\r\n >\r\n {label}\r\n </button>\r\n )\r\n}\r\n\r\nexport function PayPalAdvancedCard(props: {\r\n baseUrl: string\r\n publishableApiKey?: string\r\n cartId: string\r\n config: PayPalConfig\r\n onPaid?: (result: Record<string, unknown>) => void\r\n onError?: (message: string) => void\r\n}) {\r\n const { baseUrl, publishableApiKey, cartId, config, onPaid, onError } = props\r\n\r\n const api = useMemo(\r\n () => createPayPalStoreApi({ baseUrl, publishableApiKey }),\r\n [baseUrl, publishableApiKey]\r\n )\r\n\r\n const [error, setError] = useState<string | null>(null)\r\n const [submitting, setSubmitting] = useState(false)\r\n\r\n if (!config.currency_supported) return null\r\n\r\n if (!config.client_token) {\r\n return (\r\n <div\r\n style={{\r\n padding: 12,\r\n border: \"1px solid #ddd\",\r\n borderRadius: 4,\r\n fontSize: 13,\r\n color: \"#3c434a\",\r\n }}\r\n >\r\n CardFields unavailable: missing client_token from backend.\r\n </div>\r\n )\r\n }\r\n\r\n const isSandbox = config.environment === \"sandbox\"\r\n\r\n return (\r\n // ββ ADDED: wrapper div with position relative so overlay works ββββββββββββ\r\n <div style={{ position: \"relative\" }}>\r\n <style>{SPIN_STYLE}</style>\r\n\r\n {/* ββ ADDED: full overlay shown while card payment processes βββββββββββ */}\r\n {submitting && (\r\n <div\r\n style={{\r\n position: \"absolute\",\r\n inset: 0,\r\n zIndex: 20,\r\n background: \"rgba(255,255,255,0.90)\",\r\n borderRadius: 8,\r\n display: \"flex\",\r\n flexDirection: \"column\",\r\n alignItems: \"center\",\r\n justifyContent: \"center\",\r\n gap: 12,\r\n minHeight: 120,\r\n }}\r\n >\r\n <div\r\n style={{\r\n width: 32,\r\n height: 32,\r\n borderRadius: \"50%\",\r\n border: \"2.5px solid #e5e7eb\",\r\n borderTopColor: \"#1877f2\",\r\n animation: \"_pp_spin .7s linear infinite\",\r\n }}\r\n />\r\n <div style={{ textAlign: \"center\" }}>\r\n <div style={{ fontSize: 14, fontWeight: 500, color: \"#111827\" }}>\r\n Processing your paymentβ¦\r\n </div>\r\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 4 }}>\r\n Please do not close or refresh this page\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* ββ UNCHANGED: PayPalCardFieldsProvider and all its children are exactly as before ββ */}\r\n <PayPalCardFieldsProvider\r\n style={cardStyle}\r\n createOrder={async () => {\r\n setError(null)\r\n const r = await api.createOrder(cartId)\r\n return r.id\r\n }}\r\n onApprove={async (data: { orderID?: string }) => {\r\n try {\r\n setError(null)\r\n\r\n const orderId = String(data?.orderID || \"\")\r\n const result = await api.captureOrder(cartId, orderId)\r\n\r\n onPaid?.(result)\r\n } catch (e: unknown) {\r\n const msg = e instanceof Error ? e.message : \"Card payment failed\"\r\n setError(msg)\r\n onError?.(msg)\r\n setSubmitting(false)\r\n }\r\n }}\r\n onCancel={() => {\r\n setSubmitting(false)\r\n }}\r\n onError={(e: Error | { message?: string }) => {\r\n const msg =\r\n e instanceof Error ? e.message : e?.message || \"CardFields error\"\r\n\r\n setError(msg)\r\n onError?.(msg)\r\n setSubmitting(false)\r\n }}\r\n >\r\n <div\r\n style={{\r\n display: \"grid\",\r\n gap: 18,\r\n width: \"100%\",\r\n maxWidth: 516,\r\n }}\r\n >\r\n {isSandbox && (\r\n <div\r\n style={{\r\n fontSize: 15,\r\n lineHeight: 1.5,\r\n color: \"#4a4a4a\",\r\n marginBottom: 2,\r\n }}\r\n >\r\n Sandbox Mode Enabled.\r\n <br />\r\n Use test card <strong>4111 1111 1111 1111</strong> with any future\r\n expiration date and any CVV.\r\n </div>\r\n )}\r\n\r\n <div style={{ width: \"100%\" }}>\r\n <label style={labelStyle}>Card number</label>\r\n <PayPalNumberField />\r\n </div>\r\n\r\n <div\r\n style={{\r\n display: \"grid\",\r\n gridTemplateColumns: \"minmax(0, 1fr) minmax(0, 1fr)\",\r\n columnGap: 18,\r\n alignItems: \"start\",\r\n }}\r\n >\r\n <div>\r\n <label style={labelStyle}>Expiration date</label>\r\n <PayPalExpiryField />\r\n </div>\r\n\r\n <div>\r\n <label style={labelStyle}>Security code</label>\r\n <PayPalCVVField />\r\n </div>\r\n </div>\r\n\r\n <div style={{ marginTop: 2 }}>\r\n <SubmitButton\r\n disabled={submitting}\r\n label={submitting ? \"Processing...\" : \"Pay by Card\"}\r\n onSubmit={() => {\r\n setError(null)\r\n setSubmitting(true)\r\n }}\r\n />\r\n </div>\r\n\r\n {/* ββ CHANGED: styled error box instead of plain colored text ββββ */}\r\n {error ? (\r\n <div\r\n style={{\r\n padding: \"8px 12px\",\r\n background: \"#fef2f2\",\r\n border: \"1px solid #fecaca\",\r\n borderRadius: 6,\r\n fontSize: 13,\r\n color: \"#b91c1c\",\r\n }}\r\n >\r\n {error}\r\n </div>\r\n ) : null}\r\n </div>\r\n </PayPalCardFieldsProvider>\r\n </div>\r\n )\r\n}\r\n","\"use client\"\n\nimport React, { useCallback } from \"react\"\nimport { PayPalCurrencyNotice } from \"../components/PayPalCurrencyNotice\"\nimport { PayPalAdvancedCard } from \"../components/PayPalAdvancedCard\"\nimport { PayPalProvider } from \"../components/PayPalProvider\"\nimport { PayPalSmartButtons } from \"../components/PayPalSmartButtons\"\nimport { usePayPalConfig } from \"../hooks/usePayPalConfig\"\n\nconst DEFAULT_PAYPAL_PROVIDER_ID = \"pp_paypal_paypal\"\nconst DEFAULT_PAYPAL_CARD_PROVIDER_ID = \"pp_paypal_card_paypal_card\"\n\n// βββ Spinner keyframes (injected once, scoped to this component) ββββββββββββββ\nconst SPIN_STYLE = `@keyframes _pp_spin { to { transform: rotate(360deg) } }`\n\n// βββ Loading card β replaces the old plain \"Loading PayPalβ¦\" div βββββββββββββ\nfunction PayPalLoadingCard() {\n return (\n <div\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n padding: \"14px 16px\",\n background: \"#f9fafb\",\n border: \"1px solid #e5e7eb\",\n borderRadius: 10,\n }}\n >\n <style>{SPIN_STYLE}</style>\n <div\n style={{\n width: 22,\n height: 22,\n borderRadius: \"50%\",\n border: \"2.5px solid #e5e7eb\",\n borderTopColor: \"#0070ba\",\n animation: \"_pp_spin .7s linear infinite\",\n flexShrink: 0,\n }}\n />\n <div>\n <div style={{ fontSize: 13, fontWeight: 500, color: \"#111827\" }}>\n Connecting to PayPalβ¦\n </div>\n <div style={{ fontSize: 12, color: \"#6b7280\", marginTop: 2 }}>\n Setting up secure payment\n </div>\n </div>\n </div>\n )\n}\n\n// βββ Error card β replaces the old plain crimson div βββββββββββββββββββββββββ\nfunction PayPalErrorCard({ message }: { message: string }) {\n return (\n <div\n style={{\n padding: \"12px 16px\",\n background: \"#fef2f2\",\n border: \"1px solid #fecaca\",\n borderRadius: 10,\n fontSize: 13,\n color: \"#b91c1c\",\n }}\n >\n {message}\n </div>\n )\n}\n\nexport type MedusaNextPayPalAdapterProps = {\n cartId: string\n selectedProviderId: string | null | undefined\n baseUrl: string\n publishableApiKey?: string\n providerIds?: {\n paypal?: string\n paypalCard?: string\n }\n /**\n * Called after PayPal capture succeeds.\n * The storefront must call placeOrder(cartId) here β that is the only\n * correct way to clear the _medusa_cart_id cookie, because placeOrder\n * is a Next.js Server Action that calls removeCartId() server-side.\n * A client-side fetch cannot clear an httpOnly cookie set by the server.\n */\n onSuccess?: (cartId: string) => void\n onError?: (message: string) => void\n /** @deprecated use onSuccess */\n onPaid?: (result: unknown) => void\n}\n\nexport function MedusaNextPayPalAdapter(props: MedusaNextPayPalAdapterProps) {\n const {\n cartId,\n selectedProviderId,\n baseUrl,\n publishableApiKey,\n providerIds,\n onSuccess,\n onError,\n onPaid,\n } = props\n\n const paypalProviderId = providerIds?.paypal || DEFAULT_PAYPAL_PROVIDER_ID\n const paypalCardProviderId = providerIds?.paypalCard || DEFAULT_PAYPAL_CARD_PROVIDER_ID\n\n const shouldRender =\n selectedProviderId === paypalProviderId ||\n selectedProviderId === paypalCardProviderId\n\n const { config, loading, error } = usePayPalConfig({\n baseUrl,\n publishableApiKey,\n cartId,\n enabled: shouldRender,\n })\n\n // After capture succeeds: call both the legacy onPaid and the new onSuccess.\n // Cart completion and cookie clearing must happen in the storefront via\n // placeOrder() β we intentionally do NOT call /store/carts/:id/complete here\n // because that endpoint does not clear the Next.js server-side cart cookie.\n const handlePaid = useCallback(\n (captureResult: unknown) => {\n onPaid?.(captureResult)\n onSuccess?.(cartId)\n },\n [cartId, onPaid, onSuccess]\n )\n\n if (!shouldRender) return null\n\n // ββ CHANGED: was <div>Loading PayPalβ¦</div> βββββββββββββββββββββββββββββββ\n if (loading) return <PayPalLoadingCard />\n\n // ββ CHANGED: was <div style={{ color: \"crimson\" }}>{error}</div> ββββββββββ\n if (error) return <PayPalErrorCard message={error} />\n\n if (!config) return null\n if (config.paypal_enabled === false) return null\n\n const isCardProvider = selectedProviderId === paypalCardProviderId\n if (selectedProviderId === paypalCardProviderId && config.card_enabled === false) return null\n\n const disableFunding = Array.isArray(config.disable_buttons)\n ? config.disable_buttons.join(\",\")\n : undefined\n\n return (\n <div style={{ display: \"grid\", gap: 12 }}>\n <PayPalCurrencyNotice config={config} />\n <PayPalProvider\n config={config}\n intent={config.intent === \"authorize\" ? \"authorize\" : \"capture\"}\n disableFunding={disableFunding}\n >\n {selectedProviderId === paypalCardProviderId ? (\n <PayPalAdvancedCard\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n ) : (\n <PayPalSmartButtons\n baseUrl={baseUrl}\n publishableApiKey={publishableApiKey}\n cartId={cartId}\n config={config}\n onPaid={handlePaid}\n onError={onError}\n />\n )}\n </PayPalProvider>\n </div>\n )\n}\n"]}
|
package/dist/index.mjs
CHANGED
|
@@ -194,7 +194,10 @@ function PayPalSmartButtons(props) {
|
|
|
194
194
|
}
|
|
195
195
|
}
|
|
196
196
|
),
|
|
197
|
-
/* @__PURE__ */
|
|
197
|
+
/* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
|
|
198
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: 13, color: "#374151", fontWeight: 500 }, children: "Processing your payment\u2026" }),
|
|
199
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
|
|
200
|
+
] })
|
|
198
201
|
]
|
|
199
202
|
}
|
|
200
203
|
),
|
|
@@ -210,12 +213,12 @@ function PayPalSmartButtons(props) {
|
|
|
210
213
|
},
|
|
211
214
|
createOrder: async () => {
|
|
212
215
|
setError(null);
|
|
213
|
-
setProcessing(true);
|
|
214
216
|
const r = await api.createOrder(cartId);
|
|
215
217
|
return r.id;
|
|
216
218
|
},
|
|
217
219
|
onApprove: async (data) => {
|
|
218
220
|
try {
|
|
221
|
+
setProcessing(true);
|
|
219
222
|
setError(null);
|
|
220
223
|
const orderId = String(data?.orderID || "");
|
|
221
224
|
const result = await api.captureOrder(cartId, orderId);
|
|
@@ -224,10 +227,12 @@ function PayPalSmartButtons(props) {
|
|
|
224
227
|
const msg = e instanceof Error ? e.message : "Payment capture failed";
|
|
225
228
|
setError(msg);
|
|
226
229
|
onError?.(msg);
|
|
227
|
-
} finally {
|
|
228
230
|
setProcessing(false);
|
|
229
231
|
}
|
|
230
232
|
},
|
|
233
|
+
onCancel: () => {
|
|
234
|
+
setProcessing(false);
|
|
235
|
+
},
|
|
231
236
|
onError: (err) => {
|
|
232
237
|
setProcessing(false);
|
|
233
238
|
const msg = err instanceof Error ? err.message : err?.message || "PayPal error";
|
|
@@ -297,7 +302,8 @@ var labelStyle = {
|
|
|
297
302
|
};
|
|
298
303
|
function SubmitButton({
|
|
299
304
|
disabled,
|
|
300
|
-
label
|
|
305
|
+
label,
|
|
306
|
+
onSubmit
|
|
301
307
|
}) {
|
|
302
308
|
const { cardFieldsForm } = usePayPalCardFields();
|
|
303
309
|
return /* @__PURE__ */ jsx(
|
|
@@ -305,7 +311,10 @@ function SubmitButton({
|
|
|
305
311
|
{
|
|
306
312
|
type: "button",
|
|
307
313
|
disabled: disabled || !cardFieldsForm,
|
|
308
|
-
onClick: () =>
|
|
314
|
+
onClick: () => {
|
|
315
|
+
onSubmit();
|
|
316
|
+
cardFieldsForm?.submit();
|
|
317
|
+
},
|
|
309
318
|
style: {
|
|
310
319
|
width: "100%",
|
|
311
320
|
height: 52,
|
|
@@ -385,8 +394,8 @@ function PayPalAdvancedCard(props) {
|
|
|
385
394
|
}
|
|
386
395
|
),
|
|
387
396
|
/* @__PURE__ */ jsxs("div", { style: { textAlign: "center" }, children: [
|
|
388
|
-
/* @__PURE__ */ jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your
|
|
389
|
-
/* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close this page" })
|
|
397
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: 14, fontWeight: 500, color: "#111827" }, children: "Processing your payment\u2026" }),
|
|
398
|
+
/* @__PURE__ */ jsx("div", { style: { fontSize: 12, color: "#6b7280", marginTop: 4 }, children: "Please do not close or refresh this page" })
|
|
390
399
|
] })
|
|
391
400
|
]
|
|
392
401
|
}
|
|
@@ -402,7 +411,6 @@ function PayPalAdvancedCard(props) {
|
|
|
402
411
|
},
|
|
403
412
|
onApprove: async (data) => {
|
|
404
413
|
try {
|
|
405
|
-
setSubmitting(true);
|
|
406
414
|
setError(null);
|
|
407
415
|
const orderId = String(data?.orderID || "");
|
|
408
416
|
const result = await api.captureOrder(cartId, orderId);
|
|
@@ -411,14 +419,17 @@ function PayPalAdvancedCard(props) {
|
|
|
411
419
|
const msg = e instanceof Error ? e.message : "Card payment failed";
|
|
412
420
|
setError(msg);
|
|
413
421
|
onError?.(msg);
|
|
414
|
-
} finally {
|
|
415
422
|
setSubmitting(false);
|
|
416
423
|
}
|
|
417
424
|
},
|
|
425
|
+
onCancel: () => {
|
|
426
|
+
setSubmitting(false);
|
|
427
|
+
},
|
|
418
428
|
onError: (e) => {
|
|
419
429
|
const msg = e instanceof Error ? e.message : e?.message || "CardFields error";
|
|
420
430
|
setError(msg);
|
|
421
431
|
onError?.(msg);
|
|
432
|
+
setSubmitting(false);
|
|
422
433
|
},
|
|
423
434
|
children: /* @__PURE__ */ jsxs(
|
|
424
435
|
"div",
|
|
@@ -477,7 +488,11 @@ function PayPalAdvancedCard(props) {
|
|
|
477
488
|
SubmitButton,
|
|
478
489
|
{
|
|
479
490
|
disabled: submitting,
|
|
480
|
-
label: submitting ? "Processing..." : "Pay by Card"
|
|
491
|
+
label: submitting ? "Processing..." : "Pay by Card",
|
|
492
|
+
onSubmit: () => {
|
|
493
|
+
setError(null);
|
|
494
|
+
setSubmitting(true);
|
|
495
|
+
}
|
|
481
496
|
}
|
|
482
497
|
) }),
|
|
483
498
|
error ? /* @__PURE__ */ jsx(
|