@magento/venia-ui 9.2.0-alpha.3 → 9.3.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.
Files changed (173) hide show
  1. package/i18n/en_US.json +17 -3
  2. package/lib/RootComponents/CMS/__tests__/__snapshots__/cms.spec.js.snap +19 -0
  3. package/lib/RootComponents/CMS/__tests__/cms.spec.js +4 -9
  4. package/lib/RootComponents/CMS/cms.js +5 -4
  5. package/lib/RootComponents/CMS/cms.shimmer.js +18 -0
  6. package/lib/RootComponents/Category/__tests__/__snapshots__/categoryContent.shimmer.spec.js.snap +12 -0
  7. package/lib/RootComponents/Category/categoryContent.js +4 -1
  8. package/lib/components/AccountChip/accountChip.js +3 -1
  9. package/lib/components/AccountInformationPage/accountInformationPage.js +3 -1
  10. package/lib/components/AccountInformationPage/editModal.js +9 -2
  11. package/lib/components/AccountMenu/accountMenuItems.js +8 -3
  12. package/lib/components/CartPage/GiftCards/giftCards.js +1 -1
  13. package/lib/components/CartPage/PriceAdjustments/CouponCode/couponCode.js +5 -1
  14. package/lib/components/CartPage/PriceAdjustments/GiftOptions/__tests__/__snapshots__/giftOptions.spec.js.snap +1018 -78
  15. package/lib/components/CartPage/PriceAdjustments/GiftOptions/__tests__/giftOptions.spec.js +221 -35
  16. package/lib/components/CartPage/PriceAdjustments/GiftOptions/giftOptions.js +287 -40
  17. package/lib/components/CartPage/PriceAdjustments/GiftOptions/giftOptions.module.css +56 -1
  18. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/giftCardSection.ee.spec.js.snap +12 -0
  19. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/giftOptionsSection.ce.spec.js.snap +3 -0
  20. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/giftOptionsSection.ee.spec.js.snap +16 -0
  21. package/lib/components/CartPage/PriceAdjustments/__tests__/__snapshots__/priceAdjustments.spec.js.snap +1 -32
  22. package/lib/components/CartPage/PriceAdjustments/__tests__/giftCardSection.ce.spec.js +17 -0
  23. package/lib/components/CartPage/PriceAdjustments/__tests__/giftCardSection.ee.spec.js +36 -0
  24. package/lib/components/CartPage/PriceAdjustments/__tests__/giftOptionsSection.ce.spec.js +17 -0
  25. package/lib/components/CartPage/PriceAdjustments/__tests__/giftOptionsSection.ee.spec.js +54 -0
  26. package/lib/components/CartPage/PriceAdjustments/__tests__/priceAdjustments.spec.js +1 -1
  27. package/lib/components/CartPage/PriceAdjustments/{giftCardSection.js → giftCardSection.ce.js} +0 -0
  28. package/lib/components/CartPage/PriceAdjustments/giftOptionsSection.ce.js +7 -0
  29. package/lib/components/CartPage/PriceAdjustments/giftOptionsSection.ee.js +38 -0
  30. package/lib/components/CartPage/PriceAdjustments/priceAdjustments.js +2 -14
  31. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/discountSummary.spec.js.snap +496 -42
  32. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/giftCardSummary.ce.spec.js.snap +3 -0
  33. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/{giftCardSummary.spec.js.snap → giftCardSummary.ee.spec.js.snap} +4 -4
  34. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/giftOptionsSummary.ce.spec.js.snap +3 -0
  35. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/giftOptionsSummary.ee.spec.js.snap +63 -0
  36. package/lib/components/CartPage/PriceSummary/__tests__/__snapshots__/priceSummary.spec.js.snap +201 -141
  37. package/lib/components/CartPage/PriceSummary/__tests__/discountSummary.spec.js +41 -1
  38. package/lib/components/CartPage/PriceSummary/__tests__/giftCardSummary.ce.spec.js +17 -0
  39. package/lib/components/CartPage/PriceSummary/__tests__/giftCardSummary.ee.spec.js +84 -0
  40. package/lib/components/CartPage/PriceSummary/__tests__/giftOptionsSummary.ce.spec.js +17 -0
  41. package/lib/components/CartPage/PriceSummary/__tests__/giftOptionsSummary.ee.spec.js +69 -0
  42. package/lib/components/CartPage/PriceSummary/__tests__/priceSummary.spec.js +2 -0
  43. package/lib/components/CartPage/PriceSummary/discountSummary.js +99 -49
  44. package/lib/components/CartPage/PriceSummary/discountSummary.module.css +40 -0
  45. package/lib/components/CartPage/PriceSummary/giftOptionsSummary.ce.js +5 -0
  46. package/lib/components/CartPage/PriceSummary/giftOptionsSummary.ee.js +40 -0
  47. package/lib/components/CartPage/PriceSummary/priceSummary.js +95 -53
  48. package/lib/components/CartPage/PriceSummary/priceSummary.module.css +2 -0
  49. package/lib/components/CartPage/ProductListing/EditModal/__tests__/__snapshots__/productDetail.spec.js.snap +57 -0
  50. package/lib/components/CartPage/ProductListing/EditModal/__tests__/__snapshots__/productForm.spec.js.snap +22 -0
  51. package/lib/components/CartPage/ProductListing/EditModal/__tests__/productDetail.spec.js +42 -3
  52. package/lib/components/CartPage/ProductListing/EditModal/productDetail.js +13 -10
  53. package/lib/components/CartPage/ProductListing/EditModal/productForm.js +7 -2
  54. package/lib/components/CartPage/ProductListing/product.js +1 -0
  55. package/lib/components/CartPage/ProductListing/productListing.js +1 -1
  56. package/lib/components/CartPage/cartPage.js +1 -1
  57. package/lib/components/Checkbox/checkbox.js +6 -1
  58. package/lib/components/Checkbox/checkbox.module.css +1 -0
  59. package/lib/components/CheckoutPage/ItemsReview/__tests__/__snapshots__/item.spec.js.snap +2 -2
  60. package/lib/components/CheckoutPage/ItemsReview/__tests__/__snapshots__/itemsReview.spec.js.snap +33 -0
  61. package/lib/components/CheckoutPage/ItemsReview/__tests__/item.spec.js +2 -2
  62. package/lib/components/CheckoutPage/ItemsReview/itemsReview.js +4 -1
  63. package/lib/components/CheckoutPage/OrderConfirmationPage/__tests__/createAccount.spec.js +4 -0
  64. package/lib/components/CheckoutPage/OrderConfirmationPage/createAccount.js +9 -1
  65. package/lib/components/CheckoutPage/OrderConfirmationPage/orderConfirmationPage.js +12 -3
  66. package/lib/components/CheckoutPage/PaymentInformation/__tests__/__snapshots__/creditCard.spec.js.snap +1 -0
  67. package/lib/components/CheckoutPage/PaymentInformation/__tests__/creditCard.spec.js +2 -1
  68. package/lib/components/CheckoutPage/PaymentInformation/brainTreeDropIn.js +2 -18
  69. package/lib/components/CheckoutPage/PaymentInformation/creditCard.js +13 -3
  70. package/lib/components/CheckoutPage/PriceAdjustments/__tests__/__snapshots__/priceAdjustments.spec.js.snap +1 -6
  71. package/lib/components/CheckoutPage/PriceAdjustments/__tests__/priceAdjustments.spec.js +2 -2
  72. package/lib/components/CheckoutPage/PriceAdjustments/priceAdjustments.js +8 -12
  73. package/lib/components/CheckoutPage/ShippingInformation/AddressForm/customerForm.js +1 -1
  74. package/lib/components/CheckoutPage/ShippingInformation/shippingInformation.js +4 -1
  75. package/lib/components/CheckoutPage/ShippingMethod/shippingMethod.js +5 -2
  76. package/lib/components/CheckoutPage/__tests__/__snapshots__/checkoutPage.spec.js.snap +3 -3
  77. package/lib/components/CheckoutPage/__tests__/checkoutPage.spec.js +5 -0
  78. package/lib/components/CheckoutPage/checkoutPage.js +25 -4
  79. package/lib/components/CheckoutPage/checkoutPage.module.css +8 -1
  80. package/lib/components/CmsDynamicBlock/__tests__/__snapshots__/cmsDynamicBlock.ce.spec.js.snap +3 -0
  81. package/lib/components/CmsDynamicBlock/__tests__/__snapshots__/cmsDynamicBlock.ee.spec.js.snap +61 -0
  82. package/lib/components/CmsDynamicBlock/__tests__/__snapshots__/dynamicBlock.spec.js.snap +7 -0
  83. package/lib/components/CmsDynamicBlock/__tests__/cmsDynamicBlock.ce.spec.js +17 -0
  84. package/lib/components/CmsDynamicBlock/__tests__/cmsDynamicBlock.ee.spec.js +211 -0
  85. package/lib/components/CmsDynamicBlock/__tests__/constants.spec.js +37 -0
  86. package/lib/components/CmsDynamicBlock/__tests__/dynamicBlock.spec.js +33 -0
  87. package/lib/components/CmsDynamicBlock/cmsDynamicBlock.ce.js +5 -0
  88. package/lib/components/CmsDynamicBlock/cmsDynamicBlock.ee.js +73 -0
  89. package/lib/components/CmsDynamicBlock/constants.js +6 -0
  90. package/lib/components/CmsDynamicBlock/dynamicBlock.js +32 -0
  91. package/lib/components/CmsDynamicBlock/index.js +2 -0
  92. package/lib/components/CreateAccount/__tests__/createAccount.spec.js +6 -1
  93. package/lib/components/CreateAccount/createAccount.js +7 -2
  94. package/lib/components/Field/field.module.css +6 -0
  95. package/lib/components/FilterSidebar/filterSidebar.js +4 -1
  96. package/lib/components/Footer/__tests__/__snapshots__/footer.spec.js.snap +8 -2
  97. package/lib/components/Footer/footer.js +16 -9
  98. package/lib/components/Footer/footer.module.css +7 -2
  99. package/lib/components/ForgotPassword/ForgotPasswordForm/__tests__/__snapshots__/forgotPasswordForm.spec.js.snap +109 -1
  100. package/lib/components/ForgotPassword/ForgotPasswordForm/__tests__/forgotPasswordForm.spec.js +22 -3
  101. package/lib/components/ForgotPassword/ForgotPasswordForm/forgotPasswordForm.js +13 -3
  102. package/lib/components/ForgotPassword/ForgotPasswordForm/forgotPasswordForm.module.css +1 -1
  103. package/lib/components/ForgotPassword/__tests__/__snapshots__/forgotPassword.spec.js.snap +5 -6
  104. package/lib/components/ForgotPassword/__tests__/forgotPassword.spec.js +41 -28
  105. package/lib/components/ForgotPassword/forgotPassword.js +10 -3
  106. package/lib/components/ForgotPassword/forgotPassword.module.css +2 -2
  107. package/lib/components/Gallery/__tests__/__snapshots__/gallery.spec.js.snap +22 -0
  108. package/lib/components/Gallery/__tests__/__snapshots__/item.spec.js.snap +17 -0
  109. package/lib/components/Gallery/addToCartButton.js +2 -0
  110. package/lib/components/Gallery/gallery.js +6 -1
  111. package/lib/components/Gallery/item.js +7 -2
  112. package/lib/components/GoogleReCaptcha/googleReCaptcha.js +49 -0
  113. package/lib/components/GoogleReCaptcha/googleReCaptcha.module.css +3 -0
  114. package/lib/components/GoogleReCaptcha/index.js +1 -0
  115. package/lib/components/Header/currencySwitcher.js +2 -1
  116. package/lib/components/Header/header.js +1 -1
  117. package/lib/components/Header/header.module.css +2 -2
  118. package/lib/components/Header/searchTrigger.js +3 -1
  119. package/lib/components/Header/storeSwitcher.js +18 -4
  120. package/lib/components/Header/switcherItem.js +4 -1
  121. package/lib/components/HomePage/homePage.module.css +12 -0
  122. package/lib/components/Image/resourceImage.js +8 -1
  123. package/lib/components/Image/simpleImage.js +8 -1
  124. package/lib/components/Link/link.js +15 -13
  125. package/lib/components/LoadingIndicator/spinner.js +5 -7
  126. package/lib/components/LoadingIndicator/spinner.module.css +4 -17
  127. package/lib/components/MiniCart/ProductList/__tests__/__snapshots__/item.spec.js.snap +44 -0
  128. package/lib/components/MiniCart/ProductList/__tests__/__snapshots__/productList.spec.js.snap +1 -1
  129. package/lib/components/MiniCart/ProductList/__tests__/item.spec.js +2 -2
  130. package/lib/components/MiniCart/ProductList/__tests__/productList.spec.js +1 -1
  131. package/lib/components/MiniCart/ProductList/item.js +3 -2
  132. package/lib/components/MiniCart/ProductList/productList.js +1 -1
  133. package/lib/components/MiniCart/miniCart.js +6 -3
  134. package/lib/components/MyAccount/ResetPassword/__tests__/__snapshots__/resetPassword.spec.js.snap +274 -254
  135. package/lib/components/MyAccount/ResetPassword/__tests__/resetPassword.spec.js +10 -5
  136. package/lib/components/MyAccount/ResetPassword/resetPassword.js +55 -55
  137. package/lib/components/MyAccount/ResetPassword/resetPassword.module.css +27 -79
  138. package/lib/components/Newsletter/newsletter.js +6 -2
  139. package/lib/components/OrderHistoryPage/OrderDetails/__tests__/__snapshots__/item.spec.js.snap +11 -0
  140. package/lib/components/ProductFullDetail/CustomAttributes/__tests__/__snapshots__/customAttributes.spec.js.snap +9 -3
  141. package/lib/components/ProductFullDetail/CustomAttributes/__tests__/customAttributes.spec.js +5 -6
  142. package/lib/components/ProductFullDetail/CustomAttributes/customAttributes.js +6 -4
  143. package/lib/components/ProductFullDetail/productFullDetail.js +12 -3
  144. package/lib/components/ProductImageCarousel/__tests__/__snapshots__/carousel.spec.js.snap +61 -0
  145. package/lib/components/ProductImageCarousel/__tests__/__snapshots__/thumbnail.spec.js.snap +26 -0
  146. package/lib/components/ProductOptions/__tests__/options.spec.js +1 -1
  147. package/lib/components/ProductOptions/__tests__/swatch.spec.js +1 -1
  148. package/lib/components/ProductOptions/__tests__/swatchList.spec.js +1 -1
  149. package/lib/components/ProductOptions/__tests__/tile.spec.js +1 -1
  150. package/lib/components/ProductOptions/__tests__/tileList.spec.js +1 -1
  151. package/lib/components/ProductOptions/option.js +4 -1
  152. package/lib/components/ProductSort/productSort.js +22 -14
  153. package/lib/components/Rating/rating.js +1 -1
  154. package/lib/components/SearchBar/__tests__/__snapshots__/suggestedProduct.spec.js.snap +11 -0
  155. package/lib/components/SearchBar/autocomplete.js +5 -2
  156. package/lib/components/SearchBar/suggestedProduct.js +1 -1
  157. package/lib/components/SearchBar/suggestions.js +1 -1
  158. package/lib/components/SignIn/__tests__/signIn.spec.js +11 -20
  159. package/lib/components/SignIn/signIn.js +6 -16
  160. package/lib/components/TextInput/textInput.module.css +0 -4
  161. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/__tests__/__snapshots__/wishlistLineItem.spec.js.snap +5 -1
  162. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/wishlistLineItem.js +7 -1
  163. package/lib/components/Wishlist/WishlistDialog/WishlistLineItem/wishlistLineItem.module.css +7 -0
  164. package/lib/components/Wishlist/WishlistDialog/__tests__/__snapshots__/wishlistDialog.spec.js.snap +6 -1
  165. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlist.spec.js.snap +4 -0
  166. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlistItem.spec.js.snap +22 -0
  167. package/lib/components/WishlistPage/__tests__/__snapshots__/wishlistPage.spec.js.snap +9 -3
  168. package/lib/components/WishlistPage/createWishlist.ee.js +3 -1
  169. package/lib/components/WishlistPage/wishlist.js +1 -1
  170. package/lib/components/WishlistPage/wishlist.module.css +3 -0
  171. package/lib/components/WishlistPage/wishlistPage.js +1 -1
  172. package/package.json +5 -4
  173. package/lib/components/CartPage/PriceSummary/__tests__/giftCardSummary.spec.js +0 -84
