@easypayment/medusa-paypal 0.3.0 → 0.3.1
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/.medusa/server/src/admin/index.js +13 -89
- package/.medusa/server/src/admin/index.mjs +13 -89
- package/package.json +1 -1
- package/src/admin/routes/settings/paypal/additional-settings/page.tsx +0 -16
- package/src/admin/routes/settings/paypal/advanced-card-payments/page.tsx +220 -227
- package/src/admin/routes/settings/paypal/paypal-settings/page.tsx +519 -599
|
@@ -75,9 +75,7 @@ const DEFAULT_FORM$1 = {
|
|
|
75
75
|
brandName: "PayPal",
|
|
76
76
|
landingPage: "no_preference",
|
|
77
77
|
requireInstantPayment: false,
|
|
78
|
-
useShippingAsBilling: true,
|
|
79
78
|
sendItemDetails: true,
|
|
80
|
-
skipOrderReviewPage: true,
|
|
81
79
|
invoicePrefix: "WC-",
|
|
82
80
|
creditCardStatementName: "PayPal",
|
|
83
81
|
logPath: "/uploads/wc-logs/"
|
|
@@ -175,18 +173,10 @@ function AdditionalSettingsTab() {
|
|
|
175
173
|
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "checkbox", checked: form.requireInstantPayment, onChange: (e) => setForm((p) => ({ ...p, requireInstantPayment: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
176
174
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ui-fg-base", children: "Require Instant Payment" })
|
|
177
175
|
] }) }),
|
|
178
|
-
/* @__PURE__ */ jsxRuntime.jsx(FieldRow$2, { label: "Billing Address", hint: "If the billing address is empty and PayPal provides a shipping address, the order will use the shipping address as the billing address.", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
179
|
-
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "checkbox", checked: form.useShippingAsBilling, onChange: (e) => setForm((p) => ({ ...p, useShippingAsBilling: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
180
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ui-fg-base", children: "Use PayPal Shipping Address as Billing" })
|
|
181
|
-
] }) }),
|
|
182
176
|
/* @__PURE__ */ jsxRuntime.jsx(FieldRow$2, { label: "Send Item Details", hint: "Include all line item details in the payment request to PayPal so that they can be seen from the PayPal transaction details page.", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
183
177
|
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "checkbox", checked: form.sendItemDetails, onChange: (e) => setForm((p) => ({ ...p, sendItemDetails: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
184
178
|
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ui-fg-base", children: "Send line item details to PayPal" })
|
|
185
179
|
] }) }),
|
|
186
|
-
/* @__PURE__ */ jsxRuntime.jsx(FieldRow$2, { label: "Order Review Page", hint: "Payments from the Product or Cart page skip the review step and go straight to the Thank You page.", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
187
|
-
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "checkbox", checked: form.skipOrderReviewPage, onChange: (e) => setForm((p) => ({ ...p, skipOrderReviewPage: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
188
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ui-fg-base", children: "Skip Order Review Page" })
|
|
189
|
-
] }) }),
|
|
190
180
|
/* @__PURE__ */ jsxRuntime.jsx(FieldRow$2, { label: "Invoice prefix", children: /* @__PURE__ */ jsxRuntime.jsx("input", { value: form.invoicePrefix, onChange: (e) => setForm((p) => ({ ...p, invoicePrefix: e.target.value })), className: "w-full rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive", placeholder: "WC-" }) }),
|
|
191
181
|
/* @__PURE__ */ jsxRuntime.jsx(FieldRow$2, { label: "Credit Card Statement Name", children: /* @__PURE__ */ jsxRuntime.jsx("input", { value: form.creditCardStatementName, onChange: (e) => setForm((p) => ({ ...p, creditCardStatementName: e.target.value })), className: "w-full rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive", placeholder: "PayPal" }) })
|
|
192
182
|
] })
|
|
@@ -194,9 +184,6 @@ function AdditionalSettingsTab() {
|
|
|
194
184
|
)
|
|
195
185
|
] }) });
|
|
196
186
|
}
|
|
197
|
-
function PayPalGooglePayPage() {
|
|
198
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
199
|
-
}
|
|
200
187
|
async function adminFetch$1(path, opts = {}) {
|
|
201
188
|
var _a;
|
|
202
189
|
const { method = "GET", body, query } = opts;
|
|
@@ -230,7 +217,7 @@ async function adminFetch$1(path, opts = {}) {
|
|
|
230
217
|
return {};
|
|
231
218
|
}
|
|
232
219
|
}
|
|
233
|
-
const DEFAULT_FORM = { enabled: true, title: "Credit or Debit Card", disabledCards: [], threeDS: "when_required"
|
|
220
|
+
const DEFAULT_FORM = { enabled: true, title: "Credit or Debit Card", disabledCards: [], threeDS: "when_required" };
|
|
234
221
|
function mergeWithDefaults(saved) {
|
|
235
222
|
if (!saved) return { ...DEFAULT_FORM };
|
|
236
223
|
const entries = Object.entries(saved).filter(([, value]) => value !== void 0);
|
|
@@ -358,16 +345,15 @@ function AdvancedCardPaymentsTab() {
|
|
|
358
345
|
/* @__PURE__ */ jsxRuntime.jsx(FieldRow$1, { label: "Contingency for 3D Secure", hint: "Choose when 3D Secure should be triggered during card payments.", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
359
346
|
/* @__PURE__ */ jsxRuntime.jsx("select", { value: form.threeDS, onChange: (e) => setForm((p) => ({ ...p, threeDS: e.target.value })), className: "w-full rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive", children: THREE_DS_OPTIONS.map((o) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: o.value, children: o.label }, o.value)) }),
|
|
360
347
|
((_a = THREE_DS_OPTIONS.find((o) => o.value === form.threeDS)) == null ? void 0 : _a.hint) ? /* @__PURE__ */ jsxRuntime.jsx("div", { className: "text-xs text-ui-fg-subtle", children: (_b = THREE_DS_OPTIONS.find((o) => o.value === form.threeDS)) == null ? void 0 : _b.hint }) : null
|
|
361
|
-
] }) }),
|
|
362
|
-
/* @__PURE__ */ jsxRuntime.jsx(FieldRow$1, { label: "Card Save Enabled", hint: "Allow customers to save a card at checkout for future use.", children: /* @__PURE__ */ jsxRuntime.jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
363
|
-
/* @__PURE__ */ jsxRuntime.jsx("input", { type: "checkbox", checked: form.cardSaveEnabled, onChange: (e) => setForm((p) => ({ ...p, cardSaveEnabled: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
364
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ui-fg-base", children: "Enable card saving at checkout" })
|
|
365
348
|
] }) })
|
|
366
349
|
] })
|
|
367
350
|
}
|
|
368
351
|
)
|
|
369
352
|
] }) });
|
|
370
353
|
}
|
|
354
|
+
function PayPalApplePayPage() {
|
|
355
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
356
|
+
}
|
|
371
357
|
const config = adminSdk.defineRouteConfig({
|
|
372
358
|
label: "PayPal Connection",
|
|
373
359
|
hide: true
|
|
@@ -952,7 +938,7 @@ function PayPalConnectionPage() {
|
|
|
952
938
|
` })
|
|
953
939
|
] });
|
|
954
940
|
}
|
|
955
|
-
function
|
|
941
|
+
function PayPalGooglePayPage() {
|
|
956
942
|
return /* @__PURE__ */ jsxRuntime.jsx(reactRouterDom.Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
957
943
|
}
|
|
958
944
|
function PayPalPayLaterMessagingPage() {
|
|
@@ -991,13 +977,6 @@ async function adminFetch(path, opts = {}) {
|
|
|
991
977
|
return {};
|
|
992
978
|
}
|
|
993
979
|
}
|
|
994
|
-
const DISPLAY_LOCATION_OPTIONS = [
|
|
995
|
-
{ value: "product", label: "Product Page" },
|
|
996
|
-
{ value: "cart", label: "Cart Page" },
|
|
997
|
-
{ value: "express", label: "Express Checkout" },
|
|
998
|
-
{ value: "checkout", label: "Checkout Page", disabled: true, hint: "Locked by PayPal eligibility / checkout config" },
|
|
999
|
-
{ value: "mini_cart", label: "Mini Cart (Side Cart)" }
|
|
1000
|
-
];
|
|
1001
980
|
const DISABLE_BUTTON_OPTIONS = [
|
|
1002
981
|
{ value: "paypal", label: "PayPal" },
|
|
1003
982
|
{ value: "paylater", label: "Pay Later" },
|
|
@@ -1103,7 +1082,6 @@ function PayPalSettingsTab() {
|
|
|
1103
1082
|
enabled: true,
|
|
1104
1083
|
title: "PayPal",
|
|
1105
1084
|
description: "Pay via PayPal; you can pay with your credit card if you don't have a PayPal account",
|
|
1106
|
-
displayOn: ["product", "cart", "express", "mini_cart"],
|
|
1107
1085
|
disableButtons: [],
|
|
1108
1086
|
buttonColor: "gold",
|
|
1109
1087
|
buttonShape: "rect",
|
|
@@ -1174,7 +1152,6 @@ function PayPalSettingsTab() {
|
|
|
1174
1152
|
setSaving(false);
|
|
1175
1153
|
}
|
|
1176
1154
|
}
|
|
1177
|
-
react.useMemo(() => new Map(DISPLAY_LOCATION_OPTIONS.map((o) => [o.value, o])), []);
|
|
1178
1155
|
function toggleMulti(key, value) {
|
|
1179
1156
|
setForm((prev) => {
|
|
1180
1157
|
const list = prev[key] || [];
|
|
@@ -1208,7 +1185,7 @@ function PayPalSettingsTab() {
|
|
|
1208
1185
|
SectionCard,
|
|
1209
1186
|
{
|
|
1210
1187
|
title: "PayPal Settings",
|
|
1211
|
-
description: "Enable PayPal
|
|
1188
|
+
description: "Enable PayPal and configure checkout title/description.",
|
|
1212
1189
|
right: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-3", children: [
|
|
1213
1190
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1214
1191
|
"button",
|
|
@@ -1252,60 +1229,7 @@ function PayPalSettingsTab() {
|
|
|
1252
1229
|
className: "min-h-[84px] w-full resize-y rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive",
|
|
1253
1230
|
placeholder: "Pay via PayPal..."
|
|
1254
1231
|
}
|
|
1255
|
-
) })
|
|
1256
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1257
|
-
FieldRow,
|
|
1258
|
-
{
|
|
1259
|
-
label: "Display PayPal Buttons On",
|
|
1260
|
-
hint: "Choose where PayPal Smart Buttons should render.",
|
|
1261
|
-
children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
1262
|
-
/* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
1263
|
-
DISPLAY_LOCATION_OPTIONS.filter((o) => form.displayOn.includes(o.value)).map((o) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1264
|
-
Pill,
|
|
1265
|
-
{
|
|
1266
|
-
disabled: o.disabled,
|
|
1267
|
-
onRemove: o.disabled ? void 0 : () => removeMulti("displayOn", o.value),
|
|
1268
|
-
children: [
|
|
1269
|
-
o.label,
|
|
1270
|
-
o.disabled ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 rounded bg-ui-bg-subtle px-1 py-[1px] text-[10px] text-ui-fg-subtle", children: "Locked" }) : null
|
|
1271
|
-
]
|
|
1272
|
-
},
|
|
1273
|
-
o.value
|
|
1274
|
-
)),
|
|
1275
|
-
form.displayOn.length === 0 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ui-fg-subtle", children: "No locations selected." }) : null
|
|
1276
|
-
] }),
|
|
1277
|
-
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-md border border-ui-border-base p-3", children: /* @__PURE__ */ jsxRuntime.jsx("div", { className: "grid gap-2 md:grid-cols-2", children: DISPLAY_LOCATION_OPTIONS.map((o) => {
|
|
1278
|
-
const checked = form.displayOn.includes(o.value);
|
|
1279
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1280
|
-
"label",
|
|
1281
|
-
{
|
|
1282
|
-
className: cx(
|
|
1283
|
-
"flex items-start gap-2 rounded-md p-2",
|
|
1284
|
-
o.disabled ? "opacity-60" : "hover:bg-ui-bg-subtle"
|
|
1285
|
-
),
|
|
1286
|
-
children: [
|
|
1287
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1288
|
-
"input",
|
|
1289
|
-
{
|
|
1290
|
-
type: "checkbox",
|
|
1291
|
-
disabled: o.disabled,
|
|
1292
|
-
checked,
|
|
1293
|
-
onChange: () => toggleMulti("displayOn", o.value),
|
|
1294
|
-
className: "mt-0.5 h-4 w-4 rounded border-ui-border-base"
|
|
1295
|
-
}
|
|
1296
|
-
),
|
|
1297
|
-
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "flex flex-col", children: [
|
|
1298
|
-
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-sm text-ui-fg-base", children: o.label }),
|
|
1299
|
-
o.hint ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs text-ui-fg-subtle", children: o.hint }) : null
|
|
1300
|
-
] })
|
|
1301
|
-
]
|
|
1302
|
-
},
|
|
1303
|
-
o.value
|
|
1304
|
-
);
|
|
1305
|
-
}) }) })
|
|
1306
|
-
] })
|
|
1307
|
-
}
|
|
1308
|
-
)
|
|
1232
|
+
) })
|
|
1309
1233
|
] })
|
|
1310
1234
|
}
|
|
1311
1235
|
),
|
|
@@ -1432,21 +1356,21 @@ const routeModule = {
|
|
|
1432
1356
|
Component: AdditionalSettingsTab,
|
|
1433
1357
|
path: "/settings/paypal/additional-settings"
|
|
1434
1358
|
},
|
|
1435
|
-
{
|
|
1436
|
-
Component: PayPalGooglePayPage,
|
|
1437
|
-
path: "/settings/paypal/google-pay"
|
|
1438
|
-
},
|
|
1439
1359
|
{
|
|
1440
1360
|
Component: AdvancedCardPaymentsTab,
|
|
1441
1361
|
path: "/settings/paypal/advanced-card-payments"
|
|
1442
1362
|
},
|
|
1363
|
+
{
|
|
1364
|
+
Component: PayPalApplePayPage,
|
|
1365
|
+
path: "/settings/paypal/apple-pay"
|
|
1366
|
+
},
|
|
1443
1367
|
{
|
|
1444
1368
|
Component: PayPalConnectionPage,
|
|
1445
1369
|
path: "/settings/paypal/connection"
|
|
1446
1370
|
},
|
|
1447
1371
|
{
|
|
1448
|
-
Component:
|
|
1449
|
-
path: "/settings/paypal/
|
|
1372
|
+
Component: PayPalGooglePayPage,
|
|
1373
|
+
path: "/settings/paypal/google-pay"
|
|
1450
1374
|
},
|
|
1451
1375
|
{
|
|
1452
1376
|
Component: PayPalPayLaterMessagingPage,
|
|
@@ -74,9 +74,7 @@ const DEFAULT_FORM$1 = {
|
|
|
74
74
|
brandName: "PayPal",
|
|
75
75
|
landingPage: "no_preference",
|
|
76
76
|
requireInstantPayment: false,
|
|
77
|
-
useShippingAsBilling: true,
|
|
78
77
|
sendItemDetails: true,
|
|
79
|
-
skipOrderReviewPage: true,
|
|
80
78
|
invoicePrefix: "WC-",
|
|
81
79
|
creditCardStatementName: "PayPal",
|
|
82
80
|
logPath: "/uploads/wc-logs/"
|
|
@@ -174,18 +172,10 @@ function AdditionalSettingsTab() {
|
|
|
174
172
|
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: form.requireInstantPayment, onChange: (e) => setForm((p) => ({ ...p, requireInstantPayment: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
175
173
|
/* @__PURE__ */ jsx("span", { className: "text-sm text-ui-fg-base", children: "Require Instant Payment" })
|
|
176
174
|
] }) }),
|
|
177
|
-
/* @__PURE__ */ jsx(FieldRow$2, { label: "Billing Address", hint: "If the billing address is empty and PayPal provides a shipping address, the order will use the shipping address as the billing address.", children: /* @__PURE__ */ jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
178
|
-
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: form.useShippingAsBilling, onChange: (e) => setForm((p) => ({ ...p, useShippingAsBilling: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
179
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm text-ui-fg-base", children: "Use PayPal Shipping Address as Billing" })
|
|
180
|
-
] }) }),
|
|
181
175
|
/* @__PURE__ */ jsx(FieldRow$2, { label: "Send Item Details", hint: "Include all line item details in the payment request to PayPal so that they can be seen from the PayPal transaction details page.", children: /* @__PURE__ */ jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
182
176
|
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: form.sendItemDetails, onChange: (e) => setForm((p) => ({ ...p, sendItemDetails: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
183
177
|
/* @__PURE__ */ jsx("span", { className: "text-sm text-ui-fg-base", children: "Send line item details to PayPal" })
|
|
184
178
|
] }) }),
|
|
185
|
-
/* @__PURE__ */ jsx(FieldRow$2, { label: "Order Review Page", hint: "Payments from the Product or Cart page skip the review step and go straight to the Thank You page.", children: /* @__PURE__ */ jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
186
|
-
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: form.skipOrderReviewPage, onChange: (e) => setForm((p) => ({ ...p, skipOrderReviewPage: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
187
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm text-ui-fg-base", children: "Skip Order Review Page" })
|
|
188
|
-
] }) }),
|
|
189
179
|
/* @__PURE__ */ jsx(FieldRow$2, { label: "Invoice prefix", children: /* @__PURE__ */ jsx("input", { value: form.invoicePrefix, onChange: (e) => setForm((p) => ({ ...p, invoicePrefix: e.target.value })), className: "w-full rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive", placeholder: "WC-" }) }),
|
|
190
180
|
/* @__PURE__ */ jsx(FieldRow$2, { label: "Credit Card Statement Name", children: /* @__PURE__ */ jsx("input", { value: form.creditCardStatementName, onChange: (e) => setForm((p) => ({ ...p, creditCardStatementName: e.target.value })), className: "w-full rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive", placeholder: "PayPal" }) })
|
|
191
181
|
] })
|
|
@@ -193,9 +183,6 @@ function AdditionalSettingsTab() {
|
|
|
193
183
|
)
|
|
194
184
|
] }) });
|
|
195
185
|
}
|
|
196
|
-
function PayPalGooglePayPage() {
|
|
197
|
-
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
198
|
-
}
|
|
199
186
|
async function adminFetch$1(path, opts = {}) {
|
|
200
187
|
var _a;
|
|
201
188
|
const { method = "GET", body, query } = opts;
|
|
@@ -229,7 +216,7 @@ async function adminFetch$1(path, opts = {}) {
|
|
|
229
216
|
return {};
|
|
230
217
|
}
|
|
231
218
|
}
|
|
232
|
-
const DEFAULT_FORM = { enabled: true, title: "Credit or Debit Card", disabledCards: [], threeDS: "when_required"
|
|
219
|
+
const DEFAULT_FORM = { enabled: true, title: "Credit or Debit Card", disabledCards: [], threeDS: "when_required" };
|
|
233
220
|
function mergeWithDefaults(saved) {
|
|
234
221
|
if (!saved) return { ...DEFAULT_FORM };
|
|
235
222
|
const entries = Object.entries(saved).filter(([, value]) => value !== void 0);
|
|
@@ -357,16 +344,15 @@ function AdvancedCardPaymentsTab() {
|
|
|
357
344
|
/* @__PURE__ */ jsx(FieldRow$1, { label: "Contingency for 3D Secure", hint: "Choose when 3D Secure should be triggered during card payments.", children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
358
345
|
/* @__PURE__ */ jsx("select", { value: form.threeDS, onChange: (e) => setForm((p) => ({ ...p, threeDS: e.target.value })), className: "w-full rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive", children: THREE_DS_OPTIONS.map((o) => /* @__PURE__ */ jsx("option", { value: o.value, children: o.label }, o.value)) }),
|
|
359
346
|
((_a = THREE_DS_OPTIONS.find((o) => o.value === form.threeDS)) == null ? void 0 : _a.hint) ? /* @__PURE__ */ jsx("div", { className: "text-xs text-ui-fg-subtle", children: (_b = THREE_DS_OPTIONS.find((o) => o.value === form.threeDS)) == null ? void 0 : _b.hint }) : null
|
|
360
|
-
] }) }),
|
|
361
|
-
/* @__PURE__ */ jsx(FieldRow$1, { label: "Card Save Enabled", hint: "Allow customers to save a card at checkout for future use.", children: /* @__PURE__ */ jsxs("label", { className: "inline-flex items-center gap-2", children: [
|
|
362
|
-
/* @__PURE__ */ jsx("input", { type: "checkbox", checked: form.cardSaveEnabled, onChange: (e) => setForm((p) => ({ ...p, cardSaveEnabled: e.target.checked })), className: "h-4 w-4 rounded border-ui-border-base" }),
|
|
363
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm text-ui-fg-base", children: "Enable card saving at checkout" })
|
|
364
347
|
] }) })
|
|
365
348
|
] })
|
|
366
349
|
}
|
|
367
350
|
)
|
|
368
351
|
] }) });
|
|
369
352
|
}
|
|
353
|
+
function PayPalApplePayPage() {
|
|
354
|
+
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
355
|
+
}
|
|
370
356
|
const config = defineRouteConfig({
|
|
371
357
|
label: "PayPal Connection",
|
|
372
358
|
hide: true
|
|
@@ -951,7 +937,7 @@ function PayPalConnectionPage() {
|
|
|
951
937
|
` })
|
|
952
938
|
] });
|
|
953
939
|
}
|
|
954
|
-
function
|
|
940
|
+
function PayPalGooglePayPage() {
|
|
955
941
|
return /* @__PURE__ */ jsx(Navigate, { to: "/settings/paypal/connection", replace: true });
|
|
956
942
|
}
|
|
957
943
|
function PayPalPayLaterMessagingPage() {
|
|
@@ -990,13 +976,6 @@ async function adminFetch(path, opts = {}) {
|
|
|
990
976
|
return {};
|
|
991
977
|
}
|
|
992
978
|
}
|
|
993
|
-
const DISPLAY_LOCATION_OPTIONS = [
|
|
994
|
-
{ value: "product", label: "Product Page" },
|
|
995
|
-
{ value: "cart", label: "Cart Page" },
|
|
996
|
-
{ value: "express", label: "Express Checkout" },
|
|
997
|
-
{ value: "checkout", label: "Checkout Page", disabled: true, hint: "Locked by PayPal eligibility / checkout config" },
|
|
998
|
-
{ value: "mini_cart", label: "Mini Cart (Side Cart)" }
|
|
999
|
-
];
|
|
1000
979
|
const DISABLE_BUTTON_OPTIONS = [
|
|
1001
980
|
{ value: "paypal", label: "PayPal" },
|
|
1002
981
|
{ value: "paylater", label: "Pay Later" },
|
|
@@ -1102,7 +1081,6 @@ function PayPalSettingsTab() {
|
|
|
1102
1081
|
enabled: true,
|
|
1103
1082
|
title: "PayPal",
|
|
1104
1083
|
description: "Pay via PayPal; you can pay with your credit card if you don't have a PayPal account",
|
|
1105
|
-
displayOn: ["product", "cart", "express", "mini_cart"],
|
|
1106
1084
|
disableButtons: [],
|
|
1107
1085
|
buttonColor: "gold",
|
|
1108
1086
|
buttonShape: "rect",
|
|
@@ -1173,7 +1151,6 @@ function PayPalSettingsTab() {
|
|
|
1173
1151
|
setSaving(false);
|
|
1174
1152
|
}
|
|
1175
1153
|
}
|
|
1176
|
-
useMemo(() => new Map(DISPLAY_LOCATION_OPTIONS.map((o) => [o.value, o])), []);
|
|
1177
1154
|
function toggleMulti(key, value) {
|
|
1178
1155
|
setForm((prev) => {
|
|
1179
1156
|
const list = prev[key] || [];
|
|
@@ -1207,7 +1184,7 @@ function PayPalSettingsTab() {
|
|
|
1207
1184
|
SectionCard,
|
|
1208
1185
|
{
|
|
1209
1186
|
title: "PayPal Settings",
|
|
1210
|
-
description: "Enable PayPal
|
|
1187
|
+
description: "Enable PayPal and configure checkout title/description.",
|
|
1211
1188
|
right: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-3", children: [
|
|
1212
1189
|
/* @__PURE__ */ jsx(
|
|
1213
1190
|
"button",
|
|
@@ -1251,60 +1228,7 @@ function PayPalSettingsTab() {
|
|
|
1251
1228
|
className: "min-h-[84px] w-full resize-y rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive",
|
|
1252
1229
|
placeholder: "Pay via PayPal..."
|
|
1253
1230
|
}
|
|
1254
|
-
) })
|
|
1255
|
-
/* @__PURE__ */ jsx(
|
|
1256
|
-
FieldRow,
|
|
1257
|
-
{
|
|
1258
|
-
label: "Display PayPal Buttons On",
|
|
1259
|
-
hint: "Choose where PayPal Smart Buttons should render.",
|
|
1260
|
-
children: /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", children: [
|
|
1261
|
-
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
1262
|
-
DISPLAY_LOCATION_OPTIONS.filter((o) => form.displayOn.includes(o.value)).map((o) => /* @__PURE__ */ jsxs(
|
|
1263
|
-
Pill,
|
|
1264
|
-
{
|
|
1265
|
-
disabled: o.disabled,
|
|
1266
|
-
onRemove: o.disabled ? void 0 : () => removeMulti("displayOn", o.value),
|
|
1267
|
-
children: [
|
|
1268
|
-
o.label,
|
|
1269
|
-
o.disabled ? /* @__PURE__ */ jsx("span", { className: "ml-1 rounded bg-ui-bg-subtle px-1 py-[1px] text-[10px] text-ui-fg-subtle", children: "Locked" }) : null
|
|
1270
|
-
]
|
|
1271
|
-
},
|
|
1272
|
-
o.value
|
|
1273
|
-
)),
|
|
1274
|
-
form.displayOn.length === 0 ? /* @__PURE__ */ jsx("span", { className: "text-sm text-ui-fg-subtle", children: "No locations selected." }) : null
|
|
1275
|
-
] }),
|
|
1276
|
-
/* @__PURE__ */ jsx("div", { className: "rounded-md border border-ui-border-base p-3", children: /* @__PURE__ */ jsx("div", { className: "grid gap-2 md:grid-cols-2", children: DISPLAY_LOCATION_OPTIONS.map((o) => {
|
|
1277
|
-
const checked = form.displayOn.includes(o.value);
|
|
1278
|
-
return /* @__PURE__ */ jsxs(
|
|
1279
|
-
"label",
|
|
1280
|
-
{
|
|
1281
|
-
className: cx(
|
|
1282
|
-
"flex items-start gap-2 rounded-md p-2",
|
|
1283
|
-
o.disabled ? "opacity-60" : "hover:bg-ui-bg-subtle"
|
|
1284
|
-
),
|
|
1285
|
-
children: [
|
|
1286
|
-
/* @__PURE__ */ jsx(
|
|
1287
|
-
"input",
|
|
1288
|
-
{
|
|
1289
|
-
type: "checkbox",
|
|
1290
|
-
disabled: o.disabled,
|
|
1291
|
-
checked,
|
|
1292
|
-
onChange: () => toggleMulti("displayOn", o.value),
|
|
1293
|
-
className: "mt-0.5 h-4 w-4 rounded border-ui-border-base"
|
|
1294
|
-
}
|
|
1295
|
-
),
|
|
1296
|
-
/* @__PURE__ */ jsxs("span", { className: "flex flex-col", children: [
|
|
1297
|
-
/* @__PURE__ */ jsx("span", { className: "text-sm text-ui-fg-base", children: o.label }),
|
|
1298
|
-
o.hint ? /* @__PURE__ */ jsx("span", { className: "text-xs text-ui-fg-subtle", children: o.hint }) : null
|
|
1299
|
-
] })
|
|
1300
|
-
]
|
|
1301
|
-
},
|
|
1302
|
-
o.value
|
|
1303
|
-
);
|
|
1304
|
-
}) }) })
|
|
1305
|
-
] })
|
|
1306
|
-
}
|
|
1307
|
-
)
|
|
1231
|
+
) })
|
|
1308
1232
|
] })
|
|
1309
1233
|
}
|
|
1310
1234
|
),
|
|
@@ -1431,21 +1355,21 @@ const routeModule = {
|
|
|
1431
1355
|
Component: AdditionalSettingsTab,
|
|
1432
1356
|
path: "/settings/paypal/additional-settings"
|
|
1433
1357
|
},
|
|
1434
|
-
{
|
|
1435
|
-
Component: PayPalGooglePayPage,
|
|
1436
|
-
path: "/settings/paypal/google-pay"
|
|
1437
|
-
},
|
|
1438
1358
|
{
|
|
1439
1359
|
Component: AdvancedCardPaymentsTab,
|
|
1440
1360
|
path: "/settings/paypal/advanced-card-payments"
|
|
1441
1361
|
},
|
|
1362
|
+
{
|
|
1363
|
+
Component: PayPalApplePayPage,
|
|
1364
|
+
path: "/settings/paypal/apple-pay"
|
|
1365
|
+
},
|
|
1442
1366
|
{
|
|
1443
1367
|
Component: PayPalConnectionPage,
|
|
1444
1368
|
path: "/settings/paypal/connection"
|
|
1445
1369
|
},
|
|
1446
1370
|
{
|
|
1447
|
-
Component:
|
|
1448
|
-
path: "/settings/paypal/
|
|
1371
|
+
Component: PayPalGooglePayPage,
|
|
1372
|
+
path: "/settings/paypal/google-pay"
|
|
1449
1373
|
},
|
|
1450
1374
|
{
|
|
1451
1375
|
Component: PayPalPayLaterMessagingPage,
|
package/package.json
CHANGED
|
@@ -42,9 +42,7 @@ type AdditionalSettingsForm = {
|
|
|
42
42
|
brandName: string
|
|
43
43
|
landingPage: LandingPage
|
|
44
44
|
requireInstantPayment: boolean
|
|
45
|
-
useShippingAsBilling: boolean
|
|
46
45
|
sendItemDetails: boolean
|
|
47
|
-
skipOrderReviewPage: boolean
|
|
48
46
|
invoicePrefix: string
|
|
49
47
|
creditCardStatementName: string
|
|
50
48
|
logPath?: string
|
|
@@ -55,9 +53,7 @@ const DEFAULT_FORM: AdditionalSettingsForm = {
|
|
|
55
53
|
brandName: "PayPal",
|
|
56
54
|
landingPage: "no_preference",
|
|
57
55
|
requireInstantPayment: false,
|
|
58
|
-
useShippingAsBilling: true,
|
|
59
56
|
sendItemDetails: true,
|
|
60
|
-
skipOrderReviewPage: true,
|
|
61
57
|
invoicePrefix: "WC-",
|
|
62
58
|
creditCardStatementName: "PayPal",
|
|
63
59
|
logPath: "/uploads/wc-logs/",
|
|
@@ -186,24 +182,12 @@ export default function AdditionalSettingsTab() {
|
|
|
186
182
|
<span className="text-sm text-ui-fg-base">Require Instant Payment</span>
|
|
187
183
|
</label>
|
|
188
184
|
</FieldRow>
|
|
189
|
-
<FieldRow label="Billing Address" hint="If the billing address is empty and PayPal provides a shipping address, the order will use the shipping address as the billing address.">
|
|
190
|
-
<label className="inline-flex items-center gap-2">
|
|
191
|
-
<input type="checkbox" checked={form.useShippingAsBilling} onChange={(e) => setForm((p) => ({ ...p, useShippingAsBilling: e.target.checked }))} className="h-4 w-4 rounded border-ui-border-base" />
|
|
192
|
-
<span className="text-sm text-ui-fg-base">Use PayPal Shipping Address as Billing</span>
|
|
193
|
-
</label>
|
|
194
|
-
</FieldRow>
|
|
195
185
|
<FieldRow label="Send Item Details" hint="Include all line item details in the payment request to PayPal so that they can be seen from the PayPal transaction details page.">
|
|
196
186
|
<label className="inline-flex items-center gap-2">
|
|
197
187
|
<input type="checkbox" checked={form.sendItemDetails} onChange={(e) => setForm((p) => ({ ...p, sendItemDetails: e.target.checked }))} className="h-4 w-4 rounded border-ui-border-base" />
|
|
198
188
|
<span className="text-sm text-ui-fg-base">Send line item details to PayPal</span>
|
|
199
189
|
</label>
|
|
200
190
|
</FieldRow>
|
|
201
|
-
<FieldRow label="Order Review Page" hint="Payments from the Product or Cart page skip the review step and go straight to the Thank You page.">
|
|
202
|
-
<label className="inline-flex items-center gap-2">
|
|
203
|
-
<input type="checkbox" checked={form.skipOrderReviewPage} onChange={(e) => setForm((p) => ({ ...p, skipOrderReviewPage: e.target.checked }))} className="h-4 w-4 rounded border-ui-border-base" />
|
|
204
|
-
<span className="text-sm text-ui-fg-base">Skip Order Review Page</span>
|
|
205
|
-
</label>
|
|
206
|
-
</FieldRow>
|
|
207
191
|
<FieldRow label="Invoice prefix">
|
|
208
192
|
<input value={form.invoicePrefix} onChange={(e) => setForm((p) => ({ ...p, invoicePrefix: e.target.value }))} className="w-full rounded-md border border-ui-border-base bg-ui-bg-base px-3 py-2 text-sm text-ui-fg-base outline-none focus:ring-2 focus:ring-ui-border-interactive" placeholder="WC-" />
|
|
209
193
|
</FieldRow>
|