@thorprovider/blocks 3.0.2 → 4.1.0
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/README.md +61 -21
- package/dist/blocks/designs/checkout-commerce-v1/block.d.ts +49 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.d.ts.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.js +2487 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.js.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.mjs +2467 -0
- package/dist/blocks/designs/checkout-commerce-v1/block.mjs.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.d.ts +8 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.d.ts.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.js +44 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.js.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.mjs +19 -0
- package/dist/blocks/designs/checkout-commerce-v1/data-context.mjs.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.d.ts +3 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.d.ts.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.js +36 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.js.map +1 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.mjs +6 -0
- package/dist/blocks/designs/checkout-commerce-v1/index.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/block.d.ts +12 -0
- package/dist/blocks/designs/marketplace-product-card/block.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/block.js +243 -0
- package/dist/blocks/designs/marketplace-product-card/block.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/block.mjs +233 -0
- package/dist/blocks/designs/marketplace-product-card/block.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/index.d.ts +3 -0
- package/dist/blocks/designs/marketplace-product-card/index.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/index.js +36 -0
- package/dist/blocks/designs/marketplace-product-card/index.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/index.mjs +6 -0
- package/dist/blocks/designs/marketplace-product-card/index.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.d.ts +13 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.js +36 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.mjs +12 -0
- package/dist/blocks/designs/marketplace-product-card/normalize.mjs.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/variants.d.ts +72 -0
- package/dist/blocks/designs/marketplace-product-card/variants.d.ts.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/variants.js +123 -0
- package/dist/blocks/designs/marketplace-product-card/variants.js.map +1 -0
- package/dist/blocks/designs/marketplace-product-card/variants.mjs +89 -0
- package/dist/blocks/designs/marketplace-product-card/variants.mjs.map +1 -0
- package/dist/blocks/e-commerce/account/account-frame.d.ts +38 -0
- package/dist/blocks/e-commerce/account/account-frame.d.ts.map +1 -0
- package/dist/blocks/e-commerce/account/account-frame.js +102 -0
- package/dist/blocks/e-commerce/account/account-frame.js.map +1 -0
- package/dist/blocks/e-commerce/account/account-frame.mjs +78 -0
- package/dist/blocks/e-commerce/account/account-frame.mjs.map +1 -0
- package/dist/blocks/e-commerce/account/address-book.d.ts +79 -0
- package/dist/blocks/e-commerce/account/address-book.d.ts.map +1 -0
- package/dist/blocks/e-commerce/account/address-book.js +250 -0
- package/dist/blocks/e-commerce/account/address-book.js.map +1 -0
- package/dist/blocks/e-commerce/account/address-book.mjs +225 -0
- package/dist/blocks/e-commerce/account/address-book.mjs.map +1 -0
- package/dist/blocks/e-commerce/account/profile-form.d.ts +35 -0
- package/dist/blocks/e-commerce/account/profile-form.d.ts.map +1 -0
- package/dist/blocks/e-commerce/account/profile-form.js +100 -0
- package/dist/blocks/e-commerce/account/profile-form.js.map +1 -0
- package/dist/blocks/e-commerce/account/profile-form.mjs +76 -0
- package/dist/blocks/e-commerce/account/profile-form.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkbox-check.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.d.ts +11 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.js +46 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.mjs +22 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-equality.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.d.ts +28 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.js +278 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.mjs +260 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-address-fields.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts +12 -9
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js +49 -71
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs +50 -72
- package/dist/blocks/e-commerce/checkout-forms/checkout-contact-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js +6 -3
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs +6 -3
- package/dist/blocks/e-commerce/checkout-forms/checkout-country-field.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.d.ts +7 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.js +41 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.mjs +16 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-id-context.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.d.ts +24 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.js +75 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.mjs +58 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-location-select.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts +3 -2
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js +9 -2
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs +9 -2
- package/dist/blocks/e-commerce/checkout-forms/checkout-order-summary.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts +23 -8
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js +136 -31
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs +143 -32
- package/dist/blocks/e-commerce/checkout-forms/checkout-payment-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts +13 -7
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js +179 -28
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs +180 -29
- package/dist/blocks/e-commerce/checkout-forms/checkout-review-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.d.ts +20 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.js +199 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.mjs +175 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-saved-addresses.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.d.ts +14 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.js +136 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.mjs +109 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-section-nav.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts +32 -10
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js +265 -147
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs +272 -148
- package/dist/blocks/e-commerce/checkout-forms/checkout-shipping-step.mjs.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.d.ts +13 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.js +74 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.mjs +50 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-header.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.d.ts +7 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.d.ts.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.js +91 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.js.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.mjs +65 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout-step-summary.mjs.map +1 -0
- package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts +174 -44
- package/dist/blocks/e-commerce/checkout-forms/checkout.d.ts.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout.js +532 -108
- package/dist/blocks/e-commerce/checkout-forms/checkout.js.map +1 -1
- package/dist/blocks/e-commerce/checkout-forms/checkout.mjs +542 -109
- package/dist/blocks/e-commerce/checkout-forms/checkout.mjs.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.d.ts.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js +44 -20
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.js.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs +44 -20
- package/dist/blocks/e-commerce/navigation/storefront-navbar-cart-sheet.mjs.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar.d.ts.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar.js +21 -10
- package/dist/blocks/e-commerce/navigation/storefront-navbar.js.map +1 -1
- package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs +21 -10
- package/dist/blocks/e-commerce/navigation/storefront-navbar.mjs.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-card.d.ts.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-card.js +36 -9
- package/dist/blocks/e-commerce/product-list/product-card.js.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-card.mjs +36 -9
- package/dist/blocks/e-commerce/product-list/product-card.mjs.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-showcase-1.d.ts.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-showcase-1.js +7 -2
- package/dist/blocks/e-commerce/product-list/product-showcase-1.js.map +1 -1
- package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs +7 -2
- package/dist/blocks/e-commerce/product-list/product-showcase-1.mjs.map +1 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.d.ts.map +1 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js +5 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.js.map +1 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs +5 -1
- package/dist/blocks/e-commerce/product-overview/product-quick-view-dialog.mjs.map +1 -1
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.d.ts.map +1 -1
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js +71 -51
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.js.map +1 -1
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs +71 -51
- package/dist/blocks/e-commerce/storefront-hero/storefront-hero.mjs.map +1 -1
- package/dist/blocks/marketing/banners/banner-1.d.ts.map +1 -1
- package/dist/blocks/marketing/banners/banner-1.js +15 -27
- package/dist/blocks/marketing/banners/banner-1.js.map +1 -1
- package/dist/blocks/marketing/banners/banner-1.mjs +16 -28
- package/dist/blocks/marketing/banners/banner-1.mjs.map +1 -1
- package/dist/index.d.ts +16 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +13 -0
- package/dist/index.mjs.map +1 -1
- package/dist/lib/contracts/checkout-commerce-v1.d.ts +2350 -0
- package/dist/lib/contracts/checkout-commerce-v1.d.ts.map +1 -0
- package/dist/lib/contracts/checkout-commerce-v1.js +417 -0
- package/dist/lib/contracts/checkout-commerce-v1.js.map +1 -0
- package/dist/lib/contracts/checkout-commerce-v1.mjs +392 -0
- package/dist/lib/contracts/checkout-commerce-v1.mjs.map +1 -0
- package/dist/lib/contracts/marketplace-product-card.d.ts +324 -0
- package/dist/lib/contracts/marketplace-product-card.d.ts.map +1 -0
- package/dist/lib/contracts/marketplace-product-card.js +85 -0
- package/dist/lib/contracts/marketplace-product-card.js.map +1 -0
- package/dist/lib/contracts/marketplace-product-card.mjs +61 -0
- package/dist/lib/contracts/marketplace-product-card.mjs.map +1 -0
- package/dist/lib/contracts.d.ts +2289 -178
- package/dist/lib/contracts.d.ts.map +1 -1
- package/dist/lib/contracts.js +332 -25
- package/dist/lib/contracts.js.map +1 -1
- package/dist/lib/contracts.mjs +278 -5
- package/dist/lib/contracts.mjs.map +1 -1
- package/dist/lib/money-schema.d.ts +19 -0
- package/dist/lib/money-schema.d.ts.map +1 -0
- package/dist/lib/money-schema.js +33 -0
- package/dist/lib/money-schema.js.map +1 -0
- package/dist/lib/money-schema.mjs +9 -0
- package/dist/lib/money-schema.mjs.map +1 -0
- package/dist/lib/motion.d.ts +29 -0
- package/dist/lib/motion.d.ts.map +1 -0
- package/dist/lib/motion.js +65 -0
- package/dist/lib/motion.js.map +1 -0
- package/dist/lib/motion.mjs +41 -0
- package/dist/lib/motion.mjs.map +1 -0
- package/dist/ui/accordion.d.ts +3 -1
- package/dist/ui/accordion.d.ts.map +1 -1
- package/dist/ui/accordion.js +21 -5
- package/dist/ui/accordion.js.map +1 -1
- package/dist/ui/accordion.mjs +21 -5
- package/dist/ui/accordion.mjs.map +1 -1
- package/dist/ui/input-group.d.ts +1 -1
- package/package.json +18 -3
- package/dist/.tsbuildinfo +0 -1
|
@@ -1,44 +1,80 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
-
import {
|
|
3
|
+
import { useState } from "react";
|
|
4
|
+
import { Button } from "../../../ui/button.mjs";
|
|
5
|
+
import {
|
|
6
|
+
Field,
|
|
7
|
+
FieldContent,
|
|
8
|
+
FieldLabel,
|
|
9
|
+
FieldLegend,
|
|
10
|
+
FieldSet
|
|
11
|
+
} from "../../../ui/field.mjs";
|
|
12
|
+
import { Input } from "../../../ui/input.mjs";
|
|
4
13
|
import { RadioGroup, RadioGroupItem } from "../../../ui/radio-group.mjs";
|
|
14
|
+
import { formatMoney, isAvailableMoney } from "../../../lib/money.mjs";
|
|
5
15
|
import { CheckoutFieldFeedback } from "./checkout-field-feedback.mjs";
|
|
16
|
+
import { useCheckoutIds } from "./checkout-id-context.mjs";
|
|
6
17
|
function CheckoutPaymentStep({
|
|
7
|
-
values,
|
|
8
|
-
onChange,
|
|
9
|
-
labels,
|
|
10
18
|
paymentMethods = [],
|
|
19
|
+
paymentState = "idle",
|
|
20
|
+
paymentMethod,
|
|
21
|
+
onSelectPaymentMethod,
|
|
22
|
+
onRetryPayment,
|
|
23
|
+
adjustmentPayments,
|
|
24
|
+
onApplyGiftCard,
|
|
25
|
+
giftCardState = "idle",
|
|
26
|
+
giftCardMessage,
|
|
27
|
+
onRemoveAdjustment,
|
|
28
|
+
storeCredit,
|
|
29
|
+
labels,
|
|
30
|
+
formatMoney: formatMoneyProp,
|
|
11
31
|
fieldErrors,
|
|
12
|
-
|
|
32
|
+
description
|
|
13
33
|
}) {
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
34
|
+
const checkoutId = useCheckoutIds();
|
|
35
|
+
const [giftCardCode, setGiftCardCode] = useState("");
|
|
36
|
+
const selectedMethod = paymentMethods.find((method) => method.id === paymentMethod);
|
|
37
|
+
const pending = paymentState === "pending";
|
|
38
|
+
const failed = paymentState === "error";
|
|
39
|
+
const unavailable = paymentState === "unavailable";
|
|
40
|
+
return /* @__PURE__ */ jsxs(FieldSet, { className: "gap-3", children: [
|
|
41
|
+
/* @__PURE__ */ jsx(FieldLegend, { className: "mb-0", children: labels.paymentMethodLegend }),
|
|
42
|
+
pending ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", role: "status", children: labels.paymentLoadingLabel }) : failed ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2", role: "alert", children: [
|
|
43
|
+
/* @__PURE__ */ jsx("p", { className: "text-destructive text-sm", children: labels.paymentErrorLabel }),
|
|
44
|
+
onRetryPayment ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", className: "w-fit", onClick: onRetryPayment, children: labels.retryLabel }) : null
|
|
45
|
+
] }) : unavailable ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", role: "status", children: labels.paymentUnavailableLabel }) : paymentMethods.length === 0 ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground text-sm", children: labels.noPaymentMethodsLabel }) : /* @__PURE__ */ jsx(
|
|
18
46
|
RadioGroup,
|
|
19
47
|
{
|
|
20
|
-
value:
|
|
21
|
-
onValueChange: (value) => value &&
|
|
48
|
+
value: paymentMethod,
|
|
49
|
+
onValueChange: (value) => value && onSelectPaymentMethod(String(value)),
|
|
22
50
|
className: "grid grid-cols-1 gap-3",
|
|
23
51
|
children: paymentMethods.map((method) => {
|
|
24
|
-
const
|
|
52
|
+
const disabled = method.isEnabled === false;
|
|
25
53
|
return /* @__PURE__ */ jsxs(
|
|
26
54
|
Field,
|
|
27
55
|
{
|
|
28
56
|
orientation: "horizontal",
|
|
29
57
|
className: "flex-wrap items-start justify-between gap-3 rounded-lg border p-4",
|
|
30
58
|
children: [
|
|
31
|
-
/* @__PURE__ */ jsx(FieldContent, { className: "min-w-0", children: /* @__PURE__ */ jsxs(
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
59
|
+
/* @__PURE__ */ jsx(FieldContent, { className: "min-w-0", children: /* @__PURE__ */ jsxs(
|
|
60
|
+
FieldLabel,
|
|
61
|
+
{
|
|
62
|
+
htmlFor: checkoutId(`payment-${method.id}`),
|
|
63
|
+
className: "flex flex-col items-start gap-0.5 text-left",
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsx("span", { children: method.name }),
|
|
66
|
+
method.description ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs font-normal", children: method.description }) : null,
|
|
67
|
+
disabled ? /* @__PURE__ */ jsx("span", { className: "text-muted-foreground text-xs font-normal", children: labels.unavailableMethodLabel }) : null
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
) }),
|
|
36
71
|
/* @__PURE__ */ jsx(
|
|
37
72
|
RadioGroupItem,
|
|
38
73
|
{
|
|
39
74
|
value: method.id,
|
|
40
|
-
id: `payment-${method.id}
|
|
41
|
-
|
|
75
|
+
id: checkoutId(`payment-${method.id}`),
|
|
76
|
+
"data-checkout-payment-method": method.id,
|
|
77
|
+
disabled
|
|
42
78
|
}
|
|
43
79
|
)
|
|
44
80
|
]
|
|
@@ -48,19 +84,94 @@ function CheckoutPaymentStep({
|
|
|
48
84
|
})
|
|
49
85
|
}
|
|
50
86
|
),
|
|
51
|
-
|
|
52
|
-
/* @__PURE__ */
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
87
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-6", children: [
|
|
88
|
+
selectedMethod ? /* @__PURE__ */ jsxs("div", { className: "bg-muted/50 rounded-lg p-4 text-sm", children: [
|
|
89
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium", children: selectedMethod.name }),
|
|
90
|
+
selectedMethod.description ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-1", children: selectedMethod.description }) : null,
|
|
91
|
+
selectedMethod.requiresSetup ? /* @__PURE__ */ jsx("p", { className: "text-muted-foreground mt-1 text-xs", children: labels.requiresSetupLabel }) : null
|
|
92
|
+
] }) : null,
|
|
93
|
+
/* @__PURE__ */ jsx(Field, { "data-invalid": !!fieldErrors?.length, children: /* @__PURE__ */ jsx(
|
|
94
|
+
CheckoutFieldFeedback,
|
|
95
|
+
{
|
|
96
|
+
id: checkoutId("checkout-payment-method"),
|
|
97
|
+
errors: fieldErrors,
|
|
98
|
+
description
|
|
99
|
+
}
|
|
100
|
+
) }),
|
|
101
|
+
onApplyGiftCard ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 rounded-lg border p-4", children: [
|
|
102
|
+
/* @__PURE__ */ jsx("p", { className: "text-sm font-medium", children: labels.giftCardLabel }),
|
|
103
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
104
|
+
/* @__PURE__ */ jsx(
|
|
105
|
+
Input,
|
|
106
|
+
{
|
|
107
|
+
id: checkoutId("checkout-gift-card"),
|
|
108
|
+
value: giftCardCode,
|
|
109
|
+
placeholder: labels.giftCardPlaceholder,
|
|
110
|
+
onChange: (e) => setGiftCardCode(e.target.value),
|
|
111
|
+
className: "min-w-0 flex-1"
|
|
112
|
+
}
|
|
113
|
+
),
|
|
114
|
+
/* @__PURE__ */ jsx(
|
|
115
|
+
Button,
|
|
116
|
+
{
|
|
117
|
+
type: "button",
|
|
118
|
+
variant: "outline",
|
|
119
|
+
disabled: giftCardState === "pending" || giftCardCode.trim() === "",
|
|
120
|
+
onClick: () => onApplyGiftCard(giftCardCode.trim()),
|
|
121
|
+
children: labels.applyLabel
|
|
122
|
+
}
|
|
123
|
+
)
|
|
124
|
+
] }),
|
|
125
|
+
giftCardMessage ? /* @__PURE__ */ jsx(
|
|
126
|
+
"p",
|
|
127
|
+
{
|
|
128
|
+
className: giftCardState === "invalid" ? "text-destructive text-sm" : "text-muted-foreground text-sm",
|
|
129
|
+
role: giftCardState === "invalid" ? "alert" : "status",
|
|
130
|
+
children: giftCardMessage
|
|
131
|
+
}
|
|
132
|
+
) : null
|
|
133
|
+
] }) : null,
|
|
134
|
+
adjustmentPayments && adjustmentPayments.length > 0 ? /* @__PURE__ */ jsx("div", { className: "flex flex-col gap-2", children: adjustmentPayments.map((adjustment) => /* @__PURE__ */ jsxs(
|
|
135
|
+
"div",
|
|
136
|
+
{
|
|
137
|
+
className: "flex flex-wrap items-center justify-between gap-2 rounded-lg border px-4 py-3 text-sm",
|
|
138
|
+
children: [
|
|
139
|
+
/* @__PURE__ */ jsx("span", { children: adjustment.label }),
|
|
140
|
+
/* @__PURE__ */ jsxs("span", { className: "flex items-center gap-3", children: [
|
|
141
|
+
/* @__PURE__ */ jsx("span", { className: "tabular-nums", children: formatMoney(adjustment.amount, formatMoneyProp) }),
|
|
142
|
+
onRemoveAdjustment ? /* @__PURE__ */ jsx(
|
|
143
|
+
Button,
|
|
144
|
+
{
|
|
145
|
+
type: "button",
|
|
146
|
+
variant: "ghost",
|
|
147
|
+
size: "sm",
|
|
148
|
+
onClick: () => onRemoveAdjustment(adjustment.id),
|
|
149
|
+
children: labels.removeLabel
|
|
150
|
+
}
|
|
151
|
+
) : null
|
|
152
|
+
] })
|
|
153
|
+
]
|
|
154
|
+
},
|
|
155
|
+
adjustment.id
|
|
156
|
+
)) }) : null,
|
|
157
|
+
storeCredit ? /* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-2 rounded-lg border p-4 text-sm", children: [
|
|
158
|
+
/* @__PURE__ */ jsx("p", { className: "font-medium", children: labels.storeCreditLabel }),
|
|
159
|
+
/* @__PURE__ */ jsxs("p", { className: "text-muted-foreground", children: [
|
|
160
|
+
labels.availableCreditLabel,
|
|
161
|
+
": ",
|
|
162
|
+
formatMoney(storeCredit.available, formatMoneyProp)
|
|
163
|
+
] }),
|
|
164
|
+
isAvailableMoney(storeCredit.applied) ? /* @__PURE__ */ jsxs("p", { children: [
|
|
165
|
+
labels.applyLabel,
|
|
166
|
+
": ",
|
|
167
|
+
formatMoney(storeCredit.applied, formatMoneyProp)
|
|
168
|
+
] }) : null,
|
|
169
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-wrap gap-2", children: [
|
|
170
|
+
storeCredit.onApply ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", size: "sm", onClick: storeCredit.onApply, children: labels.applyLabel }) : null,
|
|
171
|
+
storeCredit.onRemove ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "ghost", size: "sm", onClick: storeCredit.onRemove, children: labels.removeLabel }) : null
|
|
172
|
+
] })
|
|
173
|
+
] }) : null
|
|
174
|
+
] })
|
|
64
175
|
] });
|
|
65
176
|
}
|
|
66
177
|
export {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-payment-step.tsx"],"sourcesContent":["'use client'\n\nimport { Field, FieldContent, FieldLabel, FieldLegend, FieldSet } from '../../../ui/field'\nimport { RadioGroup, RadioGroupItem } from '../../../ui/radio-group'\nimport { CheckoutFieldFeedback, checkoutFieldAria } from './checkout-field-feedback'\nimport type { PaymentMethod } from '@thorprovider/types'\nimport type {\n CheckoutChangeHandler,\n CheckoutFieldDescriptions,\n CheckoutValuesFieldErrors,\n CheckoutLabels,\n CheckoutValues,\n} from './checkout'\n\nexport interface CheckoutPaymentStepProps {\n values: CheckoutValues\n onChange: CheckoutChangeHandler\n labels: CheckoutLabels\n paymentMethods?: PaymentMethod[]\n fieldErrors?: CheckoutValuesFieldErrors\n fieldDescriptions?: CheckoutFieldDescriptions\n}\n\nexport function CheckoutPaymentStep({\n values,\n onChange,\n labels,\n paymentMethods = [],\n fieldErrors,\n fieldDescriptions,\n}: CheckoutPaymentStepProps) {\n const selectedMethod = paymentMethods.find((method) => method.id === values.paymentMethod)\n\n return (\n <FieldSet>\n <FieldLegend>{labels.paymentMethodLegend}</FieldLegend>\n {paymentMethods.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">{labels.noPaymentMethodsLabel}</p>\n ) : (\n <RadioGroup\n value={values.paymentMethod}\n onValueChange={(value) => value && onChange('paymentMethod', String(value))}\n className=\"grid grid-cols-1 gap-3\"\n >\n {paymentMethods.map((method) => {\n const unavailable = method.isEnabled === false\n return (\n <Field\n key={method.id}\n orientation=\"horizontal\"\n className=\"flex-wrap items-start justify-between gap-3 rounded-lg border p-4\"\n >\n <FieldContent className=\"min-w-0\">\n <FieldLabel htmlFor={`payment-${method.id}`} className=\"flex flex-col gap-0.5\">\n <span>{method.name}</span>\n {method.description ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {method.description}\n </span>\n ) : null}\n {unavailable ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {labels.unavailableMethodLabel}\n </span>\n ) : null}\n </FieldLabel>\n </FieldContent>\n <RadioGroupItem\n value={method.id}\n id={`payment-${method.id}`}\n disabled={unavailable}\n />\n </Field>\n )\n })}\n </RadioGroup>\n )}\n\n {selectedMethod ? (\n <div className=\"bg-muted/50 rounded-lg p-4 text-sm\">\n <p className=\"font-medium\">{selectedMethod.name}</p>\n {selectedMethod.description ? (\n <p className=\"text-muted-foreground mt-1\">{selectedMethod.description}</p>\n ) : null}\n {selectedMethod.requiresSetup ? (\n <p className=\"text-muted-foreground mt-1 text-xs\">{labels.requiresSetupLabel}</p>\n ) : null}\n </div>\n ) : null}\n\n <Field data-invalid={!!fieldErrors?.paymentMethod?.length}>\n <CheckoutFieldFeedback\n id=\"checkout-payment-method\"\n errors={fieldErrors?.paymentMethod}\n description={fieldDescriptions?.paymentMethod}\n />\n </Field>\n </FieldSet>\n )\n}\n"],"mappings":";AAmCM,cAkBY,YAlBZ;AAjCN,SAAS,OAAO,cAAc,YAAY,aAAa,gBAAgB;AACvE,SAAS,YAAY,sBAAsB;AAC3C,SAAS,6BAAgD;AAmBlD,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA,iBAAiB,CAAC;AAAA,EAClB;AAAA,EACA;AACF,GAA6B;AAC3B,QAAM,iBAAiB,eAAe,KAAK,CAAC,WAAW,OAAO,OAAO,OAAO,aAAa;AAEzF,SACE,qBAAC,YACC;AAAA,wBAAC,eAAa,iBAAO,qBAAoB;AAAA,IACxC,eAAe,WAAW,IACzB,oBAAC,OAAE,WAAU,iCAAiC,iBAAO,uBAAsB,IAE3E;AAAA,MAAC;AAAA;AAAA,QACC,OAAO,OAAO;AAAA,QACd,eAAe,CAAC,UAAU,SAAS,SAAS,iBAAiB,OAAO,KAAK,CAAC;AAAA,QAC1E,WAAU;AAAA,QAET,yBAAe,IAAI,CAAC,WAAW;AAC9B,gBAAM,cAAc,OAAO,cAAc;AACzC,iBACE;AAAA,YAAC;AAAA;AAAA,cAEC,aAAY;AAAA,cACZ,WAAU;AAAA,cAEV;AAAA,oCAAC,gBAAa,WAAU,WACtB,+BAAC,cAAW,SAAS,WAAW,OAAO,EAAE,IAAI,WAAU,yBACrD;AAAA,sCAAC,UAAM,iBAAO,MAAK;AAAA,kBAClB,OAAO,cACN,oBAAC,UAAK,WAAU,6CACb,iBAAO,aACV,IACE;AAAA,kBACH,cACC,oBAAC,UAAK,WAAU,6CACb,iBAAO,wBACV,IACE;AAAA,mBACN,GACF;AAAA,gBACA;AAAA,kBAAC;AAAA;AAAA,oBACC,OAAO,OAAO;AAAA,oBACd,IAAI,WAAW,OAAO,EAAE;AAAA,oBACxB,UAAU;AAAA;AAAA,gBACZ;AAAA;AAAA;AAAA,YAvBK,OAAO;AAAA,UAwBd;AAAA,QAEJ,CAAC;AAAA;AAAA,IACH;AAAA,IAGD,iBACC,qBAAC,SAAI,WAAU,sCACb;AAAA,0BAAC,OAAE,WAAU,eAAe,yBAAe,MAAK;AAAA,MAC/C,eAAe,cACd,oBAAC,OAAE,WAAU,8BAA8B,yBAAe,aAAY,IACpE;AAAA,MACH,eAAe,gBACd,oBAAC,OAAE,WAAU,sCAAsC,iBAAO,oBAAmB,IAC3E;AAAA,OACN,IACE;AAAA,IAEJ,oBAAC,SAAM,gBAAc,CAAC,CAAC,aAAa,eAAe,QACjD;AAAA,MAAC;AAAA;AAAA,QACC,IAAG;AAAA,QACH,QAAQ,aAAa;AAAA,QACrB,aAAa,mBAAmB;AAAA;AAAA,IAClC,GACF;AAAA,KACF;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-payment-step.tsx"],"sourcesContent":["'use client'\n\nimport { useState } from 'react'\nimport { Button } from '../../../ui/button'\nimport {\n Field,\n FieldContent,\n FieldLabel,\n FieldLegend,\n FieldSet,\n} from '../../../ui/field'\nimport { Input } from '../../../ui/input'\nimport { RadioGroup, RadioGroupItem } from '../../../ui/radio-group'\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type { CheckoutAdjustmentPayment, Money, PaymentMethod } from '@thorprovider/types'\nimport { CheckoutFieldFeedback } from './checkout-field-feedback'\nimport { useCheckoutIds } from './checkout-id-context'\nimport type { CheckoutFieldError } from './checkout-form-types'\nimport type { CheckoutLabels } from './checkout'\n\nexport interface CheckoutPaymentStepProps {\n paymentMethods?: PaymentMethod[]\n paymentState?: 'idle' | 'pending' | 'error' | 'unavailable'\n paymentMethod: string\n onSelectPaymentMethod: (id: string) => void\n onRetryPayment?: () => void\n adjustmentPayments?: CheckoutAdjustmentPayment[]\n onApplyGiftCard?: (code: string) => void\n giftCardState?: 'idle' | 'pending' | 'valid' | 'invalid'\n giftCardMessage?: string\n onRemoveAdjustment?: (id: string) => void\n storeCredit?: {\n available: Money\n applied?: Money\n onApply?: () => void\n onRemove?: () => void\n }\n labels: CheckoutLabels\n formatMoney?: (money: Money) => string\n fieldErrors?: CheckoutFieldError[]\n description?: string\n}\n\nexport function CheckoutPaymentStep({\n paymentMethods = [],\n paymentState = 'idle',\n paymentMethod,\n onSelectPaymentMethod,\n onRetryPayment,\n adjustmentPayments,\n onApplyGiftCard,\n giftCardState = 'idle',\n giftCardMessage,\n onRemoveAdjustment,\n storeCredit,\n labels,\n formatMoney: formatMoneyProp,\n fieldErrors,\n description,\n}: CheckoutPaymentStepProps) {\n const checkoutId = useCheckoutIds()\n const [giftCardCode, setGiftCardCode] = useState('')\n const selectedMethod = paymentMethods.find((method) => method.id === paymentMethod)\n const pending = paymentState === 'pending'\n const failed = paymentState === 'error'\n const unavailable = paymentState === 'unavailable'\n\n return (\n <FieldSet className=\"gap-3\">\n <FieldLegend className=\"mb-0\">{labels.paymentMethodLegend}</FieldLegend>\n\n {pending ? (\n <p className=\"text-muted-foreground text-sm\" role=\"status\">\n {labels.paymentLoadingLabel}\n </p>\n ) : failed ? (\n <div className=\"flex flex-col gap-2\" role=\"alert\">\n <p className=\"text-destructive text-sm\">{labels.paymentErrorLabel}</p>\n {onRetryPayment ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" className=\"w-fit\" onClick={onRetryPayment}>\n {labels.retryLabel}\n </Button>\n ) : null}\n </div>\n ) : unavailable ? (\n <p className=\"text-muted-foreground text-sm\" role=\"status\">\n {labels.paymentUnavailableLabel}\n </p>\n ) : paymentMethods.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">{labels.noPaymentMethodsLabel}</p>\n ) : (\n <RadioGroup\n value={paymentMethod}\n onValueChange={(value) => value && onSelectPaymentMethod(String(value))}\n className=\"grid grid-cols-1 gap-3\"\n >\n {paymentMethods.map((method) => {\n const disabled = method.isEnabled === false\n return (\n <Field\n key={method.id}\n orientation=\"horizontal\"\n className=\"flex-wrap items-start justify-between gap-3 rounded-lg border p-4\"\n >\n <FieldContent className=\"min-w-0\">\n <FieldLabel\n htmlFor={checkoutId(`payment-${method.id}`)}\n className=\"flex flex-col items-start gap-0.5 text-left\"\n >\n <span>{method.name}</span>\n {method.description ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {method.description}\n </span>\n ) : null}\n {disabled ? (\n <span className=\"text-muted-foreground text-xs font-normal\">\n {labels.unavailableMethodLabel}\n </span>\n ) : null}\n </FieldLabel>\n </FieldContent>\n <RadioGroupItem\n value={method.id}\n id={checkoutId(`payment-${method.id}`)}\n data-checkout-payment-method={method.id}\n disabled={disabled}\n />\n </Field>\n )\n })}\n </RadioGroup>\n )}\n\n <div className=\"flex flex-col gap-6\">\n {selectedMethod ? (\n <div className=\"bg-muted/50 rounded-lg p-4 text-sm\">\n <p className=\"font-medium\">{selectedMethod.name}</p>\n {selectedMethod.description ? (\n <p className=\"text-muted-foreground mt-1\">{selectedMethod.description}</p>\n ) : null}\n {selectedMethod.requiresSetup ? (\n <p className=\"text-muted-foreground mt-1 text-xs\">{labels.requiresSetupLabel}</p>\n ) : null}\n </div>\n ) : null}\n\n <Field data-invalid={!!fieldErrors?.length}>\n <CheckoutFieldFeedback\n id={checkoutId('checkout-payment-method')}\n errors={fieldErrors}\n description={description}\n />\n </Field>\n\n {onApplyGiftCard ? (\n <div className=\"flex flex-col gap-2 rounded-lg border p-4\">\n <p className=\"text-sm font-medium\">{labels.giftCardLabel}</p>\n <div className=\"flex flex-wrap gap-2\">\n <Input\n id={checkoutId('checkout-gift-card')}\n value={giftCardCode}\n placeholder={labels.giftCardPlaceholder}\n onChange={(e) => setGiftCardCode(e.target.value)}\n className=\"min-w-0 flex-1\"\n />\n <Button\n type=\"button\"\n variant=\"outline\"\n disabled={giftCardState === 'pending' || giftCardCode.trim() === ''}\n onClick={() => onApplyGiftCard(giftCardCode.trim())}\n >\n {labels.applyLabel}\n </Button>\n </div>\n {giftCardMessage ? (\n <p\n className={giftCardState === 'invalid' ? 'text-destructive text-sm' : 'text-muted-foreground text-sm'}\n role={giftCardState === 'invalid' ? 'alert' : 'status'}\n >\n {giftCardMessage}\n </p>\n ) : null}\n </div>\n ) : null}\n\n {adjustmentPayments && adjustmentPayments.length > 0 ? (\n <div className=\"flex flex-col gap-2\">\n {adjustmentPayments.map((adjustment) => (\n <div\n key={adjustment.id}\n className=\"flex flex-wrap items-center justify-between gap-2 rounded-lg border px-4 py-3 text-sm\"\n >\n <span>{adjustment.label}</span>\n <span className=\"flex items-center gap-3\">\n <span className=\"tabular-nums\">\n {formatMoney(adjustment.amount, formatMoneyProp)}\n </span>\n {onRemoveAdjustment ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => onRemoveAdjustment(adjustment.id)}\n >\n {labels.removeLabel}\n </Button>\n ) : null}\n </span>\n </div>\n ))}\n </div>\n ) : null}\n\n {storeCredit ? (\n <div className=\"flex flex-col gap-2 rounded-lg border p-4 text-sm\">\n <p className=\"font-medium\">{labels.storeCreditLabel}</p>\n <p className=\"text-muted-foreground\">\n {labels.availableCreditLabel}: {formatMoney(storeCredit.available, formatMoneyProp)}\n </p>\n {isAvailableMoney(storeCredit.applied) ? (\n <p>\n {labels.applyLabel}: {formatMoney(storeCredit.applied, formatMoneyProp)}\n </p>\n ) : null}\n <div className=\"flex flex-wrap gap-2\">\n {storeCredit.onApply ? (\n <Button type=\"button\" variant=\"outline\" size=\"sm\" onClick={storeCredit.onApply}>\n {labels.applyLabel}\n </Button>\n ) : null}\n {storeCredit.onRemove ? (\n <Button type=\"button\" variant=\"ghost\" size=\"sm\" onClick={storeCredit.onRemove}>\n {labels.removeLabel}\n </Button>\n ) : null}\n </div>\n </div>\n ) : null}\n </div>\n </FieldSet>\n )\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
|
-
import type { PaymentMethod } from '@thorprovider/types';
|
|
2
|
-
import type { CheckoutLabels,
|
|
1
|
+
import type { CheckoutAddressValues, CheckoutAdjustmentPayment, CheckoutContactValues, CheckoutShippingGroup, Money, PaymentMethod } from '@thorprovider/types';
|
|
2
|
+
import type { CheckoutLabels, CheckoutOrderSummary } from './checkout';
|
|
3
3
|
export interface CheckoutReviewStepProps {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
contact: CheckoutContactValues;
|
|
5
|
+
shippingAddress: CheckoutAddressValues;
|
|
6
|
+
billingAddress?: CheckoutAddressValues;
|
|
7
|
+
sameAsShipping: boolean;
|
|
8
|
+
shippingGroups?: CheckoutShippingGroup[];
|
|
9
|
+
paymentMethod: string;
|
|
8
10
|
paymentMethods?: PaymentMethod[];
|
|
11
|
+
adjustmentPayments?: CheckoutAdjustmentPayment[];
|
|
12
|
+
orderSummary?: CheckoutOrderSummary;
|
|
13
|
+
labels: CheckoutLabels;
|
|
14
|
+
formatMoney?: (money: Money) => string;
|
|
9
15
|
}
|
|
10
|
-
export declare function CheckoutReviewStep({
|
|
16
|
+
export declare function CheckoutReviewStep({ contact, shippingAddress, billingAddress, sameAsShipping, shippingGroups, paymentMethod, paymentMethods, adjustmentPayments, orderSummary, labels, formatMoney: formatMoneyProp, }: CheckoutReviewStepProps): import("react").JSX.Element;
|
|
11
17
|
//# sourceMappingURL=checkout-review-step.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout-review-step.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"checkout-review-step.d.ts","sourceRoot":"","sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,qBAAqB,EACrB,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,KAAK,EACL,aAAa,EACd,MAAM,qBAAqB,CAAA;AAC5B,OAAO,KAAK,EACV,cAAc,EAEd,oBAAoB,EACrB,MAAM,YAAY,CAAA;AAEnB,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,qBAAqB,CAAA;IAC9B,eAAe,EAAE,qBAAqB,CAAA;IACtC,cAAc,CAAC,EAAE,qBAAqB,CAAA;IACtC,cAAc,EAAE,OAAO,CAAA;IACvB,cAAc,CAAC,EAAE,qBAAqB,EAAE,CAAA;IACxC,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,CAAC,EAAE,aAAa,EAAE,CAAA;IAChC,kBAAkB,CAAC,EAAE,yBAAyB,EAAE,CAAA;IAChD,YAAY,CAAC,EAAE,oBAAoB,CAAA;IACnC,MAAM,EAAE,cAAc,CAAA;IACtB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,MAAM,CAAA;CACvC;AA4FD,wBAAgB,kBAAkB,CAAC,EACjC,OAAO,EACP,eAAe,EACf,cAAc,EACd,cAAc,EACd,cAAc,EACd,aAAa,EACb,cAAc,EACd,kBAAkB,EAClB,YAAY,EACZ,MAAM,EACN,WAAW,EAAE,eAAe,GAC7B,EAAE,uBAAuB,+BAqMzB"}
|
|
@@ -23,38 +23,189 @@ __export(checkout_review_step_exports, {
|
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(checkout_review_step_exports);
|
|
25
25
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
|
+
var import_money = require("../../../lib/money.js");
|
|
27
|
+
function resolveGroupMembership(groups, lines) {
|
|
28
|
+
if (!lines?.length || groups.some((group) => !group.items?.length)) return null;
|
|
29
|
+
const linesById = new Map(lines.map((line) => [String(line.id), line]));
|
|
30
|
+
const assigned = /* @__PURE__ */ new Map();
|
|
31
|
+
const itemsByGroup = /* @__PURE__ */ new Map();
|
|
32
|
+
for (const group of groups) {
|
|
33
|
+
const groupItems = [];
|
|
34
|
+
for (const item of group.items ?? []) {
|
|
35
|
+
const line = linesById.get(item.lineId);
|
|
36
|
+
if (!line) return null;
|
|
37
|
+
const quantity = item.quantity ?? line.quantity;
|
|
38
|
+
if (!Number.isInteger(quantity) || quantity <= 0 || quantity > line.quantity) {
|
|
39
|
+
return null;
|
|
40
|
+
}
|
|
41
|
+
assigned.set(item.lineId, (assigned.get(item.lineId) ?? 0) + quantity);
|
|
42
|
+
groupItems.push({
|
|
43
|
+
line,
|
|
44
|
+
quantity,
|
|
45
|
+
showLineTotal: quantity === line.quantity
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
itemsByGroup.set(group.id, groupItems);
|
|
49
|
+
}
|
|
50
|
+
for (const line of lines) {
|
|
51
|
+
if ((assigned.get(String(line.id)) ?? 0) !== line.quantity) return null;
|
|
52
|
+
}
|
|
53
|
+
return itemsByGroup;
|
|
54
|
+
}
|
|
55
|
+
function formatAddress(address) {
|
|
56
|
+
return [
|
|
57
|
+
[address.firstName, address.lastName].filter(Boolean).join(" "),
|
|
58
|
+
address.company,
|
|
59
|
+
address.address1,
|
|
60
|
+
address.address2,
|
|
61
|
+
[address.city, address.province, address.postalCode].filter(Boolean).join(" "),
|
|
62
|
+
address.countryCode,
|
|
63
|
+
address.phone
|
|
64
|
+
].filter(Boolean).join(", ");
|
|
65
|
+
}
|
|
66
|
+
function groupHeading(labels, group, index, total) {
|
|
67
|
+
const sequence = labels.reviewGroupLabel.replace("{n}", String(index + 1)).replace("{total}", String(total));
|
|
68
|
+
return group.label ? `${sequence} \xB7 ${group.label}` : sequence;
|
|
69
|
+
}
|
|
70
|
+
function deliveryText(group, labels, formatMoneyProp) {
|
|
71
|
+
const selected = group.options.find((option) => option.id === group.selectedOptionId);
|
|
72
|
+
if (!selected) return "";
|
|
73
|
+
const details = [selected.name];
|
|
74
|
+
if (selected.estimatedDays) details.push(selected.estimatedDays);
|
|
75
|
+
if ((0, import_money.isAvailableMoney)(selected.price)) {
|
|
76
|
+
const price = (0, import_money.formatMoney)(selected.price, formatMoneyProp);
|
|
77
|
+
if (price) details.push(price);
|
|
78
|
+
}
|
|
79
|
+
return group.label ? `${group.label}: ${details.join(" \xB7 ")}` : details.join(" \xB7 ");
|
|
80
|
+
}
|
|
26
81
|
function CheckoutReviewStep({
|
|
27
|
-
|
|
82
|
+
contact,
|
|
83
|
+
shippingAddress,
|
|
84
|
+
billingAddress,
|
|
85
|
+
sameAsShipping,
|
|
86
|
+
shippingGroups,
|
|
87
|
+
paymentMethod,
|
|
88
|
+
paymentMethods,
|
|
89
|
+
adjustmentPayments,
|
|
90
|
+
orderSummary,
|
|
28
91
|
labels,
|
|
29
|
-
|
|
30
|
-
shippingOptions,
|
|
31
|
-
paymentMethods
|
|
92
|
+
formatMoney: formatMoneyProp
|
|
32
93
|
}) {
|
|
33
|
-
const
|
|
34
|
-
|
|
35
|
-
)
|
|
36
|
-
const
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
{ label: labels.reviewShipToLabel, value:
|
|
46
|
-
{
|
|
47
|
-
|
|
94
|
+
const groups = shippingGroups ?? [];
|
|
95
|
+
const multiGroup = groups.length > 1;
|
|
96
|
+
const membership = multiGroup ? resolveGroupMembership(groups, orderSummary?.items) : null;
|
|
97
|
+
const showFlatLines = !multiGroup || !membership;
|
|
98
|
+
const paymentName = paymentMethods?.find((method) => method.id === paymentMethod)?.name;
|
|
99
|
+
const contactName = [contact.firstName, contact.lastName].filter(Boolean).join(" ");
|
|
100
|
+
const singleDelivery = !multiGroup && groups[0] ? deliveryText(groups[0], labels, formatMoneyProp) : "";
|
|
101
|
+
const identityRows = [
|
|
102
|
+
{
|
|
103
|
+
label: labels.reviewContactLabel,
|
|
104
|
+
value: [contactName, contact.email, contact.phone].filter(Boolean).join(", ")
|
|
105
|
+
},
|
|
106
|
+
{ label: labels.reviewShipToLabel, value: formatAddress(shippingAddress) },
|
|
107
|
+
{
|
|
108
|
+
label: labels.reviewBillingLabel,
|
|
109
|
+
value: sameAsShipping ? labels.reviewSameAsShippingLabel : billingAddress ? formatAddress(billingAddress) : ""
|
|
110
|
+
}
|
|
48
111
|
].filter((row) => row.value.trim() !== "");
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
112
|
+
const paymentRows = [{ label: labels.reviewPaymentLabel, value: paymentName ?? "" }].filter(
|
|
113
|
+
(row) => row.value.trim() !== ""
|
|
114
|
+
);
|
|
115
|
+
const adjustments = (adjustmentPayments ?? []).filter(
|
|
116
|
+
(adjustment) => (0, import_money.isAvailableMoney)(adjustment.amount)
|
|
117
|
+
);
|
|
118
|
+
const hasSummary = identityRows.length > 0 || paymentRows.length > 0 || Boolean(singleDelivery) || multiGroup;
|
|
119
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "bg-muted/50 flex flex-col gap-6 rounded-lg p-6", children: [
|
|
120
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { children: !hasSummary ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground mt-2 text-sm", children: labels.reviewEmptyLabel }) : /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
121
|
+
identityRows.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", { className: "mt-4 flex flex-col gap-4 text-sm", children: identityRows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
122
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dt", { className: "inline font-medium", children: [
|
|
123
|
+
row.label,
|
|
124
|
+
": "
|
|
125
|
+
] }),
|
|
126
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "inline", children: row.value })
|
|
127
|
+
] }, row.label)) }) : null,
|
|
128
|
+
multiGroup ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-4", children: [
|
|
129
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { className: "font-medium", children: labels.reviewDeliveryGroupsLabel }),
|
|
130
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("ol", { className: "mt-3 flex flex-col gap-3", children: groups.map((group, index) => {
|
|
131
|
+
const selected = group.options.find(
|
|
132
|
+
(option) => option.id === group.selectedOptionId
|
|
133
|
+
);
|
|
134
|
+
const groupItems = membership?.get(group.id) ?? [];
|
|
135
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
136
|
+
"li",
|
|
137
|
+
{
|
|
138
|
+
className: "bg-background/60 rounded-md border p-4 text-sm",
|
|
139
|
+
"data-checkout-review-group": group.id,
|
|
140
|
+
children: [
|
|
141
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h4", { className: "font-medium", children: groupHeading(labels, group, index, groups.length) }),
|
|
142
|
+
selected ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-2 flex flex-wrap items-baseline justify-between gap-2", children: [
|
|
143
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { children: selected.name }),
|
|
144
|
+
selected.estimatedDays ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "text-muted-foreground text-xs", children: selected.estimatedDays }) : null,
|
|
145
|
+
(0, import_money.isAvailableMoney)(selected.price) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "tabular-nums", children: (0, import_money.formatMoney)(selected.price, formatMoneyProp) }) : null
|
|
146
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: "text-muted-foreground mt-2 text-sm", children: group.unavailableReason ?? labels.groupUnavailableLabel }),
|
|
147
|
+
membership && groupItems.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "mt-3", children: [
|
|
148
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h5", { className: "text-muted-foreground text-xs font-medium", children: labels.reviewGroupItemsLabel }),
|
|
149
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("ul", { className: "mt-1 flex flex-col gap-1", children: groupItems.map(({ line, quantity, showLineTotal }, itemIndex) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
150
|
+
"li",
|
|
151
|
+
{
|
|
152
|
+
className: "flex items-center justify-between gap-3",
|
|
153
|
+
children: [
|
|
154
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
|
|
155
|
+
line.name,
|
|
156
|
+
" \xD7 ",
|
|
157
|
+
quantity
|
|
158
|
+
] }),
|
|
159
|
+
showLineTotal && (0, import_money.isAvailableMoney)(line.lineTotal) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "tabular-nums", children: (0, import_money.formatMoney)(line.lineTotal, formatMoneyProp) }) : null
|
|
160
|
+
]
|
|
161
|
+
},
|
|
162
|
+
`${group.id}-${String(line.id)}-${itemIndex}`
|
|
163
|
+
)) })
|
|
164
|
+
] }) : null
|
|
165
|
+
]
|
|
166
|
+
},
|
|
167
|
+
group.id
|
|
168
|
+
);
|
|
169
|
+
}) })
|
|
170
|
+
] }) : singleDelivery ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", { className: "mt-4 flex flex-col gap-4 text-sm", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
171
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dt", { className: "inline font-medium", children: [
|
|
172
|
+
labels.reviewShippingLabel,
|
|
173
|
+
": "
|
|
174
|
+
] }),
|
|
175
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "inline", children: singleDelivery })
|
|
176
|
+
] }) }) : null,
|
|
177
|
+
paymentRows.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", { className: "mt-4 flex flex-col gap-4 text-sm", children: paymentRows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
178
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dt", { className: "inline font-medium", children: [
|
|
179
|
+
row.label,
|
|
180
|
+
": "
|
|
181
|
+
] }),
|
|
182
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "inline", children: row.value })
|
|
183
|
+
] }, row.label)) }) : null
|
|
184
|
+
] }) }),
|
|
185
|
+
adjustments.length > 0 ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
186
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { className: "font-medium", children: labels.reviewAdjustmentsLabel }),
|
|
187
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", { className: "mt-2 flex flex-col gap-2 text-sm", children: adjustments.map((adjustment) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
188
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: adjustment.label }),
|
|
189
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "tabular-nums", children: (0, import_money.formatMoney)(adjustment.amount, formatMoneyProp) })
|
|
190
|
+
] }, adjustment.id)) })
|
|
191
|
+
] }) : null,
|
|
192
|
+
orderSummary?.items.length ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { children: [
|
|
193
|
+
showFlatLines ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
194
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("h3", { className: "font-medium", children: labels.reviewLinesLabel }),
|
|
195
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dl", { className: "mt-2 flex flex-col gap-2 text-sm", children: orderSummary.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
196
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dt", { children: [
|
|
197
|
+
item.name,
|
|
198
|
+
" \xD7 ",
|
|
199
|
+
item.quantity
|
|
200
|
+
] }),
|
|
201
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "tabular-nums", children: (0, import_money.isAvailableMoney)(item.lineTotal) ? (0, import_money.formatMoney)(item.lineTotal, formatMoneyProp) : labels.amountUnavailableLabel })
|
|
202
|
+
] }, String(item.id))) })
|
|
203
|
+
] }) : null,
|
|
204
|
+
(0, import_money.isAvailableMoney)(orderSummary.totals?.total) ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("dl", { className: "mt-2 flex items-center justify-between gap-3 border-t pt-2 text-sm font-medium", children: [
|
|
205
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dt", { children: labels.totalLabel }),
|
|
206
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("dd", { className: "tabular-nums", children: (0, import_money.formatMoney)(orderSummary.totals.total, formatMoneyProp) })
|
|
207
|
+
] }) : null
|
|
208
|
+
] }) : null
|
|
58
209
|
] });
|
|
59
210
|
}
|
|
60
211
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx"],"sourcesContent":["'use client'\n\nimport type { PaymentMethod } from '@thorprovider/types'\nimport type { CheckoutLabels, CheckoutShippingOption, CheckoutValues } from './checkout'\n\nexport interface CheckoutReviewStepProps {\n values: CheckoutValues\n labels: CheckoutLabels\n selectedShippingOptionId?: string\n shippingOptions?: CheckoutShippingOption[]\n paymentMethods?: PaymentMethod[]\n}\n\nexport function CheckoutReviewStep({\n values,\n labels,\n selectedShippingOptionId,\n shippingOptions,\n paymentMethods,\n}: CheckoutReviewStepProps) {\n const shippingName = shippingOptions?.find(\n (method) => method.id === selectedShippingOptionId,\n )?.name\n const paymentName = paymentMethods?.find((method) => method.id === values.paymentMethod)?.name\n\n const shipTo = [\n [values.firstName, values.lastName].filter(Boolean).join(' '),\n values.address,\n [values.city, values.state, values.zipCode].filter(Boolean).join(' '),\n values.country,\n ]\n .filter(Boolean)\n .join(', ')\n\n const rows = [\n { label: labels.reviewContactLabel, value: values.email },\n { label: labels.reviewShipToLabel, value: shipTo },\n { label: labels.reviewPaymentLabel, value: paymentName ?? '' },\n { label: labels.reviewShippingLabel, value: shippingName ?? '' },\n ].filter((row) => row.value.trim() !== '')\n\n return (\n <div className=\"bg-muted/50 rounded-lg p-6\">\n <h3 className=\"mb-4 font-medium\">{labels.reviewHeading}</h3>\n {rows.length === 0 ? (\n <p className=\"text-muted-foreground text-sm\">{labels.reviewEmptyLabel}</p>\n ) : (\n <dl className=\"flex flex-col gap-4 text-sm\">\n {rows.map((row) => (\n <div key={row.label}>\n <dt className=\"inline font-medium\">{row.label}: </dt>\n <dd className=\"inline\">{row.value}</dd>\n </div>\n ))}\n </dl>\n )}\n </div>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA2CM;AA9BC,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,QAAM,eAAe,iBAAiB;AAAA,IACpC,CAAC,WAAW,OAAO,OAAO;AAAA,EAC5B,GAAG;AACH,QAAM,cAAc,gBAAgB,KAAK,CAAC,WAAW,OAAO,OAAO,OAAO,aAAa,GAAG;AAE1F,QAAM,SAAS;AAAA,IACb,CAAC,OAAO,WAAW,OAAO,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IAC5D,OAAO;AAAA,IACP,CAAC,OAAO,MAAM,OAAO,OAAO,OAAO,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAAA,IACpE,OAAO;AAAA,EACT,EACG,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,QAAM,OAAO;AAAA,IACX,EAAE,OAAO,OAAO,oBAAoB,OAAO,OAAO,MAAM;AAAA,IACxD,EAAE,OAAO,OAAO,mBAAmB,OAAO,OAAO;AAAA,IACjD,EAAE,OAAO,OAAO,oBAAoB,OAAO,eAAe,GAAG;AAAA,IAC7D,EAAE,OAAO,OAAO,qBAAqB,OAAO,gBAAgB,GAAG;AAAA,EACjE,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,KAAK,MAAM,EAAE;AAEzC,SACE,6CAAC,SAAI,WAAU,8BACb;AAAA,gDAAC,QAAG,WAAU,oBAAoB,iBAAO,eAAc;AAAA,IACtD,KAAK,WAAW,IACf,4CAAC,OAAE,WAAU,iCAAiC,iBAAO,kBAAiB,IAEtE,4CAAC,QAAG,WAAU,+BACX,eAAK,IAAI,CAAC,QACT,6CAAC,SACC;AAAA,mDAAC,QAAG,WAAU,sBAAsB;AAAA,YAAI;AAAA,QAAM;AAAA,SAAE;AAAA,MAChD,4CAAC,QAAG,WAAU,UAAU,cAAI,OAAM;AAAA,SAF1B,IAAI,KAGd,CACD,GACH;AAAA,KAEJ;AAEJ;","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../../src/blocks/e-commerce/checkout-forms/checkout-review-step.tsx"],"sourcesContent":["'use client'\n\nimport { formatMoney, isAvailableMoney } from '../../../lib/money'\nimport type {\n CheckoutAddressValues,\n CheckoutAdjustmentPayment,\n CheckoutContactValues,\n CheckoutShippingGroup,\n Money,\n PaymentMethod,\n} from '@thorprovider/types'\nimport type {\n CheckoutLabels,\n CheckoutOrderLine,\n CheckoutOrderSummary,\n} from './checkout'\n\nexport interface CheckoutReviewStepProps {\n contact: CheckoutContactValues\n shippingAddress: CheckoutAddressValues\n billingAddress?: CheckoutAddressValues\n sameAsShipping: boolean\n shippingGroups?: CheckoutShippingGroup[]\n paymentMethod: string\n paymentMethods?: PaymentMethod[]\n adjustmentPayments?: CheckoutAdjustmentPayment[]\n orderSummary?: CheckoutOrderSummary\n labels: CheckoutLabels\n formatMoney?: (money: Money) => string\n}\n\ninterface ResolvedGroupItem {\n line: CheckoutOrderLine\n quantity: number\n showLineTotal: boolean\n}\n\nfunction resolveGroupMembership(\n groups: CheckoutShippingGroup[],\n lines: CheckoutOrderLine[] | undefined,\n): Map<string, ResolvedGroupItem[]> | null {\n if (!lines?.length || groups.some((group) => !group.items?.length)) return null\n\n\n const linesById = new Map(lines.map((line) => [String(line.id), line]))\n const assigned = new Map<string, number>()\n const itemsByGroup = new Map<string, ResolvedGroupItem[]>()\n\n for (const group of groups) {\n const groupItems: ResolvedGroupItem[] = []\n for (const item of group.items ?? []) {\n const line = linesById.get(item.lineId)\n if (!line) return null\n\n const quantity = item.quantity ?? line.quantity\n if (!Number.isInteger(quantity) || quantity <= 0 || quantity > line.quantity) {\n return null\n }\n\n assigned.set(item.lineId, (assigned.get(item.lineId) ?? 0) + quantity)\n groupItems.push({\n line,\n quantity,\n showLineTotal: quantity === line.quantity,\n })\n }\n itemsByGroup.set(group.id, groupItems)\n }\n\n for (const line of lines) {\n if ((assigned.get(String(line.id)) ?? 0) !== line.quantity) return null\n }\n\n return itemsByGroup\n}\n\nfunction formatAddress(address: CheckoutAddressValues): string {\n return [\n [address.firstName, address.lastName].filter(Boolean).join(' '),\n address.company,\n address.address1,\n address.address2,\n [address.city, address.province, address.postalCode].filter(Boolean).join(' '),\n address.countryCode,\n address.phone,\n ]\n .filter(Boolean)\n .join(', ')\n}\n\nfunction groupHeading(\n labels: CheckoutLabels,\n group: CheckoutShippingGroup,\n index: number,\n total: number,\n): string {\n const sequence = labels.reviewGroupLabel\n .replace('{n}', String(index + 1))\n .replace('{total}', String(total))\n\n return group.label ? `${sequence} · ${group.label}` : sequence\n}\n\nfunction deliveryText(\n group: CheckoutShippingGroup,\n labels: CheckoutLabels,\n formatMoneyProp?: (money: Money) => string,\n): string {\n const selected = group.options.find((option) => option.id === group.selectedOptionId)\n if (!selected) return ''\n\n const details = [selected.name]\n if (selected.estimatedDays) details.push(selected.estimatedDays)\n if (isAvailableMoney(selected.price)) {\n const price = formatMoney(selected.price, formatMoneyProp)\n if (price) details.push(price)\n }\n\n return group.label ? `${group.label}: ${details.join(' · ')}` : details.join(' · ')\n}\n\nexport function CheckoutReviewStep({\n contact,\n shippingAddress,\n billingAddress,\n sameAsShipping,\n shippingGroups,\n paymentMethod,\n paymentMethods,\n adjustmentPayments,\n orderSummary,\n labels,\n formatMoney: formatMoneyProp,\n}: CheckoutReviewStepProps) {\n const groups = shippingGroups ?? []\n const multiGroup = groups.length > 1\n const membership = multiGroup ? resolveGroupMembership(groups, orderSummary?.items) : null\n const showFlatLines = !multiGroup || !membership\n const paymentName = paymentMethods?.find((method) => method.id === paymentMethod)?.name\n const contactName = [contact.firstName, contact.lastName].filter(Boolean).join(' ')\n const singleDelivery = !multiGroup && groups[0]\n ? deliveryText(groups[0], labels, formatMoneyProp)\n : ''\n\n const identityRows = [\n {\n label: labels.reviewContactLabel,\n value: [contactName, contact.email, contact.phone].filter(Boolean).join(', '),\n },\n { label: labels.reviewShipToLabel, value: formatAddress(shippingAddress) },\n {\n label: labels.reviewBillingLabel,\n value: sameAsShipping\n ? labels.reviewSameAsShippingLabel\n : billingAddress\n ? formatAddress(billingAddress)\n : '',\n },\n ].filter((row) => row.value.trim() !== '')\n\n const paymentRows = [{ label: labels.reviewPaymentLabel, value: paymentName ?? '' }].filter(\n (row) => row.value.trim() !== '',\n )\n\n const adjustments = (adjustmentPayments ?? []).filter((adjustment) =>\n isAvailableMoney(adjustment.amount),\n )\n\n const hasSummary =\n identityRows.length > 0 || paymentRows.length > 0 || Boolean(singleDelivery) || multiGroup\n\n return (\n <div className=\"bg-muted/50 flex flex-col gap-6 rounded-lg p-6\">\n <div>\n {!hasSummary ? (\n <p className=\"text-muted-foreground mt-2 text-sm\">{labels.reviewEmptyLabel}</p>\n ) : (\n <>\n {identityRows.length > 0 ? (\n <dl className=\"mt-4 flex flex-col gap-4 text-sm\">\n {identityRows.map((row) => (\n <div key={row.label}>\n <dt className=\"inline font-medium\">{row.label}: </dt>\n <dd className=\"inline\">{row.value}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n\n {multiGroup ? (\n <div className=\"mt-4\">\n <h3 className=\"font-medium\">{labels.reviewDeliveryGroupsLabel}</h3>\n <ol className=\"mt-3 flex flex-col gap-3\">\n {groups.map((group, index) => {\n const selected = group.options.find(\n (option) => option.id === group.selectedOptionId,\n )\n const groupItems = membership?.get(group.id) ?? []\n\n return (\n <li\n key={group.id}\n className=\"bg-background/60 rounded-md border p-4 text-sm\"\n data-checkout-review-group={group.id}\n >\n <h4 className=\"font-medium\">\n {groupHeading(labels, group, index, groups.length)}\n </h4>\n\n {selected ? (\n <div className=\"mt-2 flex flex-wrap items-baseline justify-between gap-2\">\n <span>{selected.name}</span>\n {selected.estimatedDays ? (\n <span className=\"text-muted-foreground text-xs\">\n {selected.estimatedDays}\n </span>\n ) : null}\n {isAvailableMoney(selected.price) ? (\n <span className=\"tabular-nums\">\n {formatMoney(selected.price, formatMoneyProp)}\n </span>\n ) : null}\n </div>\n ) : (\n <p className=\"text-muted-foreground mt-2 text-sm\">\n {group.unavailableReason ?? labels.groupUnavailableLabel}\n </p>\n )}\n\n {membership && groupItems.length > 0 ? (\n <div className=\"mt-3\">\n <h5 className=\"text-muted-foreground text-xs font-medium\">\n {labels.reviewGroupItemsLabel}\n </h5>\n <ul className=\"mt-1 flex flex-col gap-1\">\n {groupItems.map(({ line, quantity, showLineTotal }, itemIndex) => (\n <li\n key={`${group.id}-${String(line.id)}-${itemIndex}`}\n className=\"flex items-center justify-between gap-3\"\n >\n <span>\n {line.name} × {quantity}\n </span>\n {showLineTotal && isAvailableMoney(line.lineTotal) ? (\n <span className=\"tabular-nums\">\n {formatMoney(line.lineTotal, formatMoneyProp)}\n </span>\n ) : null}\n </li>\n ))}\n </ul>\n </div>\n ) : null}\n </li>\n )\n })}\n </ol>\n </div>\n ) : singleDelivery ? (\n <dl className=\"mt-4 flex flex-col gap-4 text-sm\">\n <div>\n <dt className=\"inline font-medium\">{labels.reviewShippingLabel}: </dt>\n <dd className=\"inline\">{singleDelivery}</dd>\n </div>\n </dl>\n ) : null}\n\n {paymentRows.length > 0 ? (\n <dl className=\"mt-4 flex flex-col gap-4 text-sm\">\n {paymentRows.map((row) => (\n <div key={row.label}>\n <dt className=\"inline font-medium\">{row.label}: </dt>\n <dd className=\"inline\">{row.value}</dd>\n </div>\n ))}\n </dl>\n ) : null}\n </>\n )}\n </div>\n\n {adjustments.length > 0 ? (\n <div>\n <h3 className=\"font-medium\">{labels.reviewAdjustmentsLabel}</h3>\n <dl className=\"mt-2 flex flex-col gap-2 text-sm\">\n {adjustments.map((adjustment) => (\n <div key={adjustment.id} className=\"flex items-center justify-between gap-3\">\n <dt>{adjustment.label}</dt>\n <dd className=\"tabular-nums\">\n {formatMoney(adjustment.amount, formatMoneyProp)}\n </dd>\n </div>\n ))}\n </dl>\n </div>\n ) : null}\n\n {orderSummary?.items.length ? (\n <div>\n {showFlatLines ? (\n <>\n <h3 className=\"font-medium\">{labels.reviewLinesLabel}</h3>\n <dl className=\"mt-2 flex flex-col gap-2 text-sm\">\n {orderSummary.items.map((item) => (\n <div key={String(item.id)} className=\"flex items-center justify-between gap-3\">\n <dt>\n {item.name} × {item.quantity}\n </dt>\n <dd className=\"tabular-nums\">\n {isAvailableMoney(item.lineTotal)\n ? formatMoney(item.lineTotal, formatMoneyProp)\n : labels.amountUnavailableLabel}\n </dd>\n </div>\n ))}\n </dl>\n </>\n ) : null}\n {isAvailableMoney(orderSummary.totals?.total) ? (\n <dl className=\"mt-2 flex items-center justify-between gap-3 border-t pt-2 text-sm font-medium\">\n <dt>{labels.totalLabel}</dt>\n <dd className=\"tabular-nums\">\n {formatMoney(orderSummary.totals.total, formatMoneyProp)}\n </dd>\n </dl>\n ) : null}\n </div>\n ) : null}\n </div>\n )\n}\n"],"mappings":"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","names":[]}
|