@@ -11,6 +11,7 @@ import { isRequired } from '../../../util/formValidators';
11
11
  import Button from '../../Button';
12
12
  import Field from '../../Field';
13
13
  import FormErrors from '../../FormError';
14
+ import GoogleReCaptcha from '../../GoogleReCaptcha';
14
15
  import { StoreTitle } from '../../Head';
15
16
  import Password from '../../Password';
16
17
  import TextInput from '../../TextInput';
@@ -27,22 +28,18 @@ const ResetPassword = props => {
27
28
  loading,
28
29
  token,
29
30
  formErrors,
30
- handleSubmit
31
+ handleSubmit,
32
+ recaptchaWidgetProps
31
33
  } = talonProps;
32
- const PAGE_TITLE = formatMessage({
33
- id: 'resetPassword.pageTitleText',
34
- defaultMessage: 'Reset Password'
35
- });
34
+
36
35
  const tokenMissing = (
37
- <div className={classes.invalidTokenContainer}>
38
- <div className={classes.invalidToken}>
39
- <FormattedMessage
40
- id={'resetPassword.invalidTokenMessage'}
41
- defaultMessage={
42
- 'Uh oh, something went wrong. Check the link or try again.'
43
- }
44
- />
45
- </div>
36
+ <div className={classes.invalidToken}>
37
+ <FormattedMessage
38
+ id={'resetPassword.invalidTokenMessage'}
39
+ defaultMessage={
40
+ 'Uh oh, something went wrong. Check the link or try again.'
41
+ }
42
+ />
46
43
  </div>
47
44
  );
