From 59ad6b7287c965feb519d92608487dd68d961205 Mon Sep 17 00:00:00 2001 From: glo80771 <127736464+glo80771@users.noreply.github.com> Date: Fri, 29 Sep 2023 15:22:37 +0530 Subject: [PATCH 1/7] Pwa 3139 v2 (#4124) * PWA-3139::Region is required in PWA although this option is disabled in Magento , and is not required on normal storefront * PWA-3139-V1::Resolved region not null issue * PWA-3139-V2::Removed unwanted changes * PWA-3139-V2::Updated code format * PWA-3139-V2::Formatted the code * PWA-3139-V2::Added error message for guest users form and resolved null issue for credit card payment mode * PWA-3139-V2::Added error message for guest users form and resolved null issue for credit card payment method * PWA-3139-V2::Updated code review comments --------- Co-authored-by: Aanchal Pawar <97873570+glo82145@users.noreply.github.com> --- .../BillingAddress/useBillingAddress.js | 5 +++- .../__tests__/useCreditCard.spec.js | 1 + .../PaymentInformation/useCreditCard.js | 5 +++- .../__snapshots__/useGuestForm.spec.js.snap | 12 ++++++-- .../AddressForm/useGuestForm.js | 4 +-- .../__snapshots__/customerForm.spec.js.snap | 6 ++-- .../__snapshots__/guestForm.spec.js.snap | 8 +++--- .../AddressForm/customerForm.js | 28 ++++++++++++++++++- .../AddressForm/customerForm.module.css | 5 ++++ .../AddressForm/guestForm.js | 21 +++++++++++++- .../AddressForm/guestForm.module.css | 5 ++++ .../venia-ui/lib/components/Region/region.js | 9 +++++- .../venia-ui/lib/components/Select/select.js | 4 ++- .../lib/components/TextInput/textInput.js | 4 ++- 14 files changed, 98 insertions(+), 19 deletions(-) diff --git a/packages/peregrine/lib/talons/CheckoutPage/BillingAddress/useBillingAddress.js b/packages/peregrine/lib/talons/CheckoutPage/BillingAddress/useBillingAddress.js index 8260e0d3e41..46da6e8d680 100644 --- a/packages/peregrine/lib/talons/CheckoutPage/BillingAddress/useBillingAddress.js +++ b/packages/peregrine/lib/talons/CheckoutPage/BillingAddress/useBillingAddress.js @@ -178,10 +178,13 @@ export const useBillingAddress = props => { * shipping address. */ const setShippingAddressAsBillingAddress = useCallback(() => { - const shippingAddress = shippingAddressData + var shippingAddress = shippingAddressData ? mapAddressData(shippingAddressData.cart.shippingAddresses[0]) : {}; + shippingAddress.region = + shippingAddress.region == null ? '' : shippingAddress.region; + updateBillingAddress({ variables: { cartId, diff --git a/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/__tests__/useCreditCard.spec.js b/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/__tests__/useCreditCard.spec.js index a9c1c7038f2..9986d65cbb8 100644 --- a/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/__tests__/useCreditCard.spec.js +++ b/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/__tests__/useCreditCard.spec.js @@ -1095,6 +1095,7 @@ describe('missing data', () => { Object { "variables": Object { "cartId": "123", + "region": "", "sameAsShipping": true, }, } diff --git a/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/useCreditCard.js b/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/useCreditCard.js index 5e867b58aab..f93a489588c 100644 --- a/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/useCreditCard.js +++ b/packages/peregrine/lib/talons/CheckoutPage/PaymentInformation/useCreditCard.js @@ -234,10 +234,13 @@ export const useCreditCard = props => { * shipping address. */ const setShippingAddressAsBillingAddress = useCallback(() => { - const shippingAddress = shippingAddressData + var shippingAddress = shippingAddressData ? mapAddressData(shippingAddressData.cart.shippingAddresses[0]) : {}; + shippingAddress.region = + shippingAddress.region == null ? '' : shippingAddress.region; + updateBillingAddress({ variables: { cartId, diff --git a/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/useGuestForm.spec.js.snap b/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/useGuestForm.spec.js.snap index ef2ec8b4307..b88eab9521a 100644 --- a/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/useGuestForm.spec.js.snap +++ b/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/useGuestForm.spec.js.snap @@ -9,7 +9,11 @@ Object { "firstname": "Philip", "lastname": "Fry", "postcode": "10019", - "region": 12, + "region": Object { + "region": "New York", + "region_code": "NY", + "region_id": 12, + }, "street": Array [ "3000 57th Street", "Suite 200", @@ -33,7 +37,11 @@ Object { "firstname": "Philip", "lastname": "Fry", "postcode": "10019", - "region": 12, + "region": Object { + "region": "New York", + "region_code": "NY", + "region_id": 12, + }, "street": Array [ "3000 57th Street", ], diff --git a/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/useGuestForm.js b/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/useGuestForm.js index c69d2e40b85..b18f03f6b73 100644 --- a/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/useGuestForm.js +++ b/packages/peregrine/lib/talons/CheckoutPage/ShippingInformation/AddressForm/useGuestForm.js @@ -60,7 +60,7 @@ export const useGuestForm = props => { const handleSubmit = useCallback( async formValues => { - const { country, email, region, ...address } = formValues; + const { country, email, ...address } = formValues; try { await setGuestShipping({ variables: { @@ -70,8 +70,6 @@ export const useGuestForm = props => { ...address, // Cleans up the street array when values are null or undefined street: address.street.filter(e => e), - // region_id is used for field select and region is used for field input - region: region.region_id || region.region, country_code: country } } diff --git a/packages/venia-ui/lib/components/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/customerForm.spec.js.snap b/packages/venia-ui/lib/components/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/customerForm.spec.js.snap index a9386251495..7adb4bf3d0f 100644 --- a/packages/venia-ui/lib/components/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/customerForm.spec.js.snap +++ b/packages/venia-ui/lib/components/CheckoutPage/ShippingInformation/AddressForm/__tests__/__snapshots__/customerForm.spec.js.snap @@ -351,8 +351,8 @@ Array [ fieldInput="region[region]" fieldSelect="region[region_id]" optionValueKey="id" - validate={[Function]} /> +
+
+
+
+
+
+
{ ); + const createErrorMessage = JSON.stringify( + errors.get('createCustomerAddressMutation') + ); + const updateErrorMessage = JSON.stringify( + errors.get('updateCustomerAddressMutation') + ); + const errorMessage = 'region_id is required for the specified country code'; + const regionError = + createErrorMessage?.includes(errorMessage) || + updateErrorMessage?.includes(errorMessage); + + // errors return ( @@ -257,9 +269,10 @@ const CustomerForm = props => { />
+
{ defaultMessage: 'State Required' })} /> + {regionError ? ( + +
+ +
+
+ ) : ( + '' + )}
+
{ } }, [addToast, formatMessage, showSignInToast, handleToastAction]); + const shippingAddressError = JSON.stringify( + errors.get('setGuestShippingMutation') + ); + + const errorMessage = 'Region is required'; + const regionError = shippingAddressError?.includes(errorMessage); + return ( @@ -304,11 +311,11 @@ const GuestForm = props => {
{ defaultMessage: 'State Required' })} /> + {regionError ? ( + +
+ +
+
+ ) : ( + '' + )}
{ const { classes: propClasses, + regionError, countryCodeField, fieldInput, fieldSelect, @@ -47,13 +48,19 @@ const Region = props => { const regionField = regions.length || loading ? (