@dropins/storefront-cart 1.3.1-alpha2 → 1.4.0-alpha2
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/api/fetch-graphql/fetch-graphql.d.ts +2 -2
- package/api/initialize/initialize.d.ts +3 -3
- package/api.js +1 -0
- package/api.js.map +1 -0
- package/chunks/CartSummaryGrid.js +2 -1
- package/chunks/CartSummaryGrid.js.map +1 -0
- package/chunks/CartSummaryList.js +2 -1
- package/chunks/CartSummaryList.js.map +1 -0
- package/chunks/CartSummaryTable2.js +4 -0
- package/chunks/CartSummaryTable2.js.map +1 -0
- package/chunks/ChevronDown.js +1 -0
- package/chunks/ChevronDown.js.map +1 -0
- package/chunks/ChevronUp.js +1 -0
- package/chunks/ChevronUp.js.map +1 -0
- package/chunks/Coupon.js +1 -0
- package/chunks/Coupon.js.map +1 -0
- package/chunks/Coupons.js +2 -1
- package/chunks/Coupons.js.map +1 -0
- package/chunks/EmptyCart.js +2 -1
- package/chunks/EmptyCart.js.map +1 -0
- package/chunks/GiftCard.js +1 -0
- package/chunks/GiftCard.js.map +1 -0
- package/chunks/OrderSummary.js +2 -1
- package/chunks/OrderSummary.js.map +1 -0
- package/chunks/OrderSummaryLine.js +2 -1
- package/chunks/OrderSummaryLine.js.map +1 -0
- package/chunks/WarningWithCircle.js +4 -0
- package/chunks/WarningWithCircle.js.map +1 -0
- package/chunks/acdl.js +2 -1
- package/chunks/acdl.js.map +1 -0
- package/chunks/applyCouponsToCart.js +1 -0
- package/chunks/applyCouponsToCart.js.map +1 -0
- package/chunks/getEstimateShipping.js +1 -0
- package/chunks/getEstimateShipping.js.map +1 -0
- package/chunks/getEstimatedTotals.js +1 -0
- package/chunks/getEstimatedTotals.js.map +1 -0
- package/chunks/persisted-data.js +1 -0
- package/chunks/persisted-data.js.map +1 -0
- package/chunks/refreshCart.js +1 -0
- package/chunks/refreshCart.js.map +1 -0
- package/chunks/removeGiftCardFromCart.js +1 -0
- package/chunks/removeGiftCardFromCart.js.map +1 -0
- package/chunks/resetCart.js +1 -0
- package/chunks/resetCart.js.map +1 -0
- package/chunks/setGiftOptionsOnCart.js +1 -0
- package/chunks/setGiftOptionsOnCart.js.map +1 -0
- package/chunks/updateProductsFromCart.js +8 -7
- package/chunks/updateProductsFromCart.js.map +1 -0
- package/components/CartSummaryTable/CartSummaryTable.d.ts +42 -0
- package/components/CartSummaryTable/Elements/Item/Item.d.ts +13 -0
- package/components/CartSummaryTable/Elements/Item/index.d.ts +11 -0
- package/components/CartSummaryTable/Elements/index.d.ts +2 -0
- package/components/CartSummaryTable/index.d.ts +11 -0
- package/components/GiftOptions/Elements/GiftOptionModal.d.ts +1 -1
- package/components/GiftOptions/GiftOptions.d.ts +1 -1
- package/components/index.d.ts +1 -0
- package/containers/CartSummaryGrid/CartSummaryGrid.d.ts +2 -2
- package/containers/CartSummaryGrid.js +2 -1
- package/containers/CartSummaryGrid.js.map +1 -0
- package/containers/CartSummaryList/CartSummaryList.d.ts +2 -2
- package/containers/CartSummaryList.js +2 -1
- package/containers/CartSummaryList.js.map +1 -0
- package/containers/CartSummaryTable/CartSummaryTable.d.ts +86 -0
- package/containers/CartSummaryTable/index.d.ts +11 -0
- package/containers/CartSummaryTable.d.ts +3 -0
- package/containers/CartSummaryTable.js +4 -0
- package/containers/CartSummaryTable.js.map +1 -0
- package/containers/Coupons/Coupons.d.ts +1 -1
- package/containers/Coupons.js +2 -1
- package/containers/Coupons.js.map +1 -0
- package/containers/EmptyCart/EmptyCart.d.ts +1 -1
- package/containers/EmptyCart.js +2 -1
- package/containers/EmptyCart.js.map +1 -0
- package/containers/EstimateShipping/EstimateShipping.d.ts +1 -1
- package/containers/EstimateShipping.js +2 -1
- package/containers/EstimateShipping.js.map +1 -0
- package/containers/GiftCards/GiftCards.d.ts +1 -1
- package/containers/GiftCards.js +2 -1
- package/containers/GiftCards.js.map +1 -0
- package/containers/GiftOptions/GiftOptions.d.ts +2 -2
- package/containers/GiftOptions.js +2 -1
- package/containers/GiftOptions.js.map +1 -0
- package/containers/MiniCart/MiniCart.d.ts +2 -2
- package/containers/MiniCart.js +2 -1
- package/containers/MiniCart.js.map +1 -0
- package/containers/OrderSummary/OrderSummary.d.ts +1 -1
- package/containers/OrderSummary.js +2 -1
- package/containers/OrderSummary.js.map +1 -0
- package/containers/OrderSummaryLine/OrderSummaryLine.d.ts +1 -1
- package/containers/OrderSummaryLine.js +2 -1
- package/containers/OrderSummaryLine.js.map +1 -0
- package/containers/index.d.ts +1 -0
- package/data/models/acdl-models.d.ts +18 -0
- package/fragments.js +1 -0
- package/fragments.js.map +1 -0
- package/hooks/useCartItems.d.ts +85 -0
- package/hooks/useGiftOptions.d.ts +1 -2
- package/i18n/en_US.json.d.ts +16 -5
- package/package.json +1 -1
- package/render/render.d.ts +1 -1
- package/render.js +4 -2
- package/render.js.map +1 -0
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/*! Copyright 2025 Adobe
|
|
2
|
+
All Rights Reserved. */
|
|
3
|
+
import{C as T,C as c}from"../chunks/CartSummaryTable2.js";import"@dropins/tools/preact-jsx-runtime.js";import"@dropins/tools/lib.js";import"@dropins/tools/components.js";/* empty css */import"@dropins/tools/preact-compat.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/i18n.js";import"@dropins/tools/event-bus.js";import"../chunks/resetCart.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/persisted-data.js";import"../chunks/updateProductsFromCart.js";import"../chunks/refreshCart.js";import"../fragments.js";import"../chunks/acdl.js";import"../chunks/WarningWithCircle.js";export{T as CartSummaryTable,c as default};
|
|
4
|
+
//# sourceMappingURL=CartSummaryTable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CartSummaryTable.js","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
package/containers/Coupons.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as E,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{useState as l,useEffect as m}from"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import{Tag as b,Icon as x,Button as L,Input as R}from"@dropins/tools/components.js";/* empty css
|
|
3
|
+
import{jsxs as E,jsx as t}from"@dropins/tools/preact-jsx-runtime.js";import{useState as l,useEffect as m}from"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import{Tag as b,Icon as x,Button as L,Input as R}from"@dropins/tools/components.js";/* empty css */import{S as P,C as B}from"../chunks/Coupons.js";import"@dropins/tools/preact-hooks.js";import"../chunks/resetCart.js";import{events as S}from"@dropins/tools/event-bus.js";import{a as f,A as h}from"../chunks/applyCouponsToCart.js";import{useText as $}from"@dropins/tools/i18n.js";import"../chunks/Coupon.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/persisted-data.js";import"../chunks/refreshCart.js";import"../fragments.js";const U=({children:z,...w})=>{const[d,c]=l(new Set),[i,C]=l([]),[u,p]=l(new Set),s=$({applyButton:"Cart.PriceSummary.coupon.applyAction",placeholder:"Cart.PriceSummary.coupon.placeholder",ariaLabelRemove:"Cart.PriceSummary.coupon.ariaLabelRemove"}),y=async o=>{const e=o.coupon,r=new Set(d);r.add(e),p(new Set);const n=Array.from(r);f(n,h.REPLACE).then(a=>{if(a===null)throw new Error("Error adding coupon code");c(r)}).catch(a=>{console.warn(a),p(new Set([a.message]))})},A=o=>{const e=new Set(d);e.delete(o),p(new Set);const r=Array.from(e);f(r,h.REPLACE).then(n=>{if(n===null)throw new Error("Error removing coupon code");c(e)}).catch(n=>{console.warn(n),p(new Set([n.message]))})};m(()=>{const o=S.on("cart/data",e=>{const r=e==null?void 0:e.appliedCoupons;if(!r){C([]),p(new Set);return}const n=r.map(a=>a.code);C(n),p(new Set)},{eager:!0});return()=>{o==null||o.off()}},[]),m(()=>{c(new Set(i))},[i]),m(()=>{const o=S.on("shipping/estimate",()=>{p(new Set)},{eager:!0});return()=>{o==null||o.off()}},[]);const g=i.map((o,e)=>E(b,{className:"coupon-code-form__applied-item",children:[t("span",{children:o}),t("button",{"aria-label":`${s.ariaLabelRemove} ${o}`,onClick:()=>A(o),"data-testid":`remove-coupon-${e+1}`,children:t(x,{source:P,size:"16"})})]},o)),v=u.size>0?t("div",{"data-testid":"coupon-code-error",children:Array.from(u)[0]}):void 0;return t(B,{...w,couponCodeField:t(R,{"aria-label":s.placeholder,type:"text",placeholder:s.placeholder,name:"coupon",variant:"primary",value:"","data-testid":"coupon-code-input",maxLength:50,error:u.size>0}),applyCouponsButton:t(L,{variant:"secondary",children:s.applyButton}),error:v,appliedCoupons:t("div",{children:g}),onApplyCoupon:y})};export{U as Coupons,U as default};
|
|
4
|
+
//# sourceMappingURL=Coupons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Coupons.js","sources":["/@dropins/storefront-cart/src/containers/Coupons/Coupons.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes, useState, useEffect } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { Coupons as CouponsComponent } from '@/cart/components';\nimport { Button, Input, Icon, Tag } from '@adobe-commerce/elsie/components';\nimport { Close } from '@adobe-commerce/elsie/icons';\nimport { applyCouponsToCart, ApplyCouponsStrategy } from '@/cart/api';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport interface CouponsProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Coupons: Container<CouponsProps> = ({ children, ...props }) => {\n const [successfulCouponSet, setSuccessfulCouponSet] = useState(new Set());\n const [appliedCouponsArray, setAppliedCouponsArray] = useState<string[]>([]);\n const [couponError, setCouponError] = useState(new Set());\n\n const dictionary = useText({\n applyButton: 'Cart.PriceSummary.coupon.applyAction',\n placeholder: 'Cart.PriceSummary.coupon.placeholder',\n ariaLabelRemove: 'Cart.PriceSummary.coupon.ariaLabelRemove',\n });\n\n const handleApplyCoupon = async (value: { coupon: string }) => {\n const couponCode = value.coupon;\n\n const newSet = new Set(successfulCouponSet);\n newSet.add(couponCode);\n setCouponError(new Set());\n\n const couponCodes: string[] = Array.from(newSet) as string[];\n applyCouponsToCart(couponCodes, ApplyCouponsStrategy.REPLACE)\n .then((result) => {\n if (result === null) {\n throw new Error('Error adding coupon code');\n }\n\n setSuccessfulCouponSet(newSet);\n })\n .catch((error) => {\n console.warn(error);\n setCouponError(new Set([error.message]));\n });\n };\n\n const handleRemoveCoupon = (couponCode: string) => {\n const newSet = new Set(successfulCouponSet);\n newSet.delete(couponCode);\n setCouponError(new Set());\n\n const couponCodes: string[] = Array.from(newSet) as string[];\n applyCouponsToCart(couponCodes, ApplyCouponsStrategy.REPLACE)\n .then((result) => {\n if (result === null) {\n throw new Error('Error removing coupon code');\n }\n\n setSuccessfulCouponSet(newSet);\n })\n .catch((error) => {\n console.warn(error);\n setCouponError(new Set([error.message]));\n });\n };\n\n useEffect(() => {\n const cartEvent = events.on(\n 'cart/data',\n (payload) => {\n const appliedCoupons = payload?.appliedCoupons;\n\n if (!appliedCoupons) {\n // When appliedCoupons returns null, no coupons are applied\n setAppliedCouponsArray([]);\n // Clear error message\n setCouponError(new Set());\n return;\n }\n\n const couponCodes = appliedCoupons.map((coupon) => coupon.code);\n\n setAppliedCouponsArray(couponCodes);\n // Clear error message\n setCouponError(new Set());\n },\n { eager: true }\n );\n\n return () => {\n cartEvent?.off();\n };\n }, []);\n\n useEffect(() => {\n setSuccessfulCouponSet(new Set(appliedCouponsArray));\n }, [appliedCouponsArray]);\n\n useEffect(() => {\n const cartEvent = events.on(\n 'shipping/estimate',\n () => {\n setCouponError(new Set());\n },\n { eager: true }\n );\n\n return () => {\n cartEvent?.off();\n };\n }, []);\n\n const appliedCoupons = appliedCouponsArray.map((code, index) => (\n <Tag key={code} className=\"coupon-code-form__applied-item\">\n <span>{code}</span>\n <button\n aria-label={`${dictionary.ariaLabelRemove} ${code}`}\n onClick={() => handleRemoveCoupon(code)}\n data-testid={`remove-coupon-${index + 1}`}\n >\n <Icon source={Close} size={'16'} />\n </button>\n </Tag>\n ));\n\n const errorMessage =\n couponError.size > 0 ? (\n <div data-testid=\"coupon-code-error\">\n {Array.from(couponError)[0] as string}\n </div>\n ) : undefined;\n\n return (\n <CouponsComponent\n {...props}\n couponCodeField={\n <Input\n aria-label={dictionary.placeholder}\n type=\"text\"\n placeholder={dictionary.placeholder}\n name=\"coupon\"\n variant=\"primary\"\n value=\"\"\n data-testid=\"coupon-code-input\"\n maxLength={50}\n error={couponError.size > 0}\n />\n }\n applyCouponsButton={\n <Button variant=\"secondary\">{dictionary.applyButton}</Button>\n }\n error={errorMessage}\n appliedCoupons={<div>{appliedCoupons}</div>}\n onApplyCoupon={handleApplyCoupon}\n />\n );\n};\n"],"names":["Coupons","children","props","successfulCouponSet","setSuccessfulCouponSet","useState","appliedCouponsArray","setAppliedCouponsArray","couponError","setCouponError","dictionary","useText","handleApplyCoupon","value","couponCode","newSet","couponCodes","applyCouponsToCart","ApplyCouponsStrategy","result","error","handleRemoveCoupon","useEffect","cartEvent","events","payload","appliedCoupons","coupon","code","index","jsxs","Tag","jsx","Icon","Close","errorMessage","CouponsComponent","Input","Button"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HTMLAttributes } from 'preact/compat';
|
|
2
|
-
import { Container } from '
|
|
2
|
+
import { Container } from '@dropins/tools/types/elsie/src/lib';
|
|
3
3
|
|
|
4
4
|
export interface EmptyCartProps extends HTMLAttributes<HTMLDivElement> {
|
|
5
5
|
routeCTA?: () => string;
|
package/containers/EmptyCart.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as m}from"@dropins/tools/preact-jsx-runtime.js";import{E as p}from"../chunks/EmptyCart.js";import"@dropins/tools/lib.js";import"@dropins/tools/preact-compat.js";/* empty css
|
|
3
|
+
import{jsx as m}from"@dropins/tools/preact-jsx-runtime.js";import{E as p}from"../chunks/EmptyCart.js";import"@dropins/tools/lib.js";import"@dropins/tools/preact-compat.js";/* empty css */import"@dropins/tools/components.js";import"@dropins/tools/preact-hooks.js";import"@dropins/tools/i18n.js";const c=({routeCTA:t})=>m(p,{ctaLinkURL:t==null?void 0:t()});export{c as EmptyCart,c as default};
|
|
4
|
+
//# sourceMappingURL=EmptyCart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmptyCart.js","sources":["/@dropins/storefront-cart/src/containers/EmptyCart/EmptyCart.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { EmptyCart as Root } from '@/cart/components';\n\nexport interface EmptyCartProps extends HTMLAttributes<HTMLDivElement> {\n routeCTA?: () => string;\n}\n \nexport const EmptyCart: Container<EmptyCartProps> = ({ routeCTA }) => {\n return (\n <Root ctaLinkURL={routeCTA?.()} />\n );\n};\n"],"names":["EmptyCart","routeCTA","jsx","Root"],"mappings":"6TAyBO,MAAMA,EAAuC,CAAC,CAAE,SAAAC,KAElDC,EAAAC,EAAA,CAAK,WAAYF,GAAA,YAAAA,GAAc,CAAA"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as T,jsx as e,Fragment as V}from"@dropins/tools/preact-jsx-runtime.js";import{classes as D,VComponent as B,getFormValues as $}from"@dropins/tools/lib.js";import{Button as q,Input as w,Picker as G,Price as U}from"@dropins/tools/components.js";/* empty css
|
|
3
|
+
import{jsxs as T,jsx as e,Fragment as V}from"@dropins/tools/preact-jsx-runtime.js";import{classes as D,VComponent as B,getFormValues as $}from"@dropins/tools/lib.js";import{Button as q,Input as w,Picker as G,Price as U}from"@dropins/tools/components.js";/* empty css */import{useRef as H,useState as s,useEffect as Z,useCallback as J}from"@dropins/tools/preact-compat.js";import{useText as M,Text as k}from"@dropins/tools/i18n.js";import"@dropins/tools/preact-hooks.js";import{s as X}from"../chunks/resetCart.js";import{events as R}from"@dropins/tools/event-bus.js";import{s as j}from"../chunks/persisted-data.js";import{g as O,a as Q,b as W}from"../chunks/getEstimateShipping.js";import"@dropins/tools/fetch-graphql.js";const Y=({countryField:z,destinationText:f,estimateButton:I,estimated:A,loading:N,onEstimate:l,price:S,priceExcludingTax:F,priceIncludingTax:n,stateField:C,taxExcluded:y,taxIncluded:P,zipField:m})=>{const d=H(null),[L,x]=s(!0),[E,i]=s("zip"),r=M({editZipAction:"Cart.EstimateShipping.editZipAction",destinationLinkAriaLabel:"Cart.EstimateShipping.destinationLinkAriaLabel",shippingLabel:"Cart.EstimateShipping.label",zipPlaceholder:"Cart.EstimateShipping.zipPlaceholder"}),_=p=>{p.preventDefault(),x(b=>!b)},t=p=>{p.preventDefault(),x(!0),i(b=>b==="zip"?"state":"zip")},h=p=>{p.preventDefault(),x(!1);const b=$(d.current);l==null||l(b)},v=r.destinationLinkAriaLabel.replace("{destination}",f);return T("div",{"data-testid":"estimate-shipping",className:D(["cart-estimate-shipping",["cart-estimate-shipping--loading",N]]),children:[e("span",{className:"cart-estimate-shipping__label",children:A?f?T(V,{children:[e(k,{id:"Cart.EstimateShipping.estimatedDestination"})," ",e("a",{className:"cart-estimate-shippingLink",role:"button",href:"",onClick:_,onKeyDown:p=>{(p.key==="Enter"||p.key===" ")&&_(p)},tabIndex:0,"aria-label":v,"data-testid":"shipping-destination-link",children:f})]}):e(k,{id:"Cart.EstimateShipping.estimated"}):e(k,{id:"Cart.EstimateShipping.label"})}),e(B,{node:S,className:"cart-estimate-shipping__price"}),A&&T(V,{children:[e("div",{className:D(["cart-estimate-shipping__caption"]),children:e("a",{href:"#",className:"cart-estimate-shipping__link",onClick:t,"data-testid":"shipping-alternate-field-link",children:E==="zip"?e(k,{id:"Cart.EstimateShipping.alternateField.state"}):e(k,{id:"Cart.EstimateShipping.alternateField.zip"})})}),T("form",{className:D(["cart-estimate-shipping--edit",["cart-estimate-shipping--hide",!L]]),ref:d,"data-testid":"shipping-estimate-form",children:[z&&e(B,{node:z,className:D(["cart-estimate-shipping--country"])}),E==="state"?C&&e(B,{node:C,className:D(["cart-estimate-shipping--state"])}):m&&e(B,{node:m,className:D(["cart-estimate-shipping--zip"])}),I&&e(B,{node:I,className:D(["cart-estimate-shipping--action"]),onClick:h,type:"submit"})]})]}),P&&e("div",{"data-testid":"shipping-tax-included",className:D(["cart-estimate-shipping__caption"]),children:T("span",{children:[n," ",e(k,{id:"Cart.EstimateShipping.withTaxes"})]})}),y?e("div",{"data-testid":"shipping-tax-included-excluded",className:D(["cart-estimate-shipping__caption"]),children:T("span",{children:[F," ",e(k,{id:"Cart.EstimateShipping.withoutTaxes"})]})}):void 0]})},ee=()=>{const[z,f]=s(!1),[I,A]=s([]),[N,l]=s("US"),[S,F]=s(""),[n,C]=s(""),[y,P]=s([]),[m,d]=s(!1),[L,x]=s(),[E,i]=s(),[r,_]=s(""),[t,h]=s(!1),v=()=>{l("US"),F(""),C(""),x(null),i(null),_(""),h(!1)},p=async u=>{const{shippingCountry:a,shippingState:o="",shippingZip:c=""}=u,K={countryCode:a,postcode:c,region:{region:o}};return f(!0),W(K).then(g=>(g&&(x({amount:g.amount.value,currency:g.amount.currency,priceIncludingtax:{amount:g.price_incl_tax.value,currency:g.price_incl_tax.currency},priceExcludingtax:{amount:g.price_excl_tax.value,currency:g.price_excl_tax.currency}}),i({carrier_code:g.carrier_code,method_code:g.method_code}),l(a),F(o),C(c),_(o||c||a),h(!0)),l(a),F(o),C(c),_(o||c||a),g)).finally(()=>{f(!1)})},b=u=>{u.preventDefault(),F(""),C("");const a=u.target.value;l(a)};return Z(()=>{O().then(u=>{let a="US";const o=u.map(c=>(c.isDefaultCountry&&(a=c.id),{text:c.label,value:c.id}));A(o),l(a)})},[]),Z(()=>{d(!0),Q(N).then(u=>{const a=u.map(o=>({text:o.name,value:o.code}));P(a)}).finally(()=>{d(!1)})},[N,d]),{loading:z,regionsLoading:m,estimatedDestinationText:r,countries:I,selectedCountry:N,selectedRegion:S,selectedZip:n,regions:y,estimatedShippingPrice:L,estimatedShippingMethod:E,shippingEstimated:t,handleEstimateShipping:p,handleCountrySelected:b,resetValues:v,setPriceSummaryLoading:f}},he=({showDefaultEstimatedShippingCost:z})=>{var _;const[f,I]=s(!1),{loading:A,countries:N,regions:l,selectedCountry:S,estimatedDestinationText:F,estimatedShippingPrice:n,handleCountrySelected:C,handleEstimateShipping:y,regionsLoading:P,selectedRegion:m,selectedZip:d,shippingEstimated:L,resetValues:x}=ee(),E=J(t=>{y(t).then(()=>{j(t)})},[y]);Z(()=>{const t=R.on("cart/data",h=>{var a,o,c;I((h==null?void 0:h.isVirtual)||!1);const v=(o=(a=h==null?void 0:h.addresses)==null?void 0:a.shipping)==null?void 0:o[0];if(z&&!v&&y({shippingCountry:((c=X.config)==null?void 0:c.defaultCountry)??""}),!v)return;const{countryCode:p,regionCode:b,zipCode:u}=v;E({shippingCountry:p,shippingState:b,shippingZip:u})},{eager:!0});return()=>{t==null||t.off()}},[]),Z(()=>{const t=R.on("cart/updated",()=>{L&&y({shippingCountry:S,shippingState:m,shippingZip:d})});return()=>{t==null||t.off()}},[L,S,m,d,y]),Z(()=>{const t=R.on("cart/reset",()=>{x(),j(null)});return()=>{t==null||t.off()}},[x]),Z(()=>{const t=R.on("cart/merged",()=>{L&&E({shippingCountry:S,shippingState:m,shippingZip:d})});return()=>{t==null||t.off()}},[L,S,m,d,E]);const i=M({applyButton:"Cart.PriceSummary.estimatedShippingForm.apply.label",countryField:"Cart.PriceSummary.estimatedShippingForm.country.placeholder",freeShipping:"Cart.PriceSummary.freeShipping",stateField:"Cart.PriceSummary.estimatedShippingForm.state.placeholder",taxToBeDetermined:"Cart.PriceSummary.taxToBeDetermined",zipField:"Cart.PriceSummary.estimatedShippingForm.zip.placeholder"});if(f)return null;const r=(_=X.config)==null?void 0:_.shoppingCartDisplaySetting;return e(Y,{loading:A,taxIncluded:(r==null?void 0:r.shipping)==="INCLUDING_TAX",taxExcluded:(r==null?void 0:r.shipping)==="INCLUDING_EXCLUDING_TAX",price:(n==null?void 0:n.amount)==0?e("span",{"data-testId":"free-shipping",children:i.freeShipping}):(r==null?void 0:r.shipping)==="INCLUDING_TAX"&&n?e(U,{"data-testid":"shipping",...n.priceIncludingtax}):n?e(U,{...n}):e("span",{children:i.taxToBeDetermined}),estimated:!0,priceExcludingTax:n!=null&&n.priceExcludingtax?e(U,{"data-testid":"shipping-excluding-tax",...n.priceExcludingtax}):e("span",{children:i.taxToBeDetermined}),countryField:e(G,{name:"shippingCountry",placeholder:i.countryField,value:S,variant:"primary",options:N,handleSelect:C,"data-testid":"estimate-shipping-country-selector"}),stateField:l.length>0?e(G,{name:"shippingState",placeholder:i.stateField,variant:"primary",options:l,value:m,"data-testid":"estimate-shipping-state-selector",disabled:P}):e(w,{"aria-label":i.stateField,name:"shippingState",placeholder:i.stateField,variant:"primary",value:m,disabled:P,"data-testid":"estimate-shipping-state-input",maxLength:50}),zipField:e(w,{"aria-label":i.zipField,name:"shippingZip",placeholder:i.zipField,variant:"primary","data-testid":"estimate-shipping-zip-input",value:d,maxLength:12}),estimateButton:e(q,{variant:"secondary","data-testid":"estimate-shipping-apply-button","aria-label":i.applyButton,children:i.applyButton}),destinationText:F||i.taxToBeDetermined,onEstimate:E})};export{he as EstimateShipping,he as default};
|
|
4
|
+
//# sourceMappingURL=EstimateShipping.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EstimateShipping.js","sources":["/@dropins/storefront-cart/src/components/EstimateShipping/EstimateShipping.tsx","/@dropins/storefront-cart/src/hooks/useEstimatedShipping.ts","/@dropins/storefront-cart/src/containers/EstimateShipping/EstimateShipping.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { Text, useText } from '@adobe-commerce/elsie/i18n';\nimport { VComponent, classes, getFormValues } from '@adobe-commerce/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes, useRef, useState } from 'preact/compat';\n\nimport '@/cart/components/EstimateShipping/EstimateShipping.css';\n\nexport interface EstimateShippingProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'loading'> {\n countryField?: VNode<HTMLAttributes<HTMLInputElement>>;\n destinationText?: string;\n estimateButton?: VNode<HTMLAttributes<HTMLButtonElement>>;\n estimated?: boolean;\n loading: boolean;\n onEstimate?: (formData: any) => void;\n price: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceExcludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n priceIncludingTax?: VNode<HTMLAttributes<HTMLSpanElement>>;\n stateField?: VNode<HTMLAttributes<HTMLInputElement>>;\n taxExcluded?: boolean;\n taxIncluded?: boolean;\n zipField?: VNode<HTMLAttributes<HTMLInputElement>>;\n}\n\nexport const EstimateShipping: FunctionComponent<EstimateShippingProps> = ({\n countryField,\n destinationText,\n estimateButton,\n estimated,\n loading,\n onEstimate,\n price,\n priceExcludingTax,\n priceIncludingTax,\n stateField,\n taxExcluded,\n taxIncluded,\n zipField,\n}) => {\n const estimateFormRef = useRef<HTMLFormElement>(null);\n const [showEstimateForm, setShowEstimateForm] = useState(true);\n const [estimateField, setEstimateField] = useState<'zip' | 'state'>('zip');\n\n const dictionary = useText({\n editZipAction: 'Cart.EstimateShipping.editZipAction',\n destinationLinkAriaLabel: 'Cart.EstimateShipping.destinationLinkAriaLabel',\n shippingLabel: 'Cart.EstimateShipping.label',\n zipPlaceholder: 'Cart.EstimateShipping.zipPlaceholder',\n });\n\n const onDestinationLinkClick = (e: Event) => {\n e.preventDefault();\n setShowEstimateForm((show) => !show);\n };\n\n const onAlternateFieldClick = (e: Event) => {\n e.preventDefault();\n setShowEstimateForm(true);\n setEstimateField((field) => (field === 'zip' ? 'state' : 'zip'));\n };\n\n const onSubmitEstimate = (e: Event) => {\n e.preventDefault();\n setShowEstimateForm(false);\n\n const formData = getFormValues(estimateFormRef.current!);\n\n onEstimate?.(formData);\n };\n\n const destinationAriaLabel = dictionary.destinationLinkAriaLabel.replace('{destination}', destinationText);\n\n return ( \n <div\n data-testid=\"estimate-shipping\"\n className={classes([\n 'cart-estimate-shipping',\n ['cart-estimate-shipping--loading', loading],\n ])}\n >\n <span className={'cart-estimate-shipping__label'}>\n {estimated ? (\n destinationText ? (\n <>\n <Text id=\"Cart.EstimateShipping.estimatedDestination\" />\n \n <a\n className={'cart-estimate-shippingLink'}\n role=\"button\"\n href=\"\"\n onClick={onDestinationLinkClick}\n onKeyDown={(event) => {\n if (event.key === 'Enter' || event.key === ' ') {\n onDestinationLinkClick(event);\n }\n }}\n tabIndex={0}\n aria-label={destinationAriaLabel}\n data-testid=\"shipping-destination-link\"\n >\n {destinationText}\n </a>\n </>\n ) : (\n <Text id=\"Cart.EstimateShipping.estimated\" />\n )\n ) : (\n <Text id=\"Cart.EstimateShipping.label\" />\n )}\n </span>\n\n <VComponent node={price} className={'cart-estimate-shipping__price'} />\n\n {/* Edit estimate form */}\n {estimated && (\n <>\n <div className={classes(['cart-estimate-shipping__caption'])}>\n <a\n href=\"#\"\n className={'cart-estimate-shipping__link'}\n onClick={onAlternateFieldClick}\n data-testid=\"shipping-alternate-field-link\"\n >\n {estimateField === 'zip' ? (\n <Text id=\"Cart.EstimateShipping.alternateField.state\" />\n ) : (\n <Text id=\"Cart.EstimateShipping.alternateField.zip\" />\n )}\n </a>\n </div>\n\n <form\n className={classes([\n 'cart-estimate-shipping--edit',\n ['cart-estimate-shipping--hide', !showEstimateForm],\n ])}\n ref={estimateFormRef}\n data-testid=\"shipping-estimate-form\"\n >\n {countryField && (\n <VComponent\n node={countryField}\n className={classes(['cart-estimate-shipping--country'])}\n />\n )}\n {estimateField === 'state'\n ? stateField && (\n <VComponent\n node={stateField}\n className={classes(['cart-estimate-shipping--state'])}\n />\n )\n : zipField && (\n <VComponent\n node={zipField}\n className={classes(['cart-estimate-shipping--zip'])}\n />\n )}\n {estimateButton && (\n <VComponent\n node={estimateButton}\n className={classes(['cart-estimate-shipping--action'])}\n onClick={onSubmitEstimate}\n type=\"submit\"\n />\n )}\n </form>\n </>\n )}\n\n {taxIncluded && (\n <div\n data-testid=\"shipping-tax-included\"\n className={classes(['cart-estimate-shipping__caption'])}\n >\n <span>\n {priceIncludingTax} <Text id=\"Cart.EstimateShipping.withTaxes\" />\n </span>\n </div>\n )}\n\n {taxExcluded ? (\n <div\n data-testid=\"shipping-tax-included-excluded\"\n className={classes(['cart-estimate-shipping__caption'])}\n >\n <span>\n {priceExcludingTax} <Text id=\"Cart.EstimateShipping.withoutTaxes\" />\n </span>\n </div>\n ) : undefined}\n </div>\n );\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { useEffect, useState } from 'preact/compat';\n\nimport {\n EstimateAddressInput,\n getCountries,\n getEstimateShipping,\n getRegions,\n} from '@/cart/api';\nimport { PriceProps } from '@adobe-commerce/elsie/components';\n\nexport const useEstimatedShipping = () => {\n const [priceSummaryLoading, setPriceSummaryLoading] =\n useState<boolean>(false);\n\n /* State data related to estimating costs in the Price Summary component */\n const [countries, setCountries] = useState<{ text: string; value: string }[]>(\n []\n );\n const [selectedCountry, setSelectedCountry] = useState<string>('US');\n const [selectedRegion, setSelectedRegion] = useState<string>('');\n const [selectedZip, setSelectedZip] = useState<string>('');\n const [regions, setRegions] = useState<{ text: string; value: string }[]>([]);\n const [regionsLoading, setRegionsLoading] = useState<boolean>(false);\n const [estimatedShippingPrice, setEstimatedShippingPrice] = useState<\n PriceProps | null | any\n >();\n const [estimatedShippingMethod, setEstimatedShippingMethod] = useState<any>();\n const [estimatedDestinationText, setEstimatedDestinationText] =\n useState<string>('');\n const [shippingEstimated, setShippingEstimated] = useState<boolean>(false);\n\n const resetValues = () => {\n setSelectedCountry('US');\n setSelectedRegion('');\n setSelectedZip('');\n setEstimatedShippingPrice(null);\n setEstimatedShippingMethod(null);\n setEstimatedDestinationText('');\n setShippingEstimated(false);\n };\n\n const handleEstimateShipping = async (formValues: {\n shippingCountry: string;\n shippingState?: string;\n shippingZip?: string;\n }) => {\n const {\n shippingCountry,\n shippingState = '',\n shippingZip = '',\n } = formValues;\n\n const addressData: EstimateAddressInput = {\n countryCode: shippingCountry,\n postcode: shippingZip,\n region: {\n region: shippingState,\n },\n };\n\n setPriceSummaryLoading(true);\n\n return getEstimateShipping(addressData)\n .then((data) => {\n if (data) {\n setEstimatedShippingPrice({\n amount: data.amount.value,\n currency: data.amount.currency,\n priceIncludingtax: {\n amount: data.price_incl_tax.value,\n currency: data.price_incl_tax.currency,\n },\n priceExcludingtax: {\n amount: data.price_excl_tax.value,\n currency: data.price_excl_tax.currency,\n },\n });\n setEstimatedShippingMethod({\n carrier_code: data.carrier_code,\n method_code: data.method_code,\n });\n\n setSelectedCountry(shippingCountry);\n setSelectedRegion(shippingState);\n setSelectedZip(shippingZip);\n\n setEstimatedDestinationText(\n shippingState || shippingZip || shippingCountry\n );\n\n setShippingEstimated(true);\n }\n setSelectedCountry(shippingCountry);\n setSelectedRegion(shippingState);\n setSelectedZip(shippingZip);\n\n setEstimatedDestinationText(\n shippingState || shippingZip || shippingCountry\n );\n return data;\n })\n .finally(() => {\n setPriceSummaryLoading(false);\n });\n };\n\n const handleCountrySelected = (event: Event) => {\n event.preventDefault();\n\n setSelectedRegion('');\n setSelectedZip('');\n\n const value = (event.target as HTMLSelectElement).value;\n setSelectedCountry(value);\n };\n\n // Get list of countries on initial load\n useEffect(() => {\n getCountries().then((countries) => {\n let defaultCountry = 'US';\n const transformedCountries = countries.map((country) => {\n if (country.isDefaultCountry) {\n defaultCountry = country.id;\n }\n return {\n text: country.label,\n value: country.id,\n };\n });\n setCountries(transformedCountries);\n setSelectedCountry(defaultCountry);\n });\n }, []);\n\n // Update regions when country is updated\n useEffect(() => {\n setRegionsLoading(true);\n getRegions(selectedCountry)\n .then((regions) => {\n const transformedRegions = regions.map((region) => {\n return {\n text: region.name,\n value: region.code,\n };\n });\n setRegions(transformedRegions);\n })\n .finally(() => {\n setRegionsLoading(false);\n });\n }, [selectedCountry, setRegionsLoading]);\n\n return {\n loading: priceSummaryLoading,\n regionsLoading,\n estimatedDestinationText,\n countries,\n selectedCountry,\n selectedRegion,\n selectedZip,\n regions,\n estimatedShippingPrice,\n estimatedShippingMethod,\n shippingEstimated,\n handleEstimateShipping,\n handleCountrySelected,\n resetValues,\n setPriceSummaryLoading,\n };\n};\n","/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { EstimateShipping as EstimateShippingComponent } from '@/cart/components';\nimport { useEstimatedShipping } from '@/cart/hooks';\nimport { setEstimatedShippingLocation } from '@/cart/lib/persisted-data';\nimport { state } from '@/cart/lib/state';\nimport { Button, Input, Picker, Price } from '@adobe-commerce/elsie/components';\nimport { useText } from '@adobe-commerce/elsie/i18n';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { events } from '@adobe-commerce/event-bus';\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useState,\n} from 'preact/compat';\n\nexport interface EstimateShippingProps extends HTMLAttributes<HTMLDivElement> {\n showDefaultEstimatedShippingCost: boolean;\n}\n\nexport const EstimateShipping: Container<EstimateShippingProps> = ({\n showDefaultEstimatedShippingCost,\n}) => {\n const [isVirtual, setIsVirtual] = useState(false);\n\n const {\n loading,\n countries,\n regions,\n selectedCountry,\n estimatedDestinationText,\n estimatedShippingPrice,\n handleCountrySelected,\n handleEstimateShipping,\n regionsLoading,\n selectedRegion,\n selectedZip,\n shippingEstimated,\n resetValues,\n } = useEstimatedShipping();\n const handleEstimations = useCallback(\n (formValues: any) => {\n handleEstimateShipping(formValues).then(() => {\n setEstimatedShippingLocation(formValues);\n });\n },\n [handleEstimateShipping]\n );\n useEffect(() => {\n const cartEvent = events.on(\n 'cart/data',\n (payload) => {\n setIsVirtual(payload?.isVirtual || false);\n\n const shippingAddress = payload?.addresses?.shipping?.[0];\n\n if (showDefaultEstimatedShippingCost && !shippingAddress) {\n handleEstimateShipping({\n shippingCountry: state.config?.defaultCountry ?? '',\n });\n }\n if (!shippingAddress) return;\n const { countryCode, regionCode, zipCode } = shippingAddress;\n\n handleEstimations({\n shippingCountry: countryCode,\n shippingState: regionCode,\n shippingZip: zipCode,\n });\n },\n { eager: true }\n );\n\n return () => {\n cartEvent?.off();\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n\n useEffect(() => {\n const updatedEvent = events.on('cart/updated', () => {\n if (!shippingEstimated) return;\n handleEstimateShipping({\n shippingCountry: selectedCountry,\n shippingState: selectedRegion,\n shippingZip: selectedZip,\n });\n });\n\n return () => {\n updatedEvent?.off();\n };\n }, [shippingEstimated, selectedCountry, selectedRegion, selectedZip, handleEstimateShipping]);\n\n useEffect(() => {\n const resetEvent = events.on('cart/reset', () => {\n resetValues();\n setEstimatedShippingLocation(null);\n });\n\n return () => {\n resetEvent?.off();\n };\n }, [resetValues]);\n\n useEffect(() => {\n const mergeEvent = events.on('cart/merged', () => {\n if (!shippingEstimated) return;\n\n handleEstimations({\n shippingCountry: selectedCountry,\n shippingState: selectedRegion,\n shippingZip: selectedZip,\n });\n });\n\n return () => {\n mergeEvent?.off();\n };\n }, [\n shippingEstimated,\n selectedCountry,\n selectedRegion,\n selectedZip,\n handleEstimations,\n ]);\n\n const dictionary = useText({\n applyButton: 'Cart.PriceSummary.estimatedShippingForm.apply.label',\n countryField: 'Cart.PriceSummary.estimatedShippingForm.country.placeholder',\n freeShipping: 'Cart.PriceSummary.freeShipping',\n stateField: 'Cart.PriceSummary.estimatedShippingForm.state.placeholder',\n taxToBeDetermined: 'Cart.PriceSummary.taxToBeDetermined',\n zipField: 'Cart.PriceSummary.estimatedShippingForm.zip.placeholder',\n });\n\n if (isVirtual) return null;\n\n const cartTaxesConfig = state.config?.shoppingCartDisplaySetting;\n return (\n <EstimateShippingComponent\n loading={loading}\n taxIncluded={cartTaxesConfig?.shipping === 'INCLUDING_TAX'}\n taxExcluded={cartTaxesConfig?.shipping === 'INCLUDING_EXCLUDING_TAX'}\n price={\n estimatedShippingPrice?.amount == 0 ? (\n <span data-testId=\"free-shipping\">{dictionary.freeShipping}</span>\n ) : cartTaxesConfig?.shipping === 'INCLUDING_TAX' &&\n estimatedShippingPrice ? (\n <Price\n data-testid=\"shipping\"\n {...estimatedShippingPrice.priceIncludingtax}\n />\n ) : estimatedShippingPrice ? (\n <Price {...estimatedShippingPrice} />\n ) : (\n <span>{dictionary.taxToBeDetermined}</span>\n )\n }\n estimated={true}\n priceExcludingTax={\n estimatedShippingPrice?.priceExcludingtax ? (\n <Price\n data-testid=\"shipping-excluding-tax\"\n {...estimatedShippingPrice.priceExcludingtax}\n />\n ) : (\n <span>{dictionary.taxToBeDetermined}</span>\n )\n }\n countryField={\n <Picker\n name=\"shippingCountry\"\n placeholder={dictionary.countryField}\n value={selectedCountry}\n variant=\"primary\"\n options={countries}\n handleSelect={handleCountrySelected}\n data-testid=\"estimate-shipping-country-selector\"\n />\n }\n stateField={\n regions.length > 0 ? (\n <Picker\n name=\"shippingState\"\n placeholder={dictionary.stateField}\n variant=\"primary\"\n options={regions}\n value={selectedRegion}\n data-testid=\"estimate-shipping-state-selector\"\n disabled={regionsLoading}\n />\n ) : (\n <Input\n aria-label={dictionary.stateField}\n name=\"shippingState\"\n placeholder={dictionary.stateField}\n variant=\"primary\"\n value={selectedRegion}\n disabled={regionsLoading}\n data-testid=\"estimate-shipping-state-input\"\n maxLength={50}\n />\n )\n }\n zipField={\n <Input\n aria-label={dictionary.zipField}\n name=\"shippingZip\"\n placeholder={dictionary.zipField}\n variant=\"primary\"\n data-testid=\"estimate-shipping-zip-input\"\n value={selectedZip}\n maxLength={12}\n />\n }\n estimateButton={\n <Button\n variant=\"secondary\"\n data-testid=\"estimate-shipping-apply-button\"\n aria-label={dictionary.applyButton}\n >\n {dictionary.applyButton}\n </Button>\n }\n destinationText={estimatedDestinationText || dictionary.taxToBeDetermined}\n onEstimate={handleEstimations}\n />\n );\n};\n"],"names":["EstimateShipping","countryField","destinationText","estimateButton","estimated","loading","onEstimate","price","priceExcludingTax","priceIncludingTax","stateField","taxExcluded","taxIncluded","zipField","estimateFormRef","useRef","showEstimateForm","setShowEstimateForm","useState","estimateField","setEstimateField","dictionary","useText","onDestinationLinkClick","e","show","onAlternateFieldClick","field","onSubmitEstimate","formData","getFormValues","destinationAriaLabel","jsxs","classes","jsx","Fragment","Text","event","VComponent","useEstimatedShipping","priceSummaryLoading","setPriceSummaryLoading","countries","setCountries","selectedCountry","setSelectedCountry","selectedRegion","setSelectedRegion","selectedZip","setSelectedZip","regions","setRegions","regionsLoading","setRegionsLoading","estimatedShippingPrice","setEstimatedShippingPrice","estimatedShippingMethod","setEstimatedShippingMethod","estimatedDestinationText","setEstimatedDestinationText","shippingEstimated","setShippingEstimated","resetValues","handleEstimateShipping","formValues","shippingCountry","shippingState","shippingZip","addressData","getEstimateShipping","data","handleCountrySelected","value","useEffect","getCountries","defaultCountry","transformedCountries","country","getRegions","transformedRegions","region","showDefaultEstimatedShippingCost","isVirtual","setIsVirtual","handleEstimations","useCallback","setEstimatedShippingLocation","cartEvent","events","payload","shippingAddress","_b","_a","_c","state","countryCode","regionCode","zipCode","updatedEvent","resetEvent","mergeEvent","cartTaxesConfig","EstimateShippingComponent","Price","Picker","Input","Button"],"mappings":"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"}
|
package/containers/GiftCards.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsxs as y,jsx as a}from"@dropins/tools/preact-jsx-runtime.js";import{useState as p,useEffect as l}from"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import{Tag as G,Icon as v,Button as b,Input as A}from"@dropins/tools/components.js";/* empty css
|
|
3
|
+
import{jsxs as y,jsx as a}from"@dropins/tools/preact-jsx-runtime.js";import{useState as p,useEffect as l}from"@dropins/tools/preact-compat.js";import"@dropins/tools/lib.js";import{Tag as G,Icon as v,Button as b,Input as A}from"@dropins/tools/components.js";/* empty css */import{S as L,C as x}from"../chunks/Coupons.js";import"@dropins/tools/preact-hooks.js";import"../chunks/resetCart.js";import{events as E}from"@dropins/tools/event-bus.js";import{r as P,a as T}from"../chunks/removeGiftCardFromCart.js";import{S as B}from"../chunks/GiftCard.js";import{useText as R}from"@dropins/tools/i18n.js";import"../chunks/Coupon.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/persisted-data.js";import"../chunks/refreshCart.js";import"../fragments.js";import"../chunks/acdl.js";const X=({children:z,...C})=>{const[m,d]=p(new Set),[s,f]=p([]),[c,i]=p(new Set),o=R({giftCardTitle:"Cart.PriceSummary.giftCard.title",applyButton:"Cart.PriceSummary.giftCard.applyAction",placeholder:"Cart.PriceSummary.giftCard.placeholder",ariaLabel:"Cart.PriceSummary.giftCard.ariaLabel",ariaLabelRemove:"Cart.PriceSummary.giftCard.ariaLabelRemove",empty:"Cart.PriceSummary.giftCard.errors.empty"}),u=async r=>{const t=r==null?void 0:r.giftCardCode;if(t==="")return i(new Set([o.empty])),!0;const e=new Set(m);e.add(t),i(new Set),T(t).then(n=>{if(n===null)throw new Error("Error adding gift card code");d(e)}).catch(n=>{console.warn(n),i(new Set([n.message]))})},S=r=>{const t=new Set(m);t.delete(r),i(new Set),P(r).then(e=>{if(e===null)throw new Error("Error removing gift card code");d(t)}).catch(e=>{console.warn(e),i(new Set([e.message]))})};l(()=>{const r=E.on("cart/data",t=>{const e=t==null?void 0:t.appliedGiftCards;if(!e){f([]),i(new Set);return}const n=e.map(({code:w})=>w);f(n),i(new Set)},{eager:!0});return()=>{r==null||r.off()}},[]),l(()=>{d(new Set(s))},[s]);const g=s.map((r,t)=>y(G,{className:"coupon-code-form__applied-item",children:[a("span",{children:r}),a("button",{"aria-label":`${o.ariaLabelRemove} ${r}`,onClick:()=>S(r),"data-testid":`remove-giftcard-${t+1}`,children:a(v,{source:L,size:"16"})})]},r)),h=c.size>0?a("div",{"data-testid":"giftcard-code-error",children:Array.from(c)[0]}):void 0;return a(x,{...C,className:"cart-gift-cards",accordionSectionTitle:o.giftCardTitle,accordionSectionIcon:B,couponCodeField:a(A,{"aria-label":o.ariaLabel,type:"text",placeholder:o.placeholder,name:"giftCardCode",variant:"primary",value:"","data-testid":"giftcard-code-input",maxLength:50,error:c.size>0}),applyCouponsButton:a(b,{variant:"secondary",children:o.applyButton}),error:h,appliedCoupons:a("div",{children:g}),onApplyCoupon:u})};export{X as GiftCards,X as default};
|
|
4
|
+
//# sourceMappingURL=GiftCards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GiftCards.js","sources":["/@dropins/storefront-cart/src/containers/GiftCards/GiftCards.tsx"],"sourcesContent":["/********************************************************************\n * ADOBE CONFIDENTIAL\n * __________________\n *\n * Copyright 2024 Adobe\n * All Rights Reserved.\n *\n * NOTICE: All information contained herein is, and remains\n * the property of Adobe and its suppliers, if any. The intellectual\n * and technical concepts contained herein are proprietary to Adobe\n * and its suppliers and are protected by all applicable intellectual\n * property laws, including trade secret and copyright laws.\n * Dissemination of this information or reproduction of this material\n * is strictly forbidden unless prior written permission is obtained\n * from Adobe.\n *******************************************************************/\n\nimport { HTMLAttributes, useState, useEffect } from 'preact/compat';\nimport { Container } from '@adobe-commerce/elsie/lib';\nimport { Coupons as CouponsComponent } from '@/cart/components';\nimport { Button, Input, Icon, Tag } from '@adobe-commerce/elsie/components';\nimport { Close, GiftCard } from '@adobe-commerce/elsie/icons';\nimport { applyGiftCardToCart, removeGiftCardFromCart } from '@/cart/api';\nimport { events } from '@adobe-commerce/event-bus';\nimport { useText } from '@adobe-commerce/elsie/i18n';\n\nexport interface GiftCardsProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const GiftCards: Container<GiftCardsProps> = ({\n children,\n ...props\n}) => {\n const [successfulGiftCardSet, setSuccessfulGiftCardSet] = useState(new Set());\n const [appliedGiftCardsArray, setAppliedGiftCardsArray] = useState<string[]>(\n []\n );\n const [giftCardError, setGiftCardError] = useState(new Set());\n\n const dictionary = useText({\n giftCardTitle: 'Cart.PriceSummary.giftCard.title',\n applyButton: 'Cart.PriceSummary.giftCard.applyAction',\n placeholder: 'Cart.PriceSummary.giftCard.placeholder',\n ariaLabel: 'Cart.PriceSummary.giftCard.ariaLabel',\n ariaLabelRemove: 'Cart.PriceSummary.giftCard.ariaLabelRemove',\n empty: 'Cart.PriceSummary.giftCard.errors.empty',\n });\n\n const handleApplyGiftCard = async (value: { giftCardCode: string }) => {\n const giftCardCode = value?.giftCardCode;\n\n if (giftCardCode === '') {\n setGiftCardError(new Set([dictionary.empty]));\n return true;\n }\n\n const newSet = new Set(successfulGiftCardSet);\n newSet.add(giftCardCode);\n setGiftCardError(new Set());\n\n applyGiftCardToCart(giftCardCode)\n .then((result) => {\n if (result === null) {\n throw new Error('Error adding gift card code');\n }\n\n setSuccessfulGiftCardSet(newSet);\n })\n .catch((error) => {\n console.warn(error);\n setGiftCardError(new Set([error.message]));\n });\n };\n\n const handleRemoveGiftCard = (giftCardCode: string) => {\n const newSet = new Set(successfulGiftCardSet);\n newSet.delete(giftCardCode);\n setGiftCardError(new Set());\n\n removeGiftCardFromCart(giftCardCode)\n .then((result) => {\n if (result === null) {\n throw new Error('Error removing gift card code');\n }\n\n setSuccessfulGiftCardSet(newSet);\n })\n .catch((error) => {\n console.warn(error);\n setGiftCardError(new Set([error.message]));\n });\n };\n\n useEffect(() => {\n const cartEvent = events.on(\n 'cart/data',\n (payload) => {\n const appliedGiftCards = payload?.appliedGiftCards;\n\n if (!appliedGiftCards) {\n // When appliedGiftCards returns null, no GiftCards are applied\n setAppliedGiftCardsArray([]);\n // Clear error message\n setGiftCardError(new Set());\n return;\n }\n\n const giftCardCodes = appliedGiftCards.map(({ code }) => code);\n\n setAppliedGiftCardsArray(giftCardCodes);\n // Clear error message\n setGiftCardError(new Set());\n },\n { eager: true }\n );\n\n return () => {\n cartEvent?.off();\n };\n }, []);\n\n useEffect(() => {\n setSuccessfulGiftCardSet(new Set(appliedGiftCardsArray));\n }, [appliedGiftCardsArray]);\n\n const appliedGiftCards = appliedGiftCardsArray.map((code, index) => (\n <Tag key={code} className=\"coupon-code-form__applied-item\">\n <span>{code}</span>\n <button\n aria-label={`${dictionary.ariaLabelRemove} ${code}`}\n onClick={() => handleRemoveGiftCard(code)}\n data-testid={`remove-giftcard-${index + 1}`}\n >\n <Icon source={Close} size={'16'} />\n </button>\n </Tag>\n ));\n\n const errorMessage =\n giftCardError.size > 0 ? (\n <div data-testid=\"giftcard-code-error\">\n {Array.from(giftCardError)[0] as string}\n </div>\n ) : undefined;\n\n return (\n <CouponsComponent\n {...props}\n className={'cart-gift-cards'}\n accordionSectionTitle={dictionary.giftCardTitle}\n accordionSectionIcon={GiftCard}\n couponCodeField={\n <Input\n aria-label={dictionary.ariaLabel}\n type=\"text\"\n placeholder={dictionary.placeholder}\n name=\"giftCardCode\"\n variant=\"primary\"\n value=\"\"\n data-testid=\"giftcard-code-input\"\n maxLength={50}\n error={giftCardError.size > 0}\n />\n }\n applyCouponsButton={\n <Button variant=\"secondary\">{dictionary.applyButton}</Button>\n }\n error={errorMessage}\n appliedCoupons={<div>{appliedGiftCards}</div>}\n onApplyCoupon={handleApplyGiftCard}\n />\n );\n};\n"],"names":["GiftCards","children","props","successfulGiftCardSet","setSuccessfulGiftCardSet","useState","appliedGiftCardsArray","setAppliedGiftCardsArray","giftCardError","setGiftCardError","dictionary","useText","handleApplyGiftCard","value","giftCardCode","newSet","applyGiftCardToCart","result","error","handleRemoveGiftCard","removeGiftCardFromCart","useEffect","cartEvent","events","payload","appliedGiftCards","giftCardCodes","code","index","jsxs","Tag","jsx","Icon","Close","errorMessage","CouponsComponent","GiftCard","Input","Button"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Item } from '../../data/models';
|
|
2
|
-
import { Container, SlotProps } from '
|
|
2
|
+
import { Container, SlotProps } from '@dropins/tools/types/elsie/src/lib';
|
|
3
3
|
import { GiftOptionsViewProps, GiftOptionsDataSourcesProps, GiftFormDataType, ProductGiftOptionsConfig, GiftOptionsReadOnlyViewProps } from '../../types';
|
|
4
|
-
import { ImageNodeRenderProps, ImageProps } from '
|
|
4
|
+
import { ImageNodeRenderProps, ImageProps } from '@dropins/tools/types/elsie/src/components';
|
|
5
5
|
|
|
6
6
|
export interface GiftOptionsProps {
|
|
7
7
|
item: Item | ProductGiftOptionsConfig;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
/*! Copyright 2025 Adobe
|
|
2
2
|
All Rights Reserved. */
|
|
3
|
-
import{jsx as t,jsxs as u,Fragment as A}from"@dropins/tools/preact-jsx-runtime.js";import{classes as We,Slot as Ze}from"@dropins/tools/lib.js";import{Modal as De,ContentGrid as Xe,ImageSwatch as Je,Button as se,Price as ce,Skeleton as Qe,SkeletonRow as Ye,Field as j,Checkbox as ae,Input as Me,TextArea as Ue,Accordion as Ne,AccordionSection as Pe,Icon as D,Card as Ve,ProgressSpinner as et}from"@dropins/tools/components.js";/* empty css */import*as X from"@dropins/tools/preact-compat.js";import{useRef as tt,useEffect as J,useState as M,useId as $e,useCallback as K,useMemo as le}from"@dropins/tools/preact-hooks.js";import{useText as Z}from"@dropins/tools/i18n.js";import{s as L}from"../chunks/resetCart.js";import{S as Re}from"../chunks/ChevronDown.js";import{S as Se}from"../chunks/ChevronUp.js";import{events as rt}from"@dropins/tools/event-bus.js";import{u as it}from"../chunks/updateProductsFromCart.js";import{s as nt}from"../chunks/setGiftOptionsOnCart.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/persisted-data.js";import"../chunks/refreshCart.js";import"../fragments.js";import"../chunks/acdl.js";const ee=e=>X.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},X.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z",stroke:"currentColor"}),X.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M6.75 12.762L10.2385 15.75L17.25 9",stroke:"currentColor"})),de=e=>X.createElement("svg",{width:20,height:23,viewBox:"0 0 20 23",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},X.createElement("path",{d:"M10 6L10 21.5M10 6H12.25C13.4926 6 14.5 4.99264 14.5 3.75C14.5 2.50736 13.4926 1.5 12.25 1.5C11.0074 1.5 10 2.50736 10 3.75M10 6V3.75M10 6H7.75C6.50736 6 5.5 4.99264 5.5 3.75C5.5 2.50736 6.50736 1.5 7.75 1.5C8.99264 1.5 10 2.50736 10 3.75M3.25 10.75H16.75C17.9926 10.75 19 9.74264 19 8.5C19 7.25736 17.9926 6.25 16.75 6.25H3.25C2.00736 6.25 1 7.25736 1 8.5C1 9.74264 2.00736 10.75 3.25 10.75ZM4.75 21.5H15.25C16.4926 21.5 17.5 20.4926 17.5 19.25V13.25C17.5 12.0074 16.4926 11 15.25 11H4.75C3.50736 11 2.5 12.0074 2.5 13.25V19.25C2.5 20.4926 3.50736 21.5 4.75 21.5Z",stroke:"currentColor",strokeWidth:1.5}));function ot(e){const i=tt(null);return J(()=>{if(!e||!i.current)return;const l=i.current,d=l.querySelectorAll('a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])');if(d.length===0)return;const r=d[0],f=d[d.length-1];function g(o){o.key==="Tab"&&(o.shiftKey&&document.activeElement===r?(o.preventDefault(),f.focus()):!o.shiftKey&&document.activeElement===f&&(o.preventDefault(),r.focus()))}return l.addEventListener("keydown",g),()=>{l.removeEventListener("keydown",g)}},[e]),i}const at=({view:e,showModal:i,productName:l,giftWrappingConfig:d,imageSwatchImageNode:r,setShowModal:f,updateGiftOptions:g})=>{var w;const o=ot(i),n=Z({modalTitle:"Cart.GiftOptions.modal.title",defaultTitle:"Cart.GiftOptions.modal.defaultTitle",modalWrappingText:"Cart.GiftOptions.modal.wrappingText",modalWrappingSubText:"Cart.GiftOptions.modal.wrappingSubText",modalConfirmButton:"Cart.GiftOptions.modal.modalConfirmButton",modalCancelButton:"Cart.GiftOptions.modal.modalCancelButton",ariaLabelModal:"Cart.GiftOptions.modal.ariaLabelModal",ariaLabelModalOpen:"Cart.GiftOptions.modal.ariaLabelModalOpen",ariaLabelModalClose:"Cart.GiftOptions.modal.ariaLabelModalClose",ariaLabelWrapping:"Cart.GiftOptions.modal.ariaLabelWrapping"}),[c,C]=M();if(J(()=>{const p=d.find(T=>T.selected)??d[0];C(p)},[d]),J(()=>{const p=document==null?void 0:document.querySelector(".cart-gift-options-view__modal-wrapper");p&&(p==null||p.focus())},[]),!i||!d.length)return null;const s=l?`${n.modalTitle} ${l}`:n.defaultTitle;return t("div",{ref:o,className:"cart-gift-options-view__modal-wrapper",tabIndex:0,"aria-label":`${n.ariaLabelModal} ${i?n.ariaLabelModalOpen:n.ariaLabelModalClose} ${l}`,children:u(De,{"data-testid":`gift-option-modal-${e}`,className:"cart-gift-options-view__modal",size:"medium",title:u(A,{children:[t("span",{children:s}),c&&((w=c==null?void 0:c.price)==null?void 0:w.value)>0?t(ce,{amount:c.price.value,currency:c.price.currency,weight:"normal"}):null]}),centered:!0,onClose:f,children:[u("div",{className:"cart-gift-options-view__modal-content",children:[t("span",{className:"cart-gift-options-view__modal-text",children:n.modalWrappingText}),t(Xe,{emptyGridContent:t(A,{}),maxColumns:6,columnWidth:"100px",className:"cart-gift-options-view__modal-grid",children:d.map(p=>t(Je,{groupAriaLabel:n.ariaLabelWrapping,selected:(c==null?void 0:c.uid)===(p==null?void 0:p.uid),onValue:()=>{C(p)},imageNode:r,name:"giftWrappingId",value:p.uid,src:p.image.url,alt:p.design,label:p.design,"data-testid":`gift-option-modal-image-${p.uid}`,className:"cart-gift-options-view__modal-grid-item"},p.uid))}),t("span",{className:"cart-gift-options-view__modal-sub-text",children:c==null?void 0:c.design})]}),t(se,{"data-testid":"gift-option-modal-confirm-button",type:"button",onClick:()=>{g("giftWrappingId",c==null?void 0:c.uid,{isGiftWrappingSelected:!0}),f()},children:n.modalConfirmButton}),t(se,{type:"button",variant:"secondary",onClick:f,"data-testid":"gift-option-modal-cancel-button",children:n.modalCancelButton})]})})},lt=()=>t(Qe,{children:t(Ye,{variant:"row",size:"small",fullWidth:!0,lines:1,multilineGap:"small"})}),st=({className:e,view:i,item:l,giftOptions:d,disabled:r,cartData:f,giftWrappingConfig:g,setShowModal:o,onInputChange:n,areGiftOptionsVisible:c})=>{var N,P,B,z;const C=$e(),s=Z({customize:`Cart.GiftOptions.${i}.customize`,giftReceiptIncludedTitle:`Cart.GiftOptions.${i}.giftReceiptIncluded.title`,giftReceiptIncludedText:`Cart.GiftOptions.${i}.giftReceiptIncluded.subtitle`,printedCardIncludedTitle:`Cart.GiftOptions.${i}.printedCardIncluded.title`,printedCardIncludedText:`Cart.GiftOptions.${i}.printedCardIncluded.subtitle`,giftOptionsWrapTitle:`Cart.GiftOptions.${i}.giftOptionsWrap.title`,giftOptionsWrapText:`Cart.GiftOptions.${i}.giftOptionsWrap.subtitle`,requiredFieldError:"Cart.GiftOptions.formText.requiredFieldError"}),w=l==null?void 0:l.productGiftWrapping,p=f==null?void 0:f.cartGiftWrapping,T=i==="product"?w:p,y=T==null?void 0:T.find(S=>S.uid===d.giftWrappingId),V=(y==null?void 0:y.design)??"",O=l==null?void 0:l.giftWrappingPrice,v=V?`${s.giftOptionsWrapText} ${V}`:"",F=+(((P=(N=L.config)==null?void 0:N.printedCardPrice)==null?void 0:P.value)??0)>0?(B=L.config)==null?void 0:B.printedCardPrice:null;let _=null;O!=null&&O.value?_=O:(z=y==null?void 0:y.price)!=null&&z.value&&(_=y.price);const W=S=>S?u("span",{children:[" (+",t(ce,{amount:S.value,currency:S.currency,weight:"normal"}),")"]}):null;return u("div",{className:We([e,[`${e}--hidden`,!c.isGiftOptionsVisible]]),children:[c.isGiftReceiptVisible?t(j,{disabled:r,className:"cart-gift-options-view__field-gift-receipt",children:t(ae,{id:`giftReceiptIncluded-${C}`,disabled:r,name:"giftReceiptIncluded",checked:d.giftReceiptIncluded,placeholder:s.giftReceiptIncludedTitle,label:s.giftReceiptIncludedTitle,description:s.giftReceiptIncludedText,onChange:n})}):null,c.isPrintedCartVisible?t(j,{disabled:r,className:"cart-gift-options-view__field-printed-card",children:t(ae,{id:`printedCardIncluded-${C}`,disabled:r,name:"printedCardIncluded",checked:d.printedCardIncluded,placeholder:s.printedCardIncludedTitle,label:u(A,{children:[s.printedCardIncludedTitle,W(F)]}),description:s.printedCardIncludedText,onChange:n})}):null,c.isGiftWrappingVisible?u(A,{children:[t(j,{disabled:r,className:"cart-gift-options-view__field-gift-wrap",children:t(ae,{id:`giftOptionsWrap-${C}`,disabled:r,name:"isGiftWrappingSelected",checked:d.isGiftWrappingSelected,placeholder:s.giftOptionsWrapTitle,label:u(A,{children:[s.giftOptionsWrapTitle,W(_)]}),description:v,onChange:n})}),t(se,{disabled:r||!g.length,type:"button","data-testid":`gift-option-customize-${i}`,variant:"tertiary",onClick:()=>o(!0),children:s.customize})]}):null]})},dt=({view:e,giftOptions:i,disabled:l,errorMessage:d,onInputChange:r,onBlur:f,isGiftMessageVisible:g})=>{const o=$e(),n=Z({formTitle:`Cart.GiftOptions.${e}.formContent.formTitle`,formTo:`Cart.GiftOptions.${e}.formContent.formTo`,formFrom:`Cart.GiftOptions.${e}.formContent.formFrom`,giftMessageTitle:`Cart.GiftOptions.${e}.formContent.giftMessageTitle`,formToPlaceholder:`Cart.GiftOptions.${e}.formContent.formToPlaceholder`,formFromPlaceholder:`Cart.GiftOptions.${e}.formContent.formFromPlaceholder`,formMessagePlaceholder:`Cart.GiftOptions.${e}.formContent.formMessagePlaceholder`});return g?u(A,{children:[t("span",{children:n.formTitle}),u("div",{children:[t("span",{children:n.formTo}),t(j,{disabled:l,error:d.recipientName,children:t(Me,{id:`recipientName-${o}`,disabled:l,type:"text",name:"recipientName",value:i.recipientName,placeholder:n.formToPlaceholder,onChange:r,onBlur:f})})]}),u("div",{children:[t("span",{children:n.formFrom}),t(j,{disabled:l,error:d.senderName,children:t(Me,{id:`senderName-${o}`,disabled:l,type:"text",name:"senderName",value:i.senderName,placeholder:n.formFromPlaceholder,onChange:r,onBlur:f})})]}),u("div",{children:[t("span",{children:n.giftMessageTitle}),t(j,{disabled:l,children:t(Ue,{id:`message-${o}`,errorMessage:d.message,disabled:l,name:"message",value:i.message,label:n.formMessagePlaceholder,onChange:r,onBlur:f})})]})]}):null},ct=({view:e,giftOptions:i,giftWrappingConfig:l,readOnlyFormOrderView:d})=>{const r=Z({readOnlyProductTitle:"Cart.GiftOptions.product.readOnlyFormView.title",wrapping:"Cart.GiftOptions.product.readOnlyFormView.wrapping",recipient:"Cart.GiftOptions.product.readOnlyFormView.recipient",sender:"Cart.GiftOptions.product.readOnlyFormView.sender",message:"Cart.GiftOptions.product.readOnlyFormView.message",readOnlyOrderTitle:"Cart.GiftOptions.order.readOnlyFormView.title",readOnlyOrderGiftReceiptTitle:"Cart.GiftOptions.order.readOnlyFormView.giftReceipt",readOnlyOrderGiftReceiptText:"Cart.GiftOptions.order.readOnlyFormView.giftReceiptText",readOnlyOrderGiftPrintCardTitle:"Cart.GiftOptions.order.readOnlyFormView.printCard",readOnlyOrderGiftPrintCardText:"Cart.GiftOptions.order.readOnlyFormView.printCardText",readOnlyOrderGiftWrapTitle:"Cart.GiftOptions.order.readOnlyFormView.giftWrap",readOnlyOrderGiftWrapOptionsText:"Cart.GiftOptions.order.readOnlyFormView.giftWrapOptions",readOnlyOrderFormTitle:"Cart.GiftOptions.order.readOnlyFormView.formTitle",readOnlyOrderFormTo:"Cart.GiftOptions.order.readOnlyFormView.formTo",readOnlyOrderFormFrom:"Cart.GiftOptions.order.readOnlyFormView.formFrom",readOnlyOrderFormMessageTitle:"Cart.GiftOptions.order.readOnlyFormView.formMessageTitle"}),{recipientName:f,senderName:g,message:o,giftReceiptIncluded:n,printedCardIncluded:c,isGiftWrappingSelected:C}=i,s=l==null?void 0:l.find(({uid:O})=>O===(i==null?void 0:i.giftWrappingId)),w=!!f||!!g||!!o,p=s==null?void 0:s.design,T=n||c||(s==null?void 0:s.selected),y=[{id:1,title:r.wrapping,message:C?p:""},{id:2,title:r.recipient,message:f},{id:3,title:r.sender,message:g},{id:4,title:r.message,message:o}],V=y.every(({message:O})=>!O);if(e==="product"&&!V)return t(Ne,{"data-testid":"gift-options-product",iconClose:Se,iconOpen:Re,actionIconPosition:"right",children:t(Pe,{title:r.readOnlyProductTitle,showIconLeft:!0,iconLeft:de,defaultOpen:!1,renderContentWhenClosed:!1,children:t("div",{children:y.filter(O=>O.message).map(O=>u("p",{children:[O.title," ",O.message]},O.id))})})});if(e==="order"&&(w||T)){const O=u("div",{className:"cart-gift-options-readonly__header",children:[t(D,{source:de,size:"24"}),t("span",{children:r.readOnlyOrderTitle})]}),v=u(A,{children:[n?u("div",{className:"cart-gift-options-readonly__checkboxes cart-gift-options-readonly__checkboxes--gift-receipt",children:[t(D,{source:ee,size:"16"}),t("p",{children:r.readOnlyOrderGiftReceiptTitle}),t("p",{children:r.readOnlyOrderGiftReceiptText})]}):null,c?u("div",{className:"cart-gift-options-readonly__checkboxes cart-gift-options-readonly__checkboxes--print-card",children:[t(D,{source:ee,size:"16"}),t("p",{children:r.readOnlyOrderGiftPrintCardTitle}),t("p",{children:r.readOnlyOrderGiftPrintCardText})]}):null,s!=null&&s.selected?u("div",{className:"cart-gift-options-readonly__checkboxes cart-gift-options-readonly__checkboxes--gift-wrap",children:[t(D,{source:ee,size:"16"}),u("p",{children:[r.readOnlyOrderGiftWrapTitle," (+",t(ce,{amount:s.price.value,currency:s.price.currency,weight:"normal"}),")"]}),t("p",{children:`${r.readOnlyOrderGiftWrapOptionsText} ${s==null?void 0:s.design}`})]}):null]}),F=w?u("div",{className:"cart-gift-options-readonly__form",children:[t("div",{children:r.readOnlyOrderFormTitle}),u("div",{children:[u("p",{children:[t("span",{children:r.readOnlyOrderFormTo}),t("span",{children:f})]}),u("p",{children:[t("span",{children:r.readOnlyOrderFormFrom}),t("span",{children:g})]})]}),u("div",{children:[t("p",{children:r.readOnlyOrderFormMessageTitle}),t("p",{children:o})]})]}):null;return u(Ve,{variant:d,children:[O,v,F]})}return null},ft=({item:e,view:i,loading:l,giftOptions:d,showModal:r,isEditable:f,errorsField:g,updateLoading:o,cartData:n,fieldsDisabled:c,isGiftOptionsApplied:C,giftWrappingConfig:s,readOnlyFormOrderView:w,isGiftMessageVisible:p,areGiftOptionsVisible:T,imageSwatchImageNode:y,onBlur:V,setShowModal:O,updateGiftOptions:v,onInputChange:F,handleFormMouseLeave:_})=>{const W=Z({accordionHeading:`Cart.GiftOptions.${i}.accordionHeading`}),N=K(P=>t(Ne,{"data-testid":"gift-options-product",iconClose:Se,iconOpen:Re,actionIconPosition:"right",children:t(Pe,{title:u("div",{className:"cart-gift-options-view__icon--success",children:[t("span",{children:W.accordionHeading}),C?t(D,{source:ee,size:"16"}):null]}),ariaLabelTitle:W.accordionHeading,showIconLeft:!0,iconLeft:de,defaultOpen:C||P,renderContentWhenClosed:!1,children:u(A,{children:[t(st,{className:"cart-gift-options-view__top",view:i,item:e,giftOptions:d,disabled:c,onInputChange:F,cartData:n,giftWrappingConfig:s,setShowModal:O,areGiftOptionsVisible:T}),t("form",{className:"cart-gift-options-view__footer",onMouseLeave:_,children:t(dt,{view:i,giftOptions:d,disabled:c,errorMessage:g,onInputChange:F,onBlur:V,isGiftMessageVisible:p})})]})})}),[i,e,n,W,g,d,c,s,T,C,p,V,O,F,_]);return!T.isGiftOptionsVisible&&!p?null:u("div",{id:"cart-gift-options-view",className:We(["cart-gift-options-view",`cart-gift-options-view--${i}`,["cart-gift-options-view--loading",o]]),children:[o?t(et,{className:"cart-gift-options-view__spinner"}):null,l?t(lt,{}):u(A,{children:[f?null:t("div",{className:"cart-gift-options-view--readonly",children:t(ct,{view:i,giftOptions:d,giftWrappingConfig:s,readOnlyFormOrderView:w})}),r?t(at,{view:i,productName:e&&"name"in e?e==null?void 0:e.name:"",showModal:r,giftWrappingConfig:s,setShowModal:()=>O(!1),updateGiftOptions:v,imageSwatchImageNode:y}):null,i==="product"&&f?N(!1):null,i==="order"&&f?t(Ve,{variant:"secondary",children:N(!0)}):null]})]})},U={recipientName:"",senderName:"",message:""},pt={giftReceiptIncluded:!1,printedCardIncluded:!1,isGiftWrappingSelected:!1},ke=(e,i)=>{var d,r;if(!i)return!!((d=L.config)!=null&&d.allowGiftMessageOnOrder);const l=((r=L.config)==null?void 0:r.allowGiftMessageOnOrderItems)??!1;return typeof(e==null?void 0:e.giftMessageAvailable)=="boolean"?e==null?void 0:e.giftMessageAvailable:l},ut=(e,i)=>{const{allowGiftWrappingOnOrder:l,allowGiftWrappingOnOrderItems:d,allowGiftMessageOnOrder:r,allowGiftMessageOnOrderItems:f,allowGiftReceipt:g,allowPrintedCard:o}=L.config||{},n=!f&&!d&&!ke(i,!0),c=!l&&!r&&!g&&!o;return!!(e==="product"&&n||e==="order"&&c)},gt=({item:e,view:i,dataSource:l,initialLoading:d,handleItemsLoading:r,handleItemsError:f,onItemUpdate:g,onGiftOptionsChange:o})=>{var pe,ue,ge,me,Oe,he;const n=i==="product",c=Z({requiredFieldError:"Cart.GiftOptions.formText.requiredFieldError"}),[C,s]=M(()=>d),[w,p]=M({isGiftReceiptVisible:!0,isPrintedCartVisible:!0,isGiftWrappingVisible:!0,isGiftOptionsVisible:!0}),[T,y]=M(!0),[V,O]=M(!1),[v,F]=M(!1),[_,W]=M(!1),[N,P]=M(!1),[B,z]=M(!1),[S,te]=M([]),[h,re]=M(null),[Ie,ie]=M(U),[G,fe]=M(()=>({giftWrappingId:"",...U,...pt})),Q=((pe=G.recipientName)==null?void 0:pe.trim())&&((ue=G.senderName)==null?void 0:ue.trim())&&((ge=G.message)==null?void 0:ge.trim()),Y=!((me=G.recipientName)!=null&&me.trim())&&!((Oe=G.senderName)!=null&&Oe.trim())&&!((he=G.message)!=null&&he.trim()),R=K(async a=>{switch(O(i==="order"),F(!0),i){case"product":{"uid"in e&&(r==null||r(e.uid,!0),f==null||f(e.uid));const{recipientName:m,senderName:x,message:b,giftWrappingId:E,isGiftWrappingSelected:k}=a,H={gift_message:{to:m??"",from:x??"",message:b??""},gift_wrapping_id:k?E:null};"uid"in e&&"quantity"in e&&await it([{uid:e.uid,quantity:e.quantity,giftOptions:H}]).then(()=>{g==null||g({item:e})}).finally(()=>{r==null||r(e.uid,!1),F(!1),W(!1),O(!1)}).catch($=>{console.warn($)})}break;case"order":await nt(a).finally(()=>{F(!1),W(!1),O(!1)});break;default:console.error('Incorrect "view" prop value provided for GiftOptions container (storefront-cart)');break}},[f,r,e,g,i]),ne=K((a,m,x={})=>{fe(b=>{const E=I=>I in b,k=I=>E(I)?b[I]:void 0;if(!(k(a)!==m||Object.keys(x).some(I=>k(I)!==x[I])))return o==null||o(b),b;const $={...b,[a]:m,...x};return!$.recipientName&&!$.senderName&&!$.message&&P(!0),(typeof m=="boolean"||["giftWrappingId","giftReceiptIncluded","printedCardIncluded"].includes(a))&&(P(!1),typeof o=="function"?o($):R($)),W(!0),o==null||o($),$})},[R,o]),Le=K(async()=>{v||typeof o!="function"&&(Y&&N&&(ie(U),P(!1),await R(G)),_&&Q&&(P(!0),await R(G)))},[R,G,_,Y,N,v,o,Q]),Ae=K(async a=>{if(v||typeof o=="function")return;const{name:m,value:x}=a.target;ie(b=>({...b,[m]:x.trim()?"":c.requiredFieldError})),Y&&N&&(ie(U),P(!1),await R(G)),_&&Q&&await R(G)},[v,Y,N,_,Q,c,R,G,o]),Ee=K(a=>{const m=a.target,x=m.name,b=m.type==="checkbox"?m.checked:m.value;ne(x,b)},[ne]);J(()=>{if(n)return;const a=rt.on(l==="cart"?"cart/data":"order/data",m=>{var E,k;re(m);const x=(E=m==null?void 0:m.items)==null?void 0:E.every(({giftWrappingAvailable:H})=>H),b=(k=m==null?void 0:m.cartGiftWrapping)==null?void 0:k.some(H=>H.selected);!x&&b&&R({...G,giftWrappingId:"",isGiftWrappingSelected:!1})},{eager:!0});return()=>{a==null||a.off()}},[R,l,G,n]);const oe=le(()=>{var Te,be,Fe,we,ve,_e;if(!h&&!e)return null;const a=n?(Te=e==null?void 0:e.productGiftWrapping)==null?void 0:Te.map(q=>{var xe;return{...q,price:e!=null&&e.giftWrappingPrice&&((xe=e==null?void 0:e.giftWrappingPrice)==null?void 0:xe.value)>0?e.giftWrappingPrice:q.price}}):(h==null?void 0:h.cartGiftWrapping)||[],m=a==null?void 0:a.find(q=>q.selected),x=(m==null?void 0:m.uid)??((be=a==null?void 0:a[0])==null?void 0:be.uid),b=!!m,E=n?e.giftMessage:h==null?void 0:h.giftMessage,k=h==null?void 0:h.printedCardIncluded,H=h==null?void 0:h.giftReceiptIncluded,$=ke(e,n),I=(Fe=L.config)==null?void 0:Fe.allowGiftWrappingOnOrder,ze=(we=L.config)==null?void 0:we.allowGiftReceipt,qe=(ve=L.config)==null?void 0:ve.allowPrintedCard,Ke=(_e=h==null?void 0:h.items)==null?void 0:_e.every(q=>q.giftWrappingAvailable),je=e==null?void 0:e.giftWrappingAvailable,Ce=n?!1:!!ze,Ge=n?!1:!!qe,ye=n?!!je&&!!a.length:!!I&&!!a.length&&!!Ke;return p({isGiftReceiptVisible:Ce,isPrintedCartVisible:Ge,isGiftWrappingVisible:ye,isGiftOptionsVisible:!(!Ce&&!Ge&&!ye)}),y($),{...e&&"uid"in e?{itemId:e.uid}:{},...n?{}:{printedCardIncluded:k,giftReceiptIncluded:H},...E,giftWrappingId:x,isGiftWrappingSelected:b,giftWrappingOptions:a}},[h,e,n]);J(()=>{if(!oe)return;const{giftWrappingOptions:a,...m}=oe;fe(m),a!=null&&a.length&&te(a),s(!1)},[oe]);const He=le(()=>Object.entries(G).filter(([a])=>a!=="itemId"&&a!=="giftWrappingId").some(([,a])=>!!a),[G]),Be=le(()=>{var a;return!C&&!!((a=L)!=null&&a.config)&&ut(i,e)},[e,C,i]);return{loading:C,giftOptions:G,showModal:B,errorsField:Ie,updateLoading:V,cartData:h,fieldsDisabled:v,isGiftOptionsApplied:He,giftWrappingConfig:S,setFieldsDisabled:F,handleFormMouseLeave:Le,onInputChange:Ee,updateGiftOptions:ne,setShowModal:z,handleBlur:Ae,isGiftMessageVisible:T,areGiftOptionsVisible:w,isGiftOptionsHidden:Be}},$t=({item:e,view:i="order",readOnlyFormOrderView:l="primary",dataSource:d="cart",isEditable:r=!0,initialLoading:f=!0,slots:g,handleItemsLoading:o,handleItemsError:n,onItemUpdate:c,onGiftOptionsChange:C})=>{const{isGiftMessageVisible:s,areGiftOptionsVisible:w,loading:p,giftOptions:T,showModal:y,errorsField:V,updateLoading:O,cartData:v,isGiftOptionsApplied:F,fieldsDisabled:_,giftWrappingConfig:W,handleFormMouseLeave:N,updateGiftOptions:P,setShowModal:B,onInputChange:z,handleBlur:S,isGiftOptionsHidden:te}=gt({item:e,view:i,dataSource:d,initialLoading:f,handleItemsLoading:o,handleItemsError:n,onItemUpdate:c,onGiftOptionsChange:C});return te?null:t(ft,{item:e,view:i,loading:p,onBlur:S,giftOptions:T,showModal:y,isEditable:r,errorsField:V,setShowModal:B,updateLoading:O,updateGiftOptions:P,cartData:v,isGiftOptionsApplied:F,fieldsDisabled:_,giftWrappingConfig:W,handleFormMouseLeave:N,readOnlyFormOrderView:l,onInputChange:z,isGiftMessageVisible:s,areGiftOptionsVisible:w,imageSwatchImageNode:g!=null&&g.SwatchImage?({imageSwatchContext:h,...re})=>t(Ze,{name:"SwatchImage",slotTag:"span",contentTag:"span",slot:g.SwatchImage,context:{item:e,imageSwatchContext:h,defaultImageProps:re}}):void 0})};export{$t as GiftOptions,$t as default};
|
|
3
|
+
import{jsx as t,jsxs as u,Fragment as A}from"@dropins/tools/preact-jsx-runtime.js";import{classes as We,Slot as Ze}from"@dropins/tools/lib.js";import{Modal as De,ContentGrid as Xe,ImageSwatch as Je,Button as se,Price as ce,Skeleton as Qe,SkeletonRow as Ye,Field as j,Checkbox as ae,Input as Me,TextArea as Ue,Accordion as Ne,AccordionSection as Pe,Icon as D,Card as Ve,ProgressSpinner as et}from"@dropins/tools/components.js";/* empty css */import*as X from"@dropins/tools/preact-compat.js";import{useRef as tt,useEffect as J,useState as M,useId as $e,useCallback as K,useMemo as le}from"@dropins/tools/preact-hooks.js";import{useText as Z}from"@dropins/tools/i18n.js";import{s as L}from"../chunks/resetCart.js";import{S as Re}from"../chunks/ChevronDown.js";import{S as Se}from"../chunks/ChevronUp.js";import{events as rt}from"@dropins/tools/event-bus.js";import{u as it}from"../chunks/updateProductsFromCart.js";import{s as nt}from"../chunks/setGiftOptionsOnCart.js";import"@dropins/tools/fetch-graphql.js";import"../chunks/persisted-data.js";import"../chunks/refreshCart.js";import"../fragments.js";import"../chunks/acdl.js";const te=e=>X.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},X.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M0.75 12C0.75 5.78421 5.78421 0.75 12 0.75C18.2158 0.75 23.25 5.78421 23.25 12C23.25 18.2158 18.2158 23.25 12 23.25C5.78421 23.25 0.75 18.2158 0.75 12Z",stroke:"currentColor"}),X.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M6.75 12.762L10.2385 15.75L17.25 9",stroke:"currentColor"})),de=e=>X.createElement("svg",{width:20,height:23,viewBox:"0 0 20 23",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e},X.createElement("path",{d:"M10 6L10 21.5M10 6H12.25C13.4926 6 14.5 4.99264 14.5 3.75C14.5 2.50736 13.4926 1.5 12.25 1.5C11.0074 1.5 10 2.50736 10 3.75M10 6V3.75M10 6H7.75C6.50736 6 5.5 4.99264 5.5 3.75C5.5 2.50736 6.50736 1.5 7.75 1.5C8.99264 1.5 10 2.50736 10 3.75M3.25 10.75H16.75C17.9926 10.75 19 9.74264 19 8.5C19 7.25736 17.9926 6.25 16.75 6.25H3.25C2.00736 6.25 1 7.25736 1 8.5C1 9.74264 2.00736 10.75 3.25 10.75ZM4.75 21.5H15.25C16.4926 21.5 17.5 20.4926 17.5 19.25V13.25C17.5 12.0074 16.4926 11 15.25 11H4.75C3.50736 11 2.5 12.0074 2.5 13.25V19.25C2.5 20.4926 3.50736 21.5 4.75 21.5Z",stroke:"currentColor",strokeWidth:1.5}));function ot(e){const i=tt(null);return J(()=>{if(!e||!i.current)return;const l=i.current,d=l.querySelectorAll('a, button, input, textarea, select, details, [tabindex]:not([tabindex="-1"])');if(d.length===0)return;const r=d[0],f=d[d.length-1];function g(o){o.key==="Tab"&&(o.shiftKey&&document.activeElement===r?(o.preventDefault(),f.focus()):!o.shiftKey&&document.activeElement===f&&(o.preventDefault(),r.focus()))}return l.addEventListener("keydown",g),()=>{l.removeEventListener("keydown",g)}},[e]),i}const at=({view:e,showModal:i,productName:l,giftWrappingConfig:d,imageSwatchImageNode:r,setShowModal:f,updateGiftOptions:g})=>{var w;const o=ot(i),n=Z({modalTitle:"Cart.GiftOptions.modal.title",defaultTitle:"Cart.GiftOptions.modal.defaultTitle",modalWrappingText:"Cart.GiftOptions.modal.wrappingText",modalWrappingSubText:"Cart.GiftOptions.modal.wrappingSubText",modalConfirmButton:"Cart.GiftOptions.modal.modalConfirmButton",modalCancelButton:"Cart.GiftOptions.modal.modalCancelButton",ariaLabelModal:"Cart.GiftOptions.modal.ariaLabelModal",ariaLabelModalOpen:"Cart.GiftOptions.modal.ariaLabelModalOpen",ariaLabelModalClose:"Cart.GiftOptions.modal.ariaLabelModalClose",ariaLabelWrapping:"Cart.GiftOptions.modal.ariaLabelWrapping"}),[c,C]=M();if(J(()=>{const p=d.find(T=>T.selected)??d[0];C(p)},[d]),J(()=>{const p=document==null?void 0:document.querySelector(".cart-gift-options-view__modal-wrapper");p&&(p==null||p.focus())},[]),!i||!d.length)return null;const s=l?`${n.modalTitle} ${l}`:n.defaultTitle;return t("div",{ref:o,className:"cart-gift-options-view__modal-wrapper",tabIndex:0,"aria-label":`${n.ariaLabelModal} ${i?n.ariaLabelModalOpen:n.ariaLabelModalClose} ${l}`,children:u(De,{"data-testid":`gift-option-modal-${e}`,className:"cart-gift-options-view__modal",size:"medium",title:u(A,{children:[t("span",{children:s}),c&&((w=c==null?void 0:c.price)==null?void 0:w.value)>0?t(ce,{amount:c.price.value,currency:c.price.currency,weight:"normal"}):null]}),centered:!0,onClose:f,children:[u("div",{className:"cart-gift-options-view__modal-content",children:[t("span",{className:"cart-gift-options-view__modal-text",children:n.modalWrappingText}),t(Xe,{emptyGridContent:t(A,{}),maxColumns:6,columnWidth:"100px",className:"cart-gift-options-view__modal-grid",children:d.map(p=>t(Je,{groupAriaLabel:n.ariaLabelWrapping,selected:(c==null?void 0:c.uid)===(p==null?void 0:p.uid),onValue:()=>{C(p)},imageNode:r,name:"giftWrappingId",value:p.uid,src:p.image.url,alt:p.design,label:p.design,"data-testid":`gift-option-modal-image-${p.uid}`,className:"cart-gift-options-view__modal-grid-item"},p.uid))}),t("span",{className:"cart-gift-options-view__modal-sub-text",children:c==null?void 0:c.design})]}),t(se,{"data-testid":"gift-option-modal-confirm-button",type:"button",onClick:()=>{g("giftWrappingId",c==null?void 0:c.uid,{isGiftWrappingSelected:!0}),f()},children:n.modalConfirmButton}),t(se,{type:"button",variant:"secondary",onClick:f,"data-testid":"gift-option-modal-cancel-button",children:n.modalCancelButton})]})})},lt=()=>t(Qe,{children:t(Ye,{variant:"row",size:"small",fullWidth:!0,lines:1,multilineGap:"small"})}),st=({className:e,view:i,item:l,giftOptions:d,disabled:r,cartData:f,giftWrappingConfig:g,setShowModal:o,onInputChange:n,areGiftOptionsVisible:c})=>{var N,P,B,z;const C=$e(),s=Z({customize:`Cart.GiftOptions.${i}.customize`,giftReceiptIncludedTitle:`Cart.GiftOptions.${i}.giftReceiptIncluded.title`,giftReceiptIncludedText:`Cart.GiftOptions.${i}.giftReceiptIncluded.subtitle`,printedCardIncludedTitle:`Cart.GiftOptions.${i}.printedCardIncluded.title`,printedCardIncludedText:`Cart.GiftOptions.${i}.printedCardIncluded.subtitle`,giftOptionsWrapTitle:`Cart.GiftOptions.${i}.giftOptionsWrap.title`,giftOptionsWrapText:`Cart.GiftOptions.${i}.giftOptionsWrap.subtitle`,requiredFieldError:"Cart.GiftOptions.formText.requiredFieldError"}),w=l==null?void 0:l.productGiftWrapping,p=f==null?void 0:f.cartGiftWrapping,T=i==="product"?w:p,y=T==null?void 0:T.find(S=>S.uid===d.giftWrappingId),V=(y==null?void 0:y.design)??"",O=l==null?void 0:l.giftWrappingPrice,v=V?`${s.giftOptionsWrapText} ${V}`:"",F=+(((P=(N=L.config)==null?void 0:N.printedCardPrice)==null?void 0:P.value)??0)>0?(B=L.config)==null?void 0:B.printedCardPrice:null;let _=null;O!=null&&O.value?_=O:(z=y==null?void 0:y.price)!=null&&z.value&&(_=y.price);const W=S=>S?u("span",{children:[" (+",t(ce,{amount:S.value,currency:S.currency,weight:"normal"}),")"]}):null;return u("div",{className:We([e,[`${e}--hidden`,!c.isGiftOptionsVisible]]),children:[c.isGiftReceiptVisible?t(j,{disabled:r,className:"cart-gift-options-view__field-gift-receipt",children:t(ae,{id:`giftReceiptIncluded-${C}`,disabled:r,name:"giftReceiptIncluded",checked:d.giftReceiptIncluded,placeholder:s.giftReceiptIncludedTitle,label:s.giftReceiptIncludedTitle,description:s.giftReceiptIncludedText,onChange:n})}):null,c.isPrintedCartVisible?t(j,{disabled:r,className:"cart-gift-options-view__field-printed-card",children:t(ae,{id:`printedCardIncluded-${C}`,disabled:r,name:"printedCardIncluded",checked:d.printedCardIncluded,placeholder:s.printedCardIncludedTitle,label:u(A,{children:[s.printedCardIncludedTitle,W(F)]}),description:s.printedCardIncludedText,onChange:n})}):null,c.isGiftWrappingVisible?u(A,{children:[t(j,{disabled:r,className:"cart-gift-options-view__field-gift-wrap",children:t(ae,{id:`giftOptionsWrap-${C}`,disabled:r,name:"isGiftWrappingSelected",checked:d.isGiftWrappingSelected,placeholder:s.giftOptionsWrapTitle,label:u(A,{children:[s.giftOptionsWrapTitle,W(_)]}),description:v,onChange:n})}),t(se,{disabled:r||!g.length,type:"button","data-testid":`gift-option-customize-${i}`,variant:"tertiary",onClick:()=>o(!0),children:s.customize})]}):null]})},dt=({view:e,giftOptions:i,disabled:l,errorMessage:d,onInputChange:r,onBlur:f,isGiftMessageVisible:g})=>{const o=$e(),n=Z({formTitle:`Cart.GiftOptions.${e}.formContent.formTitle`,formTo:`Cart.GiftOptions.${e}.formContent.formTo`,formFrom:`Cart.GiftOptions.${e}.formContent.formFrom`,giftMessageTitle:`Cart.GiftOptions.${e}.formContent.giftMessageTitle`,formToPlaceholder:`Cart.GiftOptions.${e}.formContent.formToPlaceholder`,formFromPlaceholder:`Cart.GiftOptions.${e}.formContent.formFromPlaceholder`,formMessagePlaceholder:`Cart.GiftOptions.${e}.formContent.formMessagePlaceholder`});return g?u(A,{children:[t("span",{children:n.formTitle}),u("div",{children:[t("span",{children:n.formTo}),t(j,{disabled:l,error:d.recipientName,children:t(Me,{id:`recipientName-${o}`,disabled:l,type:"text",name:"recipientName",value:i.recipientName,placeholder:n.formToPlaceholder,onChange:r,onBlur:f})})]}),u("div",{children:[t("span",{children:n.formFrom}),t(j,{disabled:l,error:d.senderName,children:t(Me,{id:`senderName-${o}`,disabled:l,type:"text",name:"senderName",value:i.senderName,placeholder:n.formFromPlaceholder,onChange:r,onBlur:f})})]}),u("div",{children:[t("span",{children:n.giftMessageTitle}),t(j,{disabled:l,children:t(Ue,{id:`message-${o}`,errorMessage:d.message,disabled:l,name:"message",value:i.message,label:n.formMessagePlaceholder,onChange:r,onBlur:f})})]})]}):null},ct=({view:e,giftOptions:i,giftWrappingConfig:l,readOnlyFormOrderView:d})=>{const r=Z({readOnlyProductTitle:"Cart.GiftOptions.product.readOnlyFormView.title",wrapping:"Cart.GiftOptions.product.readOnlyFormView.wrapping",recipient:"Cart.GiftOptions.product.readOnlyFormView.recipient",sender:"Cart.GiftOptions.product.readOnlyFormView.sender",message:"Cart.GiftOptions.product.readOnlyFormView.message",readOnlyOrderTitle:"Cart.GiftOptions.order.readOnlyFormView.title",readOnlyOrderGiftReceiptTitle:"Cart.GiftOptions.order.readOnlyFormView.giftReceipt",readOnlyOrderGiftReceiptText:"Cart.GiftOptions.order.readOnlyFormView.giftReceiptText",readOnlyOrderGiftPrintCardTitle:"Cart.GiftOptions.order.readOnlyFormView.printCard",readOnlyOrderGiftPrintCardText:"Cart.GiftOptions.order.readOnlyFormView.printCardText",readOnlyOrderGiftWrapTitle:"Cart.GiftOptions.order.readOnlyFormView.giftWrap",readOnlyOrderGiftWrapOptionsText:"Cart.GiftOptions.order.readOnlyFormView.giftWrapOptions",readOnlyOrderFormTitle:"Cart.GiftOptions.order.readOnlyFormView.formTitle",readOnlyOrderFormTo:"Cart.GiftOptions.order.readOnlyFormView.formTo",readOnlyOrderFormFrom:"Cart.GiftOptions.order.readOnlyFormView.formFrom",readOnlyOrderFormMessageTitle:"Cart.GiftOptions.order.readOnlyFormView.formMessageTitle"}),{recipientName:f,senderName:g,message:o,giftReceiptIncluded:n,printedCardIncluded:c,isGiftWrappingSelected:C}=i,s=l==null?void 0:l.find(({uid:O})=>O===(i==null?void 0:i.giftWrappingId)),w=!!f||!!g||!!o,p=s==null?void 0:s.design,T=n||c||(s==null?void 0:s.selected),y=[{id:1,title:r.wrapping,message:C?p:""},{id:2,title:r.recipient,message:f},{id:3,title:r.sender,message:g},{id:4,title:r.message,message:o}],V=y.every(({message:O})=>!O);if(e==="product"&&!V)return t(Ne,{"data-testid":"gift-options-product",iconClose:Se,iconOpen:Re,actionIconPosition:"right",children:t(Pe,{title:r.readOnlyProductTitle,showIconLeft:!0,iconLeft:de,defaultOpen:!1,renderContentWhenClosed:!1,children:t("div",{children:y.filter(O=>O.message).map(O=>u("p",{children:[O.title," ",O.message]},O.id))})})});if(e==="order"&&(w||T)){const O=u("div",{className:"cart-gift-options-readonly__header",children:[t(D,{source:de,size:"24"}),t("span",{children:r.readOnlyOrderTitle})]}),v=u(A,{children:[n?u("div",{className:"cart-gift-options-readonly__checkboxes cart-gift-options-readonly__checkboxes--gift-receipt",children:[t(D,{source:te,size:"16"}),t("p",{children:r.readOnlyOrderGiftReceiptTitle}),t("p",{children:r.readOnlyOrderGiftReceiptText})]}):null,c?u("div",{className:"cart-gift-options-readonly__checkboxes cart-gift-options-readonly__checkboxes--print-card",children:[t(D,{source:te,size:"16"}),t("p",{children:r.readOnlyOrderGiftPrintCardTitle}),t("p",{children:r.readOnlyOrderGiftPrintCardText})]}):null,s!=null&&s.selected?u("div",{className:"cart-gift-options-readonly__checkboxes cart-gift-options-readonly__checkboxes--gift-wrap",children:[t(D,{source:te,size:"16"}),u("p",{children:[r.readOnlyOrderGiftWrapTitle," (+",t(ce,{amount:s.price.value,currency:s.price.currency,weight:"normal"}),")"]}),t("p",{children:`${r.readOnlyOrderGiftWrapOptionsText} ${s==null?void 0:s.design}`})]}):null]}),F=w?u("div",{className:"cart-gift-options-readonly__form",children:[t("div",{children:r.readOnlyOrderFormTitle}),u("div",{children:[u("p",{children:[t("span",{children:r.readOnlyOrderFormTo}),t("span",{children:f})]}),u("p",{children:[t("span",{children:r.readOnlyOrderFormFrom}),t("span",{children:g})]})]}),u("div",{children:[t("p",{children:r.readOnlyOrderFormMessageTitle}),t("p",{children:o})]})]}):null;return u(Ve,{variant:d,children:[O,v,F]})}return null},ft=({item:e,view:i,loading:l,giftOptions:d,showModal:r,isEditable:f,errorsField:g,updateLoading:o,cartData:n,fieldsDisabled:c,isGiftOptionsApplied:C,giftWrappingConfig:s,readOnlyFormOrderView:w,isGiftMessageVisible:p,areGiftOptionsVisible:T,imageSwatchImageNode:y,onBlur:V,setShowModal:O,updateGiftOptions:v,onInputChange:F,handleFormMouseLeave:_})=>{const W=Z({accordionHeading:`Cart.GiftOptions.${i}.accordionHeading`}),N=K(P=>t(Ne,{"data-testid":"gift-options-product",iconClose:Se,iconOpen:Re,actionIconPosition:"right",children:t(Pe,{title:u("div",{className:"cart-gift-options-view__icon--success",children:[t("span",{children:W.accordionHeading}),C?t(D,{source:te,size:"16"}):null]}),ariaLabelTitle:W.accordionHeading,showIconLeft:!0,iconLeft:de,defaultOpen:C||P,renderContentWhenClosed:!1,children:u(A,{children:[t(st,{className:"cart-gift-options-view__top",view:i,item:e,giftOptions:d,disabled:c,onInputChange:F,cartData:n,giftWrappingConfig:s,setShowModal:O,areGiftOptionsVisible:T}),t("form",{className:"cart-gift-options-view__footer",onMouseLeave:_,children:t(dt,{view:i,giftOptions:d,disabled:c,errorMessage:g,onInputChange:F,onBlur:V,isGiftMessageVisible:p})})]})})}),[i,e,n,W,g,d,c,s,T,C,p,V,O,F,_]);return!T.isGiftOptionsVisible&&!p?null:u("div",{id:"cart-gift-options-view",className:We(["cart-gift-options-view",`cart-gift-options-view--${i}`,["cart-gift-options-view--loading",o]]),children:[o?t(et,{className:"cart-gift-options-view__spinner"}):null,l?t(lt,{}):u(A,{children:[f?null:t("div",{className:"cart-gift-options-view--readonly",children:t(ct,{view:i,giftOptions:d,giftWrappingConfig:s,readOnlyFormOrderView:w})}),r?t(at,{view:i,productName:e&&"name"in e?e==null?void 0:e.name:"",showModal:r,giftWrappingConfig:s,setShowModal:()=>O(!1),updateGiftOptions:v,imageSwatchImageNode:y}):null,i==="product"&&f?N(!1):null,i==="order"&&f?t(Ve,{variant:"secondary",children:N(!0)}):null]})]})},ee={recipientName:"",senderName:"",message:""},pt={giftReceiptIncluded:!1,printedCardIncluded:!1,isGiftWrappingSelected:!1},ke=(e,i)=>{var d,r;if(!i)return!!((d=L.config)!=null&&d.allowGiftMessageOnOrder);const l=((r=L.config)==null?void 0:r.allowGiftMessageOnOrderItems)??!1;return typeof(e==null?void 0:e.giftMessageAvailable)=="boolean"?e==null?void 0:e.giftMessageAvailable:l},ut=(e,i)=>{const{allowGiftWrappingOnOrder:l,allowGiftWrappingOnOrderItems:d,allowGiftMessageOnOrder:r,allowGiftMessageOnOrderItems:f,allowGiftReceipt:g,allowPrintedCard:o}=L.config||{},n=!f&&!d&&!ke(i,!0),c=!l&&!r&&!g&&!o;return!!(e==="product"&&n||e==="order"&&c)},gt=({item:e,view:i,dataSource:l,initialLoading:d,handleItemsLoading:r,handleItemsError:f,onItemUpdate:g,onGiftOptionsChange:o})=>{var pe,ue,ge,me,Oe,he;const n=i==="product",c=Z({requiredFieldError:"Cart.GiftOptions.formText.requiredFieldError"}),[C,s]=M(()=>d),[w,p]=M({isGiftReceiptVisible:!0,isPrintedCartVisible:!0,isGiftWrappingVisible:!0,isGiftOptionsVisible:!0}),[T,y]=M(!0),[V,O]=M(!1),[v,F]=M(!1),[_,W]=M(!1),[N,P]=M(!1),[B,z]=M(!1),[S,re]=M([]),[h,Q]=M(null),[Ie,ie]=M(ee),[G,fe]=M(()=>({giftWrappingId:"",...ee,...pt})),Y=((pe=G.recipientName)==null?void 0:pe.trim())&&((ue=G.senderName)==null?void 0:ue.trim())&&((ge=G.message)==null?void 0:ge.trim()),U=!((me=G.recipientName)!=null&&me.trim())&&!((Oe=G.senderName)!=null&&Oe.trim())&&!((he=G.message)!=null&&he.trim()),R=K(async a=>{switch(O(i==="order"),F(!0),i){case"product":{"uid"in e&&(r==null||r(e.uid,!0),f==null||f(e.uid));const{recipientName:m,senderName:x,message:b,giftWrappingId:E,isGiftWrappingSelected:k}=a,H={gift_message:{to:m??"",from:x??"",message:b??""},gift_wrapping_id:k?E:null};"uid"in e&&"quantity"in e&&await it([{uid:e.uid,quantity:e.quantity,giftOptions:H}]).then(()=>{g==null||g({item:e})}).finally(()=>{r==null||r(e.uid,!1),F(!1),W(!1),O(!1)}).catch($=>{console.warn($)})}break;case"order":await nt(a).finally(()=>{F(!1),W(!1),O(!1)});break;default:console.error('Incorrect "view" prop value provided for GiftOptions container (storefront-cart)');break}},[f,r,e,g,i]),ne=K((a,m,x={})=>{fe(b=>{const E=I=>I in b,k=I=>E(I)?b[I]:void 0;if(!(k(a)!==m||Object.keys(x).some(I=>k(I)!==x[I])))return o==null||o(b),b;const $={...b,[a]:m,...x};return!$.recipientName&&!$.senderName&&!$.message&&P(!0),(typeof m=="boolean"||["giftWrappingId","giftReceiptIncluded","printedCardIncluded"].includes(a))&&(P(!1),typeof o=="function"?o($):R($)),W(!0),o==null||o($),$})},[R,o]),Le=K(async()=>{v||typeof o!="function"&&(U&&N&&(ie(ee),P(!1),await R(G)),_&&Y&&(P(!0),await R(G)))},[R,G,_,U,N,v,o,Y]),Ae=K(async a=>{if(v||typeof o=="function")return;const{name:m,value:x}=a.target;ie(b=>({...b,[m]:x.trim()?"":c.requiredFieldError})),U&&N&&(ie(ee),P(!1),await R(G)),_&&Y&&await R(G)},[v,U,N,_,Y,c,R,G,o]),Ee=K(a=>{const m=a.target,x=m.name,b=m.type==="checkbox"?m.checked:m.value;ne(x,b)},[ne]);J(()=>{if(n)return;const a=rt.on(l==="cart"?"cart/data":"order/data",m=>{var E,k;Q(m);const x=(E=m==null?void 0:m.items)==null?void 0:E.some(({giftWrappingAvailable:H})=>H),b=(k=m==null?void 0:m.cartGiftWrapping)==null?void 0:k.some(H=>H.selected);!x&&b&&R({...G,giftWrappingId:"",isGiftWrappingSelected:!1})},{eager:!0});return()=>{a==null||a.off()}},[Q,R,l,G,n]);const oe=le(()=>{var Te,be,Fe,we,ve,_e;if(!h&&!e)return null;const a=n?(Te=e==null?void 0:e.productGiftWrapping)==null?void 0:Te.map(q=>{var xe;return{...q,price:e!=null&&e.giftWrappingPrice&&((xe=e==null?void 0:e.giftWrappingPrice)==null?void 0:xe.value)>0?e.giftWrappingPrice:q.price}}):(h==null?void 0:h.cartGiftWrapping)||[],m=a==null?void 0:a.find(q=>q.selected),x=(m==null?void 0:m.uid)??((be=a==null?void 0:a[0])==null?void 0:be.uid),b=!!m,E=n?e.giftMessage:h==null?void 0:h.giftMessage,k=h==null?void 0:h.printedCardIncluded,H=h==null?void 0:h.giftReceiptIncluded,$=ke(e,n),I=(Fe=L.config)==null?void 0:Fe.allowGiftWrappingOnOrder,ze=(we=L.config)==null?void 0:we.allowGiftReceipt,qe=(ve=L.config)==null?void 0:ve.allowPrintedCard,Ke=(_e=h==null?void 0:h.items)==null?void 0:_e.some(q=>q.giftWrappingAvailable),je=e==null?void 0:e.giftWrappingAvailable,Ce=n?!1:!!ze,Ge=n?!1:!!qe,ye=n?!!je&&!!a.length:!!I&&!!a.length&&!!Ke;return p({isGiftReceiptVisible:Ce,isPrintedCartVisible:Ge,isGiftWrappingVisible:ye,isGiftOptionsVisible:!(!Ce&&!Ge&&!ye)}),y($),{...e&&"uid"in e?{itemId:e.uid}:{},...n?{}:{printedCardIncluded:k,giftReceiptIncluded:H},...E,giftWrappingId:x,isGiftWrappingSelected:b,giftWrappingOptions:a}},[h,e,n]);J(()=>{if(!oe)return;const{giftWrappingOptions:a,...m}=oe;fe(m),a!=null&&a.length&&re(a),s(!1)},[oe]);const He=le(()=>Object.entries(G).filter(([a])=>a!=="itemId"&&a!=="giftWrappingId").some(([,a])=>!!a),[G]),Be=le(()=>{var a;return!C&&!!((a=L)!=null&&a.config)&&ut(i,e)},[e,C,i]);return{loading:C,giftOptions:G,showModal:B,errorsField:Ie,updateLoading:V,cartData:h,fieldsDisabled:v,isGiftOptionsApplied:He,giftWrappingConfig:S,setFieldsDisabled:F,handleFormMouseLeave:Le,onInputChange:Ee,updateGiftOptions:ne,setShowModal:z,handleBlur:Ae,isGiftMessageVisible:T,areGiftOptionsVisible:w,isGiftOptionsHidden:Be}},$t=({item:e,view:i="order",readOnlyFormOrderView:l="primary",dataSource:d="cart",isEditable:r=!0,initialLoading:f=!0,slots:g,handleItemsLoading:o,handleItemsError:n,onItemUpdate:c,onGiftOptionsChange:C})=>{const{isGiftMessageVisible:s,areGiftOptionsVisible:w,loading:p,giftOptions:T,showModal:y,errorsField:V,updateLoading:O,cartData:v,isGiftOptionsApplied:F,fieldsDisabled:_,giftWrappingConfig:W,handleFormMouseLeave:N,updateGiftOptions:P,setShowModal:B,onInputChange:z,handleBlur:S,isGiftOptionsHidden:re}=gt({item:e,view:i,dataSource:d,initialLoading:f,handleItemsLoading:o,handleItemsError:n,onItemUpdate:c,onGiftOptionsChange:C});return re?null:t(ft,{item:e,view:i,loading:p,onBlur:S,giftOptions:T,showModal:y,isEditable:r,errorsField:V,setShowModal:B,updateLoading:O,updateGiftOptions:P,cartData:v,isGiftOptionsApplied:F,fieldsDisabled:_,giftWrappingConfig:W,handleFormMouseLeave:N,readOnlyFormOrderView:l,onInputChange:z,isGiftMessageVisible:s,areGiftOptionsVisible:w,imageSwatchImageNode:g!=null&&g.SwatchImage?({imageSwatchContext:h,...Q})=>t(Ze,{name:"SwatchImage",slotTag:"span",contentTag:"span",slot:g.SwatchImage,context:{item:e,imageSwatchContext:h,defaultImageProps:Q}}):void 0})};export{$t as GiftOptions,$t as default};
|
|
4
|
+
//# sourceMappingURL=GiftOptions.js.map
|