@dropins/storefront-checkout 0.1.0-alpha33 → 0.1.0-alpha34
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/__generated__/types.d.ts +28959 -0
- package/__generated__/types.d.ts.map +1 -0
- package/api/errors/errors.d.ts +27 -0
- package/api/errors/errors.d.ts.map +1 -0
- package/api/errors/index.d.ts +2 -0
- package/api/errors/index.d.ts.map +1 -0
- package/api/estimateShippingMethods/estimateShippingMethods.d.ts +14 -0
- package/api/estimateShippingMethods/estimateShippingMethods.d.ts.map +1 -0
- package/api/estimateShippingMethods/fixtures.d.ts +8 -0
- package/api/estimateShippingMethods/fixtures.d.ts.map +1 -0
- package/api/estimateShippingMethods/graphql/estimateShippingMethods.graphql.d.ts +2 -0
- package/api/estimateShippingMethods/graphql/estimateShippingMethods.graphql.d.ts.map +1 -0
- package/api/estimateShippingMethods/graphql/index.d.ts +2 -0
- package/api/estimateShippingMethods/graphql/index.d.ts.map +1 -0
- package/api/estimateShippingMethods/index.d.ts +2 -0
- package/api/estimateShippingMethods/index.d.ts.map +1 -0
- package/api/fetch-graphql/fetch-graphql.d.ts +8 -0
- package/api/fetch-graphql/fetch-graphql.d.ts.map +1 -0
- package/api/fetch-graphql/index.d.ts +2 -0
- package/api/fetch-graphql/index.d.ts.map +1 -0
- package/api/fetchAddressFormFields/fetchAddressFormFields.d.ts +4 -0
- package/api/fetchAddressFormFields/fetchAddressFormFields.d.ts.map +1 -0
- package/api/fetchAddressFormFields/fixtures.d.ts +5 -0
- package/api/fetchAddressFormFields/fixtures.d.ts.map +1 -0
- package/api/fetchAddressFormFields/graphql/fetchAddressFormFields.graphql.d.ts +2 -0
- package/api/fetchAddressFormFields/graphql/fetchAddressFormFields.graphql.d.ts.map +1 -0
- package/api/fetchAddressFormFields/index.d.ts +3 -0
- package/api/fetchAddressFormFields/index.d.ts.map +1 -0
- package/api/getCart/fixtures.d.ts +12 -0
- package/api/getCart/fixtures.d.ts.map +1 -0
- package/api/getCart/getCart.d.ts +2 -0
- package/api/getCart/getCart.d.ts.map +1 -0
- package/api/getCart/graphql/getCart.graphql.d.ts +5 -0
- package/api/getCart/graphql/getCart.graphql.d.ts.map +1 -0
- package/api/getCart/graphql/index.d.ts +2 -0
- package/api/getCart/graphql/index.d.ts.map +1 -0
- package/api/getCart/index.d.ts +2 -0
- package/api/getCart/index.d.ts.map +1 -0
- package/api/getCountries/fixtures.d.ts +6 -0
- package/api/getCountries/fixtures.d.ts.map +1 -0
- package/api/getCountries/getCountries.d.ts +4 -0
- package/api/getCountries/getCountries.d.ts.map +1 -0
- package/api/getCountries/graphql/getCountries.graphql.d.ts +2 -0
- package/api/getCountries/graphql/getCountries.graphql.d.ts.map +1 -0
- package/api/getCountries/index.d.ts +2 -0
- package/api/getCountries/index.d.ts.map +1 -0
- package/api/getCustomer/getCustomer.d.ts +4 -0
- package/api/getCustomer/getCustomer.d.ts.map +1 -0
- package/api/getCustomer/graphql/getCustomer.graphql.d.ts +2 -0
- package/api/getCustomer/graphql/getCustomer.graphql.d.ts.map +1 -0
- package/api/getCustomer/graphql/index.d.ts +2 -0
- package/api/getCustomer/graphql/index.d.ts.map +1 -0
- package/api/getCustomer/index.d.ts +2 -0
- package/api/getCustomer/index.d.ts.map +1 -0
- package/api/getRegions/fixtures.d.ts +5 -0
- package/api/getRegions/fixtures.d.ts.map +1 -0
- package/api/getRegions/getRegions.d.ts +5 -0
- package/api/getRegions/getRegions.d.ts.map +1 -0
- package/api/getRegions/graphql/getRegions.graphql.d.ts +2 -0
- package/api/getRegions/graphql/getRegions.graphql.d.ts.map +1 -0
- package/api/getRegions/index.d.ts +2 -0
- package/api/getRegions/index.d.ts.map +1 -0
- package/api/getStockStatus/getStockStatus.d.ts +4 -0
- package/api/getStockStatus/getStockStatus.d.ts.map +1 -0
- package/api/getStockStatus/graphql/getStockStatus.graphql.d.ts +4 -0
- package/api/getStockStatus/graphql/getStockStatus.graphql.d.ts.map +1 -0
- package/api/getStockStatus/index.d.ts +2 -0
- package/api/getStockStatus/index.d.ts.map +1 -0
- package/api/getStoreConfig/getStoreConfig.d.ts +4 -0
- package/api/getStoreConfig/getStoreConfig.d.ts.map +1 -0
- package/api/getStoreConfig/graphql/getStoreConfig.graphql.d.ts +2 -0
- package/api/getStoreConfig/graphql/getStoreConfig.graphql.d.ts.map +1 -0
- package/api/getStoreConfig/index.d.ts +2 -0
- package/api/getStoreConfig/index.d.ts.map +1 -0
- package/api/index.d.ts +20 -0
- package/api/index.d.ts.map +1 -0
- package/api/initialize/index.d.ts +2 -0
- package/api/initialize/index.d.ts.map +1 -0
- package/api/initialize/initialize.d.ts +10 -0
- package/api/initialize/initialize.d.ts.map +1 -0
- package/api/isEmailAvailable/graphql/isEmailAvailable.graphql.d.ts +2 -0
- package/api/isEmailAvailable/graphql/isEmailAvailable.graphql.d.ts.map +1 -0
- package/api/isEmailAvailable/index.d.ts +2 -0
- package/api/isEmailAvailable/index.d.ts.map +1 -0
- package/api/isEmailAvailable/isEmailAvailable.d.ts +4 -0
- package/api/isEmailAvailable/isEmailAvailable.d.ts.map +1 -0
- package/api/placeOrder/graphql/index.d.ts +2 -0
- package/api/placeOrder/graphql/index.d.ts.map +1 -0
- package/api/placeOrder/graphql/placeOrder.graphql.d.ts +2 -0
- package/api/placeOrder/graphql/placeOrder.graphql.d.ts.map +1 -0
- package/api/placeOrder/index.d.ts +2 -0
- package/api/placeOrder/index.d.ts.map +1 -0
- package/api/placeOrder/placeOrder.d.ts +2 -0
- package/api/placeOrder/placeOrder.d.ts.map +1 -0
- package/api/redirect/index.d.ts +2 -0
- package/api/redirect/index.d.ts.map +1 -0
- package/api/redirect/redirect.d.ts +2 -0
- package/api/redirect/redirect.d.ts.map +1 -0
- package/api/setBillingAddress/graphql/setBillingAddress.graphql.d.ts +2 -0
- package/api/setBillingAddress/graphql/setBillingAddress.graphql.d.ts.map +1 -0
- package/api/setBillingAddress/index.d.ts +2 -0
- package/api/setBillingAddress/index.d.ts.map +1 -0
- package/api/setBillingAddress/setBillingAddress.d.ts +14 -0
- package/api/setBillingAddress/setBillingAddress.d.ts.map +1 -0
- package/api/setGuestEmailOnCart/graphql/setGuestEmailOnCart.graphql.d.ts +2 -0
- package/api/setGuestEmailOnCart/graphql/setGuestEmailOnCart.graphql.d.ts.map +1 -0
- package/api/setGuestEmailOnCart/index.d.ts +2 -0
- package/api/setGuestEmailOnCart/index.d.ts.map +1 -0
- package/api/setGuestEmailOnCart/setGuestEmailOnCart.d.ts +6 -0
- package/api/setGuestEmailOnCart/setGuestEmailOnCart.d.ts.map +1 -0
- package/api/setPaymentMethod/graphql/setPaymentMethod.graphql.d.ts +2 -0
- package/api/setPaymentMethod/graphql/setPaymentMethod.graphql.d.ts.map +1 -0
- package/api/setPaymentMethod/index.d.ts +2 -0
- package/api/setPaymentMethod/index.d.ts.map +1 -0
- package/api/setPaymentMethod/setPaymentMethod.d.ts +5 -0
- package/api/setPaymentMethod/setPaymentMethod.d.ts.map +1 -0
- package/api/setShippingAddress/graphql/setShippingAddress.graphql.d.ts +2 -0
- package/api/setShippingAddress/graphql/setShippingAddress.graphql.d.ts.map +1 -0
- package/api/setShippingAddress/index.d.ts +2 -0
- package/api/setShippingAddress/index.d.ts.map +1 -0
- package/api/setShippingAddress/setShippingAddress.d.ts +31 -0
- package/api/setShippingAddress/setShippingAddress.d.ts.map +1 -0
- package/api/setShippingMethods/graphql/setShippingMethodsOnCart.graphql.d.ts +2 -0
- package/api/setShippingMethods/graphql/setShippingMethodsOnCart.graphql.d.ts.map +1 -0
- package/api/setShippingMethods/index.d.ts +2 -0
- package/api/setShippingMethods/index.d.ts.map +1 -0
- package/api/setShippingMethods/setShippingMethods.d.ts +8 -0
- package/api/setShippingMethods/setShippingMethods.d.ts.map +1 -0
- package/api/utils/dispatchApiCall.d.ts +41 -0
- package/api/utils/dispatchApiCall.d.ts.map +1 -0
- package/api/utils/enqueueRequest.d.ts +2 -0
- package/api/utils/enqueueRequest.d.ts.map +1 -0
- package/api/utils/filterControlledErrors.d.ts +18 -0
- package/api/utils/filterControlledErrors.d.ts.map +1 -0
- package/api.d.ts +1 -0
- package/chunks/BillToShippingAddress2.js +1 -1
- package/chunks/BillToShippingAddress2.js.map +1 -1
- package/chunks/ErrorBanner.js +1 -1
- package/chunks/ErrorBanner.js.map +1 -1
- package/chunks/MergedCartBanner.js +2 -0
- package/chunks/MergedCartBanner.js.map +1 -0
- package/chunks/{OrderSummary.js → OrderSummarySkeleton.js} +2 -2
- package/chunks/OrderSummarySkeleton.js.map +1 -0
- package/chunks/ToggleButton.js +1 -1
- package/chunks/ToggleButton.js.map +1 -1
- package/chunks/ToggleButton2.js +2 -0
- package/chunks/ToggleButton2.js.map +1 -0
- package/components/AddressForm/AddressForm.d.ts +21 -0
- package/components/AddressForm/AddressForm.d.ts.map +1 -0
- package/components/AddressForm/constants.d.ts +4 -0
- package/components/AddressForm/constants.d.ts.map +1 -0
- package/components/AddressForm/index.d.ts +7 -0
- package/components/AddressForm/index.d.ts.map +1 -0
- package/components/AddressForm/useAddressBackup.d.ts +8 -0
- package/components/AddressForm/useAddressBackup.d.ts.map +1 -0
- package/components/AddressForm/useAddressForm.d.ts +38 -0
- package/components/AddressForm/useAddressForm.d.ts.map +1 -0
- package/components/AddressForm/usePreselectedFields.d.ts +9 -0
- package/components/AddressForm/usePreselectedFields.d.ts.map +1 -0
- package/components/AddressForm/utils.d.ts +13 -0
- package/components/AddressForm/utils.d.ts.map +1 -0
- package/components/BillToShippingAddress/BillToShippingAddress.d.ts +8 -0
- package/components/BillToShippingAddress/BillToShippingAddress.d.ts.map +1 -0
- package/components/BillToShippingAddress/BillToShippingAddressSkeleton.d.ts +4 -0
- package/components/BillToShippingAddress/BillToShippingAddressSkeleton.d.ts.map +1 -0
- package/components/BillToShippingAddress/index.d.ts +4 -0
- package/components/BillToShippingAddress/index.d.ts.map +1 -0
- package/components/CartSummary/CartSummary.d.ts +19 -0
- package/components/CartSummary/CartSummary.d.ts.map +1 -0
- package/components/CartSummary/CartSummarySkeleton.d.ts +4 -0
- package/components/CartSummary/CartSummarySkeleton.d.ts.map +1 -0
- package/components/CartSummary/MobileCartSummarySkeleton.d.ts +4 -0
- package/components/CartSummary/MobileCartSummarySkeleton.d.ts.map +1 -0
- package/components/CartSummary/fixtures/CartSummary.fixture.d.ts +213 -0
- package/components/CartSummary/fixtures/CartSummary.fixture.d.ts.map +1 -0
- package/components/CartSummary/index.d.ts +5 -0
- package/components/CartSummary/index.d.ts.map +1 -0
- package/components/CartSummaryItem/CartSummaryItem.d.ts +10 -0
- package/components/CartSummaryItem/CartSummaryItem.d.ts.map +1 -0
- package/components/CartSummaryItem/index.d.ts +3 -0
- package/components/CartSummaryItem/index.d.ts.map +1 -0
- package/components/Checkout/Checkout.d.ts +33 -0
- package/components/Checkout/Checkout.d.ts.map +1 -0
- package/components/Checkout/index.d.ts +3 -0
- package/components/Checkout/index.d.ts.map +1 -0
- package/components/EmptyCart/EmptyCart.d.ts +9 -0
- package/components/EmptyCart/EmptyCart.d.ts.map +1 -0
- package/components/EmptyCart/index.d.ts +3 -0
- package/components/EmptyCart/index.d.ts.map +1 -0
- package/components/FieldsForm/FieldsForm.d.ts +13 -0
- package/components/FieldsForm/FieldsForm.d.ts.map +1 -0
- package/components/FieldsForm/FieldsFormSkeleton.d.ts +4 -0
- package/components/FieldsForm/FieldsFormSkeleton.d.ts.map +1 -0
- package/components/FieldsForm/fieldFactory.d.ts +9 -0
- package/components/FieldsForm/fieldFactory.d.ts.map +1 -0
- package/components/FieldsForm/fixtures.d.ts +5 -0
- package/components/FieldsForm/fixtures.d.ts.map +1 -0
- package/components/FieldsForm/index.d.ts +6 -0
- package/components/FieldsForm/index.d.ts.map +1 -0
- package/components/FieldsForm/validation.d.ts +18 -0
- package/components/FieldsForm/validation.d.ts.map +1 -0
- package/components/Heading/Heading.d.ts +8 -0
- package/components/Heading/Heading.d.ts.map +1 -0
- package/components/Heading/index.d.ts +3 -0
- package/components/Heading/index.d.ts.map +1 -0
- package/components/LoginForm/Email.d.ts +13 -0
- package/components/LoginForm/Email.d.ts.map +1 -0
- package/components/LoginForm/LoginForm.d.ts +17 -0
- package/components/LoginForm/LoginForm.d.ts.map +1 -0
- package/components/LoginForm/LoginFormSkeleton.d.ts +4 -0
- package/components/LoginForm/LoginFormSkeleton.d.ts.map +1 -0
- package/components/LoginForm/SignIn.d.ts +9 -0
- package/components/LoginForm/SignIn.d.ts.map +1 -0
- package/components/LoginForm/SignOut.d.ts +8 -0
- package/components/LoginForm/SignOut.d.ts.map +1 -0
- package/components/LoginForm/index.d.ts +6 -0
- package/components/LoginForm/index.d.ts.map +1 -0
- package/components/OrderSummary/OrderSummary.d.ts +37 -0
- package/components/OrderSummary/OrderSummary.d.ts.map +1 -0
- package/components/OrderSummary/OrderSummarySkeleton.d.ts +4 -0
- package/components/OrderSummary/OrderSummarySkeleton.d.ts.map +1 -0
- package/components/OrderSummary/index.d.ts +4 -0
- package/components/OrderSummary/index.d.ts.map +1 -0
- package/components/OutOfStock/OutOfStock.d.ts +9 -0
- package/components/OutOfStock/OutOfStock.d.ts.map +1 -0
- package/components/OutOfStock/index.d.ts +3 -0
- package/components/OutOfStock/index.d.ts.map +1 -0
- package/components/OverlayLoader/OverlayLoader.d.ts +6 -0
- package/components/OverlayLoader/OverlayLoader.d.ts.map +1 -0
- package/components/OverlayLoader/index.d.ts +2 -0
- package/components/OverlayLoader/index.d.ts.map +1 -0
- package/components/PaymentMethods/PaymentMethods.d.ts +13 -0
- package/components/PaymentMethods/PaymentMethods.d.ts.map +1 -0
- package/components/PaymentMethods/PaymentMethodsSkeleton.d.ts +4 -0
- package/components/PaymentMethods/PaymentMethodsSkeleton.d.ts.map +1 -0
- package/components/PaymentMethods/index.d.ts +4 -0
- package/components/PaymentMethods/index.d.ts.map +1 -0
- package/components/PlaceOrder/PlaceOrder.d.ts +9 -0
- package/components/PlaceOrder/PlaceOrder.d.ts.map +1 -0
- package/components/PlaceOrder/PlaceOrderSkeleton.d.ts +4 -0
- package/components/PlaceOrder/PlaceOrderSkeleton.d.ts.map +1 -0
- package/components/PlaceOrder/index.d.ts +3 -0
- package/components/PlaceOrder/index.d.ts.map +1 -0
- package/components/ServerError/ServerError.d.ts +10 -0
- package/components/ServerError/ServerError.d.ts.map +1 -0
- package/components/ServerError/index.d.ts +3 -0
- package/components/ServerError/index.d.ts.map +1 -0
- package/components/ShippingMethods/ShippingMethods.d.ts +12 -0
- package/components/ShippingMethods/ShippingMethods.d.ts.map +1 -0
- package/components/ShippingMethods/ShippingMethodsSkeleton.d.ts +4 -0
- package/components/ShippingMethods/ShippingMethodsSkeleton.d.ts.map +1 -0
- package/components/ShippingMethods/index.d.ts +4 -0
- package/components/ShippingMethods/index.d.ts.map +1 -0
- package/components/ToggleButton/ToggleButton.d.ts +14 -0
- package/components/ToggleButton/ToggleButton.d.ts.map +1 -0
- package/components/ToggleButton/assets/icons/index.d.ts +2 -0
- package/components/ToggleButton/assets/icons/index.d.ts.map +1 -0
- package/components/ToggleButton/assets/images/index.d.ts +2 -0
- package/components/ToggleButton/assets/images/index.d.ts.map +1 -0
- package/components/ToggleButton/index.d.ts +3 -0
- package/components/ToggleButton/index.d.ts.map +1 -0
- package/components/index.d.ts +18 -0
- package/components/index.d.ts.map +1 -0
- package/containers/BillToShippingAddress/BillToShippingAddress.d.ts +10 -0
- package/containers/BillToShippingAddress/BillToShippingAddress.d.ts.map +1 -0
- package/containers/BillToShippingAddress/constants.d.ts +2 -0
- package/containers/BillToShippingAddress/constants.d.ts.map +1 -0
- package/containers/BillToShippingAddress/index.d.ts +4 -0
- package/containers/BillToShippingAddress/index.d.ts.map +1 -0
- package/containers/BillToShippingAddress.d.ts +3 -0
- package/containers/BillingForm/BillingForm.d.ts +7 -0
- package/containers/BillingForm/BillingForm.d.ts.map +1 -0
- package/containers/BillingForm/constants.d.ts +2 -0
- package/containers/BillingForm/constants.d.ts.map +1 -0
- package/containers/BillingForm/index.d.ts +4 -0
- package/containers/BillingForm/index.d.ts.map +1 -0
- package/containers/BillingForm.d.ts +3 -0
- package/containers/BillingForm.js +1 -1
- package/containers/CartSummary/CartSummary.d.ts +19 -0
- package/containers/CartSummary/CartSummary.d.ts.map +1 -0
- package/containers/CartSummary/constants.d.ts +2 -0
- package/containers/CartSummary/constants.d.ts.map +1 -0
- package/containers/CartSummary/index.d.ts +3 -0
- package/containers/CartSummary/index.d.ts.map +1 -0
- package/containers/CartSummary.d.ts +3 -0
- package/containers/CartSummary.js +1 -1
- package/containers/Checkout/Checkout.d.ts +37 -0
- package/containers/Checkout/Checkout.d.ts.map +1 -0
- package/containers/Checkout/constants.d.ts +2 -0
- package/containers/Checkout/constants.d.ts.map +1 -0
- package/containers/Checkout/index.d.ts +4 -0
- package/containers/Checkout/index.d.ts.map +1 -0
- package/containers/Checkout.d.ts +3 -0
- package/containers/Checkout.js +1 -1
- package/containers/Checkout.js.map +1 -1
- package/containers/ErrorBanner/ErrorBanner.d.ts +5 -0
- package/containers/ErrorBanner/ErrorBanner.d.ts.map +1 -0
- package/containers/ErrorBanner/index.d.ts +3 -0
- package/containers/ErrorBanner/index.d.ts.map +1 -0
- package/containers/ErrorBanner.d.ts +3 -0
- package/containers/LoginForm/LoginForm.d.ts +10 -0
- package/containers/LoginForm/LoginForm.d.ts.map +1 -0
- package/containers/LoginForm/constants.d.ts +2 -0
- package/containers/LoginForm/constants.d.ts.map +1 -0
- package/containers/LoginForm/index.d.ts +4 -0
- package/containers/LoginForm/index.d.ts.map +1 -0
- package/containers/LoginForm.d.ts +3 -0
- package/containers/LoginForm.js +1 -1
- package/containers/MergedCartBanner/MergedCartBanner.d.ts +5 -0
- package/containers/MergedCartBanner/MergedCartBanner.d.ts.map +1 -0
- package/containers/MergedCartBanner/index.d.ts +3 -0
- package/containers/MergedCartBanner/index.d.ts.map +1 -0
- package/containers/MergedCartBanner.d.ts +3 -0
- package/containers/MergedCartBanner.js +2 -0
- package/containers/MergedCartBanner.js.map +1 -0
- package/containers/OrderSummary/OrderSummary.d.ts +13 -0
- package/containers/OrderSummary/OrderSummary.d.ts.map +1 -0
- package/containers/OrderSummary/constants.d.ts +2 -0
- package/containers/OrderSummary/constants.d.ts.map +1 -0
- package/containers/OrderSummary/index.d.ts +3 -0
- package/containers/OrderSummary/index.d.ts.map +1 -0
- package/containers/OrderSummary.d.ts +3 -0
- package/containers/OrderSummary.js +1 -1
- package/containers/PaymentMethods/PaymentMethods.d.ts +23 -0
- package/containers/PaymentMethods/PaymentMethods.d.ts.map +1 -0
- package/containers/PaymentMethods/defaultHandlers.d.ts +11 -0
- package/containers/PaymentMethods/defaultHandlers.d.ts.map +1 -0
- package/containers/PaymentMethods/index.d.ts +3 -0
- package/containers/PaymentMethods/index.d.ts.map +1 -0
- package/containers/PaymentMethods.d.ts +3 -0
- package/containers/PaymentMethods.js +1 -1
- package/containers/PlaceOrder/PlaceOrder.d.ts +9 -0
- package/containers/PlaceOrder/PlaceOrder.d.ts.map +1 -0
- package/containers/PlaceOrder/index.d.ts +3 -0
- package/containers/PlaceOrder/index.d.ts.map +1 -0
- package/containers/PlaceOrder.d.ts +3 -0
- package/containers/PlaceOrder.js +1 -1
- package/containers/ShippingForm/ShippingForm.d.ts +9 -0
- package/containers/ShippingForm/ShippingForm.d.ts.map +1 -0
- package/containers/ShippingForm/constants.d.ts +2 -0
- package/containers/ShippingForm/constants.d.ts.map +1 -0
- package/containers/ShippingForm/index.d.ts +4 -0
- package/containers/ShippingForm/index.d.ts.map +1 -0
- package/containers/ShippingForm.d.ts +3 -0
- package/containers/ShippingForm.js +1 -1
- package/containers/ShippingMethods/ShippingMethods.d.ts +9 -0
- package/containers/ShippingMethods/ShippingMethods.d.ts.map +1 -0
- package/containers/ShippingMethods/index.d.ts +3 -0
- package/containers/ShippingMethods/index.d.ts.map +1 -0
- package/containers/ShippingMethods.d.ts +3 -0
- package/containers/ShippingMethods.js +1 -1
- package/containers/index.d.ts +13 -0
- package/containers/index.d.ts.map +1 -0
- package/context/address-form-fields.d.ts +13 -0
- package/context/address-form-fields.d.ts.map +1 -0
- package/context/checkout.d.ts +44 -0
- package/context/checkout.d.ts.map +1 -0
- package/context/countries.d.ts +13 -0
- package/context/countries.d.ts.map +1 -0
- package/context/index.d.ts +6 -0
- package/context/index.d.ts.map +1 -0
- package/context/services.d.ts +13 -0
- package/context/services.d.ts.map +1 -0
- package/context/store.d.ts +13 -0
- package/context/store.d.ts.map +1 -0
- package/data/models/address-form-fields.d.ts +52 -0
- package/data/models/address-form-fields.d.ts.map +1 -0
- package/data/models/address.d.ts +21 -0
- package/data/models/address.d.ts.map +1 -0
- package/data/models/cart-item.d.ts +59 -0
- package/data/models/cart-item.d.ts.map +1 -0
- package/data/models/cart.d.ts +23 -0
- package/data/models/cart.d.ts.map +1 -0
- package/data/models/country.d.ts +5 -0
- package/data/models/country.d.ts.map +1 -0
- package/data/models/custom-attribute.d.ts +5 -0
- package/data/models/custom-attribute.d.ts.map +1 -0
- package/data/models/customer.d.ts +25 -0
- package/data/models/customer.d.ts.map +1 -0
- package/data/models/email-availability.d.ts +2 -0
- package/data/models/email-availability.d.ts.map +1 -0
- package/data/models/index.d.ts +13 -0
- package/data/models/index.d.ts.map +1 -0
- package/data/models/money.d.ts +5 -0
- package/data/models/money.d.ts.map +1 -0
- package/data/models/payment-method.d.ts +5 -0
- package/data/models/payment-method.d.ts.map +1 -0
- package/data/models/region.d.ts +6 -0
- package/data/models/region.d.ts.map +1 -0
- package/data/models/shipping-method.d.ts +17 -0
- package/data/models/shipping-method.d.ts.map +1 -0
- package/data/models/store-config.d.ts +29 -0
- package/data/models/store-config.d.ts.map +1 -0
- package/data/transforms/index.d.ts +10 -0
- package/data/transforms/index.d.ts.map +1 -0
- package/data/transforms/transform-address-form-fields.d.ts +66 -0
- package/data/transforms/transform-address-form-fields.d.ts.map +1 -0
- package/data/transforms/transform-address.d.ts +79 -0
- package/data/transforms/transform-address.d.ts.map +1 -0
- package/data/transforms/transform-cart-item.d.ts +10 -0
- package/data/transforms/transform-cart-item.d.ts.map +1 -0
- package/data/transforms/transform-cart.d.ts +10 -0
- package/data/transforms/transform-cart.d.ts.map +1 -0
- package/data/transforms/transform-countries.d.ts +5 -0
- package/data/transforms/transform-countries.d.ts.map +1 -0
- package/data/transforms/transform-customer.d.ts +14 -0
- package/data/transforms/transform-customer.d.ts.map +1 -0
- package/data/transforms/transform-email-availability.d.ts +6 -0
- package/data/transforms/transform-email-availability.d.ts.map +1 -0
- package/data/transforms/transform-payment-methods.d.ts +9 -0
- package/data/transforms/transform-payment-methods.d.ts.map +1 -0
- package/data/transforms/transform-regions.d.ts +8 -0
- package/data/transforms/transform-regions.d.ts.map +1 -0
- package/data/transforms/transform-shipping-methods.d.ts +14 -0
- package/data/transforms/transform-shipping-methods.d.ts.map +1 -0
- package/data/transforms/transform-store-config.d.ts +5 -0
- package/data/transforms/transform-store-config.d.ts.map +1 -0
- package/hooks/useAuthentication/index.d.ts +2 -0
- package/hooks/useAuthentication/index.d.ts.map +1 -0
- package/hooks/useAuthentication/useAuthentication.d.ts +2 -0
- package/hooks/useAuthentication/useAuthentication.d.ts.map +1 -0
- package/hooks/useBreakpoint/index.d.ts +2 -0
- package/hooks/useBreakpoint/index.d.ts.map +1 -0
- package/hooks/useBreakpoint/useBreakpoint.d.ts +2 -0
- package/hooks/useBreakpoint/useBreakpoint.d.ts.map +1 -0
- package/hooks/useLockScroll/index.d.ts +2 -0
- package/hooks/useLockScroll/index.d.ts.map +1 -0
- package/hooks/useLockScroll/useLockScroll.d.ts +5 -0
- package/hooks/useLockScroll/useLockScroll.d.ts.map +1 -0
- package/hooks/useValidity/index.d.ts +2 -0
- package/hooks/useValidity/index.d.ts.map +1 -0
- package/hooks/useValidity/useValidity.d.ts +19 -0
- package/hooks/useValidity/useValidity.d.ts.map +1 -0
- package/i18n/en_US.json.d.ts +119 -0
- package/lib/fetch-error.d.ts +7 -0
- package/lib/fetch-error.d.ts.map +1 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/localStorage.d.ts +10 -0
- package/lib/localStorage.d.ts.map +1 -0
- package/lib/network-error.d.ts +6 -0
- package/lib/network-error.d.ts.map +1 -0
- package/lib/redirect.d.ts +2 -0
- package/lib/redirect.d.ts.map +1 -0
- package/msw/browser.d.ts +2 -0
- package/msw/browser.d.ts.map +1 -0
- package/msw/fixtures/fragments/american-regions.d.ts +4 -0
- package/msw/fixtures/fragments/american-regions.d.ts.map +1 -0
- package/msw/fixtures/fragments/available-shipping-methods.d.ts +23 -0
- package/msw/fixtures/fragments/available-shipping-methods.d.ts.map +1 -0
- package/msw/fixtures/fragments/billing-address.d.ts +36 -0
- package/msw/fixtures/fragments/billing-address.d.ts.map +1 -0
- package/msw/fixtures/fragments/cart.d.ts +1718 -0
- package/msw/fixtures/fragments/cart.d.ts.map +1 -0
- package/msw/fixtures/fragments/countries.d.ts +4 -0
- package/msw/fixtures/fragments/countries.d.ts.map +1 -0
- package/msw/fixtures/fragments/form-fields.d.ts +4 -0
- package/msw/fixtures/fragments/form-fields.d.ts.map +1 -0
- package/msw/fixtures/fragments/index.d.ts +9 -0
- package/msw/fixtures/fragments/index.d.ts.map +1 -0
- package/msw/fixtures/fragments/items.d.ts +4 -0
- package/msw/fixtures/fragments/items.d.ts.map +1 -0
- package/msw/fixtures/fragments/shipping-address.d.ts +42 -0
- package/msw/fixtures/fragments/shipping-address.d.ts.map +1 -0
- package/msw/fixtures/index.d.ts +4 -0
- package/msw/fixtures/index.d.ts.map +1 -0
- package/msw/fixtures/mutations/estimate-shipping-methods.d.ts +4 -0
- package/msw/fixtures/mutations/estimate-shipping-methods.d.ts.map +1 -0
- package/msw/fixtures/mutations/index.d.ts +8 -0
- package/msw/fixtures/mutations/index.d.ts.map +1 -0
- package/msw/fixtures/mutations/place-order.d.ts +4 -0
- package/msw/fixtures/mutations/place-order.d.ts.map +1 -0
- package/msw/fixtures/mutations/set-billing-address.d.ts +5 -0
- package/msw/fixtures/mutations/set-billing-address.d.ts.map +1 -0
- package/msw/fixtures/mutations/set-guest-email.d.ts +4 -0
- package/msw/fixtures/mutations/set-guest-email.d.ts.map +1 -0
- package/msw/fixtures/mutations/set-payment-method.d.ts +4 -0
- package/msw/fixtures/mutations/set-payment-method.d.ts.map +1 -0
- package/msw/fixtures/mutations/set-shipping-address.d.ts +4 -0
- package/msw/fixtures/mutations/set-shipping-address.d.ts.map +1 -0
- package/msw/fixtures/mutations/set-shipping-methods.d.ts +4 -0
- package/msw/fixtures/mutations/set-shipping-methods.d.ts.map +1 -0
- package/msw/fixtures/queries/fetch-address-form-fields.d.ts +4 -0
- package/msw/fixtures/queries/fetch-address-form-fields.d.ts.map +1 -0
- package/msw/fixtures/queries/get-cart.d.ts +4 -0
- package/msw/fixtures/queries/get-cart.d.ts.map +1 -0
- package/msw/fixtures/queries/get-countries.d.ts +4 -0
- package/msw/fixtures/queries/get-countries.d.ts.map +1 -0
- package/msw/fixtures/queries/get-customer-cart-stock-status.d.ts +4 -0
- package/msw/fixtures/queries/get-customer-cart-stock-status.d.ts.map +1 -0
- package/msw/fixtures/queries/get-customer.d.ts +5 -0
- package/msw/fixtures/queries/get-customer.d.ts.map +1 -0
- package/msw/fixtures/queries/get-regions.d.ts +4 -0
- package/msw/fixtures/queries/get-regions.d.ts.map +1 -0
- package/msw/fixtures/queries/get-stock-status.d.ts +4 -0
- package/msw/fixtures/queries/get-stock-status.d.ts.map +1 -0
- package/msw/fixtures/queries/get-store-config.d.ts +4 -0
- package/msw/fixtures/queries/get-store-config.d.ts.map +1 -0
- package/msw/fixtures/queries/index.d.ts +10 -0
- package/msw/fixtures/queries/index.d.ts.map +1 -0
- package/msw/fixtures/queries/is-email-available.d.ts +4 -0
- package/msw/fixtures/queries/is-email-available.d.ts.map +1 -0
- package/msw/handlers.d.ts +4 -0
- package/msw/handlers.d.ts.map +1 -0
- package/msw/server.d.ts +2 -0
- package/msw/server.d.ts.map +1 -0
- package/package.json +1 -1
- package/render/Provider.d.ts +10 -0
- package/render/Provider.d.ts.map +1 -0
- package/render/index.d.ts +2 -0
- package/render/index.d.ts.map +1 -0
- package/render/render.d.ts +6 -0
- package/render/render.d.ts.map +1 -0
- package/render.d.ts +1 -0
- package/render.js +2 -2
- package/render.js.map +1 -1
- package/services/backup.d.ts +17 -0
- package/services/backup.d.ts.map +1 -0
- package/services/index.d.ts +2 -0
- package/services/index.d.ts.map +1 -0
- package/signals/AuthenticationSignal.d.ts +2 -0
- package/signals/AuthenticationSignal.d.ts.map +1 -0
- package/signals/CartSignal.d.ts +7 -0
- package/signals/CartSignal.d.ts.map +1 -0
- package/signals/CustomerSignal.d.ts +7 -0
- package/signals/CustomerSignal.d.ts.map +1 -0
- package/signals/EstimateShippingMethodsSignal.d.ts +7 -0
- package/signals/EstimateShippingMethodsSignal.d.ts.map +1 -0
- package/signals/IsBillToShippingSignal.d.ts +6 -0
- package/signals/IsBillToShippingSignal.d.ts.map +1 -0
- package/signals/RegionsSignal.d.ts +12 -0
- package/signals/RegionsSignal.d.ts.map +1 -0
- package/signals/SelectedShippingMethodSignal.d.ts +4 -0
- package/signals/SelectedShippingMethodSignal.d.ts.map +1 -0
- package/signals/index.d.ts +8 -0
- package/signals/index.d.ts.map +1 -0
- package/tests/constants.d.ts +3 -0
- package/tests/constants.d.ts.map +1 -0
- package/tests/index.d.ts +2 -0
- package/tests/index.d.ts.map +1 -0
- package/tests/integration/utils/index.d.ts +3 -0
- package/tests/integration/utils/index.d.ts.map +1 -0
- package/tests/integration/utils/setup.d.ts +5 -0
- package/tests/integration/utils/setup.d.ts.map +1 -0
- package/tests/integration/utils/user-actions.d.ts +2 -0
- package/tests/integration/utils/user-actions.d.ts.map +1 -0
- package/tests/mocks/svg.d.ts +4 -0
- package/tests/mocks/svg.d.ts.map +1 -0
- package/tests/render.d.ts +4 -0
- package/tests/render.d.ts.map +1 -0
- package/tests/utils/expectError.d.ts +9 -0
- package/tests/utils/expectError.d.ts.map +1 -0
- package/tests/utils/index.d.ts +3 -0
- package/tests/utils/index.d.ts.map +1 -0
- package/tests/utils/mockEvents.d.ts +5 -0
- package/tests/utils/mockEvents.d.ts.map +1 -0
- package/types/CompleteCheckoutContextSchemas.d.ts +103 -0
- package/types/CompleteCheckoutContextSchemas.d.ts.map +1 -0
- package/types/EventPayloads.d.ts +18 -0
- package/types/EventPayloads.d.ts.map +1 -0
- package/utils/autocompleteFieldCodes/autocompleteFieldCodes.d.ts +18 -0
- package/utils/autocompleteFieldCodes/autocompleteFieldCodes.d.ts.map +1 -0
- package/utils/autocompleteFieldCodes/index.d.ts +2 -0
- package/utils/autocompleteFieldCodes/index.d.ts.map +1 -0
- package/utils/getMultilineValues/getMultilineValues.d.ts +3 -0
- package/utils/getMultilineValues/getMultilineValues.d.ts.map +1 -0
- package/utils/getMultilineValues/index.d.ts +2 -0
- package/utils/getMultilineValues/index.d.ts.map +1 -0
- package/utils/index.d.ts +8 -0
- package/utils/index.d.ts.map +1 -0
- package/utils/isEmpty/index.d.ts +2 -0
- package/utils/isEmpty/index.d.ts.map +1 -0
- package/utils/isEmpty/isEmpty.d.ts +2 -0
- package/utils/isEmpty/isEmpty.d.ts.map +1 -0
- package/utils/isNullish/index.d.ts +2 -0
- package/utils/isNullish/index.d.ts.map +1 -0
- package/utils/isNullish/isNullish.d.ts +2 -0
- package/utils/isNullish/isNullish.d.ts.map +1 -0
- package/utils/parseRegionId/index.d.ts +2 -0
- package/utils/parseRegionId/index.d.ts.map +1 -0
- package/utils/parseRegionId/parseRegionId.d.ts +2 -0
- package/utils/parseRegionId/parseRegionId.d.ts.map +1 -0
- package/utils/processFormFields/index.d.ts +2 -0
- package/utils/processFormFields/index.d.ts.map +1 -0
- package/utils/processFormFields/processFormFields.d.ts +21 -0
- package/utils/processFormFields/processFormFields.d.ts.map +1 -0
- package/utils/refetchEstimatedShippingMethods/index.d.ts +2 -0
- package/utils/refetchEstimatedShippingMethods/index.d.ts.map +1 -0
- package/utils/refetchEstimatedShippingMethods/refetchEstimatedShippingMethods.d.ts +4 -0
- package/utils/refetchEstimatedShippingMethods/refetchEstimatedShippingMethods.d.ts.map +1 -0
- package/utils/shippingMethods/index.d.ts +2 -0
- package/utils/shippingMethods/index.d.ts.map +1 -0
- package/utils/shippingMethods/isEqual.d.ts +4 -0
- package/utils/shippingMethods/isEqual.d.ts.map +1 -0
- package/utils/storefrontEvents/completeCheckout.d.ts +31 -0
- package/utils/storefrontEvents/completeCheckout.d.ts.map +1 -0
- package/utils/storefrontEvents/fixtures.d.ts +44 -0
- package/utils/storefrontEvents/fixtures.d.ts.map +1 -0
- package/utils/storefrontEvents/index.d.ts +2 -0
- package/utils/storefrontEvents/index.d.ts.map +1 -0
- package/chunks/OrderSummary.js.map +0 -1
- package/chunks/PaymentMethods.js +0 -2
- package/chunks/PaymentMethods.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleButton.js","sources":["../../src/utils/autocompleteFieldCodes/autocompleteFieldCodes.ts","../../src/utils/isEmpty/isEmpty.ts","../../src/utils/processFormFields/processFormFields.ts","../../src/utils/refetchEstimatedShippingMethods/refetchEstimatedShippingMethods.ts","../../src/components/FieldsForm/fieldFactory.tsx","../../src/components/FieldsForm/validation.ts","../../src/components/FieldsForm/FieldsFormSkeleton.tsx","../../src/components/FieldsForm/FieldsForm.tsx","../../node_modules/@adobe/elsie/src/lib/form-values.ts","../../src/components/AddressForm/AddressForm.tsx","../../src/components/AddressForm/useAddressBackup.ts","../../src/hooks/useValidity/useValidity.ts","../../src/components/AddressForm/useAddressForm.ts","../../src/components/AddressForm/usePreselectedFields.ts","../../src/components/AddressForm/utils.ts","../../src/hooks/useBreakpoint/useBreakpoint.ts","../../src/components/Checkout/Checkout.tsx","../../src/components/Heading/Heading.tsx","../../src/hooks/useLockScroll/useLockScroll.ts","../../src/components/OverlayLoader/OverlayLoader.tsx"],"sourcesContent":["export interface fieldCodes {\n firstname: string;\n lastname: string;\n company: string;\n country: string;\n region: string;\n city: string;\n postcode: string;\n telephone: string;\n street: string;\n email: string;\n middlename: string;\n prefix: string;\n suffix: string;\n}\n\n// HTML attribute: autocomplete\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n// https://www.w3.org/TR/WCAG21/#input-purposes\nconst autocompleteFieldCodes: fieldCodes = {\n firstname: 'given-name',\n lastname: 'family-name',\n company: 'organization',\n country: 'country',\n region: 'address-level1',\n city: 'address-level2',\n postcode: 'postal-code',\n telephone: 'tel',\n street: 'address-line1',\n email: 'email',\n middlename: 'additional-name',\n prefix: 'honorific-prefix',\n suffix: 'honorific-suffix',\n};\n\nexport default autocompleteFieldCodes;\n","export function isEmpty(obj: Record<string, any>): boolean {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}","import { AttributeFrontendInputEnum } from '@/checkout/__generated__/types';\nimport {\n AddressFormElement,\n AddressFormErrors,\n AddressFormField,\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n Country,\n Region,\n StoreConfig,\n} from '@/checkout/data/models';\nimport { regionsSignal } from '@/checkout/signals';\n\nimport {\n getMultilineValues,\n refetchEstimatedShippingMethods,\n} from '@/checkout/utils';\nimport { PickerOption } from '@adobe/elsie/components';\nimport { StateUpdater, Dispatch } from 'preact/hooks';\n\nexport type FormFieldsProcessorProps = {\n address: AddressFormValues;\n addressType: AddressFormType;\n availableCountries: Country[] | undefined;\n availableRegions: Region[];\n config: StoreConfig;\n dismissError: (code: string) => void;\n errors: AddressFormErrors;\n fields: AddressFormField[];\n onBlur: (event: Event) => void;\n onChange: (event: Event) => void;\n onInvalid: (event: Event) => void;\n onSelection: (event: Event) => void;\n setAddress: Dispatch<StateUpdater<AddressFormValues>>;\n};\n\nconst transformRegionOptions = (regions: Region[]): PickerOption[] => {\n return regions.map((region) => {\n const value = region?.id?.toString() || region.code;\n return { text: region.name, value };\n });\n};\n\nconst transformCountryOptions = (\n countries: Country[] | undefined\n): PickerOption[] => {\n if (!countries) return [];\n\n return countries.map((country) => ({\n text: country.label,\n value: country.value,\n }));\n};\n\nexport function processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n}: FormFieldsProcessorProps): AddressFormElement[] {\n const resetRegion = () => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.Region]: '',\n [AddressFormFieldCode.RegionId]: '',\n }));\n\n dismissError(AddressFormFieldCode.Region);\n };\n\n const syncRegionId = (regionId: string) => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.RegionId]: regionId,\n }));\n };\n\n return fields.map((field) => {\n let error: string | string[];\n let frontendInput = field.frontendInput;\n let handleSelect;\n let isDisabled = field.isDisabled;\n let isRequired = field.isRequired;\n let options: PickerOption[] = [];\n let value: string | string[];\n\n if (frontendInput === AttributeFrontendInputEnum.Multiline) {\n value = getMultilineValues(field.code, address);\n error = getMultilineValues(field.code, errors);\n } else {\n value = address[field.code];\n error = errors[field.code] || '';\n }\n\n if (field.code === AddressFormFieldCode.Country) {\n options = transformCountryOptions(availableCountries);\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.country = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (value) {\n refetchEstimatedShippingMethods({\n country_code: value,\n });\n }\n\n onSelection(event);\n resetRegion();\n };\n } else {\n handleSelect = onSelection;\n }\n }\n\n if (field.code === AddressFormFieldCode.RegionId) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegionId = value as string;\n }\n }\n\n if (field.code === AddressFormFieldCode.Region) {\n if (addressType === regionsSignal.value.addressType) {\n isDisabled = regionsSignal.value.pending;\n }\n\n isRequired = config!.countriesWithRequiredRegion.includes(\n address?.country_id\n );\n options = transformRegionOptions(availableRegions);\n\n if (!isRequired && !config!.displayStateIfOptional) {\n frontendInput = AttributeFrontendInputEnum.Undefined;\n }\n\n frontendInput =\n options.length > 0\n ? AttributeFrontendInputEnum.Select\n : AttributeFrontendInputEnum.Text;\n\n if (frontendInput === AttributeFrontendInputEnum.Select) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedRegion = target.value;\n\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_id: selectedRegion,\n });\n\n onSelection(event);\n syncRegionId(selectedRegion);\n };\n } else {\n handleSelect = (event: Event) => {\n onSelection(event);\n const target = event.target as HTMLSelectElement;\n const selectedRegion = target.value;\n syncRegionId(selectedRegion);\n };\n }\n } else if (frontendInput === AttributeFrontendInputEnum.Text) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n const defaultOnChange = onChange;\n\n onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (regionsSignal.value.country) {\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_name: value as string,\n });\n }\n\n defaultOnChange(event);\n };\n }\n }\n\n value =\n options.length > 0\n ? options.find((regionOption) => regionOption!.value === value)\n ?.value || ''\n : value;\n }\n\n if (field.code === AddressFormFieldCode.PostCode) {\n isRequired = !config!.countriesWithOptionalZipCode.includes(\n address?.country_id as string\n );\n }\n\n return {\n ...field,\n error,\n frontendInput,\n handleSelect,\n isDisabled,\n isRequired,\n onBlur,\n onChange,\n onInvalid,\n options,\n value,\n };\n });\n}\n\nexport type ProcessedFormFields = ReturnType<typeof processFormFields>;\n","import { cartSignal } from '@/checkout/signals';\nimport { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { ShippingEstimationCriteria, estimateShippingMethods } from '@/checkout/api';\n\nlet estimateShipppingTimer: ReturnType<typeof setTimeout>;\nexport function refetchEstimatedShippingMethods(\n criteria: ShippingEstimationCriteria\n) {\n const cartData = cartSignal.value.data;\n const hasCartData = !!cartData;\n const firstAddress = cartData?.shippingAddresses?.[0];\n const availableShippingMethods = firstAddress?.availableShippingMethods;\n\n if (hasCartData && !availableShippingMethods) {\n clearTimeout(estimateShipppingTimer);\n\n estimateShipppingTimer = setTimeout(() => {\n estimateShippingMethods({ cartId: cartData.id, criteria });\n }, DEBOUNCE_TIME);\n }\n}\n","import { validityProps } from '@/checkout/components/FieldsForm';\nimport { AddressFormElement, AddressFormType } from '@/checkout/data/models';\nimport autocompleteFieldCodes, {\n fieldCodes,\n} from '@/checkout/utils/autocompleteFieldCodes/autocompleteFieldCodes';\nimport { Field, Input, Picker } from '@adobe/elsie/components';\n\ntype FieldFactoryProps = {\n addressType: AddressFormType;\n element: AddressFormElement;\n};\n\nconst generateId = ({\n addressType,\n code,\n index,\n}: {\n addressType: AddressFormType;\n code: string;\n index?: number;\n}) => {\n return index ? `${addressType}-${code}-${index}` : `${addressType}-${code}`;\n};\n\nconst generateClassName = (code: string) => {\n return `checkout-address-form__${code}`;\n};\n\nconst hiddenField = ({ addressType, element }: FieldFactoryProps) => {\n const { code, value, defaultValue } = element;\n\n return (\n <input\n className={generateClassName(code)}\n id={generateId({ addressType, code })}\n key={code}\n name={code}\n type=\"hidden\"\n value={value || defaultValue}\n />\n );\n};\n\nconst textField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n label,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const validity = validityProps(validateRules);\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Input\n aria-label={label}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n className={generateClassName(code)}\n floatingLabel={`${label} ${element.isRequired ? '*' : ''}`}\n id={generateId({ addressType, code })}\n onBlur={onBlur}\n onChange={onChange}\n onInvalid={onInvalid}\n placeholder={label!}\n required={element.isRequired || false}\n type=\"text\"\n // @ts-ignore\n name={code}\n // @ts-ignore\n value={value ?? undefined}\n {...validity}\n />\n </Field>\n );\n};\n\nconst multilineField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n isRequired,\n label,\n multilineCount,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const numOfFields = multilineCount ?? 0;\n const validity = validityProps(validateRules);\n\n return (\n <>\n {Array.from(Array(numOfFields).keys()).map((i) => (\n <Field\n disabled={isDisabled}\n error={(error as string[])?.[i] || ''}\n key={`${code}-${i}`}\n className=\"dropin-field--multiline\"\n >\n <Input\n id={generateId({ addressType, code, index: i })}\n className={generateClassName(code)}\n floatingLabel={`${label} ${i != 0 ? i : ''} ${\n isRequired && i === 0 ? '*' : ''\n }`}\n autocomplete={\n i === 0 ? autocompleteFieldCodes[code as keyof fieldCodes] : 'off'\n }\n aria-label={label!}\n placeholder={`${label} ${i != 0 ? i : ''}`}\n type=\"text\"\n required={isRequired && i === 0}\n onChange={onChange}\n onBlur={onBlur}\n onInvalid={onInvalid}\n // @ts-ignore\n name={`${code}-${i}`}\n // @ts-ignore\n value={(value as string[])?.[i] || undefined}\n {...validity}\n />\n </Field>\n ))}\n </>\n );\n};\n\nconst selectField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n handleSelect,\n isDisabled,\n isRequired,\n label,\n onBlur,\n onInvalid,\n options,\n value,\n } = element;\n\n const handleSelectAttribute = handleSelect ? { handleSelect } : {};\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Picker\n id={generateId({ addressType, code })}\n className={generateClassName(code)}\n key={code}\n name={code}\n floatingLabel={`${label} ${isRequired ? '*' : ''}`}\n required={isRequired}\n placeholder={label!}\n aria-label={label!}\n options={options}\n value={value as string}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n onBlur={onBlur}\n onInvalid={onInvalid}\n {...handleSelectAttribute}\n />\n </Field>\n );\n};\n\nexport const createField = ({ addressType, element }: FieldFactoryProps) => {\n switch (element.frontendInput) {\n case 'BOOLEAN':\n case 'DATE':\n case 'DATETIME':\n case 'FILE':\n case 'GALLERY':\n case 'IMAGE':\n case 'MEDIA_IMAGE':\n case 'MULTISELECT':\n case 'PRICE':\n case 'TEXTAREA':\n case 'UNDEFINED':\n case 'WEIGHT':\n return null;\n case 'HIDDEN':\n return hiddenField({ addressType, element });\n case 'TEXT':\n return textField({ addressType, element });\n case 'MULTILINE':\n return multilineField({ addressType, element });\n case 'SELECT':\n return selectField({ addressType, element });\n default:\n return null;\n }\n};\n","import { AddressFormField } from '@/checkout/data/models/address-form-fields';\nimport { ValidationRuleEnum } from '@/checkout/__generated__/types';\n\nexport type ValidityProps = {\n accept?: string;\n max?: string | number;\n maxLength?: number;\n min?: string | number;\n minLength?: number;\n pattern?: string;\n required?: boolean;\n};\n\nexport type InputValidation =\n | 'alphanumeric'\n | 'alphanumeric-w-space'\n | 'alphanum-with-spaces'\n | 'alpha'\n | 'url'\n | 'numeric'\n | 'email';\n\nexport const validityProps = (\n rules: AddressFormField['validateRules']\n): ValidityProps => {\n if (!rules) return {};\n\n return rules.reduce((props, rule) => {\n switch (rule.name) {\n case ValidationRuleEnum.DateRangeMax:\n return { ...props, max: rule.value };\n case ValidationRuleEnum.DateRangeMin:\n return { ...props, min: rule.value };\n case ValidationRuleEnum.FileExtensions:\n return { ...props, accept: rule.value };\n case ValidationRuleEnum.InputValidation:\n return {\n ...props,\n pattern: patternFor(rule.value as InputValidation),\n };\n case ValidationRuleEnum.MaxFileSize:\n case ValidationRuleEnum.MaxImageHeight:\n case ValidationRuleEnum.MaxImageWidth:\n return props;\n case ValidationRuleEnum.MaxTextLength:\n return { ...props, maxLength: rule.value };\n case ValidationRuleEnum.MinTextLength:\n return { ...props, minLength: rule.value };\n default:\n throw new Error(`Unknown rule: ${rule.name}`);\n }\n }, {});\n};\n\nexport type Patterns = {\n [key in InputValidation]: RegExp;\n};\n\n// TODO allow to override patterns\nexport const patterns: Patterns = {\n alpha: /^[a-zA-Z]+$/,\n alphanumeric: /^[a-zA-Z0-9]+$/,\n 'alphanumeric-w-space': /^[a-zA-Z0-9 ]+$/,\n 'alphanum-with-spaces': /^[a-zA-Z0-9 ]+$/,\n email:\n /^([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*@([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*\\.(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]){2,})$/i,\n numeric: /^[0-9]+$/,\n url: /^((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w\\-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[.!/\\\\\\w]*))?)$/,\n};\n\nconst patternFor = (type: InputValidation): string => {\n switch (type) {\n case 'alpha':\n return patterns.alpha.source;\n case 'alphanumeric':\n return patterns.alphanumeric.source;\n case 'alphanumeric-w-space':\n return patterns['alphanumeric-w-space'].source;\n case 'alphanum-with-spaces':\n return patterns['alphanum-with-spaces'].source;\n case 'url':\n return patterns.url.source;\n case 'numeric':\n return patterns.numeric.source;\n case 'email':\n return patterns.email.source;\n default:\n throw new Error(`Unknown validation type: ${type}`);\n }\n};\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const FieldsFormSkeleton: FunctionComponent = (props) => {\n return (\n <Skeleton {...props}>\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n <SkeletonRow size=\"large\" fullWidth={true} lines={3} />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n </Skeleton>\n );\n};\n","import { Heading } from '@/checkout/components';\nimport { createField } from '@/checkout/components/FieldsForm';\nimport '@/checkout/components/FieldsForm/FieldsForm.css';\nimport {\n AddressFormElement,\n AddressFormType,\n} from '@/checkout/data/models/address-form-fields';\nimport { Text } from '@adobe/elsie/i18n';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, Ref } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface FieldsFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n fields: AddressFormElement[];\n formRef: Ref<HTMLFormElement>;\n headingId: string;\n name: string;\n}\n\nexport const FieldsForm: FunctionComponent<FieldsFormProps> = ({\n addressType,\n className,\n fields,\n formRef,\n headingId,\n name,\n ...props\n}) => {\n return (\n <div {...props} className={classes(['checkout-fields-form', className])}>\n <Heading\n level={2}\n children={<Text id={headingId} />}\n className=\"checkout-fields-form__title\"\n />\n\n <form\n name={name}\n ref={formRef}\n className={classes(['checkout-fields-form__form', className])}\n noValidate\n >\n {fields\n .sort((a, b) => {\n if (!a.sortOrder || !b.sortOrder) return a.code < b.code ? -1 : 1;\n return a.sortOrder - b.sortOrder;\n })\n .map((element) => createField({ element, addressType }))}\n </form>\n </div>\n );\n};\n","export const getFormValues = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n const result = Object.fromEntries(formData);\n return result;\n};\n\nexport const getFormErrors = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n\n const data = Object.fromEntries(formData);\n\n const result = Object.entries(data).reduce((result, [key]) => {\n // @ts-ignore\n const field = form.elements[key];\n\n return field?.validationMessage\n ? { ...result, [key]: field.validationMessage }\n : { ...result };\n }, {});\n\n return result;\n};\n","import { getRegions } from '@/checkout/api';\nimport { FieldsFormSkeleton } from '@/checkout/components';\nimport {\n LoadAutoFillProps,\n DefaultValues,\n getCartAddress,\n getCustomerAddress,\n MULTILINE_CUSTOM_ATTR_SPLIT,\n MULTILINE_SUFFIX,\n SaveAddressCommand,\n useAddressForm,\n usePreselectedFields,\n} from '@/checkout/components/AddressForm';\nimport '@/checkout/components/AddressForm/AddressForm.css';\nimport { FieldsForm as Component } from '@/checkout/components/FieldsForm/FieldsForm';\nimport { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n useAddressFormFields,\n useCountries,\n useStore,\n} from '@/checkout/context';\nimport {\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n CustomerAddress,\n Region,\n} from '@/checkout/data/models';\nimport {\n BillingAddress,\n ShippingAddress,\n} from '@/checkout/data/models/address';\nimport { cartSignal, customerSignal } from '@/checkout/signals';\nimport { isEmpty, processFormFields } from '@/checkout/utils';\nimport { getFormErrors } from '@adobe/elsie/lib/form-values';\nimport {\n forwardRef,\n HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'preact/compat';\n\nfunction useDefaultValues(defaultCountry: string | undefined) {\n const [defaultValues, setDefaultValues] = useState<DefaultValues>({});\n\n useEffect(() => {\n if (!defaultCountry) return;\n setDefaultValues((defaultValues) => ({\n ...defaultValues,\n country_id: defaultCountry,\n }));\n }, [defaultCountry]);\n\n return { defaultValues };\n}\n\nfunction useRegions({\n country,\n addressType,\n}: {\n country: string | undefined;\n addressType: AddressFormType;\n}) {\n const [availableRegions, setAvailableRegions] = useState<Region[]>([]);\n\n useEffect(() => {\n if (!country) {\n setAvailableRegions([]);\n return;\n }\n\n getRegions(country, addressType)\n .then((data) => {\n setAvailableRegions(data || []);\n })\n .catch((error) => {\n console.error(error);\n });\n }, [setAvailableRegions, country, addressType]);\n\n return { availableRegions };\n}\n\nfunction useFormFill({\n autoFill,\n addressType,\n loadAutoFill,\n}: {\n autoFill: boolean;\n addressType: AddressFormType;\n loadAutoFill: (props: LoadAutoFillProps) => void;\n}) {\n const [hasAutoFilledForm, setHasAutofilledForm] = useState(false);\n const customer = customerSignal.value.data;\n const hasCustomer = !!customer;\n const cart = cartSignal.value.data;\n const hasCart = !!cart;\n\n useEffect(() => {\n if (!autoFill || !hasCart || hasAutoFilledForm) return;\n\n let autoFillAddress:\n | ShippingAddress\n | BillingAddress\n | CustomerAddress\n | undefined;\n\n let triggerAutoSave = false;\n\n autoFillAddress = getCartAddress({ addressType, cart });\n\n if (!autoFillAddress && hasCustomer) {\n autoFillAddress = getCustomerAddress({ addressType, customer });\n triggerAutoSave = true;\n }\n\n const isMultiline = (value: string) => {\n if (!value) return false;\n const parts = value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n return parts.length > 1;\n };\n\n if (!autoFillAddress) return;\n\n setHasAutofilledForm(true);\n\n const addressFormValues: AddressFormValues = {\n [AddressFormFieldCode.City]: autoFillAddress.city,\n [AddressFormFieldCode.Company]: autoFillAddress.company || '',\n [AddressFormFieldCode.Country]: autoFillAddress.country.value,\n [AddressFormFieldCode.FirstName]: autoFillAddress.firstName,\n [AddressFormFieldCode.LastName]: autoFillAddress.lastName,\n [AddressFormFieldCode.PostCode]: autoFillAddress.postCode || '',\n [AddressFormFieldCode.Telephone]: autoFillAddress.telephone || '',\n [AddressFormFieldCode.Vat]: autoFillAddress.vatId || '',\n };\n\n const region = autoFillAddress.region;\n\n if (region) {\n const regionId = region?.id?.toString();\n\n if (regionId) {\n addressFormValues[AddressFormFieldCode.Region] = regionId;\n addressFormValues[AddressFormFieldCode.RegionId] = regionId;\n } else {\n addressFormValues[AddressFormFieldCode.Region] = region.code;\n }\n }\n\n if (autoFillAddress?.street && autoFillAddress.street.length > 0) {\n autoFillAddress.street.forEach((street, index) => {\n addressFormValues[\n `${AddressFormFieldCode.Street}${MULTILINE_SUFFIX}${index}`\n ] = street!;\n });\n }\n\n const customAttributes = autoFillAddress?.customAttributes || [];\n\n customAttributes.forEach((attribute) => {\n if (!isMultiline(attribute.code)) {\n addressFormValues[attribute.code] = attribute.value;\n } else {\n const values = attribute.value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n values.forEach((value, index) => {\n addressFormValues[`${attribute.code}${MULTILINE_SUFFIX}${index}`] =\n value;\n });\n }\n });\n\n loadAutoFill({ values: addressFormValues, triggerAutoSave });\n }, [\n addressType,\n autoFill,\n cart,\n customer,\n hasAutoFilledForm,\n hasCart,\n hasCustomer,\n loadAutoFill,\n ]);\n}\n\nexport interface AddressFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n autoFill?: boolean;\n headingId: string;\n name: string;\n preselectedFields?: PreselectedAddressFields;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n}\n\nexport type AddressFormHandle = {\n triggerSaveAddress: (\n signal: AbortSignal\n ) => Promise<typeof cartSignal.value.data> | undefined;\n};\n\nexport const AddressForm = forwardRef<AddressFormHandle, AddressFormProps>(\n (\n {\n addressType,\n autoFill = true,\n children,\n headingId,\n name,\n preselectedFields,\n saveAddressHandler,\n ...props\n },\n ref\n ) => {\n const { fields } = useAddressFormFields();\n const { countries: availableCountries } = useCountries();\n const isLoadingCountries = availableCountries === undefined;\n const isLoadingFormFields = fields === undefined;\n const { config } = useStore();\n const isLoadingStoreConfig = config === undefined;\n const { defaultValues } = useDefaultValues(config?.defaultCountry);\n\n const preselection = usePreselectedFields({\n fields,\n preselectedFields,\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const {\n address,\n errors,\n loadAutoFill,\n onBlur,\n dismissError,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n } = useAddressForm({\n formRef,\n type: addressType,\n defaultValues,\n preselection,\n saveAddressHandler,\n });\n\n const { availableRegions } = useRegions({\n country: address.country_id,\n addressType,\n });\n\n useImperativeHandle(ref, () => ({\n triggerSaveAddress: (signal: AbortSignal) => {\n if (!formRef.current) return;\n const errors = getFormErrors(formRef.current);\n if (!isEmpty(errors)) return;\n return saveAddressHandler({ signal, address });\n },\n }));\n\n useFormFill({\n addressType,\n autoFill,\n loadAutoFill,\n });\n\n const isLoading =\n isLoadingFormFields || isLoadingCountries || isLoadingStoreConfig;\n\n if (isLoading) {\n return <FieldsFormSkeleton data-testid={`${addressType}-skeleton`} />;\n }\n\n const transformedFields = processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n });\n\n const typeMapping = {\n [AddressFormType.SHIPPING]: 'shipping',\n [AddressFormType.BILLING]: 'billing',\n };\n\n return (\n <Component\n {...props}\n name={name}\n addressType={addressType}\n className={`checkout-${typeMapping[addressType]}-form`}\n data-testid={`${typeMapping[addressType]}-form`}\n fields={transformedFields}\n formRef={formRef}\n headingId={headingId}\n />\n );\n }\n);\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport { useServices } from '@/checkout/context';\nimport { events } from '@adobe/event-bus';\nimport { DEBOUNCE_TIME } from './constants';\nimport {\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\n\nexport function useAddressBackup(addressType: AddressFormType) {\n const { backupService } = useServices();\n const [addressBackup, setAddressBackup] = useState<AddressFormValues | null>(\n null\n );\n\n // restore address from local storage\n useEffect(() => {\n const backup = backupService.restore<AddressFormValues>(addressType);\n if (!backup) return;\n setAddressBackup(backup);\n }, [addressType, backupService]);\n\n // remove backup when the order is placed\n useEffect(() => {\n const onOrder = events.on('checkout/order', () => {\n backupService.remove(addressType);\n });\n\n return () => {\n onOrder?.off();\n };\n }, [addressType, backupService]);\n\n const backup = useCallback(\n (address: AddressFormValues) => {\n return setTimeout(() => {\n // we do not want to update the state to avoid re-rendering\n backupService.backup<AddressFormValues>(addressType, address);\n }, DEBOUNCE_TIME);\n },\n [addressType, backupService]\n );\n\n const removeBackup = useCallback(() => {\n backupService.remove(addressType);\n }, [addressType, backupService]);\n\n return { addressBackup, backup, removeBackup };\n}\n","import { useCallback, useState } from 'preact/hooks';\n\nexport type Translations = {\n badInput: string;\n patternMismatch: string;\n rangeOverflow: string;\n rangeUnderflow: string;\n tooLong: string;\n tooShort: string;\n typeMismatch: string;\n valueMissing: string;\n};\n\ntype FormElement = HTMLInputElement | HTMLSelectElement;\n\ntype Constraint =\n | 'badInput'\n | 'patternMismatch'\n | 'rangeOverflow'\n | 'rangeUnderflow'\n | 'tooLong'\n | 'tooShort'\n | 'typeMismatch'\n | 'valueMissing';\n\ntype Attribute = 'aria-label' | 'maxlength' | 'minlength' | 'min' | 'max';\n\nconst attributesMapping: Record<Constraint, Attribute> = {\n badInput: 'aria-label',\n patternMismatch: 'aria-label',\n rangeOverflow: 'max',\n rangeUnderflow: 'min',\n tooLong: 'maxlength',\n tooShort: 'minlength',\n typeMismatch: 'aria-label',\n valueMissing: 'aria-label',\n};\n\nconst constraints: Constraint[] = [\n 'badInput',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n];\n\nexport const useValidity = (translations: Translations) => {\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n const validateFormElement = useCallback(\n (formElement: FormElement) => {\n const { name, validity, validationMessage } = formElement;\n\n let error = validity.valid ? '' : validationMessage;\n\n constraints.forEach((constraint) => {\n if (!validity[constraint]) return;\n const translation = translations[constraint];\n if (!translation) return;\n const attribute = attributesMapping[constraint];\n error = translation.replace(\n '{field}',\n formElement.getAttribute(attribute) || ''\n );\n });\n\n setErrors((prevErrors) => ({ ...prevErrors, [name]: error }));\n },\n [translations]\n );\n\n const dismissError = (code: string) => {\n if (!errors[code]) return;\n\n setErrors((prevErrors) => {\n // eslint-disable-next-line\n const { [code]: _, ...rest } = prevErrors;\n return rest;\n });\n };\n\n return {\n errors,\n dismissError,\n validateFormElement,\n };\n};\n","import { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { useAddressBackup } from '@/checkout/components/AddressForm/useAddressBackup';\nimport {\n AddressFormErrors,\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models';\nimport {\n Translations as ValidityTranslations,\n useValidity,\n} from '@/checkout/hooks/useValidity';\nimport { cartSignal } from '@/checkout/signals';\nimport { isEmpty } from '@/checkout/utils';\nimport { useText } from '@adobe/elsie/i18n';\nimport { getFormErrors } from '@adobe/elsie/lib';\nimport { RefObject } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\nexport type DefaultValues = {\n country_id?: string;\n};\n\nexport type AddressFormState = {\n address: AddressFormValues;\n errors: AddressFormErrors;\n};\n\nexport type SaveAddressCommand = {\n signal?: AbortSignal;\n address: AddressFormValues;\n};\n\nexport type LoadAutoFillProps = {\n values: AddressFormValues;\n triggerAutoSave: boolean;\n};\n\nexport type UseAddressFormProps = {\n formRef: RefObject<HTMLFormElement>;\n type: AddressFormType;\n defaultValues?: DefaultValues;\n preselection?: AddressFormValues;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n};\n\nconst isFormValid = (formRef: RefObject<HTMLFormElement>): boolean => {\n const form = formRef.current;\n if (!form) return false;\n const errors = getFormErrors(form);\n return isEmpty(errors);\n};\n\nexport const useAddressForm = ({\n formRef,\n type,\n defaultValues = {},\n preselection = {},\n saveAddressHandler,\n}: UseAddressFormProps) => {\n const translations = useText({\n badInput: 'Checkout.AddressForm.Validity.badInput',\n patternMismatch: 'Checkout.AddressForm.Validity.patternMismatch',\n rangeUnderflow: 'Checkout.AddressForm.Validity.rangeUnderflow',\n tooLong: 'Checkout.AddressForm.Validity.tooLong',\n tooShort: 'Checkout.AddressForm.Validity.tooShort',\n typeMismatch: 'Checkout.AddressForm.Validity.typeMismatch',\n valueMissing: 'Checkout.AddressForm.Validity.valueMissing',\n }) as ValidityTranslations;\n\n const hasUnsavedChanges = useRef(false);\n const [address, setAddress] = useState<AddressFormValues>({});\n\n const { addressBackup, backup, removeBackup } = useAddressBackup(type);\n\n const { errors, validateFormElement, dismissError } =\n useValidity(translations);\n\n const saveAddressForm = useCallback(\n (command: SaveAddressCommand) => {\n hasUnsavedChanges.current = false;\n saveAddressHandler(command)\n .then(() => {\n removeBackup();\n })\n .catch((error) => {\n hasUnsavedChanges.current = true;\n console.error('Saving address form failed:', error);\n });\n },\n [removeBackup, saveAddressHandler]\n );\n\n const updateField = (code: string, value: string) => {\n setAddress((prevAddress) => ({ ...prevAddress, [code]: value }));\n hasUnsavedChanges.current = true;\n };\n\n const loadAutoFill = ({\n values,\n triggerAutoSave = false,\n }: LoadAutoFillProps) => {\n setAddress((prevAddress) => ({ ...prevAddress, ...values }));\n if (!triggerAutoSave) return;\n hasUnsavedChanges.current = true;\n };\n\n const onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { name, value } = target;\n\n updateField(name, value);\n\n validateFormElement(target);\n };\n\n const onInvalid = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n validateFormElement(target);\n };\n\n const onSelection = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const { name, value } = target;\n updateField(name, value);\n validateFormElement(target);\n };\n\n const onBlur = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n target.checkValidity();\n };\n\n // load default, preselected and backup address\n useEffect(() => {\n setAddress((prevAddress) => {\n return {\n ...defaultValues,\n ...preselection,\n ...addressBackup,\n ...prevAddress,\n };\n });\n }, [defaultValues, preselection, addressBackup]);\n\n // backup address\n useEffect(() => {\n if (!hasUnsavedChanges.current) return;\n const timerId = backup(address);\n return () => {\n clearTimeout(timerId);\n };\n }, [address, backup]);\n\n // sync address with the backend\n useEffect(() => {\n if (!hasUnsavedChanges.current || !isFormValid(formRef)) return;\n\n const controller = new AbortController();\n const signal = controller.signal;\n\n const timer = setTimeout(() => {\n saveAddressForm({ signal, address });\n }, DEBOUNCE_TIME);\n\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [address, formRef, saveAddressForm]);\n\n return {\n address,\n errors,\n loadAutoFill,\n dismissError,\n onChange,\n onSelection,\n onBlur,\n onInvalid,\n setAddress,\n };\n};\n","import { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n AddressFormField,\n AddressFormFieldCode,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\nimport { useMemo } from 'preact/hooks';\n\ntype PreselectedFieldKey = keyof PreselectedAddressFields;\n\nconst FIELD_CODE_MAPPING: {\n [key in PreselectedFieldKey]: AddressFormFieldCode;\n} = {\n countryCode: AddressFormFieldCode.Country,\n region: AddressFormFieldCode.Region,\n postCode: AddressFormFieldCode.PostCode,\n};\n\nexport type UsePreselectedFieldsProps = {\n fields?: AddressFormField[];\n preselectedFields?: PreselectedAddressFields;\n};\n\nexport function usePreselectedFields({\n fields,\n preselectedFields,\n}: UsePreselectedFieldsProps): AddressFormValues {\n return useMemo(() => {\n const hasFields = !!fields && fields.length > 0;\n const hasPreselectedFields = !!preselectedFields;\n\n if (!hasFields || !hasPreselectedFields) return {};\n\n return Object.keys(preselectedFields).reduce((acc, code) => {\n const formCode = FIELD_CODE_MAPPING[code as PreselectedFieldKey];\n if (!formCode) return acc;\n\n const formField = fields.some((field) => field.code === formCode);\n if (!formField) return acc;\n\n return {\n ...acc,\n [formCode]: preselectedFields[code as PreselectedFieldKey],\n };\n }, {});\n }, [fields, preselectedFields]);\n}\n","import { AddressFormType } from '@/checkout/data/models';\nimport { Cart } from '@/checkout/data/models/cart';\nimport { Customer } from '@/checkout/data/models/customer';\n\nexport const getCustomerAddress = ({\n addressType,\n customer,\n}: {\n addressType: AddressFormType;\n customer: Customer;\n}) => {\n return addressType === AddressFormType.BILLING\n ? customer.defaultBillingAddress\n : customer.defaultShippingAddress;\n};\n\nexport const getCartAddress = ({\n addressType,\n cart,\n}: {\n addressType: AddressFormType;\n cart: Cart;\n}) => {\n if (addressType === AddressFormType.BILLING) {\n return cart.billingAddress;\n }\n\n const shippingAddresses = cart.shippingAddresses;\n if (!shippingAddresses || shippingAddresses.length === 0) return;\n return shippingAddresses[0];\n};\n","import { useEffect, useState } from 'preact/hooks';\n\nexport const useBreakpoint = () => {\n const getBreakpoint = () => {\n if (window.innerWidth >= 1920) return 'xxlarge';\n if (window.innerWidth >= 1366) return 'xlarge';\n if (window.innerWidth >= 1024) return 'large';\n if (window.innerWidth >= 768) return 'medium';\n\n return 'small';\n };\n\n const [breakpoint, setBreakpoint] = useState<\n ReturnType<typeof getBreakpoint>\n >(getBreakpoint());\n\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const handleResize = () => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => setBreakpoint(getBreakpoint()), 50);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, []);\n\n return breakpoint;\n};\n","import { Heading, OverlayLoader } from '@/checkout/components';\nimport { useBreakpoint } from '@/checkout/hooks/useBreakpoint';\nimport { Text } from '@adobe/elsie/i18n';\nimport { VComponent, classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nimport '@/checkout/components/Checkout/Checkout.css';\n\nconst ConditionalWrapper: FunctionComponent<{\n children?: VNode;\n className: string;\n}> = ({ children, className }) => {\n const breakpoint = useBreakpoint();\n if (breakpoint === 'small') return <>{children}</>;\n return <div className={className}>{children}</div>;\n};\n\nexport type AsideSections = {\n cartSummary: VNode;\n orderSummary: VNode;\n};\n\nconst Aside: FunctionComponent<{ sections: AsideSections }> = ({\n sections,\n}) => {\n return (\n <ConditionalWrapper className=\"checkout__aside\">\n <>\n <VComponent node={sections.orderSummary} />\n <VComponent node={sections.cartSummary} />\n </>\n </ConditionalWrapper>\n );\n};\n\nexport type MainSections = {\n billingAddress: VNode;\n billToShippingAddress?: VNode;\n login: VNode;\n paymentMethods: VNode;\n placeOrder: VNode;\n shippingAddress?: VNode;\n shippingMethods?: VNode;\n};\n\nconst MainContent: FunctionComponent<MainSections> = ({\n billingAddress,\n billToShippingAddress,\n login,\n paymentMethods,\n placeOrder,\n shippingAddress,\n shippingMethods,\n}) => {\n return (\n <>\n <VComponent node={login} />\n {shippingAddress && <VComponent node={shippingAddress} />}\n {billToShippingAddress && <VComponent node={billToShippingAddress} />}\n {shippingMethods && <VComponent node={shippingMethods} />}\n <VComponent node={paymentMethods} />\n <VComponent node={billingAddress} />\n <VComponent node={placeOrder} />\n </>\n );\n};\n\nconst Main: FunctionComponent<{\n outOfStock?: VNode;\n sections?: MainSections;\n}> = ({ outOfStock, sections }) => {\n return (\n <ConditionalWrapper className=\"checkout__main\">\n <>\n <Heading level={1} className=\"checkout-title\">\n <Text id=\"Checkout.title\" />\n </Heading>\n\n {outOfStock && (\n <VComponent className=\"checkout-outOfStock\" node={outOfStock} />\n )}\n\n {sections && <MainContent {...sections} />}\n </>\n </ConditionalWrapper>\n );\n};\n\nexport interface CheckoutProps extends HTMLAttributes<HTMLDivElement> {\n banner?: VNode;\n isLoading?: boolean;\n}\n\ninterface CheckoutComponent extends FunctionComponent<CheckoutProps> {\n Main: typeof Main;\n Aside: typeof Aside;\n}\n\nexport const Checkout: CheckoutComponent = ({\n banner,\n children,\n className,\n isLoading = false,\n ...restProps\n}) => {\n return (\n <div\n data-testid=\"checkout\"\n className={classes(['checkout', className])}\n {...restProps}\n >\n {isLoading && <OverlayLoader />}\n {banner && <VComponent className=\"checkout__banner\" node={banner} />}\n <div className=\"checkout__content\">{children}</div>\n </div>\n );\n};\n\nCheckout.Main = Main;\nCheckout.Aside = Aside;\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, JSX } from 'preact/compat';\nimport '@/checkout/components/Heading/Heading.css';\n\nexport interface HeadingProps extends Omit<HTMLAttributes<HTMLHeadingElement>, 'level'> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport const Heading: FunctionComponent<HeadingProps> = ({\n className,\n children,\n level = 2,\n}) => {\n const Heading =\n level >= 1 && level <= 6\n ? (`h${level}` as keyof JSX.IntrinsicElements)\n : 'h2';\n\n return (\n <Heading className={className}>\n {children}\n </Heading>\n );\n};\n","import { useCallback } from 'preact/hooks';\n\nexport const useScrollLock = () => {\n const lockScroll = useCallback(() => {\n document.body.style.overflow = 'hidden';\n }, []);\n\n const unlockScroll = useCallback(() => {\n document.body.style.overflow = '';\n }, []);\n\n return {\n lockScroll,\n unlockScroll,\n };\n};\n","import '@/checkout/components/OverlayLoader/OverlayLoader.css';\nimport { useScrollLock } from '@/checkout/hooks/useLockScroll';\nimport { ProgressSpinner } from '@adobe/elsie/components';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent } from 'preact';\nimport { useEffect } from 'preact/hooks';\n\nexport const OverlayLoader: FunctionComponent<{ className?: string }> = ({\n className,\n}) => {\n const { lockScroll, unlockScroll } = useScrollLock();\n\n useEffect(() => {\n lockScroll();\n return unlockScroll;\n }, [lockScroll, unlockScroll]);\n\n return (\n <div\n data-testid=\"checkout-overlay-loader\"\n className={classes(['checkout-overlay-loader', className])}\n >\n <ProgressSpinner />\n </div>\n );\n};\n"],"names":["autocompleteFieldCodes","firstname","lastname","company","country","region","city","postcode","telephone","street","email","middlename","prefix","suffix","isEmpty","obj","Object","keys","length","constructor","transformRegionOptions","regions","map","value","id","toString","code","text","name","transformCountryOptions","countries","label","processFormFields","address","addressType","availableCountries","availableRegions","config","dismissError","errors","fields","onBlur","onChange","onInvalid","onSelection","setAddress","resetRegion","AddressFormFieldCode","Region","RegionId","syncRegionId","regionId","field","error","frontendInput","handleSelect","isDisabled","isRequired","options","AttributeFrontendInputEnum","Multiline","getMultilineValues","Country","AddressFormType","SHIPPING","regionsSignal","event","target","refetchEstimatedShippingMethods","country_code","selectedRegionId","pending","countriesWithRequiredRegion","includes","country_id","displayStateIfOptional","Undefined","Select","Text","selectedRegion","region_id","defaultOnChange","region_name","find","regionOption","PostCode","countriesWithOptionalZipCode","estimateShipppingTimer","criteria","cartData","cartSignal","data","hasCartData","firstAddress","shippingAddresses","availableShippingMethods","clearTimeout","setTimeout","estimateShippingMethods","cartId","DEBOUNCE_TIME","generateId","index","generateClassName","hiddenField","element","defaultValue","_jsx","className","type","textField","validateRules","validity","validityProps","Field","disabled","children","Input","autocomplete","floatingLabel","placeholder","required","undefined","multilineField","multilineCount","numOfFields","_Fragment","Array","from","i","selectField","handleSelectAttribute","Picker","createField","rules","reduce","props","rule","ValidationRuleEnum","DateRangeMax","max","DateRangeMin","min","FileExtensions","accept","InputValidation","pattern","patternFor","MaxFileSize","MaxImageHeight","MaxImageWidth","MaxTextLength","maxLength","MinTextLength","minLength","Error","patterns","alpha","alphanumeric","numeric","url","source","FieldsFormSkeleton","_jsxs","Skeleton","SkeletonRow","variant","size","fullWidth","lines","FieldsForm","formRef","headingId","classes","Heading","level","ref","noValidate","sort","a","b","sortOrder","getFormErrors","form","formData","result","key","useDefaultValues","defaultCountry","defaultValues","setDefaultValues","useState","useEffect","useRegions","setAvailableRegions","getRegions","then","catch","console","useFormFill","autoFill","loadAutoFill","hasAutoFilledForm","setHasAutofilledForm","customer","customerSignal","hasCustomer","cart","hasCart","autoFillAddress","triggerAutoSave","getCartAddress","getCustomerAddress","isMultiline","split","MULTILINE_CUSTOM_ATTR_SPLIT","addressFormValues","City","Company","FirstName","firstName","LastName","lastName","postCode","Telephone","Vat","vatId","forEach","Street","MULTILINE_SUFFIX","customAttributes","attribute","values","AddressForm","forwardRef","preselectedFields","saveAddressHandler","useAddressFormFields","useCountries","isLoadingCountries","isLoadingFormFields","useStore","isLoadingStoreConfig","preselection","usePreselectedFields","useRef","useAddressForm","useImperativeHandle","triggerSaveAddress","signal","current","transformedFields","typeMapping","BILLING","Component","useAddressBackup","backupService","useServices","addressBackup","setAddressBackup","backup","restore","onOrder","events","on","remove","off","useCallback","removeBackup","attributesMapping","badInput","patternMismatch","rangeOverflow","rangeUnderflow","tooLong","tooShort","typeMismatch","valueMissing","constraints","useValidity","translations","setErrors","validateFormElement","formElement","validationMessage","valid","constraint","translation","replace","getAttribute","prevErrors","_","rest","isFormValid","useText","hasUnsavedChanges","saveAddressForm","command","updateField","prevAddress","checkValidity","timerId","controller","AbortController","timer","abort","FIELD_CODE_MAPPING","countryCode","useMemo","acc","formCode","some","defaultBillingAddress","defaultShippingAddress","billingAddress","useBreakpoint","getBreakpoint","window","innerWidth","breakpoint","setBreakpoint","timeoutId","handleResize","addEventListener","removeEventListener","ConditionalWrapper","Aside","sections","VComponent","node","orderSummary","cartSummary","MainContent","billToShippingAddress","login","paymentMethods","placeOrder","shippingAddress","shippingMethods","Main","outOfStock","Checkout","banner","isLoading","restProps","OverlayLoader","useScrollLock","lockScroll","body","style","overflow","unlockScroll","ProgressSpinner"],"mappings":"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","x_google_ignoreList":[8]}
|
|
1
|
+
{"version":3,"file":"ToggleButton.js","sources":["../../src/utils/autocompleteFieldCodes/autocompleteFieldCodes.ts","../../src/utils/isEmpty/isEmpty.ts","../../src/utils/processFormFields/processFormFields.ts","../../src/utils/refetchEstimatedShippingMethods/refetchEstimatedShippingMethods.ts","../../src/components/FieldsForm/fieldFactory.tsx","../../src/components/FieldsForm/validation.ts","../../src/components/FieldsForm/FieldsFormSkeleton.tsx","../../src/components/FieldsForm/FieldsForm.tsx","../../node_modules/@adobe/elsie/src/lib/form-values.ts","../../src/components/AddressForm/AddressForm.tsx","../../src/components/AddressForm/useAddressBackup.ts","../../src/hooks/useValidity/useValidity.ts","../../src/components/AddressForm/useAddressForm.ts","../../src/components/AddressForm/usePreselectedFields.ts","../../src/components/AddressForm/utils.ts","../../src/hooks/useBreakpoint/useBreakpoint.ts","../../src/components/Checkout/Checkout.tsx","../../src/components/Heading/Heading.tsx","../../src/hooks/useLockScroll/useLockScroll.ts","../../src/components/OverlayLoader/OverlayLoader.tsx"],"sourcesContent":["export interface fieldCodes {\n firstname: string;\n lastname: string;\n company: string;\n country: string;\n region: string;\n city: string;\n postcode: string;\n telephone: string;\n street: string;\n email: string;\n middlename: string;\n prefix: string;\n suffix: string;\n}\n\n// HTML attribute: autocomplete\n// https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n// https://www.w3.org/TR/WCAG21/#input-purposes\nconst autocompleteFieldCodes: fieldCodes = {\n firstname: 'given-name',\n lastname: 'family-name',\n company: 'organization',\n country: 'country',\n region: 'address-level1',\n city: 'address-level2',\n postcode: 'postal-code',\n telephone: 'tel',\n street: 'address-line1',\n email: 'email',\n middlename: 'additional-name',\n prefix: 'honorific-prefix',\n suffix: 'honorific-suffix',\n};\n\nexport default autocompleteFieldCodes;\n","export function isEmpty(obj: Record<string, any>): boolean {\n return Object.keys(obj).length === 0 && obj.constructor === Object;\n}","import { AttributeFrontendInputEnum } from '@/checkout/__generated__/types';\nimport {\n AddressFormElement,\n AddressFormErrors,\n AddressFormField,\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n Country,\n Region,\n StoreConfig,\n} from '@/checkout/data/models';\nimport { regionsSignal } from '@/checkout/signals';\n\nimport {\n getMultilineValues,\n refetchEstimatedShippingMethods,\n} from '@/checkout/utils';\nimport { PickerOption } from '@adobe/elsie/components';\nimport { StateUpdater, Dispatch } from 'preact/hooks';\n\nexport type FormFieldsProcessorProps = {\n address: AddressFormValues;\n addressType: AddressFormType;\n availableCountries: Country[] | undefined;\n availableRegions: Region[];\n config: StoreConfig;\n dismissError: (code: string) => void;\n errors: AddressFormErrors;\n fields: AddressFormField[];\n onBlur: (event: Event) => void;\n onChange: (event: Event) => void;\n onInvalid: (event: Event) => void;\n onSelection: (event: Event) => void;\n setAddress: Dispatch<StateUpdater<AddressFormValues>>;\n};\n\nconst transformRegionOptions = (regions: Region[]): PickerOption[] => {\n return regions.map((region) => {\n const value = region?.id?.toString() || region.code;\n return { text: region.name, value };\n });\n};\n\nconst transformCountryOptions = (\n countries: Country[] | undefined\n): PickerOption[] => {\n if (!countries) return [];\n\n return countries.map((country) => ({\n text: country.label,\n value: country.value,\n }));\n};\n\nexport function processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n}: FormFieldsProcessorProps): AddressFormElement[] {\n const resetRegion = () => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.Region]: '',\n [AddressFormFieldCode.RegionId]: '',\n }));\n\n dismissError(AddressFormFieldCode.Region);\n };\n\n const syncRegionId = (regionId: string) => {\n setAddress((address) => ({\n ...address,\n [AddressFormFieldCode.RegionId]: regionId,\n }));\n };\n\n return fields.map((field) => {\n let error: string | string[];\n let frontendInput = field.frontendInput;\n let handleSelect;\n let isDisabled = field.isDisabled;\n let isRequired = field.isRequired;\n let options: PickerOption[] = [];\n let value: string | string[];\n\n if (frontendInput === AttributeFrontendInputEnum.Multiline) {\n value = getMultilineValues(field.code, address);\n error = getMultilineValues(field.code, errors);\n } else {\n value = address[field.code];\n error = errors[field.code] || '';\n }\n\n if (field.code === AddressFormFieldCode.Country) {\n options = transformCountryOptions(availableCountries);\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.country = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (value) {\n refetchEstimatedShippingMethods({\n country_code: value,\n });\n }\n\n onSelection(event);\n resetRegion();\n };\n } else {\n handleSelect = onSelection;\n }\n }\n\n if (field.code === AddressFormFieldCode.RegionId) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegionId = value as string;\n }\n }\n\n if (field.code === AddressFormFieldCode.Region) {\n if (addressType === regionsSignal.value.addressType) {\n isDisabled = regionsSignal.value.pending;\n }\n\n isRequired = config!.countriesWithRequiredRegion.includes(\n address?.country_id\n );\n options = transformRegionOptions(availableRegions);\n\n if (!isRequired && !config!.displayStateIfOptional) {\n frontendInput = AttributeFrontendInputEnum.Undefined;\n }\n\n frontendInput =\n options.length > 0\n ? AttributeFrontendInputEnum.Select\n : AttributeFrontendInputEnum.Text;\n\n if (frontendInput === AttributeFrontendInputEnum.Select) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n handleSelect = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const selectedRegion = target.value;\n\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_id: selectedRegion,\n });\n\n onSelection(event);\n syncRegionId(selectedRegion);\n };\n } else {\n handleSelect = (event: Event) => {\n onSelection(event);\n const target = event.target as HTMLSelectElement;\n const selectedRegion = target.value;\n syncRegionId(selectedRegion);\n };\n }\n } else if (frontendInput === AttributeFrontendInputEnum.Text) {\n if (addressType === AddressFormType.SHIPPING) {\n regionsSignal.value.selectedRegion = value as string;\n\n const defaultOnChange = onChange;\n\n onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { value } = target;\n\n if (regionsSignal.value.country) {\n refetchEstimatedShippingMethods({\n country_code: regionsSignal.value.country as string,\n region_name: value as string,\n });\n }\n\n defaultOnChange(event);\n };\n }\n }\n\n value =\n options.length > 0\n ? options.find((regionOption) => regionOption!.value === value)\n ?.value || ''\n : value;\n }\n\n if (field.code === AddressFormFieldCode.PostCode) {\n isRequired = !config!.countriesWithOptionalZipCode.includes(\n address?.country_id as string\n );\n }\n\n return {\n ...field,\n error,\n frontendInput,\n handleSelect,\n isDisabled,\n isRequired,\n onBlur,\n onChange,\n onInvalid,\n options,\n value,\n };\n });\n}\n\nexport type ProcessedFormFields = ReturnType<typeof processFormFields>;\n","import { cartSignal } from '@/checkout/signals';\nimport { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { ShippingEstimationCriteria, estimateShippingMethods } from '@/checkout/api';\n\nlet estimateShipppingTimer: ReturnType<typeof setTimeout>;\nexport function refetchEstimatedShippingMethods(\n criteria: ShippingEstimationCriteria\n) {\n const cartData = cartSignal.value.data;\n const hasCartData = !!cartData;\n const firstAddress = cartData?.shippingAddresses?.[0];\n const availableShippingMethods = firstAddress?.availableShippingMethods;\n\n if (hasCartData && !availableShippingMethods) {\n clearTimeout(estimateShipppingTimer);\n\n estimateShipppingTimer = setTimeout(() => {\n estimateShippingMethods({ cartId: cartData.id, criteria });\n }, DEBOUNCE_TIME);\n }\n}\n","import { validityProps } from '@/checkout/components/FieldsForm';\nimport { AddressFormElement, AddressFormType } from '@/checkout/data/models';\nimport autocompleteFieldCodes, {\n fieldCodes,\n} from '@/checkout/utils/autocompleteFieldCodes/autocompleteFieldCodes';\nimport { Field, Input, Picker } from '@adobe/elsie/components';\n\ntype FieldFactoryProps = {\n addressType: AddressFormType;\n element: AddressFormElement;\n};\n\nconst generateId = ({\n addressType,\n code,\n index,\n}: {\n addressType: AddressFormType;\n code: string;\n index?: number;\n}) => {\n return index ? `${addressType}-${code}-${index}` : `${addressType}-${code}`;\n};\n\nconst generateClassName = (code: string) => {\n return `checkout-address-form__${code}`;\n};\n\nconst hiddenField = ({ addressType, element }: FieldFactoryProps) => {\n const { code, value, defaultValue } = element;\n\n return (\n <input\n className={generateClassName(code)}\n id={generateId({ addressType, code })}\n key={code}\n name={code}\n type=\"hidden\"\n value={value || defaultValue}\n />\n );\n};\n\nconst textField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n label,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const validity = validityProps(validateRules);\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Input\n aria-label={label}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n className={generateClassName(code)}\n floatingLabel={`${label} ${element.isRequired ? '*' : ''}`}\n id={generateId({ addressType, code })}\n onBlur={onBlur}\n onChange={onChange}\n onInvalid={onInvalid}\n placeholder={label!}\n required={element.isRequired || false}\n type=\"text\"\n // @ts-ignore\n name={code}\n // @ts-ignore\n value={value ?? undefined}\n {...validity}\n />\n </Field>\n );\n};\n\nconst multilineField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n isDisabled,\n isRequired,\n label,\n multilineCount,\n onBlur,\n onChange,\n onInvalid,\n validateRules,\n value,\n } = element;\n\n const numOfFields = multilineCount ?? 0;\n const validity = validityProps(validateRules);\n\n return (\n <>\n {Array.from(Array(numOfFields).keys()).map((i) => (\n <Field\n disabled={isDisabled}\n error={(error as string[])?.[i] || ''}\n key={`${code}-${i}`}\n className=\"dropin-field--multiline\"\n >\n <Input\n id={generateId({ addressType, code, index: i })}\n className={generateClassName(code)}\n floatingLabel={`${label} ${i != 0 ? i : ''} ${\n isRequired && i === 0 ? '*' : ''\n }`}\n autocomplete={\n i === 0 ? autocompleteFieldCodes[code as keyof fieldCodes] : 'off'\n }\n aria-label={label!}\n placeholder={`${label} ${i != 0 ? i : ''}`}\n type=\"text\"\n required={isRequired && i === 0}\n onChange={onChange}\n onBlur={onBlur}\n onInvalid={onInvalid}\n // @ts-ignore\n name={`${code}-${i}`}\n // @ts-ignore\n value={(value as string[])?.[i] || undefined}\n {...validity}\n />\n </Field>\n ))}\n </>\n );\n};\n\nconst selectField = ({ addressType, element }: FieldFactoryProps) => {\n const {\n code,\n error,\n handleSelect,\n isDisabled,\n isRequired,\n label,\n onBlur,\n onInvalid,\n options,\n value,\n } = element;\n\n const handleSelectAttribute = handleSelect ? { handleSelect } : {};\n\n return (\n <Field disabled={isDisabled} error={error as string}>\n <Picker\n id={generateId({ addressType, code })}\n className={generateClassName(code)}\n key={code}\n name={code}\n floatingLabel={`${label} ${isRequired ? '*' : ''}`}\n required={isRequired}\n placeholder={label!}\n aria-label={label!}\n options={options}\n value={value as string}\n autocomplete={autocompleteFieldCodes[code as keyof fieldCodes] || 'off'}\n onBlur={onBlur}\n onInvalid={onInvalid}\n {...handleSelectAttribute}\n />\n </Field>\n );\n};\n\nexport const createField = ({ addressType, element }: FieldFactoryProps) => {\n switch (element.frontendInput) {\n case 'BOOLEAN':\n case 'DATE':\n case 'DATETIME':\n case 'FILE':\n case 'GALLERY':\n case 'IMAGE':\n case 'MEDIA_IMAGE':\n case 'MULTISELECT':\n case 'PRICE':\n case 'TEXTAREA':\n case 'UNDEFINED':\n case 'WEIGHT':\n return null;\n case 'HIDDEN':\n return hiddenField({ addressType, element });\n case 'TEXT':\n return textField({ addressType, element });\n case 'MULTILINE':\n return multilineField({ addressType, element });\n case 'SELECT':\n return selectField({ addressType, element });\n default:\n return null;\n }\n};\n","import { AddressFormField } from '@/checkout/data/models/address-form-fields';\nimport { ValidationRuleEnum } from '@/checkout/__generated__/types';\n\nexport type ValidityProps = {\n accept?: string;\n max?: string | number;\n maxLength?: number;\n min?: string | number;\n minLength?: number;\n pattern?: string;\n required?: boolean;\n};\n\nexport type InputValidation =\n | 'alphanumeric'\n | 'alphanumeric-w-space'\n | 'alphanum-with-spaces'\n | 'alpha'\n | 'url'\n | 'numeric'\n | 'email';\n\nexport const validityProps = (\n rules: AddressFormField['validateRules']\n): ValidityProps => {\n if (!rules) return {};\n\n return rules.reduce((props, rule) => {\n switch (rule.name) {\n case ValidationRuleEnum.DateRangeMax:\n return { ...props, max: rule.value };\n case ValidationRuleEnum.DateRangeMin:\n return { ...props, min: rule.value };\n case ValidationRuleEnum.FileExtensions:\n return { ...props, accept: rule.value };\n case ValidationRuleEnum.InputValidation:\n return {\n ...props,\n pattern: patternFor(rule.value as InputValidation),\n };\n case ValidationRuleEnum.MaxFileSize:\n case ValidationRuleEnum.MaxImageHeight:\n case ValidationRuleEnum.MaxImageWidth:\n return props;\n case ValidationRuleEnum.MaxTextLength:\n return { ...props, maxLength: rule.value };\n case ValidationRuleEnum.MinTextLength:\n return { ...props, minLength: rule.value };\n default:\n throw new Error(`Unknown rule: ${rule.name}`);\n }\n }, {});\n};\n\nexport type Patterns = {\n [key in InputValidation]: RegExp;\n};\n\n// TODO allow to override patterns\nexport const patterns: Patterns = {\n alpha: /^[a-zA-Z]+$/,\n alphanumeric: /^[a-zA-Z0-9]+$/,\n 'alphanumeric-w-space': /^[a-zA-Z0-9 ]+$/,\n 'alphanum-with-spaces': /^[a-zA-Z0-9 ]+$/,\n email:\n /^([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9,!#$%&'*+/=?^_`{|}~-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*@([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+(\\.([a-z0-9-]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])+)*\\.(([a-z]|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]){2,})$/i,\n numeric: /^[0-9]+$/,\n url: /^((([A-Za-z]{3,9}:(?:\\/\\/)?)(?:[-;:&=+$,\\w]+@)?[A-Za-z0-9.-]+|(?:www\\.|[-;:&=+$,\\w]+@)[A-Za-z0-9.-]+)((?:\\/[+~%/.\\w\\-_]*)?\\??(?:[-+=&;%@.\\w_]*)#?(?:[.!/\\\\\\w]*))?)$/,\n};\n\nconst patternFor = (type: InputValidation): string => {\n switch (type) {\n case 'alpha':\n return patterns.alpha.source;\n case 'alphanumeric':\n return patterns.alphanumeric.source;\n case 'alphanumeric-w-space':\n return patterns['alphanumeric-w-space'].source;\n case 'alphanum-with-spaces':\n return patterns['alphanum-with-spaces'].source;\n case 'url':\n return patterns.url.source;\n case 'numeric':\n return patterns.numeric.source;\n case 'email':\n return patterns.email.source;\n default:\n throw new Error(`Unknown validation type: ${type}`);\n }\n};\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const FieldsFormSkeleton: FunctionComponent = (props) => {\n return (\n <Skeleton {...props}>\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" fullWidth={true} />\n <SkeletonRow size=\"large\" fullWidth={true} lines={3} />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n <SkeletonRow size=\"large\" />\n </Skeleton>\n );\n};\n","import { Heading } from '@/checkout/components';\nimport { createField } from '@/checkout/components/FieldsForm';\nimport '@/checkout/components/FieldsForm/FieldsForm.css';\nimport {\n AddressFormElement,\n AddressFormType,\n} from '@/checkout/data/models/address-form-fields';\nimport { Text } from '@adobe/elsie/i18n';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, Ref } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface FieldsFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n fields: AddressFormElement[];\n formRef: Ref<HTMLFormElement>;\n headingId: string;\n name: string;\n}\n\nexport const FieldsForm: FunctionComponent<FieldsFormProps> = ({\n addressType,\n className,\n fields,\n formRef,\n headingId,\n name,\n ...props\n}) => {\n return (\n <div {...props} className={classes(['checkout-fields-form', className])}>\n <Heading\n level={2}\n children={<Text id={headingId} />}\n className=\"checkout-fields-form__title\"\n />\n\n <form\n name={name}\n ref={formRef}\n className={classes(['checkout-fields-form__form', className])}\n noValidate\n >\n {fields\n .sort((a, b) => {\n if (!a.sortOrder || !b.sortOrder) return a.code < b.code ? -1 : 1;\n return a.sortOrder - b.sortOrder;\n })\n .map((element) => createField({ element, addressType }))}\n </form>\n </div>\n );\n};\n","export const getFormValues = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n const result = Object.fromEntries(formData);\n return result;\n};\n\nexport const getFormErrors = (form: HTMLFormElement) => {\n const formData: any = new FormData(form);\n\n const data = Object.fromEntries(formData);\n\n const result = Object.entries(data).reduce((result, [key]) => {\n // @ts-ignore\n const field = form.elements[key];\n\n return field?.validationMessage\n ? { ...result, [key]: field.validationMessage }\n : { ...result };\n }, {});\n\n return result;\n};\n","import { getRegions } from '@/checkout/api';\nimport { FieldsFormSkeleton } from '@/checkout/components';\nimport {\n LoadAutoFillProps,\n DefaultValues,\n getCartAddress,\n getCustomerAddress,\n MULTILINE_CUSTOM_ATTR_SPLIT,\n MULTILINE_SUFFIX,\n SaveAddressCommand,\n useAddressForm,\n usePreselectedFields,\n} from '@/checkout/components/AddressForm';\nimport '@/checkout/components/AddressForm/AddressForm.css';\nimport { FieldsForm as Component } from '@/checkout/components/FieldsForm/FieldsForm';\nimport { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n useAddressFormFields,\n useCountries,\n useStore,\n} from '@/checkout/context';\nimport {\n AddressFormFieldCode,\n AddressFormType,\n AddressFormValues,\n CustomerAddress,\n Region,\n} from '@/checkout/data/models';\nimport {\n BillingAddress,\n ShippingAddress,\n} from '@/checkout/data/models/address';\nimport { cartSignal, customerSignal } from '@/checkout/signals';\nimport { isEmpty, processFormFields } from '@/checkout/utils';\nimport { getFormErrors } from '@adobe/elsie/lib/form-values';\nimport {\n forwardRef,\n HTMLAttributes,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from 'preact/compat';\n\nfunction useDefaultValues(defaultCountry: string | undefined) {\n const [defaultValues, setDefaultValues] = useState<DefaultValues>({});\n\n useEffect(() => {\n if (!defaultCountry) return;\n setDefaultValues((defaultValues) => ({\n ...defaultValues,\n country_id: defaultCountry,\n }));\n }, [defaultCountry]);\n\n return { defaultValues };\n}\n\nfunction useRegions({\n country,\n addressType,\n}: {\n country: string | undefined;\n addressType: AddressFormType;\n}) {\n const [availableRegions, setAvailableRegions] = useState<Region[]>([]);\n\n useEffect(() => {\n if (!country) {\n setAvailableRegions([]);\n return;\n }\n\n getRegions(country, addressType)\n .then((data) => {\n setAvailableRegions(data || []);\n })\n .catch((error) => {\n console.error(error);\n });\n }, [setAvailableRegions, country, addressType]);\n\n return { availableRegions };\n}\n\nfunction useFormFill({\n autoFill,\n addressType,\n dismissError,\n loadAutoFill,\n}: {\n autoFill: boolean;\n addressType: AddressFormType;\n dismissError: (field: string) => void;\n loadAutoFill: (props: LoadAutoFillProps) => void;\n}) {\n const [hasAutoFilledForm, setHasAutofilledForm] = useState(false);\n const customer = customerSignal.value.data;\n const hasCustomer = !!customer;\n const cart = cartSignal.value.data;\n const hasCart = !!cart;\n\n useEffect(() => {\n if (!autoFill || !hasCart || hasAutoFilledForm) return;\n\n let autoFillAddress:\n | ShippingAddress\n | BillingAddress\n | CustomerAddress\n | undefined;\n\n let triggerAutoSave = false;\n\n autoFillAddress = getCartAddress({ addressType, cart });\n\n if (!autoFillAddress && hasCustomer) {\n autoFillAddress = getCustomerAddress({ addressType, customer });\n triggerAutoSave = true;\n }\n\n const isMultiline = (value: string) => {\n if (!value) return false;\n const parts = value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n return parts.length > 1;\n };\n\n if (!autoFillAddress) return;\n\n setHasAutofilledForm(true);\n\n const addressFormValues: AddressFormValues = {\n [AddressFormFieldCode.City]: autoFillAddress.city,\n [AddressFormFieldCode.Company]: autoFillAddress.company || '',\n [AddressFormFieldCode.Country]: autoFillAddress.country.value,\n [AddressFormFieldCode.FirstName]: autoFillAddress.firstName,\n [AddressFormFieldCode.LastName]: autoFillAddress.lastName,\n [AddressFormFieldCode.PostCode]: autoFillAddress.postCode || '',\n [AddressFormFieldCode.Telephone]: autoFillAddress.telephone || '',\n [AddressFormFieldCode.Vat]: autoFillAddress.vatId || '',\n };\n\n const region = autoFillAddress.region;\n\n if (region) {\n const regionId = region?.id?.toString();\n\n if (regionId) {\n addressFormValues[AddressFormFieldCode.Region] = regionId;\n addressFormValues[AddressFormFieldCode.RegionId] = regionId;\n } else {\n addressFormValues[AddressFormFieldCode.Region] = region.code;\n }\n }\n\n if (autoFillAddress?.street && autoFillAddress.street.length > 0) {\n autoFillAddress.street.forEach((street, index) => {\n addressFormValues[\n `${AddressFormFieldCode.Street}${MULTILINE_SUFFIX}${index}`\n ] = street!;\n });\n }\n\n const customAttributes = autoFillAddress?.customAttributes || [];\n\n customAttributes.forEach((attribute) => {\n if (!isMultiline(attribute.code)) {\n addressFormValues[attribute.code] = attribute.value;\n } else {\n const values = attribute.value.split(MULTILINE_CUSTOM_ATTR_SPLIT);\n values.forEach((value, index) => {\n addressFormValues[`${attribute.code}${MULTILINE_SUFFIX}${index}`] =\n value;\n });\n }\n });\n\n loadAutoFill({ values: addressFormValues, triggerAutoSave });\n }, [\n addressType,\n autoFill,\n cart,\n customer,\n hasAutoFilledForm,\n hasCart,\n hasCustomer,\n loadAutoFill,\n dismissError,\n ]);\n}\n\nexport interface AddressFormProps extends HTMLAttributes<HTMLDivElement> {\n addressType: AddressFormType;\n autoFill?: boolean;\n headingId: string;\n name: string;\n preselectedFields?: PreselectedAddressFields;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n}\n\nexport type AddressFormHandle = {\n triggerSaveAddress: (\n signal: AbortSignal\n ) => Promise<typeof cartSignal.value.data> | undefined;\n};\n\nexport const AddressForm = forwardRef<AddressFormHandle, AddressFormProps>(\n (\n {\n addressType,\n autoFill = true,\n children,\n headingId,\n name,\n preselectedFields,\n saveAddressHandler,\n ...props\n },\n ref\n ) => {\n const { fields } = useAddressFormFields();\n const { countries: availableCountries } = useCountries();\n const isLoadingCountries = availableCountries === undefined;\n const isLoadingFormFields = fields === undefined;\n const { config } = useStore();\n const isLoadingStoreConfig = config === undefined;\n const { defaultValues } = useDefaultValues(config?.defaultCountry);\n\n const preselection = usePreselectedFields({\n fields,\n preselectedFields,\n });\n\n const formRef = useRef<HTMLFormElement>(null);\n\n const {\n address,\n errors,\n loadAutoFill,\n onBlur,\n dismissError,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n } = useAddressForm({\n formRef,\n type: addressType,\n defaultValues,\n preselection,\n saveAddressHandler,\n });\n\n const { availableRegions } = useRegions({\n country: address.country_id,\n addressType,\n });\n\n useImperativeHandle(ref, () => ({\n triggerSaveAddress: (signal: AbortSignal) => {\n if (!formRef.current) return;\n const errors = getFormErrors(formRef.current);\n if (!isEmpty(errors)) return;\n return saveAddressHandler({ signal, address });\n },\n }));\n\n useFormFill({\n addressType,\n autoFill,\n loadAutoFill,\n dismissError,\n });\n\n const isLoading =\n isLoadingFormFields || isLoadingCountries || isLoadingStoreConfig;\n\n if (isLoading) {\n return <FieldsFormSkeleton data-testid={`${addressType}-skeleton`} />;\n }\n\n const transformedFields = processFormFields({\n address,\n addressType,\n availableCountries,\n availableRegions,\n config,\n dismissError,\n errors,\n fields,\n onBlur,\n onChange,\n onInvalid,\n onSelection,\n setAddress,\n });\n\n const typeMapping = {\n [AddressFormType.SHIPPING]: 'shipping',\n [AddressFormType.BILLING]: 'billing',\n };\n\n return (\n <Component\n {...props}\n name={name}\n addressType={addressType}\n className={`checkout-${typeMapping[addressType]}-form`}\n data-testid={`${typeMapping[addressType]}-form`}\n fields={transformedFields}\n formRef={formRef}\n headingId={headingId}\n />\n );\n }\n);\n","import { useCallback, useEffect, useState } from 'preact/hooks';\nimport { useServices } from '@/checkout/context';\nimport { events } from '@adobe/event-bus';\nimport { DEBOUNCE_TIME } from './constants';\nimport {\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\n\nexport function useAddressBackup(addressType: AddressFormType) {\n const { backupService } = useServices();\n const [addressBackup, setAddressBackup] = useState<AddressFormValues | null>(\n null\n );\n\n // restore address from local storage\n useEffect(() => {\n const backup = backupService.restore<AddressFormValues>(addressType);\n if (!backup) return;\n setAddressBackup(backup);\n }, [addressType, backupService]);\n\n // remove backup when the order is placed\n useEffect(() => {\n const onOrder = events.on('checkout/order', () => {\n backupService.remove(addressType);\n });\n\n return () => {\n onOrder?.off();\n };\n }, [addressType, backupService]);\n\n const backup = useCallback(\n (address: AddressFormValues) => {\n return setTimeout(() => {\n // we do not want to update the state to avoid re-rendering\n backupService.backup<AddressFormValues>(addressType, address);\n }, DEBOUNCE_TIME);\n },\n [addressType, backupService]\n );\n\n const removeBackup = useCallback(() => {\n backupService.remove(addressType);\n }, [addressType, backupService]);\n\n return { addressBackup, backup, removeBackup };\n}\n","import { useCallback, useState } from 'preact/hooks';\n\nexport type Translations = {\n badInput: string;\n patternMismatch: string;\n rangeOverflow: string;\n rangeUnderflow: string;\n tooLong: string;\n tooShort: string;\n typeMismatch: string;\n valueMissing: string;\n};\n\ntype FormElement = HTMLInputElement | HTMLSelectElement;\n\ntype Constraint =\n | 'badInput'\n | 'patternMismatch'\n | 'rangeOverflow'\n | 'rangeUnderflow'\n | 'tooLong'\n | 'tooShort'\n | 'typeMismatch'\n | 'valueMissing';\n\ntype Attribute = 'aria-label' | 'maxlength' | 'minlength' | 'min' | 'max';\n\nconst attributesMapping: Record<Constraint, Attribute> = {\n badInput: 'aria-label',\n patternMismatch: 'aria-label',\n rangeOverflow: 'max',\n rangeUnderflow: 'min',\n tooLong: 'maxlength',\n tooShort: 'minlength',\n typeMismatch: 'aria-label',\n valueMissing: 'aria-label',\n};\n\nconst constraints: Constraint[] = [\n 'badInput',\n 'patternMismatch',\n 'rangeOverflow',\n 'rangeUnderflow',\n 'tooLong',\n 'tooShort',\n 'typeMismatch',\n 'valueMissing',\n];\n\nexport const useValidity = (translations: Translations) => {\n const [errors, setErrors] = useState<Record<string, string>>({});\n\n const validateFormElement = useCallback(\n (formElement: FormElement) => {\n const { name, validity, validationMessage } = formElement;\n\n let error = validity.valid ? '' : validationMessage;\n\n constraints.forEach((constraint) => {\n if (!validity[constraint]) return;\n const translation = translations[constraint];\n if (!translation) return;\n const attribute = attributesMapping[constraint];\n error = translation.replace(\n '{field}',\n formElement.getAttribute(attribute) || ''\n );\n });\n\n setErrors((prevErrors) => ({ ...prevErrors, [name]: error }));\n },\n [translations]\n );\n\n const dismissError = (code: string) => {\n if (!errors[code]) return;\n\n setErrors((prevErrors) => {\n // eslint-disable-next-line\n const { [code]: _, ...rest } = prevErrors;\n return rest;\n });\n };\n\n const resetErrors = () => {\n setErrors({});\n };\n\n return {\n errors,\n dismissError,\n validateFormElement,\n resetErrors,\n };\n};\n","import { DEBOUNCE_TIME } from '@/checkout/components/AddressForm/constants';\nimport { useAddressBackup } from '@/checkout/components/AddressForm/useAddressBackup';\nimport {\n AddressFormErrors,\n AddressFormType,\n AddressFormValues,\n} from '@/checkout/data/models';\nimport {\n Translations as ValidityTranslations,\n useValidity,\n} from '@/checkout/hooks/useValidity';\nimport { cartSignal } from '@/checkout/signals';\nimport { isEmpty } from '@/checkout/utils';\nimport { useText } from '@adobe/elsie/i18n';\nimport { getFormErrors } from '@adobe/elsie/lib';\nimport { RefObject } from 'preact';\nimport { useCallback, useEffect, useRef, useState } from 'preact/hooks';\n\nexport type DefaultValues = {\n country_id?: string;\n};\n\nexport type AddressFormState = {\n address: AddressFormValues;\n errors: AddressFormErrors;\n};\n\nexport type SaveAddressCommand = {\n signal?: AbortSignal;\n address: AddressFormValues;\n};\n\nexport type LoadAutoFillProps = {\n values: AddressFormValues;\n triggerAutoSave: boolean;\n};\n\nexport type UseAddressFormProps = {\n formRef: RefObject<HTMLFormElement>;\n type: AddressFormType;\n defaultValues?: DefaultValues;\n preselection?: AddressFormValues;\n saveAddressHandler: (\n command: SaveAddressCommand\n ) => Promise<typeof cartSignal.value.data>;\n};\n\nconst isFormValid = (formRef: RefObject<HTMLFormElement>): boolean => {\n const form = formRef.current;\n if (!form) return false;\n const errors = getFormErrors(form);\n return isEmpty(errors);\n};\n\nexport const useAddressForm = ({\n formRef,\n type,\n defaultValues = {},\n preselection = {},\n saveAddressHandler,\n}: UseAddressFormProps) => {\n const translations = useText({\n badInput: 'Checkout.AddressForm.Validity.badInput',\n patternMismatch: 'Checkout.AddressForm.Validity.patternMismatch',\n rangeUnderflow: 'Checkout.AddressForm.Validity.rangeUnderflow',\n tooLong: 'Checkout.AddressForm.Validity.tooLong',\n tooShort: 'Checkout.AddressForm.Validity.tooShort',\n typeMismatch: 'Checkout.AddressForm.Validity.typeMismatch',\n valueMissing: 'Checkout.AddressForm.Validity.valueMissing',\n }) as ValidityTranslations;\n\n const hasUnsavedChanges = useRef(false);\n const [address, setAddress] = useState<AddressFormValues>({});\n\n const { addressBackup, backup, removeBackup } = useAddressBackup(type);\n\n const { errors, validateFormElement, dismissError, resetErrors } =\n useValidity(translations);\n\n const saveAddressForm = useCallback(\n (command: SaveAddressCommand) => {\n hasUnsavedChanges.current = false;\n saveAddressHandler(command)\n .then(() => {\n removeBackup();\n })\n .catch((error) => {\n hasUnsavedChanges.current = true;\n console.error('Saving address form failed:', error);\n });\n },\n [removeBackup, saveAddressHandler]\n );\n\n const updateField = (code: string, value: string) => {\n setAddress((prevAddress) => ({ ...prevAddress, [code]: value }));\n hasUnsavedChanges.current = true;\n };\n\n const loadAutoFill = ({\n values,\n triggerAutoSave = false,\n }: LoadAutoFillProps) => {\n resetErrors();\n setAddress((prevAddress) => ({ ...prevAddress, ...values }));\n if (!triggerAutoSave) return;\n hasUnsavedChanges.current = true;\n };\n\n const onChange = (event: Event) => {\n const target = event.target as HTMLInputElement;\n const { name, value } = target;\n\n updateField(name, value);\n\n validateFormElement(target);\n };\n\n const onInvalid = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n validateFormElement(target);\n };\n\n const onSelection = (event: Event) => {\n const target = event.target as HTMLSelectElement;\n const { name, value } = target;\n updateField(name, value);\n validateFormElement(target);\n };\n\n const onBlur = (event: Event) => {\n const target = event.target as HTMLInputElement | HTMLSelectElement;\n\n target.checkValidity();\n };\n\n // load default, preselected and backup address\n useEffect(() => {\n setAddress((prevAddress) => {\n return {\n ...defaultValues,\n ...preselection,\n ...addressBackup,\n ...prevAddress,\n };\n });\n }, [defaultValues, preselection, addressBackup]);\n\n // backup address\n useEffect(() => {\n if (!hasUnsavedChanges.current) return;\n const timerId = backup(address);\n return () => {\n clearTimeout(timerId);\n };\n }, [address, backup]);\n\n // sync address with the backend\n useEffect(() => {\n if (!hasUnsavedChanges.current || !isFormValid(formRef)) return;\n\n const controller = new AbortController();\n const signal = controller.signal;\n\n const timer = setTimeout(() => {\n saveAddressForm({ signal, address });\n }, DEBOUNCE_TIME);\n\n return () => {\n clearTimeout(timer);\n controller.abort();\n };\n }, [address, formRef, saveAddressForm]);\n\n return {\n address,\n errors,\n loadAutoFill,\n dismissError,\n onChange,\n onSelection,\n onBlur,\n onInvalid,\n setAddress,\n };\n};\n","import { PreselectedAddressFields } from '@/checkout/containers';\nimport {\n AddressFormField,\n AddressFormFieldCode,\n AddressFormValues,\n} from '@/checkout/data/models/address-form-fields';\nimport { useMemo } from 'preact/hooks';\n\ntype PreselectedFieldKey = keyof PreselectedAddressFields;\n\nconst FIELD_CODE_MAPPING: {\n [key in PreselectedFieldKey]: AddressFormFieldCode;\n} = {\n countryCode: AddressFormFieldCode.Country,\n region: AddressFormFieldCode.Region,\n postCode: AddressFormFieldCode.PostCode,\n};\n\nexport type UsePreselectedFieldsProps = {\n fields?: AddressFormField[];\n preselectedFields?: PreselectedAddressFields;\n};\n\nexport function usePreselectedFields({\n fields,\n preselectedFields,\n}: UsePreselectedFieldsProps): AddressFormValues {\n return useMemo(() => {\n const hasFields = !!fields && fields.length > 0;\n const hasPreselectedFields = !!preselectedFields;\n\n if (!hasFields || !hasPreselectedFields) return {};\n\n return Object.keys(preselectedFields).reduce((acc, code) => {\n const formCode = FIELD_CODE_MAPPING[code as PreselectedFieldKey];\n if (!formCode) return acc;\n\n const formField = fields.some((field) => field.code === formCode);\n if (!formField) return acc;\n\n return {\n ...acc,\n [formCode]: preselectedFields[code as PreselectedFieldKey],\n };\n }, {});\n }, [fields, preselectedFields]);\n}\n","import { AddressFormType } from '@/checkout/data/models';\nimport { Cart } from '@/checkout/data/models/cart';\nimport { Customer } from '@/checkout/data/models/customer';\n\nexport const getCustomerAddress = ({\n addressType,\n customer,\n}: {\n addressType: AddressFormType;\n customer: Customer;\n}) => {\n return addressType === AddressFormType.BILLING\n ? customer.defaultBillingAddress\n : customer.defaultShippingAddress;\n};\n\nexport const getCartAddress = ({\n addressType,\n cart,\n}: {\n addressType: AddressFormType;\n cart: Cart;\n}) => {\n if (addressType === AddressFormType.BILLING) {\n return cart.billingAddress;\n }\n\n const shippingAddresses = cart.shippingAddresses;\n if (!shippingAddresses || shippingAddresses.length === 0) return;\n return shippingAddresses[0];\n};\n","import { useEffect, useState } from 'preact/hooks';\n\nexport const useBreakpoint = () => {\n const getBreakpoint = () => {\n if (window.innerWidth >= 1920) return 'xxlarge';\n if (window.innerWidth >= 1366) return 'xlarge';\n if (window.innerWidth >= 1024) return 'large';\n if (window.innerWidth >= 768) return 'medium';\n\n return 'small';\n };\n\n const [breakpoint, setBreakpoint] = useState<\n ReturnType<typeof getBreakpoint>\n >(getBreakpoint());\n\n useEffect(() => {\n let timeoutId: ReturnType<typeof setTimeout>;\n\n const handleResize = () => {\n if (timeoutId) clearTimeout(timeoutId);\n timeoutId = setTimeout(() => setBreakpoint(getBreakpoint()), 50);\n };\n\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('resize', handleResize);\n if (timeoutId) clearTimeout(timeoutId);\n };\n }, []);\n\n return breakpoint;\n};\n","import { Heading, OverlayLoader } from '@/checkout/components';\nimport { useBreakpoint } from '@/checkout/hooks/useBreakpoint';\nimport { Text } from '@adobe/elsie/i18n';\nimport { VComponent, classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nimport '@/checkout/components/Checkout/Checkout.css';\nimport { ErrorBanner, MergedCartBanner } from '@/checkout/containers';\n\nconst ConditionalWrapper: FunctionComponent<{\n children?: VNode;\n className: string;\n}> = ({ children, className }) => {\n const breakpoint = useBreakpoint();\n if (breakpoint === 'small') return <>{children}</>;\n return <div className={className}>{children}</div>;\n};\n\nexport type AsideSections = {\n cartSummary: VNode;\n orderSummary: VNode;\n};\n\nconst Aside: FunctionComponent<{ sections: AsideSections }> = ({\n sections,\n}) => {\n return (\n <ConditionalWrapper className=\"checkout__aside\">\n <>\n <VComponent node={sections.orderSummary} />\n <VComponent node={sections.cartSummary} />\n </>\n </ConditionalWrapper>\n );\n};\n\nexport type MainSections = {\n billingAddress: VNode;\n billToShippingAddress?: VNode;\n login: VNode;\n paymentMethods: VNode;\n placeOrder: VNode;\n shippingAddress?: VNode;\n shippingMethods?: VNode;\n};\n\nconst MainContent: FunctionComponent<MainSections> = ({\n billingAddress,\n billToShippingAddress,\n login,\n paymentMethods,\n placeOrder,\n shippingAddress,\n shippingMethods,\n}) => {\n return (\n <>\n <VComponent node={login} />\n {shippingAddress && <VComponent node={shippingAddress} />}\n {billToShippingAddress && <VComponent node={billToShippingAddress} />}\n {shippingMethods && <VComponent node={shippingMethods} />}\n <VComponent node={paymentMethods} />\n <VComponent node={billingAddress} />\n <VComponent node={placeOrder} />\n </>\n );\n};\n\nconst Main: FunctionComponent<{\n outOfStock?: VNode;\n sections?: MainSections;\n}> = ({ outOfStock, sections }) => {\n return (\n <ConditionalWrapper className=\"checkout__main\">\n <>\n <Heading level={1} className=\"checkout-title\">\n <Text id=\"Checkout.title\" />\n </Heading>\n\n {outOfStock && (\n <VComponent className=\"checkout-outOfStock\" node={outOfStock} />\n )}\n\n {sections && <MainContent {...sections} />}\n </>\n </ConditionalWrapper>\n );\n};\n\nexport interface CheckoutProps extends HTMLAttributes<HTMLDivElement> {\n isLoading?: boolean;\n}\n\ninterface CheckoutComponent extends FunctionComponent<CheckoutProps> {\n Main: typeof Main;\n Aside: typeof Aside;\n}\n\nexport const Checkout: CheckoutComponent = ({\n children,\n className,\n isLoading = false,\n ...restProps\n}) => {\n return (\n <div\n data-testid=\"checkout\"\n className={classes(['checkout', className])}\n {...restProps}\n >\n {isLoading && <OverlayLoader />}\n <ErrorBanner />\n <MergedCartBanner />\n <div className=\"checkout__content\">{children}</div>\n </div>\n );\n};\n\nCheckout.Main = Main;\nCheckout.Aside = Aside;\n","import { FunctionComponent } from 'preact';\nimport { HTMLAttributes, JSX } from 'preact/compat';\nimport '@/checkout/components/Heading/Heading.css';\n\nexport interface HeadingProps extends Omit<HTMLAttributes<HTMLHeadingElement>, 'level'> {\n level?: 1 | 2 | 3 | 4 | 5 | 6;\n}\n\nexport const Heading: FunctionComponent<HeadingProps> = ({\n className,\n children,\n level = 2,\n}) => {\n const Heading =\n level >= 1 && level <= 6\n ? (`h${level}` as keyof JSX.IntrinsicElements)\n : 'h2';\n\n return (\n <Heading className={className}>\n {children}\n </Heading>\n );\n};\n","import { useCallback } from 'preact/hooks';\n\nexport const useScrollLock = () => {\n const lockScroll = useCallback(() => {\n document.body.style.overflow = 'hidden';\n }, []);\n\n const unlockScroll = useCallback(() => {\n document.body.style.overflow = '';\n }, []);\n\n return {\n lockScroll,\n unlockScroll,\n };\n};\n","import '@/checkout/components/OverlayLoader/OverlayLoader.css';\nimport { useScrollLock } from '@/checkout/hooks/useLockScroll';\nimport { ProgressSpinner } from '@adobe/elsie/components';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent } from 'preact';\nimport { useEffect } from 'preact/hooks';\n\nexport const OverlayLoader: FunctionComponent<{ className?: string }> = ({\n className,\n}) => {\n const { lockScroll, unlockScroll } = useScrollLock();\n\n useEffect(() => {\n lockScroll();\n return unlockScroll;\n }, [lockScroll, unlockScroll]);\n\n return (\n <div\n data-testid=\"checkout-overlay-loader\"\n className={classes(['checkout-overlay-loader', className])}\n >\n <ProgressSpinner />\n </div>\n );\n};\n"],"names":["autocompleteFieldCodes","firstname","lastname","company","country","region","city","postcode","telephone","street","email","middlename","prefix","suffix","isEmpty","obj","Object","keys","length","constructor","transformRegionOptions","regions","map","value","id","toString","code","text","name","transformCountryOptions","countries","label","processFormFields","address","addressType","availableCountries","availableRegions","config","dismissError","errors","fields","onBlur","onChange","onInvalid","onSelection","setAddress","resetRegion","AddressFormFieldCode","Region","RegionId","syncRegionId","regionId","field","error","frontendInput","handleSelect","isDisabled","isRequired","options","AttributeFrontendInputEnum","Multiline","getMultilineValues","Country","AddressFormType","SHIPPING","regionsSignal","event","target","refetchEstimatedShippingMethods","country_code","selectedRegionId","pending","countriesWithRequiredRegion","includes","country_id","displayStateIfOptional","Undefined","Select","Text","selectedRegion","region_id","defaultOnChange","region_name","find","regionOption","PostCode","countriesWithOptionalZipCode","estimateShipppingTimer","criteria","cartData","cartSignal","data","hasCartData","firstAddress","shippingAddresses","availableShippingMethods","clearTimeout","setTimeout","estimateShippingMethods","cartId","DEBOUNCE_TIME","generateId","index","generateClassName","hiddenField","element","defaultValue","_jsx","className","type","textField","validateRules","validity","validityProps","Field","disabled","children","Input","autocomplete","floatingLabel","placeholder","required","undefined","multilineField","multilineCount","numOfFields","_Fragment","Array","from","i","selectField","handleSelectAttribute","Picker","createField","rules","reduce","props","rule","ValidationRuleEnum","DateRangeMax","max","DateRangeMin","min","FileExtensions","accept","InputValidation","pattern","patternFor","MaxFileSize","MaxImageHeight","MaxImageWidth","MaxTextLength","maxLength","MinTextLength","minLength","Error","patterns","alpha","alphanumeric","numeric","url","source","FieldsFormSkeleton","_jsxs","Skeleton","SkeletonRow","variant","size","fullWidth","lines","FieldsForm","formRef","headingId","classes","Heading","level","ref","noValidate","sort","a","b","sortOrder","getFormErrors","form","formData","result","key","useDefaultValues","defaultCountry","defaultValues","setDefaultValues","useState","useEffect","useRegions","setAvailableRegions","getRegions","then","catch","console","useFormFill","autoFill","loadAutoFill","hasAutoFilledForm","setHasAutofilledForm","customer","customerSignal","hasCustomer","cart","hasCart","autoFillAddress","triggerAutoSave","getCartAddress","getCustomerAddress","isMultiline","split","MULTILINE_CUSTOM_ATTR_SPLIT","addressFormValues","City","Company","FirstName","firstName","LastName","lastName","postCode","Telephone","Vat","vatId","forEach","Street","MULTILINE_SUFFIX","customAttributes","attribute","values","AddressForm","forwardRef","preselectedFields","saveAddressHandler","useAddressFormFields","useCountries","isLoadingCountries","isLoadingFormFields","useStore","isLoadingStoreConfig","preselection","usePreselectedFields","useRef","useAddressForm","useImperativeHandle","triggerSaveAddress","signal","current","transformedFields","typeMapping","BILLING","Component","useAddressBackup","backupService","useServices","addressBackup","setAddressBackup","backup","restore","onOrder","events","on","remove","off","useCallback","removeBackup","attributesMapping","badInput","patternMismatch","rangeOverflow","rangeUnderflow","tooLong","tooShort","typeMismatch","valueMissing","constraints","useValidity","translations","setErrors","validateFormElement","formElement","validationMessage","valid","constraint","translation","replace","getAttribute","prevErrors","_","rest","resetErrors","isFormValid","useText","hasUnsavedChanges","saveAddressForm","command","updateField","prevAddress","checkValidity","timerId","controller","AbortController","timer","abort","FIELD_CODE_MAPPING","countryCode","useMemo","acc","formCode","some","defaultBillingAddress","defaultShippingAddress","billingAddress","useBreakpoint","getBreakpoint","window","innerWidth","breakpoint","setBreakpoint","timeoutId","handleResize","addEventListener","removeEventListener","ConditionalWrapper","Aside","sections","VComponent","node","orderSummary","cartSummary","MainContent","billToShippingAddress","login","paymentMethods","placeOrder","shippingAddress","shippingMethods","Main","outOfStock","Checkout","isLoading","restProps","OverlayLoader","ErrorBanner","MergedCartBanner","useScrollLock","lockScroll","body","style","overflow","unlockScroll","ProgressSpinner"],"mappings":"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","x_google_ignoreList":[8]}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import"@dropins/tools/event-bus.js";import{i as I}from"./getStoreConfig.js";import{s as z}from"./setPaymentMethod.js";import{H as O}from"./ToggleButton.js";import"@dropins/tools/preact-hooks.js";import{classes as f,Slot as x}from"@dropins/tools/lib.js";import{Skeleton as U,SkeletonRow as v,IllustratedMessage as $,Icon as q,ProgressSpinner as Z,Divider as F,RadioButton as G}from"@dropins/tools/components.js";/* empty css */import{jsxs as y,jsx as e,Fragment as J}from"@dropins/tools/preact-jsx-runtime.js";import*as M from"@dropins/tools/preact-compat.js";import{useState as P,useCallback as N,useEffect as T}from"@dropins/tools/preact-compat.js";import{useText as K}from"@dropins/tools/i18n.js";const Q=t=>M.createElement("svg",{width:24,height:24,viewBox:"0 0 24 24",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t},M.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),M.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M19.35 11.64H14.04V14.81H19.35V11.64Z",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"}),M.createElement("path",{vectorEffect:"non-scaling-stroke",d:"M17.9304 11.64V8.25H15.1504",stroke:"currentColor",strokeWidth:1,strokeLinecap:"round",strokeLinejoin:"round"})),X=()=>y(U,{"data-testid":"payment-methods-skeleton",children:[e(v,{variant:"heading",size:"medium"}),e(v,{variant:"empty",size:"medium"}),e(v,{size:"xlarge",fullWidth:!0}),e(v,{size:"xlarge",fullWidth:!0})]}),Y=({code:t,isLoading:n,isSelected:d,onChange:s,title:o})=>e(te,{className:"checkout-payment-methods__method",label:o,name:"payment-method",value:t,selected:d,onChange:s,radioButtonProps:{"aria-busy":n}}),D=({className:t,paymentMethodContent:n,isLoading:d,onChange:s=()=>{},options:o,selection:u})=>{const l=K({Title:"Checkout.PaymentMethods.title",EmptyState:"Checkout.PaymentMethods.emptyState"});return o===void 0?e(X,{}):y("div",{className:f(["checkout-payment-methods",t]),children:[e(O,{level:2,className:"checkout-payment-methods__title",children:l.Title}),!d&&o.length===0&&e($,{icon:e(q,{source:Q}),message:e("p",{children:l.EmptyState})}),y("div",{className:f(["checkout-payment-methods__wrapper"]),children:[d&&e(Z,{className:"checkout-payment-methods__spinner"}),e("div",{className:f(["checkout-payment-methods__methods",["checkout-payment-methods--loading",d],["checkout-payment-methods--full-width",o.length%2!==0]]),children:o==null?void 0:o.map(m=>e(Y,{code:m.code,onChange:s,isSelected:m.code===u,title:m.title},m.code))}),n&&e("div",{className:"checkout-payment-methods__content",children:n})]}),e(F,{variant:"primary"})]})},L={free:{render:t=>{const n=document.createElement("div");n.innerText="",t.replaceHTML(n)}},checkmo:{render:t=>{const n=document.createElement("div");n.innerText="",t.replaceHTML(n)}}};function ee(t){var E;const{onPlaceOrder:n,handleServerError:d,paymentMethodsSlot:s,isShippingInfoRequired:o}=t,[u,l]=P(),[m,g]=P(),[h,_]=P(L),[C,W]=P(!0),{data:a}=I.value,S=(a==null?void 0:a.id)??"",b=!!a,w=!!((E=a==null?void 0:a.shippingAddresses)!=null&&E[0]),i=a==null?void 0:a.availablePaymentMethods,c=a==null?void 0:a.selectedPaymentMethod,k=N(async r=>{try{if(l(r),!w&&o||r===(c==null?void 0:c.code))return;await z({cartId:S,paymentMethod:r})}catch(p){console.error("setting payment method failed:",p)}},[S,w,o,c]);T(()=>{b&&(c!=null&&c.code?(i==null?void 0:i.some(p=>p.code===c.code))?l(c.code):i!=null&&i.length?k(i[0].code):l(void 0):i[0]&&k(m||i[0].code))},[i,b,c,k,m]);const B=async r=>{await k(r),c!=null&&c.code||g(r)},V=N((r,p)=>{if(!r){console.warn("Payment method handler is ignored because it has no code");return}if(!p){console.warn("Payment method handler is ignored because it is empty");return}_(R=>({...R,[r]:p}))},[]),j=s?e(x,{name:"PaymentMethods",slot:s,context:{addPaymentMethodHandler:V,replaceHTML(r){this.replaceWith(r),W(!1)}}}):null,H=u?h[u]:null,A=H?e(x,{name:"PaymentMethodContent",slot:H.render,context:{cartId:S,onPlaceOrder:n,handleServerError:d,replaceHTML(r){this.replaceWith(r)}}},H):void 0;return T(()=>{!C&&h!=L&&console.warn("Payment method handlers you have added are ignored because the default content has been replaced")},[C,h]),{availablePaymentMethods:i,selectedPaymentMethod:u,onPaymentMethodChange:B,paymentMethodContent:A,mainSlotContent:j,isDefaultContentUsed:C}}const ue=t=>{const{onPlaceOrder:n,handleServerError:d,paymentMethodsSlot:s,isShippingInfoRequired:o=!0}=t,{availablePaymentMethods:u,selectedPaymentMethod:l,onPaymentMethodChange:m,paymentMethodContent:g,mainSlotContent:h,isDefaultContentUsed:_}=ee({onPlaceOrder:n,handleServerError:d,paymentMethodsSlot:s,isShippingInfoRequired:o});return y(J,{children:[h&&e(h.type,{ref:h.ref,...h.props}),_&&e(D,{options:u,selection:l,onChange:m,paymentMethodContent:g,isLoading:I.value.pending})]})},te=({label:t,name:n,value:d,icon:s,selected:o,onChange:u,className:l,children:m,radioButtonProps:g,...h})=>e("div",{className:f(["checkout-toggle-button",l,["checkout-toggle-button__selected",o]]),...h,children:y("label",{className:"checkout-toggle-button__actionButton",children:[e(G,{...g,label:"",name:n,value:d,checked:o,onChange:()=>u(d),"aria-label":t,className:f([l,"checkout-toggle-button__radioButton"])}),y("div",{className:"checkout-toggle-button__content",children:[s&&e(s.type,{...s==null?void 0:s.props,className:"checkout-toggle-button__icon"}),t]})]})});export{ue as P};
|
|
2
|
+
//# sourceMappingURL=ToggleButton2.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ToggleButton2.js","sources":["../../node_modules/@adobe/elsie/src/icons/Wallet.svg","../../src/components/PaymentMethods/PaymentMethodsSkeleton.tsx","../../src/components/PaymentMethods/PaymentMethods.tsx","../../src/containers/PaymentMethods/defaultHandlers.tsx","../../src/containers/PaymentMethods/PaymentMethods.tsx","../../src/components/ToggleButton/ToggleButton.tsx"],"sourcesContent":["import * as React from \"react\";\nconst SvgWallet = (props) => /* @__PURE__ */ React.createElement(\"svg\", { width: 24, height: 24, viewBox: \"0 0 24 24\", fill: \"none\", xmlns: \"http://www.w3.org/2000/svg\", ...props }, /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.93 14.8V18.75H5.97C4.75 18.75 3.75 17.97 3.75 17V6.5M3.75 6.5C3.75 5.53 4.74 4.75 5.97 4.75H15.94V8.25H5.97C4.75 8.25 3.75 7.47 3.75 6.5Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M19.35 11.64H14.04V14.81H19.35V11.64Z\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }), /* @__PURE__ */ React.createElement(\"path\", { vectorEffect: \"non-scaling-stroke\", d: \"M17.9304 11.64V8.25H15.1504\", stroke: \"currentColor\", strokeWidth: 1, strokeLinecap: \"round\", strokeLinejoin: \"round\" }));\nexport default SvgWallet;\n","import { FunctionComponent } from 'preact';\nimport { Skeleton, SkeletonRow } from '@adobe/elsie/components';\n\nexport const PaymentMethodsSkeleton: FunctionComponent = () => {\n return (\n <Skeleton data-testid=\"payment-methods-skeleton\">\n <SkeletonRow variant=\"heading\" size=\"medium\" />\n <SkeletonRow variant=\"empty\" size=\"medium\" />\n <SkeletonRow size=\"xlarge\" fullWidth={true} />\n <SkeletonRow size=\"xlarge\" fullWidth={true} />\n </Skeleton>\n );\n};\n","import { Heading, ToggleButton } from '@/checkout/components';\nimport { PaymentMethodsSkeleton } from '@/checkout/components/PaymentMethods';\nimport '@/checkout/components/PaymentMethods/PaymentMethods.css';\nimport { PaymentMethod } from '@/checkout/data/models/payment-method';\nimport {\n Divider,\n Icon,\n IllustratedMessage,\n ProgressSpinner,\n} from '@adobe/elsie/components';\nimport { useText } from '@adobe/elsie/i18n';\nimport { Wallet } from '@adobe/elsie/icons';\nimport { classes } from '@adobe/elsie/lib';\nimport { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\n\nexport interface PaymentMethodsProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n paymentMethodContent?: VNode;\n isLoading?: boolean;\n onChange?: (value: string) => void;\n options?: PaymentMethod[];\n selection?: string;\n}\n\ninterface PaymentOptionProps {\n code: string;\n isLoading?: boolean;\n isSelected: boolean;\n onChange: (value: string) => void;\n title: string;\n}\n\nconst PaymentOption: FunctionComponent<PaymentOptionProps> = ({\n code,\n isLoading,\n isSelected,\n onChange,\n title,\n}) => {\n return (\n <ToggleButton\n className=\"checkout-payment-methods__method\"\n label={title}\n name=\"payment-method\"\n value={code}\n selected={isSelected}\n onChange={onChange}\n radioButtonProps={{\n 'aria-busy': isLoading,\n }}\n // TODO: Add icon\n />\n );\n};\n\nexport const PaymentMethods: FunctionComponent<PaymentMethodsProps> = ({\n className,\n paymentMethodContent,\n isLoading,\n onChange = () => {},\n options,\n selection,\n}) => {\n const dictionary = useText({\n Title: 'Checkout.PaymentMethods.title',\n EmptyState: 'Checkout.PaymentMethods.emptyState',\n });\n\n if (options === undefined) return <PaymentMethodsSkeleton />;\n\n return (\n <div className={classes(['checkout-payment-methods', className])}>\n <Heading level={2} className=\"checkout-payment-methods__title\">\n {dictionary.Title}\n </Heading>\n\n {!isLoading && options!.length === 0 && (\n <IllustratedMessage\n icon={<Icon source={Wallet} />}\n message={<p>{dictionary.EmptyState}</p>}\n />\n )}\n\n <div className={classes(['checkout-payment-methods__wrapper'])}>\n {isLoading && (\n <ProgressSpinner className=\"checkout-payment-methods__spinner\" />\n )}\n\n <div\n className={classes([\n 'checkout-payment-methods__methods',\n ['checkout-payment-methods--loading', isLoading],\n ['checkout-payment-methods--full-width', options!.length % 2 !== 0],\n ])}\n >\n {options?.map((method) => (\n <PaymentOption\n code={method.code}\n key={method.code}\n onChange={onChange}\n isSelected={method.code === selection}\n title={method.title}\n />\n ))}\n </div>\n\n {paymentMethodContent && (\n <div className=\"checkout-payment-methods__content\">\n {paymentMethodContent}\n </div>\n )}\n </div>\n <Divider variant=\"primary\" />\n </div>\n );\n};\n","import { SlotProps } from '@adobe/elsie/lib';\nimport { PaymentMethodContentSlotContext } from '.';\n\nexport interface PaymentMethodHandler {\n render: SlotProps<PaymentMethodContentSlotContext>;\n}\n\nexport interface PaymentMethodHandlers {\n [code: string]: PaymentMethodHandler;\n}\n\nexport const defaultHandlers: PaymentMethodHandlers = {\n free: {\n render: (context) => {\n const $content = document.createElement('div');\n $content.innerText = '';\n context.replaceHTML($content);\n },\n },\n checkmo: {\n render: (context) => {\n const $content = document.createElement('div');\n $content.innerText = '';\n context.replaceHTML($content);\n },\n },\n};\n","import { setPaymentMethod as setPaymentMethodOnCart } from '@/checkout/api';\nimport { PaymentMethods as PaymentMethodsComponent } from '@/checkout/components/PaymentMethods/PaymentMethods';\nimport {\n PaymentMethodHandler,\n defaultHandlers,\n} from '@/checkout/containers/PaymentMethods/defaultHandlers';\nimport { cartSignal } from '@/checkout/signals';\nimport { Container, Slot, SlotProps } from '@adobe/elsie/lib';\nimport {\n HTMLAttributes,\n useCallback,\n useEffect,\n useState,\n} from 'preact/compat';\n\nexport interface PaymentMethodSlotContext {\n addPaymentMethodHandler: (\n code: string,\n handler: { render: SlotProps<PaymentMethodContentSlotContext> }\n ) => void;\n replaceHTML: (domElement: HTMLElement) => void;\n}\n\nexport interface PaymentMethodContentSlotContext {\n cartId: string;\n onPlaceOrder: (fn: () => Promise<void>) => void;\n handleServerError: (error: any) => void;\n replaceHTML: (domElement: HTMLElement) => void;\n}\n\nexport interface PaymentMethodsProps extends HTMLAttributes<HTMLDivElement> {\n paymentMethodsSlot?: SlotProps<PaymentMethodSlotContext>;\n onPlaceOrder: (fn: () => Promise<void>) => void;\n handleServerError: (error: any) => void;\n isShippingInfoRequired?: boolean;\n}\n\nfunction usePaymentMethods(props: PaymentMethodsProps) {\n const {\n onPlaceOrder,\n handleServerError,\n paymentMethodsSlot,\n isShippingInfoRequired,\n } = props;\n\n const [selectedPaymentMethod, setSelectedPaymentMethod] = useState<\n string | undefined\n >();\n const [temporarySelectedPaymentMethod, setTemporarySelectedPaymentMethod] =\n useState<string | undefined>();\n\n const [paymentMethodHandlers, setPaymentMethodHandlers] =\n useState(defaultHandlers);\n\n const [isDefaultContentUsed, setIsDefaultContentUsed] = useState(true);\n\n const { data: cartData } = cartSignal.value;\n const cartId = cartData?.id ?? '';\n const hasCartData = !!cartData;\n const hasAddress = !!cartData?.shippingAddresses?.[0];\n const availablePaymentMethods = cartData?.availablePaymentMethods;\n const cartSelectedPaymentMethod = cartData?.selectedPaymentMethod;\n\n const setAndSelectPaymentMethod = useCallback(\n async (paymentMethod: string) => {\n try {\n setSelectedPaymentMethod(paymentMethod);\n\n if (!hasAddress && isShippingInfoRequired) return;\n\n if (paymentMethod === cartSelectedPaymentMethod?.code) return;\n\n await setPaymentMethodOnCart({ cartId, paymentMethod });\n } catch (error: any) {\n console.error('setting payment method failed:', error);\n }\n },\n [cartId, hasAddress, isShippingInfoRequired, cartSelectedPaymentMethod]\n );\n\n useEffect(() => {\n if (!hasCartData) return;\n\n if (cartSelectedPaymentMethod?.code) {\n const selectedPaymentMethodIsAvailable = availablePaymentMethods?.some(\n (method: any) => method.code === cartSelectedPaymentMethod.code\n );\n\n if (selectedPaymentMethodIsAvailable) {\n // select the method from the backend\n setSelectedPaymentMethod(cartSelectedPaymentMethod.code);\n } else if (availablePaymentMethods?.length) {\n // select the first available method\n setAndSelectPaymentMethod(availablePaymentMethods[0]!.code);\n } else {\n setSelectedPaymentMethod(undefined);\n }\n } else {\n // default to the temporarily selected one or the first one\n availablePaymentMethods![0] &&\n setAndSelectPaymentMethod(\n temporarySelectedPaymentMethod || availablePaymentMethods![0].code\n );\n }\n }, [\n availablePaymentMethods,\n hasCartData,\n cartSelectedPaymentMethod,\n setAndSelectPaymentMethod,\n temporarySelectedPaymentMethod,\n ]);\n\n const onPaymentMethodChange = async (value: string) => {\n await setAndSelectPaymentMethod(value);\n if (!cartSelectedPaymentMethod?.code) {\n setTemporarySelectedPaymentMethod(value);\n }\n };\n\n const addPaymentMethodHandler = useCallback(\n (code: string, handler: PaymentMethodHandler) => {\n if (!code) {\n console.warn(\n 'Payment method handler is ignored because it has no code'\n );\n return;\n }\n\n if (!handler) {\n console.warn('Payment method handler is ignored because it is empty');\n return;\n }\n\n setPaymentMethodHandlers((prevHandlers) => ({\n ...prevHandlers,\n [code]: handler,\n }));\n },\n []\n );\n\n // Run the main payment method container slot callback\n const mainSlotContent = paymentMethodsSlot ? (\n <Slot\n name=\"PaymentMethods\"\n slot={paymentMethodsSlot}\n context={{\n addPaymentMethodHandler,\n replaceHTML(domElement) {\n this.replaceWith(domElement);\n setIsDefaultContentUsed(false);\n },\n }}\n />\n ) : null;\n\n const selectedPaymentMethodHandler = selectedPaymentMethod\n ? paymentMethodHandlers[selectedPaymentMethod]\n : null;\n\n const paymentMethodContent = selectedPaymentMethodHandler ? (\n <Slot\n key={selectedPaymentMethodHandler}\n name=\"PaymentMethodContent\"\n slot={selectedPaymentMethodHandler.render}\n context={{\n cartId,\n onPlaceOrder,\n handleServerError,\n replaceHTML(domElement) {\n this.replaceWith(domElement);\n },\n }}\n />\n ) : undefined;\n\n useEffect(() => {\n // Content has been replaced but payment method handlers have been added\n if (!isDefaultContentUsed && paymentMethodHandlers != defaultHandlers) {\n console.warn(\n 'Payment method handlers you have added are ignored because the default content has been replaced'\n );\n }\n }, [isDefaultContentUsed, paymentMethodHandlers]);\n\n return {\n availablePaymentMethods,\n selectedPaymentMethod,\n onPaymentMethodChange,\n paymentMethodContent,\n mainSlotContent,\n isDefaultContentUsed,\n };\n}\n\nexport const PaymentMethods: Container<PaymentMethodsProps> = (props) => {\n const {\n onPlaceOrder,\n handleServerError,\n paymentMethodsSlot,\n isShippingInfoRequired = true,\n } = props;\n const {\n availablePaymentMethods,\n selectedPaymentMethod,\n onPaymentMethodChange,\n paymentMethodContent,\n mainSlotContent,\n isDefaultContentUsed,\n } = usePaymentMethods({\n onPlaceOrder,\n handleServerError,\n paymentMethodsSlot,\n isShippingInfoRequired,\n });\n\n return (\n <>\n {mainSlotContent && (\n // @ts-ignore\n <mainSlotContent.type\n ref={mainSlotContent.ref}\n {...mainSlotContent.props}\n />\n )}\n {isDefaultContentUsed && (\n <PaymentMethodsComponent\n options={availablePaymentMethods}\n selection={selectedPaymentMethod}\n onChange={onPaymentMethodChange}\n paymentMethodContent={paymentMethodContent}\n isLoading={cartSignal.value.pending}\n />\n )}\n </>\n );\n};\n","import { FunctionComponent, VNode } from 'preact';\nimport { HTMLAttributes } from 'preact/compat';\nimport { classes } from '@adobe/elsie/lib';\nimport '@/checkout/components/ToggleButton/ToggleButton.css';\nimport { RadioButton } from '@adobe/elsie/components';\n\nexport interface ToggleButtonProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange' | 'icon'> {\n label: string;\n name: string;\n value: string;\n selected: boolean;\n onChange: (value: string) => void;\n icon?:\n | VNode<HTMLAttributes<SVGSVGElement>>\n | VNode<HTMLAttributes<HTMLImageElement>>;\n radioButtonProps?: Omit<\n HTMLAttributes<HTMLInputElement>,\n 'size' | 'label' | 'name' | 'value' | 'checked' | 'disabled'\n >;\n}\n\nexport const ToggleButton: FunctionComponent<ToggleButtonProps> = ({\n label,\n name,\n value,\n icon,\n selected,\n onChange,\n className,\n children,\n radioButtonProps,\n ...props\n}) => {\n return (\n <div\n className={classes([\n 'checkout-toggle-button',\n className,\n ['checkout-toggle-button__selected', selected],\n ])}\n {...props}\n >\n <label className=\"checkout-toggle-button__actionButton\">\n <RadioButton\n {...radioButtonProps}\n label=\"\"\n name={name}\n value={value}\n checked={selected}\n onChange={() => onChange(value)}\n aria-label={label}\n className={classes([\n className,\n 'checkout-toggle-button__radioButton',\n ])}\n />\n\n <div className=\"checkout-toggle-button__content\">\n {icon && (\n <icon.type\n {...icon?.props}\n className=\"checkout-toggle-button__icon\"\n />\n )}\n\n {label}\n </div>\n </label>\n </div>\n );\n};\n"],"names":["SvgWallet","props","React","PaymentMethodsSkeleton","_jsxs","Skeleton","children","_jsx","SkeletonRow","variant","size","fullWidth","PaymentOption","code","isLoading","isSelected","onChange","title","ToggleButton","className","label","name","value","selected","radioButtonProps","PaymentMethods","paymentMethodContent","options","selection","dictionary","useText","Title","EmptyState","undefined","classes","Heading","level","length","IllustratedMessage","icon","Icon","source","Wallet","message","ProgressSpinner","map","method","Divider","defaultHandlers","free","render","context","$content","document","createElement","innerText","replaceHTML","checkmo","usePaymentMethods","onPlaceOrder","handleServerError","paymentMethodsSlot","isShippingInfoRequired","selectedPaymentMethod","setSelectedPaymentMethod","useState","temporarySelectedPaymentMethod","setTemporarySelectedPaymentMethod","paymentMethodHandlers","setPaymentMethodHandlers","isDefaultContentUsed","setIsDefaultContentUsed","data","cartData","cartSignal","cartId","id","hasCartData","hasAddress","shippingAddresses","availablePaymentMethods","cartSelectedPaymentMethod","setAndSelectPaymentMethod","useCallback","paymentMethod","setPaymentMethodOnCart","error","useEffect","some","onPaymentMethodChange","addPaymentMethodHandler","handler","console","warn","prevHandlers","mainSlotContent","Slot","slot","domElement","replaceWith","selectedPaymentMethodHandler","_Fragment","type","ref","PaymentMethodsComponent","pending","RadioButton","checked"],"mappings":"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","x_google_ignoreList":[0]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SaveAddressCommand } from '.';
|
|
2
|
+
import { PreselectedAddressFields } from '../../containers';
|
|
3
|
+
import { AddressFormType } from '../../data/models';
|
|
4
|
+
import { cartSignal } from '../../signals';
|
|
5
|
+
import { HTMLAttributes } from 'preact/compat';
|
|
6
|
+
|
|
7
|
+
export interface AddressFormProps extends HTMLAttributes<HTMLDivElement> {
|
|
8
|
+
addressType: AddressFormType;
|
|
9
|
+
autoFill?: boolean;
|
|
10
|
+
headingId: string;
|
|
11
|
+
name: string;
|
|
12
|
+
preselectedFields?: PreselectedAddressFields;
|
|
13
|
+
saveAddressHandler: (command: SaveAddressCommand) => Promise<typeof cartSignal.value.data>;
|
|
14
|
+
}
|
|
15
|
+
export type AddressFormHandle = {
|
|
16
|
+
triggerSaveAddress: (signal: AbortSignal) => Promise<typeof cartSignal.value.data> | undefined;
|
|
17
|
+
};
|
|
18
|
+
export declare const AddressForm: import('preact').FunctionalComponent<import('preact/compat').PropsWithoutRef<AddressFormProps> & {
|
|
19
|
+
ref?: import('preact').Ref<AddressFormHandle> | undefined;
|
|
20
|
+
}>;
|
|
21
|
+
//# sourceMappingURL=AddressForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AddressForm.d.ts","sourceRoot":"","sources":["../../../src/components/AddressForm/AddressForm.tsx"],"names":[],"mappings":"AAEA,OAAO,EAOL,kBAAkB,EAGnB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,mDAAmD,CAAC;AAE3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAMjE,OAAO,EAEL,eAAe,EAIhB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,UAAU,EAAkB,MAAM,oBAAoB,CAAC;AAGhE,OAAO,EAEL,cAAc,EAKf,MAAM,eAAe,CAAC;AAoJvB,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,cAAc,CAAC;IACtE,WAAW,EAAE,eAAe,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;IAC7C,kBAAkB,EAAE,CAClB,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;CAC5C;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,kBAAkB,EAAE,CAClB,MAAM,EAAE,WAAW,KAChB,OAAO,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC;CACxD,CAAC;AAEF,eAAO,MAAM,WAAW;;EA6GvB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/components/AddressForm/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,2BAA2B,OAAO,CAAC;AAChD,eAAO,MAAM,aAAa,OAAO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/AddressForm/index.ts"],"names":[],"mappings":"AAAA,cAAc,+CAA+C,CAAC;AAC9D,cAAc,6CAA6C,CAAC;AAC5D,cAAc,kDAAkD,CAAC;AACjE,cAAc,wDAAwD,CAAC;AACvE,cAAc,yCAAyC,CAAC;AACxD,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,+CAA+C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { AddressFormType, AddressFormValues } from '../../data/models/address-form-fields';
|
|
2
|
+
|
|
3
|
+
export declare function useAddressBackup(addressType: AddressFormType): {
|
|
4
|
+
addressBackup: AddressFormValues | null;
|
|
5
|
+
backup: (address: AddressFormValues) => NodeJS.Timeout;
|
|
6
|
+
removeBackup: () => void;
|
|
7
|
+
};
|
|
8
|
+
//# sourceMappingURL=useAddressBackup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAddressBackup.d.ts","sourceRoot":"","sources":["../../../src/components/AddressForm/useAddressBackup.ts"],"names":[],"mappings":"AAIA,OAAO,EACL,eAAe,EACf,iBAAiB,EAClB,MAAM,4CAA4C,CAAC;AAEpD,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,eAAe;;sBAyB/C,iBAAiB;;EAc9B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { AddressFormErrors, AddressFormType, AddressFormValues } from '../../data/models';
|
|
2
|
+
import { cartSignal } from '../../signals';
|
|
3
|
+
import { RefObject } from 'preact';
|
|
4
|
+
|
|
5
|
+
export type DefaultValues = {
|
|
6
|
+
country_id?: string;
|
|
7
|
+
};
|
|
8
|
+
export type AddressFormState = {
|
|
9
|
+
address: AddressFormValues;
|
|
10
|
+
errors: AddressFormErrors;
|
|
11
|
+
};
|
|
12
|
+
export type SaveAddressCommand = {
|
|
13
|
+
signal?: AbortSignal;
|
|
14
|
+
address: AddressFormValues;
|
|
15
|
+
};
|
|
16
|
+
export type LoadAutoFillProps = {
|
|
17
|
+
values: AddressFormValues;
|
|
18
|
+
triggerAutoSave: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type UseAddressFormProps = {
|
|
21
|
+
formRef: RefObject<HTMLFormElement>;
|
|
22
|
+
type: AddressFormType;
|
|
23
|
+
defaultValues?: DefaultValues;
|
|
24
|
+
preselection?: AddressFormValues;
|
|
25
|
+
saveAddressHandler: (command: SaveAddressCommand) => Promise<typeof cartSignal.value.data>;
|
|
26
|
+
};
|
|
27
|
+
export declare const useAddressForm: ({ formRef, type, defaultValues, preselection, saveAddressHandler, }: UseAddressFormProps) => {
|
|
28
|
+
address: AddressFormValues;
|
|
29
|
+
errors: Record<string, string>;
|
|
30
|
+
loadAutoFill: ({ values, triggerAutoSave, }: LoadAutoFillProps) => void;
|
|
31
|
+
dismissError: (code: string) => void;
|
|
32
|
+
onChange: (event: Event) => void;
|
|
33
|
+
onSelection: (event: Event) => void;
|
|
34
|
+
onBlur: (event: Event) => void;
|
|
35
|
+
onInvalid: (event: Event) => void;
|
|
36
|
+
setAddress: import('preact/hooks').Dispatch<import('preact/hooks').StateUpdater<AddressFormValues>>;
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=useAddressForm.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useAddressForm.d.ts","sourceRoot":"","sources":["../../../src/components/AddressForm/useAddressForm.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,iBAAiB,EACjB,eAAe,EACf,iBAAiB,EAClB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAIhD,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAGnC,MAAM,MAAM,aAAa,GAAG;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,iBAAiB,CAAC;IAC3B,MAAM,EAAE,iBAAiB,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,OAAO,EAAE,iBAAiB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,iBAAiB,CAAC;IAC1B,eAAe,EAAE,OAAO,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;IACpC,IAAI,EAAE,eAAe,CAAC;IACtB,aAAa,CAAC,EAAE,aAAa,CAAC;IAC9B,YAAY,CAAC,EAAE,iBAAiB,CAAC;IACjC,kBAAkB,EAAE,CAClB,OAAO,EAAE,kBAAkB,KACxB,OAAO,CAAC,OAAO,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;CAC5C,CAAC;AASF,eAAO,MAAM,cAAc,wEAMxB,mBAAmB;;;iDA0CjB,iBAAiB;;sBAOK,KAAK;yBAeF,KAAK;oBAOV,KAAK;uBAbF,KAAK;;CAoEhC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PreselectedAddressFields } from '../../containers';
|
|
2
|
+
import { AddressFormField, AddressFormValues } from '../../data/models/address-form-fields';
|
|
3
|
+
|
|
4
|
+
export type UsePreselectedFieldsProps = {
|
|
5
|
+
fields?: AddressFormField[];
|
|
6
|
+
preselectedFields?: PreselectedAddressFields;
|
|
7
|
+
};
|
|
8
|
+
export declare function usePreselectedFields({ fields, preselectedFields, }: UsePreselectedFieldsProps): AddressFormValues;
|
|
9
|
+
//# sourceMappingURL=usePreselectedFields.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePreselectedFields.d.ts","sourceRoot":"","sources":["../../../src/components/AddressForm/usePreselectedFields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,EACL,gBAAgB,EAEhB,iBAAiB,EAClB,MAAM,4CAA4C,CAAC;AAapD,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC5B,iBAAiB,CAAC,EAAE,wBAAwB,CAAC;CAC9C,CAAC;AAEF,wBAAgB,oBAAoB,CAAC,EACnC,MAAM,EACN,iBAAiB,GAClB,EAAE,yBAAyB,GAAG,iBAAiB,CAoB/C"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { AddressFormType } from '../../data/models';
|
|
2
|
+
import { Cart } from '../../data/models/cart';
|
|
3
|
+
import { Customer } from '../../data/models/customer';
|
|
4
|
+
|
|
5
|
+
export declare const getCustomerAddress: ({ addressType, customer, }: {
|
|
6
|
+
addressType: AddressFormType;
|
|
7
|
+
customer: Customer;
|
|
8
|
+
}) => import('../../data/models').CustomerAddress | undefined;
|
|
9
|
+
export declare const getCartAddress: ({ addressType, cart, }: {
|
|
10
|
+
addressType: AddressFormType;
|
|
11
|
+
cart: Cart;
|
|
12
|
+
}) => import('../../data/models/address').Address | undefined;
|
|
13
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/components/AddressForm/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAE3D,eAAO,MAAM,kBAAkB;iBAIhB,eAAe;cAClB,QAAQ;kEAKnB,CAAC;AAEF,eAAO,MAAM,cAAc;iBAIZ,eAAe;UACtB,IAAI;6DASX,CAAC"}
|