From b34cafa0c841069064e46947ec8783036c077cf5 Mon Sep 17 00:00:00 2001 From: Alicia LaFemina Date: Mon, 20 Oct 2025 14:51:50 -0400 Subject: [PATCH 1/2] render paypal --- .../svg/{paypal.svg => paypal-icon.svg} | 0 .../app/components/icons/index.jsx | 4 +- .../sf-payments-express-buttons/index.jsx | 10 +- .../app/hooks/use-salesforce-payments.js | 7 +- .../app/pages/checkout/index.jsx | 17 +++- .../app/pages/checkout/index.test.js | 99 +++++++++++++++++++ .../checkout/partials/sf-payments-sheet.jsx | 18 +++- .../partials/sf-payments-sheet.test.js | 91 +++++++++++++++++ 8 files changed, 233 insertions(+), 13 deletions(-) rename packages/template-retail-react-app/app/assets/svg/{paypal.svg => paypal-icon.svg} (100%) diff --git a/packages/template-retail-react-app/app/assets/svg/paypal.svg b/packages/template-retail-react-app/app/assets/svg/paypal-icon.svg similarity index 100% rename from packages/template-retail-react-app/app/assets/svg/paypal.svg rename to packages/template-retail-react-app/app/assets/svg/paypal-icon.svg diff --git a/packages/template-retail-react-app/app/components/icons/index.jsx b/packages/template-retail-react-app/app/components/icons/index.jsx index 2c2711af5e..5edb36e14d 100644 --- a/packages/template-retail-react-app/app/components/icons/index.jsx +++ b/packages/template-retail-react-app/app/components/icons/index.jsx @@ -68,7 +68,7 @@ import CVVSymbol from '@salesforce/retail-react-app/app/assets/svg/cc-cvv.svg' import DiscoverSymbol from '@salesforce/retail-react-app/app/assets/svg/cc-discover.svg' import LocationSymbol from '@salesforce/retail-react-app/app/assets/svg/location.svg' import MastercardSymbol from '@salesforce/retail-react-app/app/assets/svg/cc-mastercard.svg' -import PaypalSymbol from '@salesforce/retail-react-app/app/assets/svg/paypal.svg' +import PaypalSymbol from '@salesforce/retail-react-app/app/assets/svg/paypal-icon.svg' import SocialPinterestSymbol from '@salesforce/retail-react-app/app/assets/svg/social-pinterest.svg' import VisaSymbol from '@salesforce/retail-react-app/app/assets/svg/cc-visa.svg' @@ -186,7 +186,7 @@ export const LockIcon = icon( } ) export const LocationIcon = icon('location') -export const PaypalIcon = icon('paypal', {viewBox: PaypalSymbol.viewBox}) +export const PaypalIcon = icon('paypal-icon', {viewBox: PaypalSymbol.viewBox}) export const PlugIcon = icon('plug') export const PlusIcon = icon('plus') export const MastercardIcon = icon('cc-mastercard', {viewBox: MastercardSymbol.viewBox}) diff --git a/packages/template-retail-react-app/app/components/sf-payments-express-buttons/index.jsx b/packages/template-retail-react-app/app/components/sf-payments-express-buttons/index.jsx index 5026890844..8975d44202 100644 --- a/packages/template-retail-react-app/app/components/sf-payments-express-buttons/index.jsx +++ b/packages/template-retail-react-app/app/components/sf-payments-express-buttons/index.jsx @@ -440,10 +440,16 @@ const SFPaymentsExpressButtons = ({ onPaymentMethodsRendered() } } - + + // TODO remove this once Paypal is supported const paymentMethodSet = { paymentMethods: paymentConfig.paymentMethods, - paymentMethodSetAccounts: paymentConfig.paymentMethodSetAccounts + paymentMethodSetAccounts: paymentConfig.paymentMethodSetAccounts?.map(account => { + if (account.vendor === 'PayPal') { + return {...account, vendor: 'Paypal'} + } + return account + }) } const config = { diff --git a/packages/template-retail-react-app/app/hooks/use-salesforce-payments.js b/packages/template-retail-react-app/app/hooks/use-salesforce-payments.js index 04051c8a1b..faedaf9f93 100644 --- a/packages/template-retail-react-app/app/hooks/use-salesforce-payments.js +++ b/packages/template-retail-react-app/app/hooks/use-salesforce-payments.js @@ -13,9 +13,8 @@ import {useConfigurations} from '@salesforce/commerce-sdk-react' */ export const useSalesforcePayments = () => { const {data: configurations} = useConfigurations() - return ( - configurations?.configurations?.find( - (configuration) => configuration.id === 'sfPaymentsEnabled' - )?.value === 'true' + const config = configurations?.configurations?.find( + (configuration) => configuration.id === 'SalesforcePaymentsAllowed' ) + return config?.value === true || config?.value === 'true' } diff --git a/packages/template-retail-react-app/app/pages/checkout/index.jsx b/packages/template-retail-react-app/app/pages/checkout/index.jsx index 7ceb9646a5..c92859e19b 100644 --- a/packages/template-retail-react-app/app/pages/checkout/index.jsx +++ b/packages/template-retail-react-app/app/pages/checkout/index.jsx @@ -63,6 +63,7 @@ const Checkout = () => { const placeOrderCheckoutStep = sfPaymentsEnabled ? 4 : 5 const sfPaymentsSheetRef = useRef(null) const [expressPaymentMethodsRendered, setExpressPaymentMethodsRendered] = useState(false) + const [shouldHidePlaceOrderButton, setShouldHidePlaceOrderButton] = useState(false) // cart has both pickup and delivery orders const isDeliveryAndPickupOrder = @@ -90,6 +91,11 @@ const Checkout = () => { } }, [basket?.basketId]) + // Callback to handle when payment method requires its own pay button + const handleRequiresPayButtonChange = (requiresPayButton) => { + setShouldHidePlaceOrderButton(requiresPayButton === false) + } + const submitOrder = async () => { const doCreateOrder = async () => { return await createOrder({ @@ -184,12 +190,15 @@ const Checkout = () => { )} {sfPaymentsEnabled ? ( - + ) : ( )} - {step === placeOrderCheckoutStep && ( + {step === placeOrderCheckoutStep && !shouldHidePlaceOrderButton && (