@magento/peregrine 12.0.0 → 12.2.0-alpha.1
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/lib/Apollo/clearCartDataFromCache.js +11 -12
- package/lib/Apollo/clearCustomerDataFromCache.js +15 -8
- package/lib/Apollo/policies/index.js +35 -3
- package/lib/Toasts/useToasts.js +5 -0
- package/lib/context/cart.js +21 -1
- package/lib/hooks/useCustomerWishlistSkus/customerWishlist.gql.ce.js +3 -3
- package/lib/store/actions/cart/asyncActions.js +2 -3
- package/lib/store/actions/user/asyncActions.js +2 -4
- package/lib/store/reducers/catalog.js +7 -7
- package/lib/store/reducers/user.js +1 -3
- package/lib/talons/Adapter/useAdapter.js +80 -11
- package/lib/talons/AddToCartDialog/addToCartDialog.gql.js +2 -2
- package/lib/talons/AddressBookPage/addressBookPage.gql.js +3 -9
- package/lib/talons/Breadcrumbs/breadcrumbs.gql.js +16 -12
- package/lib/talons/Breadcrumbs/useBreadcrumbs.js +6 -4
- package/lib/talons/CartPage/GiftCards/giftCardQueries.gql.ee.js +2 -2
- package/lib/talons/CartPage/PriceAdjustments/CouponCode/couponCode.gql.js +2 -3
- package/lib/talons/CartPage/PriceAdjustments/ShippingMethods/shippingMethods.gql.js +1 -1
- package/lib/talons/CartPage/PriceSummary/priceSummaryFragments.gql.js +2 -1
- package/lib/talons/CartPage/ProductListing/EditModal/__fixtures__/configurableProduct.js +1 -0
- package/lib/talons/CartPage/ProductListing/EditModal/productForm.gql.js +10 -7
- package/lib/talons/CartPage/ProductListing/EditModal/productFormFragment.gql.js +7 -3
- package/lib/talons/CartPage/ProductListing/EditModal/useProductForm.js +3 -2
- package/lib/talons/CartPage/ProductListing/product.gql.js +2 -1
- package/lib/talons/CartPage/ProductListing/productListing.gql.ce.js +2 -1
- package/lib/talons/CartPage/ProductListing/productListing.gql.ee.js +2 -1
- package/lib/talons/CartPage/ProductListing/productListingFragments.gql.js +15 -5
- package/lib/talons/CartPage/ProductListing/useProduct.js +12 -5
- package/lib/talons/CartPage/ProductListing/useProductListing.js +4 -2
- package/lib/talons/CartPage/useCartPage.js +4 -3
- package/lib/talons/CategoryList/categoryList.gql.js +25 -17
- package/lib/talons/CategoryList/useCategoryList.js +6 -1
- package/lib/talons/CategoryList/useCategoryTile.js +2 -0
- package/lib/talons/CategoryTree/categoryTree.gql.js +18 -12
- package/lib/talons/CategoryTree/useCategoryBranch.js +1 -1
- package/lib/talons/CategoryTree/useCategoryTree.js +5 -5
- package/lib/talons/CheckoutPage/AddressBook/addressBook.gql.js +1 -1
- package/lib/talons/CheckoutPage/BillingAddress/billingAddress.gql.js +1 -1
- package/lib/talons/CheckoutPage/ItemsReview/__fixtures__/cartItems.js +12 -12
- package/lib/talons/CheckoutPage/ItemsReview/itemsReview.gql.js +2 -1
- package/lib/talons/CheckoutPage/ItemsReview/itemsReviewFragments.gql.js +11 -5
- package/lib/talons/CheckoutPage/OrderConfirmationPage/createAccount.gql.js +12 -6
- package/lib/talons/CheckoutPage/PaymentInformation/creditCard.gql.js +2 -2
- package/lib/talons/CheckoutPage/PaymentInformation/paymentInformation.gql.js +2 -2
- package/lib/talons/CheckoutPage/ShippingInformation/AddressForm/customerForm.gql.js +3 -5
- package/lib/talons/CheckoutPage/ShippingInformation/AddressForm/guestForm.gql.js +12 -4
- package/lib/talons/CheckoutPage/ShippingInformation/AddressForm/useGuestForm.js +45 -5
- package/lib/talons/CheckoutPage/ShippingInformation/shippingInformation.gql.js +2 -2
- package/lib/talons/CheckoutPage/ShippingMethod/shippingMethod.gql.js +1 -1
- package/lib/talons/CheckoutPage/checkoutPage.gql.js +2 -2
- package/lib/talons/CheckoutPage/checkoutPageFragments.gql.js +4 -2
- package/lib/talons/CheckoutPage/useCheckoutPage.js +5 -2
- package/lib/talons/Cms/cmsPage.gql.js +0 -4
- package/lib/talons/Cms/useCmsPage.js +6 -23
- package/lib/talons/CommunicationsPage/communicationsPage.gql.js +2 -2
- package/lib/talons/ContactPage/contactUs.gql.js +48 -0
- package/lib/talons/ContactPage/index.js +2 -0
- package/lib/talons/ContactPage/useContactLink.js +27 -0
- package/lib/talons/ContactPage/useContactPage.js +85 -0
- package/lib/talons/CreateAccount/createAccount.gql.js +15 -8
- package/lib/talons/CreateAccount/useCreateAccount.js +2 -4
- package/lib/talons/Footer/footer.gql.js +2 -1
- package/lib/talons/FormError/useFormError.js +9 -7
- package/lib/talons/Gallery/__fixtures__/apolloMocks.js +2 -2
- package/lib/talons/Gallery/gallery.gql.ce.js +2 -1
- package/lib/talons/Gallery/gallery.gql.ee.js +2 -1
- package/lib/talons/Gallery/useAddToCartButton.js +28 -13
- package/lib/talons/Header/storeSwitcher.gql.js +21 -9
- package/lib/talons/Header/useCartTrigger.js +3 -3
- package/lib/talons/Header/useStoreSwitcher.js +10 -8
- package/lib/talons/MagentoRoute/magentoRoute.gql.js +4 -2
- package/lib/talons/MagentoRoute/useMagentoRoute.js +39 -33
- package/lib/talons/MegaMenu/megaMenu.gql.js +10 -5
- package/lib/talons/MegaMenu/useMegaMenu.js +3 -5
- package/lib/talons/MegaMenu/useMegaMenuItem.js +5 -0
- package/lib/talons/MiniCart/ProductList/productListFragments.gql.js +11 -5
- package/lib/talons/MiniCart/miniCart.gql.js +2 -1
- package/lib/talons/MiniCart/useItem.js +3 -3
- package/lib/talons/MiniCart/useMiniCart.js +8 -7
- package/lib/talons/Navigation/navigation.gql.js +4 -3
- package/lib/talons/Navigation/useNavigation.js +1 -1
- package/lib/talons/Newsletter/newsletter.gql.js +24 -0
- package/lib/talons/Newsletter/useNewsletter.js +70 -0
- package/lib/talons/OrderHistoryPage/orderHistoryContext.gql.js +2 -1
- package/lib/talons/OrderHistoryPage/orderHistoryPage.gql.js +1 -1
- package/lib/talons/OrderHistoryPage/orderRow.gql.js +7 -3
- package/lib/talons/ProductFullDetail/CustomAttributes/AttributeType/useAttributeType.js +26 -0
- package/lib/talons/ProductFullDetail/productFullDetail.gql.ce.js +4 -3
- package/lib/talons/ProductFullDetail/productFullDetail.gql.ee.js +2 -1
- package/lib/talons/ProductFullDetail/useProductFullDetail.js +35 -3
- package/lib/talons/RootComponents/Category/category.gql.js +7 -4
- package/lib/talons/RootComponents/Category/categoryContent.gql.js +26 -7
- package/lib/talons/RootComponents/Category/categoryFragments.gql.js +5 -2
- package/lib/talons/RootComponents/Category/useCategory.js +8 -6
- package/lib/talons/RootComponents/Category/useCategoryContent.js +30 -3
- package/lib/talons/RootComponents/Category/useNoProductsFound.js +0 -1
- package/lib/talons/RootComponents/Product/product.gql.js +3 -1
- package/lib/talons/RootComponents/Product/productDetailFragment.gql.js +69 -10
- package/lib/talons/SearchPage/searchPage.gql.js +18 -2
- package/lib/talons/SearchPage/useSearchPage.js +25 -0
- package/lib/talons/SignIn/signIn.gql.js +4 -3
- package/lib/talons/SignIn/useSignIn.js +2 -4
- package/lib/talons/Wishlist/WishlistDialog/wishlistDialog.gql.js +3 -2
- package/lib/talons/WishlistPage/createWishlist.gql.js +2 -1
- package/lib/talons/WishlistPage/useWishlistItem.js +2 -2
- package/lib/talons/WishlistPage/wishlist.gql.js +2 -2
- package/lib/talons/WishlistPage/wishlistConfig.gql.ce.js +2 -1
- package/lib/talons/WishlistPage/wishlistConfig.gql.ee.js +2 -1
- package/lib/talons/WishlistPage/wishlistItemFragments.gql.js +5 -2
- package/lib/talons/WishlistPage/wishlistPage.gql.js +1 -1
- package/package.json +6 -6
- package/lib/Apollo/clearStore.js +0 -26
- package/lib/Apollo/deleteCacheEntry.js +0 -87
|
@@ -19,8 +19,10 @@ export const CREATE_ACCOUNT = gql`
|
|
|
19
19
|
) {
|
|
20
20
|
# The createCustomer mutation returns a non-nullable CustomerOutput type
|
|
21
21
|
# which requires that at least one of the sub fields be returned.
|
|
22
|
+
|
|
23
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
22
24
|
customer {
|
|
23
|
-
|
|
25
|
+
email
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
}
|
|
@@ -28,8 +30,8 @@ export const CREATE_ACCOUNT = gql`
|
|
|
28
30
|
|
|
29
31
|
export const GET_CUSTOMER = gql`
|
|
30
32
|
query GetCustomerAfterCheckout {
|
|
33
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
31
34
|
customer {
|
|
32
|
-
id
|
|
33
35
|
email
|
|
34
36
|
firstname
|
|
35
37
|
lastname
|
|
@@ -56,15 +58,17 @@ export const GET_CART_DETAILS = gql`
|
|
|
56
58
|
query GetCartDetailsAfterCheckout($cartId: String!) {
|
|
57
59
|
cart(cart_id: $cartId) {
|
|
58
60
|
id
|
|
61
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
59
62
|
items {
|
|
60
|
-
|
|
63
|
+
uid
|
|
61
64
|
prices {
|
|
62
65
|
price {
|
|
63
66
|
value
|
|
64
67
|
}
|
|
65
68
|
}
|
|
69
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
66
70
|
product {
|
|
67
|
-
|
|
71
|
+
uid
|
|
68
72
|
name
|
|
69
73
|
sku
|
|
70
74
|
small_image {
|
|
@@ -80,11 +84,13 @@ export const GET_CART_DETAILS = gql`
|
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
86
|
quantity
|
|
87
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
83
88
|
... on ConfigurableCartItem {
|
|
89
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
84
90
|
configurable_options {
|
|
85
|
-
|
|
91
|
+
configurable_product_option_uid
|
|
86
92
|
option_label
|
|
87
|
-
|
|
93
|
+
configurable_product_option_value_uid
|
|
88
94
|
value_label
|
|
89
95
|
}
|
|
90
96
|
}
|
|
@@ -99,7 +99,7 @@ export const SET_BILLING_ADDRESS = gql`
|
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
|
-
)
|
|
102
|
+
) {
|
|
103
103
|
cart {
|
|
104
104
|
id
|
|
105
105
|
billing_address {
|
|
@@ -143,7 +143,7 @@ export const SET_CC_DETAILS_ON_CART = gql`
|
|
|
143
143
|
}
|
|
144
144
|
}
|
|
145
145
|
}
|
|
146
|
-
)
|
|
146
|
+
) {
|
|
147
147
|
cart {
|
|
148
148
|
id
|
|
149
149
|
selected_payment_method {
|
|
@@ -76,7 +76,7 @@ export const SET_BILLING_ADDRESS = gql`
|
|
|
76
76
|
}
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
|
-
)
|
|
79
|
+
) {
|
|
80
80
|
cart {
|
|
81
81
|
id
|
|
82
82
|
billing_address {
|
|
@@ -107,7 +107,7 @@ export const SET_FREE_PAYMENT_METHOD_ON_CART = gql`
|
|
|
107
107
|
mutation setPaymentMethodOnCart($cartId: String!) {
|
|
108
108
|
setPaymentMethodOnCart(
|
|
109
109
|
input: { cart_id: $cartId, payment_method: { code: "free" } }
|
|
110
|
-
)
|
|
110
|
+
) {
|
|
111
111
|
cart {
|
|
112
112
|
id
|
|
113
113
|
selected_payment_method {
|
|
@@ -6,8 +6,7 @@ import { GET_DEFAULT_SHIPPING } from '../shippingInformation.gql';
|
|
|
6
6
|
|
|
7
7
|
export const CREATE_CUSTOMER_ADDRESS_MUTATION = gql`
|
|
8
8
|
mutation CreateCustomerAddress($address: CustomerAddressInput!) {
|
|
9
|
-
createCustomerAddress(input: $address)
|
|
10
|
-
@connection(key: "createCustomerAddress") {
|
|
9
|
+
createCustomerAddress(input: $address) {
|
|
11
10
|
id
|
|
12
11
|
...CustomerAddressFragment
|
|
13
12
|
}
|
|
@@ -27,8 +26,7 @@ export const UPDATE_CUSTOMER_ADDRESS_MUTATION = gql`
|
|
|
27
26
|
$addressId: Int!
|
|
28
27
|
$address: CustomerAddressInput!
|
|
29
28
|
) {
|
|
30
|
-
updateCustomerAddress(id: $addressId, input: $address)
|
|
31
|
-
@connection(key: "updateCustomerAddress") {
|
|
29
|
+
updateCustomerAddress(id: $addressId, input: $address) {
|
|
32
30
|
id
|
|
33
31
|
}
|
|
34
32
|
}
|
|
@@ -36,8 +34,8 @@ export const UPDATE_CUSTOMER_ADDRESS_MUTATION = gql`
|
|
|
36
34
|
|
|
37
35
|
export const GET_CUSTOMER_QUERY = gql`
|
|
38
36
|
query GetCustomer {
|
|
37
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
39
38
|
customer {
|
|
40
|
-
id
|
|
41
39
|
default_shipping
|
|
42
40
|
email
|
|
43
41
|
firstname
|
|
@@ -11,8 +11,7 @@ export const SET_GUEST_SHIPPING_MUTATION = gql`
|
|
|
11
11
|
$email: String!
|
|
12
12
|
$address: CartAddressInput!
|
|
13
13
|
) {
|
|
14
|
-
setGuestEmailOnCart(input: { cart_id: $cartId, email: $email })
|
|
15
|
-
@connection(key: "setGuestEmailOnCart") {
|
|
14
|
+
setGuestEmailOnCart(input: { cart_id: $cartId, email: $email }) {
|
|
16
15
|
cart {
|
|
17
16
|
id
|
|
18
17
|
}
|
|
@@ -23,7 +22,7 @@ export const SET_GUEST_SHIPPING_MUTATION = gql`
|
|
|
23
22
|
cart_id: $cartId
|
|
24
23
|
shipping_addresses: [{ address: $address }]
|
|
25
24
|
}
|
|
26
|
-
)
|
|
25
|
+
) {
|
|
27
26
|
cart {
|
|
28
27
|
id
|
|
29
28
|
...ShippingInformationFragment
|
|
@@ -39,6 +38,15 @@ export const SET_GUEST_SHIPPING_MUTATION = gql`
|
|
|
39
38
|
${AvailablePaymentMethodsFragment}
|
|
40
39
|
`;
|
|
41
40
|
|
|
41
|
+
export const GET_EMAIL_AVAILABLE_QUERY = gql`
|
|
42
|
+
query IsEmailAvailable($email: String!) {
|
|
43
|
+
isEmailAvailable(email: $email) {
|
|
44
|
+
is_email_available
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
`;
|
|
48
|
+
|
|
42
49
|
export default {
|
|
43
|
-
setGuestShippingMutation: SET_GUEST_SHIPPING_MUTATION
|
|
50
|
+
setGuestShippingMutation: SET_GUEST_SHIPPING_MUTATION,
|
|
51
|
+
getEmailAvailableQuery: GET_EMAIL_AVAILABLE_QUERY
|
|
44
52
|
};
|
|
@@ -1,15 +1,23 @@
|
|
|
1
|
-
import { useCallback, useMemo } from 'react';
|
|
2
|
-
import { useMutation } from '@apollo/client';
|
|
1
|
+
import { useCallback, useMemo, useState, useEffect } from 'react';
|
|
2
|
+
import { useMutation, useLazyQuery } from '@apollo/client';
|
|
3
3
|
import DEFAULT_OPERATIONS from './guestForm.gql';
|
|
4
4
|
import mergeOperations from '@magento/peregrine/lib/util/shallowMerge';
|
|
5
5
|
|
|
6
6
|
import { useCartContext } from '../../../../context/cart';
|
|
7
7
|
|
|
8
8
|
export const useGuestForm = props => {
|
|
9
|
-
const {
|
|
9
|
+
const {
|
|
10
|
+
afterSubmit,
|
|
11
|
+
onCancel,
|
|
12
|
+
onSuccess,
|
|
13
|
+
shippingData,
|
|
14
|
+
toggleSignInContent,
|
|
15
|
+
setGuestSignInUsername
|
|
16
|
+
} = props;
|
|
17
|
+
const [showSignInToast, setShowSignInToast] = useState(false);
|
|
10
18
|
|
|
11
19
|
const operations = mergeOperations(DEFAULT_OPERATIONS, props.operations);
|
|
12
|
-
const { setGuestShippingMutation } = operations;
|
|
20
|
+
const { setGuestShippingMutation, getEmailAvailableQuery } = operations;
|
|
13
21
|
|
|
14
22
|
const [{ cartId }] = useCartContext();
|
|
15
23
|
|
|
@@ -22,6 +30,10 @@ export const useGuestForm = props => {
|
|
|
22
30
|
}
|
|
23
31
|
);
|
|
24
32
|
|
|
33
|
+
const [runQuery, { data }] = useLazyQuery(getEmailAvailableQuery, {
|
|
34
|
+
fetchPolicy: 'cache-and-network'
|
|
35
|
+
});
|
|
36
|
+
|
|
25
37
|
const { country } = shippingData;
|
|
26
38
|
const { code: countryCode } = country;
|
|
27
39
|
|
|
@@ -66,17 +78,45 @@ export const useGuestForm = props => {
|
|
|
66
78
|
onCancel();
|
|
67
79
|
}, [onCancel]);
|
|
68
80
|
|
|
81
|
+
const handleValidateEmail = useCallback(
|
|
82
|
+
email => {
|
|
83
|
+
setShowSignInToast(false);
|
|
84
|
+
if (email && email.includes('@')) {
|
|
85
|
+
runQuery({ variables: { email } });
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
[runQuery]
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
const handleToastAction = useCallback(
|
|
92
|
+
(removeToast, email) => {
|
|
93
|
+
setGuestSignInUsername(email);
|
|
94
|
+
toggleSignInContent();
|
|
95
|
+
removeToast();
|
|
96
|
+
},
|
|
97
|
+
[setGuestSignInUsername, toggleSignInContent]
|
|
98
|
+
);
|
|
99
|
+
|
|
69
100
|
const errors = useMemo(
|
|
70
101
|
() => new Map([['setGuestShippingMutation', error]]),
|
|
71
102
|
[error]
|
|
72
103
|
);
|
|
73
104
|
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
if (data) {
|
|
107
|
+
setShowSignInToast(!data.isEmailAvailable.is_email_available);
|
|
108
|
+
}
|
|
109
|
+
}, [data]);
|
|
110
|
+
|
|
74
111
|
return {
|
|
75
112
|
errors,
|
|
76
113
|
handleCancel,
|
|
77
114
|
handleSubmit,
|
|
115
|
+
handleValidateEmail,
|
|
116
|
+
handleToastAction,
|
|
78
117
|
initialValues,
|
|
79
118
|
isSaving: loading,
|
|
80
|
-
isUpdate
|
|
119
|
+
isUpdate,
|
|
120
|
+
showSignInToast
|
|
81
121
|
};
|
|
82
122
|
};
|
|
@@ -17,8 +17,8 @@ export const GET_SHIPPING_INFORMATION = gql`
|
|
|
17
17
|
|
|
18
18
|
export const GET_DEFAULT_SHIPPING = gql`
|
|
19
19
|
query GetDefaultShipping {
|
|
20
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
20
21
|
customer {
|
|
21
|
-
id
|
|
22
22
|
default_shipping
|
|
23
23
|
}
|
|
24
24
|
}
|
|
@@ -31,7 +31,7 @@ export const SET_CUSTOMER_ADDRESS_ON_CART = gql`
|
|
|
31
31
|
cart_id: $cartId
|
|
32
32
|
shipping_addresses: [{ customer_address_id: $addressId }]
|
|
33
33
|
}
|
|
34
|
-
)
|
|
34
|
+
) {
|
|
35
35
|
cart {
|
|
36
36
|
id
|
|
37
37
|
...ShippingInformationFragment
|
|
@@ -33,7 +33,7 @@ export const SET_SHIPPING_METHOD = gql`
|
|
|
33
33
|
) {
|
|
34
34
|
setShippingMethodsOnCart(
|
|
35
35
|
input: { cart_id: $cartId, shipping_methods: [$shippingMethod] }
|
|
36
|
-
)
|
|
36
|
+
) {
|
|
37
37
|
cart {
|
|
38
38
|
id
|
|
39
39
|
# If this mutation causes "free" to become available we need to know.
|
|
@@ -12,7 +12,7 @@ export const CREATE_CART = gql`
|
|
|
12
12
|
|
|
13
13
|
export const PLACE_ORDER = gql`
|
|
14
14
|
mutation placeOrder($cartId: String!) {
|
|
15
|
-
placeOrder(input: { cart_id: $cartId })
|
|
15
|
+
placeOrder(input: { cart_id: $cartId }) {
|
|
16
16
|
order {
|
|
17
17
|
order_number
|
|
18
18
|
}
|
|
@@ -44,8 +44,8 @@ export const GET_CHECKOUT_DETAILS = gql`
|
|
|
44
44
|
|
|
45
45
|
export const GET_CUSTOMER = gql`
|
|
46
46
|
query GetCustomerForCheckout {
|
|
47
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
47
48
|
customer {
|
|
48
|
-
id
|
|
49
49
|
default_shipping
|
|
50
50
|
firstname
|
|
51
51
|
}
|
|
@@ -3,10 +3,12 @@ import { gql } from '@apollo/client';
|
|
|
3
3
|
export const CheckoutPageFragment = gql`
|
|
4
4
|
fragment CheckoutPageFragment on Cart {
|
|
5
5
|
id
|
|
6
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
6
7
|
items {
|
|
7
|
-
|
|
8
|
+
uid
|
|
9
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
8
10
|
product {
|
|
9
|
-
|
|
11
|
+
uid
|
|
10
12
|
stock_status
|
|
11
13
|
}
|
|
12
14
|
}
|
|
@@ -6,7 +6,6 @@ import {
|
|
|
6
6
|
useQuery
|
|
7
7
|
} from '@apollo/client';
|
|
8
8
|
|
|
9
|
-
import { clearCartDataFromCache } from '../../Apollo/clearCartDataFromCache';
|
|
10
9
|
import { useUserContext } from '../../context/user';
|
|
11
10
|
import { useCartContext } from '../../context/cart';
|
|
12
11
|
|
|
@@ -88,6 +87,8 @@ export const useCheckoutPage = (props = {}) => {
|
|
|
88
87
|
const [checkoutStep, setCheckoutStep] = useState(
|
|
89
88
|
CHECKOUT_STEP.SHIPPING_ADDRESS
|
|
90
89
|
);
|
|
90
|
+
const [guestSignInUsername, setGuestSignInUsername] = useState('');
|
|
91
|
+
|
|
91
92
|
const [{ isSignedIn }] = useUserContext();
|
|
92
93
|
const [{ cartId }, { createCart, removeCart }] = useCartContext();
|
|
93
94
|
|
|
@@ -246,7 +247,7 @@ export const useCheckoutPage = (props = {}) => {
|
|
|
246
247
|
});
|
|
247
248
|
// Cleanup stale cart and customer info.
|
|
248
249
|
await removeCart();
|
|
249
|
-
await
|
|
250
|
+
await apolloClient.clearCacheData(apolloClient, 'cart');
|
|
250
251
|
|
|
251
252
|
await createCart({
|
|
252
253
|
fetchCartId
|
|
@@ -285,6 +286,7 @@ export const useCheckoutPage = (props = {}) => {
|
|
|
285
286
|
checkoutStep,
|
|
286
287
|
customer,
|
|
287
288
|
error: checkoutError,
|
|
289
|
+
guestSignInUsername,
|
|
288
290
|
handlePlaceOrder,
|
|
289
291
|
hasError: !!checkoutError,
|
|
290
292
|
isCartEmpty: !(checkoutData && checkoutData.cart.total_quantity),
|
|
@@ -298,6 +300,7 @@ export const useCheckoutPage = (props = {}) => {
|
|
|
298
300
|
null,
|
|
299
301
|
placeOrderLoading,
|
|
300
302
|
setCheckoutStep,
|
|
303
|
+
setGuestSignInUsername,
|
|
301
304
|
setIsUpdating,
|
|
302
305
|
setShippingInformationDone,
|
|
303
306
|
setShippingMethodDone,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useEffect
|
|
1
|
+
import { useEffect } from 'react';
|
|
2
2
|
import { useQuery } from '@apollo/client';
|
|
3
3
|
|
|
4
4
|
import mergeOperations from '../../util/shallowMerge';
|
|
@@ -9,11 +9,10 @@ import DEFAULT_OPERATIONS from './cmsPage.gql';
|
|
|
9
9
|
/**
|
|
10
10
|
* Retrieves data necessary to render a CMS Page
|
|
11
11
|
*
|
|
12
|
-
* @param {
|
|
13
|
-
* @param {
|
|
14
|
-
* @param {
|
|
15
|
-
* @
|
|
16
|
-
* @returns {{shouldShowLoadingIndicator: *, hasContent: *, cmsPage: *, error: *}}
|
|
12
|
+
* @param {{identifier}} props
|
|
13
|
+
* @param {String} props.identifier - CMS Page Identifier
|
|
14
|
+
* @param {Object} props.operations - Collection of GraphQL queries
|
|
15
|
+
* @returns {{cmsPage: *, shouldShowLoadingIndicator: *}}
|
|
17
16
|
*/
|
|
18
17
|
export const useCmsPage = props => {
|
|
19
18
|
const { identifier } = props;
|
|
@@ -21,7 +20,7 @@ export const useCmsPage = props => {
|
|
|
21
20
|
const operations = mergeOperations(DEFAULT_OPERATIONS, props.operations);
|
|
22
21
|
const { getCMSPageQuery } = operations;
|
|
23
22
|
|
|
24
|
-
const { loading,
|
|
23
|
+
const { loading, data } = useQuery(getCMSPageQuery, {
|
|
25
24
|
variables: {
|
|
26
25
|
identifier: identifier
|
|
27
26
|
},
|
|
@@ -51,25 +50,9 @@ export const useCmsPage = props => {
|
|
|
51
50
|
const shouldShowLoadingIndicator = loading && !data;
|
|
52
51
|
|
|
53
52
|
const cmsPage = data ? data.cmsPage : null;
|
|
54
|
-
const rootCategoryId = data ? data.storeConfig.root_category_id : null;
|
|
55
|
-
|
|
56
|
-
// Only render <RichContent /> if the page isn't empty and doesn't contain
|
|
57
|
-
// the default CMS Page text. We do this so there is at least a useable home
|
|
58
|
-
// page by default, the category list component.
|
|
59
|
-
const hasContent = useMemo(() => {
|
|
60
|
-
return (
|
|
61
|
-
cmsPage &&
|
|
62
|
-
cmsPage.content &&
|
|
63
|
-
cmsPage.content.length > 0 &&
|
|
64
|
-
!cmsPage.content.includes('CMS homepage content goes here.')
|
|
65
|
-
);
|
|
66
|
-
}, [cmsPage]);
|
|
67
53
|
|
|
68
54
|
return {
|
|
69
55
|
cmsPage,
|
|
70
|
-
error,
|
|
71
|
-
hasContent,
|
|
72
|
-
rootCategoryId,
|
|
73
56
|
shouldShowLoadingIndicator
|
|
74
57
|
};
|
|
75
58
|
};
|
|
@@ -3,8 +3,8 @@ import { gql } from '@apollo/client';
|
|
|
3
3
|
export const SET_NEWSLETTER_SUBSCRIPTION = gql`
|
|
4
4
|
mutation SetNewsletterSubscription($isSubscribed: Boolean!) {
|
|
5
5
|
updateCustomer(input: { is_subscribed: $isSubscribed }) {
|
|
6
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
6
7
|
customer {
|
|
7
|
-
id
|
|
8
8
|
is_subscribed
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -13,8 +13,8 @@ export const SET_NEWSLETTER_SUBSCRIPTION = gql`
|
|
|
13
13
|
|
|
14
14
|
export const GET_CUSTOMER_SUBSCRIPTION = gql`
|
|
15
15
|
query GetCustomerSubscription {
|
|
16
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
16
17
|
customer {
|
|
17
|
-
id
|
|
18
18
|
is_subscribed
|
|
19
19
|
}
|
|
20
20
|
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { gql } from '@apollo/client';
|
|
2
|
+
|
|
3
|
+
export const SUBMIT_CONTACT_FORM = gql`
|
|
4
|
+
mutation SubmitContactForm(
|
|
5
|
+
$name: String!
|
|
6
|
+
$email: String!
|
|
7
|
+
$comment: String!
|
|
8
|
+
$telephone: String
|
|
9
|
+
) {
|
|
10
|
+
contactUs(
|
|
11
|
+
input: {
|
|
12
|
+
name: $name
|
|
13
|
+
email: $email
|
|
14
|
+
comment: $comment
|
|
15
|
+
telephone: $telephone
|
|
16
|
+
}
|
|
17
|
+
) {
|
|
18
|
+
status
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
`;
|
|
22
|
+
|
|
23
|
+
export const GET_STORE_CONFIG_DATA = gql`
|
|
24
|
+
query GetStoreConfigForContactUs {
|
|
25
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
26
|
+
storeConfig {
|
|
27
|
+
store_code
|
|
28
|
+
contact_enabled
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
`;
|
|
32
|
+
|
|
33
|
+
export const GET_CONTACT_PAGE_CMS_BLOCKS = gql`
|
|
34
|
+
query GetContactPageCmsBlocks($cmsBlockIdentifiers: [String]) {
|
|
35
|
+
cmsBlocks(identifiers: $cmsBlockIdentifiers) {
|
|
36
|
+
items {
|
|
37
|
+
content
|
|
38
|
+
identifier
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
`;
|
|
43
|
+
|
|
44
|
+
export default {
|
|
45
|
+
contactMutation: SUBMIT_CONTACT_FORM,
|
|
46
|
+
getStoreConfigQuery: GET_STORE_CONFIG_DATA,
|
|
47
|
+
getContactPageCmsBlocksQuery: GET_CONTACT_PAGE_CMS_BLOCKS
|
|
48
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useQuery } from '@apollo/client';
|
|
3
|
+
import mergeOperations from '@magento/peregrine/lib/util/shallowMerge';
|
|
4
|
+
import DEFAULT_OPERATIONS from './contactUs.gql';
|
|
5
|
+
|
|
6
|
+
export default (props = {}) => {
|
|
7
|
+
const { getStoreConfigQuery } = mergeOperations(
|
|
8
|
+
DEFAULT_OPERATIONS,
|
|
9
|
+
props.operations
|
|
10
|
+
);
|
|
11
|
+
|
|
12
|
+
const { data: storeConfigData, loading: configLoading } = useQuery(
|
|
13
|
+
getStoreConfigQuery,
|
|
14
|
+
{
|
|
15
|
+
fetchPolicy: 'cache-and-network'
|
|
16
|
+
}
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
const isEnabled = useMemo(() => {
|
|
20
|
+
return !!storeConfigData?.storeConfig?.contact_enabled;
|
|
21
|
+
}, [storeConfigData]);
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
isEnabled,
|
|
25
|
+
isLoading: configLoading
|
|
26
|
+
};
|
|
27
|
+
};
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { useCallback, useRef, useMemo } from 'react';
|
|
2
|
+
import { useMutation, useQuery } from '@apollo/client';
|
|
3
|
+
import mergeOperations from '@magento/peregrine/lib/util/shallowMerge';
|
|
4
|
+
import DEFAULT_OPERATIONS from './contactUs.gql';
|
|
5
|
+
|
|
6
|
+
export default props => {
|
|
7
|
+
const { cmsBlockIdentifiers = [], operations } = props;
|
|
8
|
+
const {
|
|
9
|
+
contactMutation,
|
|
10
|
+
getStoreConfigQuery,
|
|
11
|
+
getContactPageCmsBlocksQuery
|
|
12
|
+
} = mergeOperations(DEFAULT_OPERATIONS, operations);
|
|
13
|
+
|
|
14
|
+
const formApiRef = useRef(null);
|
|
15
|
+
|
|
16
|
+
const [
|
|
17
|
+
submitForm,
|
|
18
|
+
{ data, error: contactError, loading: submitLoading }
|
|
19
|
+
] = useMutation(contactMutation, {
|
|
20
|
+
fetchPolicy: 'no-cache'
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const { data: storeConfigData, loading: configLoading } = useQuery(
|
|
24
|
+
getStoreConfigQuery,
|
|
25
|
+
{
|
|
26
|
+
fetchPolicy: 'cache-and-network'
|
|
27
|
+
}
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
const { data: cmsBlocksData, loading: cmsBlocksLoading } = useQuery(
|
|
31
|
+
getContactPageCmsBlocksQuery,
|
|
32
|
+
{
|
|
33
|
+
variables: {
|
|
34
|
+
cmsBlockIdentifiers
|
|
35
|
+
},
|
|
36
|
+
fetchPolicy: 'cache-and-network'
|
|
37
|
+
}
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
const isEnabled = useMemo(() => {
|
|
41
|
+
return !!storeConfigData?.storeConfig?.contact_enabled;
|
|
42
|
+
}, [storeConfigData]);
|
|
43
|
+
|
|
44
|
+
const cmsBlocks = useMemo(() => {
|
|
45
|
+
return cmsBlocksData?.cmsBlocks?.items || [];
|
|
46
|
+
}, [cmsBlocksData]);
|
|
47
|
+
|
|
48
|
+
const setFormApi = useCallback(api => (formApiRef.current = api), []);
|
|
49
|
+
const handleSubmit = useCallback(
|
|
50
|
+
async ({ name, email, comment, telephone }) => {
|
|
51
|
+
try {
|
|
52
|
+
await submitForm({
|
|
53
|
+
variables: {
|
|
54
|
+
name,
|
|
55
|
+
email,
|
|
56
|
+
comment,
|
|
57
|
+
telephone
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
if (formApiRef.current) {
|
|
61
|
+
formApiRef.current.reset();
|
|
62
|
+
}
|
|
63
|
+
} catch (error) {
|
|
64
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
65
|
+
console.error(error);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
},
|
|
69
|
+
[submitForm]
|
|
70
|
+
);
|
|
71
|
+
const errors = useMemo(() => new Map([['contactMutation', contactError]]), [
|
|
72
|
+
contactError
|
|
73
|
+
]);
|
|
74
|
+
|
|
75
|
+
return {
|
|
76
|
+
isEnabled,
|
|
77
|
+
cmsBlocks,
|
|
78
|
+
errors,
|
|
79
|
+
handleSubmit,
|
|
80
|
+
isBusy: submitLoading,
|
|
81
|
+
isLoading: configLoading && cmsBlocksLoading,
|
|
82
|
+
setFormApi,
|
|
83
|
+
response: data && data.contactUs
|
|
84
|
+
};
|
|
85
|
+
};
|
|
@@ -20,8 +20,10 @@ export const CREATE_ACCOUNT = gql`
|
|
|
20
20
|
) {
|
|
21
21
|
# The createCustomer mutation returns a non-nullable CustomerOutput type
|
|
22
22
|
# which requires that at least one of the sub fields be returned.
|
|
23
|
+
|
|
24
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
23
25
|
customer {
|
|
24
|
-
|
|
26
|
+
email
|
|
25
27
|
}
|
|
26
28
|
}
|
|
27
29
|
}
|
|
@@ -29,8 +31,8 @@ export const CREATE_ACCOUNT = gql`
|
|
|
29
31
|
|
|
30
32
|
export const GET_CUSTOMER = gql`
|
|
31
33
|
query GetCustomerAfterCreate {
|
|
34
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
32
35
|
customer {
|
|
33
|
-
id
|
|
34
36
|
email
|
|
35
37
|
firstname
|
|
36
38
|
lastname
|
|
@@ -57,15 +59,17 @@ export const GET_CART_DETAILS = gql`
|
|
|
57
59
|
query GetCartDetailsAfterAccountCreation($cartId: String!) {
|
|
58
60
|
cart(cart_id: $cartId) {
|
|
59
61
|
id
|
|
62
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
60
63
|
items {
|
|
61
|
-
|
|
64
|
+
uid
|
|
62
65
|
prices {
|
|
63
66
|
price {
|
|
64
67
|
value
|
|
65
68
|
}
|
|
66
69
|
}
|
|
70
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
67
71
|
product {
|
|
68
|
-
|
|
72
|
+
uid
|
|
69
73
|
name
|
|
70
74
|
sku
|
|
71
75
|
small_image {
|
|
@@ -81,11 +85,13 @@ export const GET_CART_DETAILS = gql`
|
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
quantity
|
|
88
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
84
89
|
... on ConfigurableCartItem {
|
|
90
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
85
91
|
configurable_options {
|
|
86
|
-
|
|
92
|
+
configurable_product_option_uid
|
|
87
93
|
option_label
|
|
88
|
-
|
|
94
|
+
configurable_product_option_value_uid
|
|
89
95
|
value_label
|
|
90
96
|
}
|
|
91
97
|
}
|
|
@@ -108,10 +114,11 @@ export const MERGE_CARTS = gql`
|
|
|
108
114
|
mergeCarts(
|
|
109
115
|
source_cart_id: $sourceCartId
|
|
110
116
|
destination_cart_id: $destinationCartId
|
|
111
|
-
)
|
|
117
|
+
) {
|
|
112
118
|
id
|
|
119
|
+
# eslint-disable-next-line @graphql-eslint/require-id-when-available
|
|
113
120
|
items {
|
|
114
|
-
|
|
121
|
+
uid
|
|
115
122
|
}
|
|
116
123
|
...CheckoutPageFragment
|
|
117
124
|
}
|