48
45
 
@@ -61,18 +58,16 @@ const ResetPassword = props => {
61
58
  }
62
59
  }, [addToast, formatMessage, hasCompleted]);
63
60
  const recoverPassword = hasCompleted ? (
64
- <div className={classes.successMessageContainer}>
65
- <div className={classes.successMessage}>
66
- <FormattedMessage
67
- id={'resetPassword.successMessage'}
68
- defaultMessage={
69
- 'Your new password has been saved. Please use this password to sign into your Account.'
70
- }
71
- />
72
- </div>
61
+ <div className={classes.successMessage}>
62
+ <FormattedMessage
63
+ id={'resetPassword.successMessage'}
64
+ defaultMessage={
65
+ 'Your new password has been saved. Please use this password to sign into your Account.'
66
+ }
67
+ />
73
68
  </div>
74
69
  ) : (
75
- <Form className={classes.container} onSubmit={handleSubmit}>
70
+ <Form className={classes.form} onSubmit={handleSubmit}>
76
71
  <div className={classes.description}>
77
72
  <FormattedMessage
78
73
  id={'resetPassword.descriptionText'}
@@ -85,9 +80,6 @@ const ResetPassword = props => {
85
80
  <TextInput field={'email'} validate={isRequired} />
86
81
  </Field>
87
82
  <Password
88
- classes={{
89
- root: classes.password
90
- }}
91
83
  label={formatMessage({
92
84
  id: 'resetPassword.newPasswordText',
93
85
  defaultMessage: 'New Password'
@@ -95,31 +87,41 @@ const ResetPassword = props => {
95
87
  fieldName={'newPassword'}
96
88
  isToggleButtonHidden={false}
97
89
  />
98
- <Button
99
- className={classes.submitButton}
100
- type="submit"
101
- priority="high"
102
- disabled={loading}
103
- >
104
- <FormattedMessage
105
- id="resetPassword.savePassword"
106
- defaultMessage="Save Password"
107
- />
108
- </Button>
109
- <FormErrors
110
- classes={{
111
- root: classes.errorMessage
112
- }}
113
- errors={formErrors}
114
- />
90
+ <GoogleReCaptcha {...recaptchaWidgetProps} />
91
+ <div className={classes.buttonContainer}>
92
+ <Button
93
+ className={classes.submitButton}
94
+ type="submit"
95
+ priority="high"
96
+ disabled={loading}
97
+ >
98
+ <FormattedMessage
99
+ id="resetPassword.savePassword"
100
+ defaultMessage="Save Password"
101
+ />
102
+ </Button>
103
+ </div>
104
+ <FormErrors errors={formErrors} />
115
105
  </Form>
116
106
  );
117
107
 
118
108
  return (
119
109
  <div className={classes.root}>
120
- <StoreTitle>{PAGE_TITLE}</StoreTitle>
121
- <h1 className={classes.heading}>{PAGE_TITLE}</h1>
122
- {token ? recoverPassword : tokenMissing}
110
+ <StoreTitle>
111
+ {formatMessage({
112
+ id: 'resetPassword.title',
113
+ defaultMessage: 'Reset Password'
114
+ })}
115
+ </StoreTitle>
116
+ <h1 className={classes.header}>
117
+ <FormattedMessage
118
+ id="resetPassword.header"
119
+ defaultMessage="Reset Password"
120
+ />
121
+ </h1>
122
+ <div className={classes.contentContainer}>
123
+ {token ? recoverPassword : tokenMissing}
124
+ </div>
123
125
  </div>
124
126
  );
125
127
  };
@@ -128,16 +130,14 @@ export default ResetPassword;
128
130
 
129
131
  ResetPassword.propTypes = {
130
132
  classes: shape({
131
- container: string,
133
+ root: string,
134
+ header: string,
135
+ contentContainer: string,
136
+ form: string,
132
137
  description: string,
133
- errorMessage: string,
134
- heading: string,
135
138
  invalidToken: string,
136
- invalidTokenContainer: string,
137
- password: string,
138
- root: string,
139
+ buttonContainer: string,
139
140
  submitButton: string,
140
- successMessage: string,
141
- successMessageContainer: string
141
+ successMessage: string
142
142
  })
143
143
  };
@@ -1,30 +1,30 @@
1
1
  .root {
2
- padding: 2.5rem 3rem;
3
- max-width: var(--venia-global-maxWidth);
4
- margin: 0 auto;
2
+ display: grid;
3
+ justify-content: center;
4
+ padding: 2.5rem 0;
5
+ text-align: center;
6
+ grid-template-columns: minmax(auto, 512px);
7
+ row-gap: 2rem;
5
8
  }
6
9
 
7
- .heading {
10
+ .header {
8
11
  font-family: var(--venia-global-fontFamily-serif);
9
- line-height: 1.25em;
10
- margin-bottom: 2.5rem;
11
- text-align: center;
12
- text-transform: capitalize;
13
12
  }
14
13
 
15
- .container {
14
+ .form {
16
15
  display: grid;
17
- gap: 1.5rem;
18
- margin: 2rem 7rem;
19
- padding: 3rem;
20
- border: 2px solid rgb(var(--venia-global-color-gray-400));
21
- border-radius: 0.375rem;
16
+ gap: 0.9375rem;
17
+ justify-items: stretch;
18
+ padding: 1rem 1.5rem;
22
19
  }
23
20
 
24
21
  .description {
25
- font-size: var(--venia-global-typography-heading-M-fontSize);
26
- line-height: var(--venia-global-typography-heading-lineHeight);
27
- padding-bottom: 0.5rem;
22
+ font-weight: 300;
23
+ line-height: 1.25rem;
24
+ }
25
+
26
+ .buttonContainer {
27
+ margin-top: 1rem;
28
28
  }
29
29
 
30
30
  .submitButton {
@@ -32,75 +32,23 @@
32
32
  justify-self: center;
33
33
  }
34
34
 
35
- .invalidTokenContainer {
36
- border: 2px solid rgb(var(--venia-global-color-gray-400));
37
- border-radius: 0.375rem;
38
- margin: auto;
39
- padding: 3rem 5rem;
40
- padding-left: 3rem;
41
- width: fit-content;
42
- }
43
-
44
- .invalidToken {
45
- padding: 0.5rem 1rem;
46
- border-left: 4px solid rgb(var(--venia-global-color-error));
47
- color: rgb(var(--venia-global-color-error));
48
- }
49
-
50
- .successMessageContainer {
51
- border: 2px solid rgb(var(--venia-global-color-gray-400));
52
- border-radius: 0.375rem;
53
- margin: auto;
54
- padding: 3rem 5rem;
55
- padding-left: 3rem;
56
- width: fit-content;
57
- }
58
-
35
+ .invalidToken,
59
36
  .successMessage {
60
- padding: 0.5rem 1rem;
37
+ padding: 1.5rem;
61
38
  text-align: center;
62
39
  }
63
40
 
64
- .errorMessage {
65
- padding-top: 1rem;
41
+ .invalidToken {
42
+ color: rgb(var(--venia-global-color-error));
66
43
  }
67
44
 
68
- /*
69
- * Mobile-specific styles.
70
- */
71
-
72
- @media (max-width: 960px) {
73
- .root {
74
- padding-left: 1.5rem;
75
- padding-right: 1.5rem;
76
- margin: 0 auto;
77
- }
78
-
79
- .container {
80
- border: none;
81
- margin: 0;
82
- padding: 0;
83
- }
84
-
85
- .password {
86
- min-height: 5rem;
87
- }
88
-
89
- .invalidTokenContainer {
90
- border: none;
91
- margin: auto;
92
- padding: 0;
93
- }
94
-
95
- .invalidToken {
96
- border-left: 4px solid rgb(var(--venia-global-color-error));
97
- padding: 0.5rem;
98
- text-align: left;
45
+ @media (min-width: 961px) {
46
+ .contentContainer {
47
+ border: 2px solid rgb(var(--venia-global-color-border));
48
+ border-radius: 0.375rem;
99
49
  }
100
50
 
101
- .successMessageContainer {
102
- border: none;
103
- margin: auto;
104
- padding: 0;
51
+ .form {
52
+ margin-bottom: 2rem;
105
53
  }
106
54
  }
@@ -68,14 +68,17 @@ const Newsletter = props => {
68
68
  return (
69
69
  <div className={classes.root} data-cy={'Newsletter-root'}>
70
70
  {maybeLoadingIndicator}
71
- <span className={classes.title}>
71
+ <span data-cy="Newsletter-title" className={classes.title}>
72
72
  <FormattedMessage
73
73
  id={'newsletter.titleText'}
74
74
  defaultMessage={'Subscribe to Venia'}
75
75
  />
76
76
  </span>
77
77
 
78
- <p className={classes.newsletter_text}>
78
+ <p
79
+ data-cy="Newsletter-infoText"
80
+ className={classes.newsletter_text}
81
+ >
79
82
  <FormattedMessage
80
83
  id={'newsletter.infoText'}
81
84
  defaultMessage={
@@ -107,6 +110,7 @@ const Newsletter = props => {
107
110
  />
108
111
  </Field>
109
112
  <LinkButton
113
+ data-cy="Newsletter-submitButton"
110
114
  className={classes.subscribe_link}
111
115
  type="submit"
112
116
  disabled={isBusy}
@@ -14,6 +14,11 @@ exports[`should render properly 1`] = `
14
14
  className="undefined undefined"
15
15
  loading="eager"
16
16
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
17
+ style={
18
+ Object {
19
+ "--width": "50px",
20
+ }
21
+ }
17
22
  width={50}
18
23
  />
19
24
  <img
@@ -33,6 +38,12 @@ https://www.venia.com/product1-thumbnail.jpg?auto=webp&format=pjpg&width=960&hei
33
38
  https://www.venia.com/product1-thumbnail.jpg?auto=webp&format=pjpg&width=1280&height=1600&fit=cover 1280w,
34
39
  https://www.venia.com/product1-thumbnail.jpg?auto=webp&format=pjpg&width=1600&height=2000&fit=cover 1600w,
35
40
  https://www.venia.com/product1-thumbnail.jpg?auto=webp&format=pjpg&width=2560&height=3200&fit=cover 2560w"
41
+ style={
42
+ Object {
43
+ "--height": "62.5px",
44
+ "--width": "50px",
45
+ }
46
+ }
36
47
  width={50}
37
48
  />
38
49
  </div>
@@ -11,8 +11,10 @@ exports[`#CustomAttributes renders with custom attributes visible on front only
11
11
  data={
12
12
  Object {
13
13
  "attribute_metadata": Object {
14
- "is_visible_on_front": true,
15
14
  "uid": "uid-1",
15
+ "used_in_components": Array [
16
+ "PRODUCT_DETAILS_PAGE",
17
+ ],
16
18
  },
17
19
  }
18
20
  }
@@ -23,8 +25,10 @@ exports[`#CustomAttributes renders with custom attributes visible on front only
23
25
  data={
24
26
  Object {
25
27
  "attribute_metadata": Object {
26
- "is_visible_on_front": true,
27
28
  "uid": "uid-2",
29
+ "used_in_components": Array [
30
+ "PRODUCT_DETAILS_PAGE",
31
+ ],
28
32
  },
29
33
  }
30
34
  }
@@ -35,8 +39,10 @@ exports[`#CustomAttributes renders with custom attributes visible on front only
35
39
  data={
36
40
  Object {
37
41
  "attribute_metadata": Object {
38
- "is_visible_on_front": true,
39
42
  "uid": "uid-4",
43
+ "used_in_components": Array [
44
+ "PRODUCT_DETAILS_PAGE",
45
+ ],
40
46
  },
41
47
  }
42
48
  }
@@ -2,7 +2,7 @@ import React from 'react';
2
2
 
3
3
  import { createTestInstance } from '@magento/peregrine';
4
4
 
5
- import CustomAttributes from '../customAttributes';
5
+ import CustomAttributes, { IS_VISIBLE_ON_FRONT } from '../customAttributes';
6
6
 
7
7
  jest.mock('react-intl', () => ({
8
8
  FormattedMessage: ({ defaultMessage }) => defaultMessage
@@ -40,31 +40,30 @@ describe('#CustomAttributes', () => {
40
40
  customAttributes: [
41
41
  {
42
42
  attribute_metadata: {
43
- is_visible_on_front: true,
43
+ used_in_components: [IS_VISIBLE_ON_FRONT],
44
44
  uid: 'uid-1'
45
45
  }
46
46
  },
47
47
  {
48
48
  attribute_metadata: {
49
- is_visible_on_front: true,
49
+ used_in_components: [IS_VISIBLE_ON_FRONT],
50
50
  uid: 'uid-2'
51
51
  }
52
52
  },
53
53
  {
54
54
  attribute_metadata: {
55
- is_visible_on_front: false,
55
+ used_in_components: [],
56
56
  uid: 'uid-3'
57
57
  }
58
58
  },
59
59
  {
60
60
  attribute_metadata: {
61
- is_visible_on_front: true,
61
+ used_in_components: [IS_VISIBLE_ON_FRONT],
62
62
  uid: 'uid-4'
63
63
  }
64
64
  },
65
65
  {
66
66
  attribute_metadata: {
67
- is_visible_on_front: false,
68
67
  uid: 'uid-5'
69
68
  }
70
69
  }
@@ -7,6 +7,8 @@ import { useStyle } from '@magento/venia-ui/lib/classify';
7
7
  import AttributeType from './AttributeType';
8
8
  import defaultClasses from './customAttributes.module.css';
9
9
 
10
+ export const IS_VISIBLE_ON_FRONT = 'PRODUCT_DETAILS_PAGE';
11
+
10
12
  const CustomAttributes = props => {
11
13
  const { customAttributes } = props;
12
14
  const classes = useStyle(defaultClasses, props.classes);
@@ -14,11 +16,11 @@ const CustomAttributes = props => {
14
16
  const list = useMemo(
15
17
  () =>
16
18
  customAttributes.reduce((previousAttribute, currentAttribute) => {
19
+ const usedInComponents =
20
+ currentAttribute.attribute_metadata?.used_in_components ||
21
+ [];
17
22
  // Visible on front attributes only
18
- if (
19
- currentAttribute.attribute_metadata.is_visible_on_front ===
20
- true
21
- ) {
23
+ if (usedInComponents.includes(IS_VISIBLE_ON_FRONT)) {
22
24
  const attributeContent = (
23
25
  <li
24
26
  key={currentAttribute.attribute_metadata.uid}
@@ -178,7 +178,10 @@ const ProductFullDetail = props => {
178
178
  >
179
179
  {productDetails.name}
180
180
  </h1>
181
- <p className={classes.productPrice}>
181
+ <p
182
+ data-cy="ProductFullDetail-productPrice"
183
+ className={classes.productPrice}
184
+ >
182
185
  <Price
183
186
  currencyCode={productDetails.price.currency}
184
187
  value={productDetails.price.value}
@@ -196,7 +199,10 @@ const ProductFullDetail = props => {
196
199
  />
197
200
  <section className={classes.options}>{options}</section>
198
201
  <section className={classes.quantity}>
199
- <span className={classes.quantityTitle}>
202
+ <span
203
+ data-cy="ProductFullDetail-quantityTitle"
204
+ className={classes.quantityTitle}
205
+ >
200
206
  <FormattedMessage
201
207
  id={'global.quantity'}
202
208
  defaultMessage={'Quantity'}
@@ -215,7 +221,10 @@ const ProductFullDetail = props => {
215
221
  </Suspense>
216
222
  </section>
217
223
  <section className={classes.description}>
218
- <span className={classes.descriptionTitle}>
224
+ <span
225
+ data-cy="ProductFullDetail-descriptionTitle"
226
+ className={classes.descriptionTitle}
227
+ >
219
228
  <FormattedMessage
220
229
  id={'productFullDetail.productDescription'}
221
230
  defaultMessage={'Product Description'}
@@ -53,6 +53,7 @@ exports[`renders a transparent main image if no file name is provided 1`] = `
53
53
  className="image placeholder"
54
54
  loading="eager"
55
55
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
56
+ style={Object {}}
56
57
  />
57
58
  <img
58
59
  alt="image-product"
@@ -61,6 +62,7 @@ exports[`renders a transparent main image if no file name is provided 1`] = `
61
62
  onError={[Function]}
62
63
  onLoad={[Function]}
63
64
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
65
+ style={Object {}}
64
66
  />
65
67
  </div>
66
68
  <button
@@ -161,6 +163,11 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
161
163
  className="image placeholder"
162
164
  loading="eager"
163
165
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
166
+ style={
167
+ Object {
168
+ "--width": "640px",
169
+ }
170
+ }
164
171
  width={640}
165
172
  />
166
173
  <img
@@ -180,6 +187,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
180
187
  /media/catalog/product/thumbnail1.png?auto=webp&format=png&width=1280&height=1600&fit=cover 1280w,
181
188
  /media/catalog/product/thumbnail1.png?auto=webp&format=png&width=1600&height=2000&fit=cover 1600w,
182
189
  /media/catalog/product/thumbnail1.png?auto=webp&format=png&width=2560&height=3200&fit=cover 2560w"
190
+ style={
191
+ Object {
192
+ "--height": "800px",
193
+ "--width": "640px",
194
+ }
195
+ }
183
196
  width={640}
184
197
  />
185
198
  </div>
@@ -240,6 +253,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
240
253
  height={170}
241
254
  loading="eager"
242
255
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
256
+ style={
257
+ Object {
258
+ "--height": "170px",
259
+ "--width": "135px",
260
+ }
261
+ }
243
262
  width={135}
244
263
  />
245
264
  <img
@@ -259,6 +278,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
259
278
  /media/catalog/product/thumbnail1.png?auto=webp&format=png&width=1280&height=1600&fit=cover 1280w,
260
279
  /media/catalog/product/thumbnail1.png?auto=webp&format=png&width=1600&height=2000&fit=cover 1600w,
261
280
  /media/catalog/product/thumbnail1.png?auto=webp&format=png&width=2560&height=3200&fit=cover 2560w"
281
+ style={
282
+ Object {
283
+ "--height": "170px",
284
+ "--width": "135px",
285
+ }
286
+ }
262
287
  width={135}
263
288
  />
264
289
  </div>
@@ -278,6 +303,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
278
303
  height={170}
279
304
  loading="eager"
280
305
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
306
+ style={
307
+ Object {
308
+ "--height": "170px",
309
+ "--width": "135px",
310
+ }
311
+ }
281
312
  width={135}
282
313
  />
283
314
  <img
@@ -297,6 +328,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
297
328
  /media/catalog/product/thumbnail2.png?auto=webp&format=png&width=1280&height=1600&fit=cover 1280w,
298
329
  /media/catalog/product/thumbnail2.png?auto=webp&format=png&width=1600&height=2000&fit=cover 1600w,
299
330
  /media/catalog/product/thumbnail2.png?auto=webp&format=png&width=2560&height=3200&fit=cover 2560w"
331
+ style={
332
+ Object {
333
+ "--height": "170px",
334
+ "--width": "135px",
335
+ }
336
+ }
300
337
  width={135}
301
338
  />
302
339
  </div>
@@ -316,6 +353,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
316
353
  height={170}
317
354
  loading="eager"
318
355
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
356
+ style={
357
+ Object {
358
+ "--height": "170px",
359
+ "--width": "135px",
360
+ }
361
+ }
319
362
  width={135}
320
363
  />
321
364
  <img
@@ -335,6 +378,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
335
378
  /media/catalog/product/thumbnail3.png?auto=webp&format=png&width=1280&height=1600&fit=cover 1280w,
336
379
  /media/catalog/product/thumbnail3.png?auto=webp&format=png&width=1600&height=2000&fit=cover 1600w,
337
380
  /media/catalog/product/thumbnail3.png?auto=webp&format=png&width=2560&height=3200&fit=cover 2560w"
381
+ style={
382
+ Object {
383
+ "--height": "170px",
384
+ "--width": "135px",
385
+ }
386
+ }
338
387
  width={135}
339
388
  />
340
389
  </div>
@@ -354,6 +403,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
354
403
  height={170}
355
404
  loading="eager"
356
405
  src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHdpZHRoPSc0JyBoZWlnaHQ9JzUnPjxyZWN0IHdpZHRoPSc0JyBoZWlnaHQ9JzUnIHN0eWxlPSdmaWxsOiBub25lJyAvPjwvc3ZnPg=="
406
+ style={
407
+ Object {
408
+ "--height": "170px",
409
+ "--width": "135px",
410
+ }
411
+ }
357
412
  width={135}
358
413
  />
359
414
  <img
@@ -373,6 +428,12 @@ exports[`renders the Carousel component correctly w/ sorted images 1`] = `
373
428
  /media/catalog/product/thumbnail4.png?auto=webp&format=png&width=1280&height=1600&fit=cover 1280w,
374
429
  /media/catalog/product/thumbnail4.png?auto=webp&format=png&width=1600&height=2000&fit=cover 1600w,
375
430
  /media/catalog/product/thumbnail4.png?auto=webp&format=png&width=2560&height=3200&fit=cover 2560w"
431
+ style={
432
+ Object {
433
+ "--height": "170px",
434
+ "--width": "135px",
435
+ }
436
+ }
376
437
  width={135}
377
438
  />
378
439
  </div>