@shopgate/engage 7.27.3-alpha.17 → 7.27.3-alpha.19

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 (1300) hide show
  1. package/a11y/action-creators/index.js +9 -0
  2. package/a11y/components/FocusTrap/index.js +1 -0
  3. package/a11y/components/LiveMessage/index.js +1 -1
  4. package/a11y/components/LiveMessenger/helpers.js +1 -1
  5. package/a11y/components/LiveMessenger/index.js +2 -2
  6. package/a11y/components/ModalStateTracker/index.js +14 -0
  7. package/a11y/components/Navigation/index.js +1 -1
  8. package/a11y/components/Section/index.js +3 -3
  9. package/a11y/components/VisuallyHidden/index.js +1 -1
  10. package/a11y/components/index.js +1 -1
  11. package/a11y/constants/index.js +1 -0
  12. package/a11y/helpers/index.js +1 -0
  13. package/a11y/hooks/index.js +37 -0
  14. package/a11y/index.js +1 -4
  15. package/a11y/reducers/index.js +6 -0
  16. package/a11y/selectors/index.js +8 -0
  17. package/a11y/styles.js +2 -0
  18. package/account/actions/addContacts.js +4 -0
  19. package/account/actions/deleteContact.js +5 -0
  20. package/account/actions/deleteCustomer.js +4 -0
  21. package/account/actions/fetchContacts.js +4 -0
  22. package/account/actions/fetchCustomer.js +4 -0
  23. package/account/actions/updateContact.js +4 -0
  24. package/account/actions/updateCustomer.js +4 -0
  25. package/account/components/Account/Account.connector.js +5 -0
  26. package/account/components/Account/Account.js +4 -0
  27. package/account/components/Account/Account.style.js +1 -0
  28. package/account/components/Account/index.js +1 -0
  29. package/account/components/Profile/Profile.config.js +11 -0
  30. package/account/components/Profile/Profile.constraints.js +1 -0
  31. package/account/components/Profile/Profile.js +1 -0
  32. package/account/components/Profile/Profile.provider.js +22 -0
  33. package/account/components/Profile/ProfileAddressBook.js +6 -0
  34. package/account/components/Profile/ProfileAddressCard.js +3 -0
  35. package/account/components/Profile/ProfileForm.js +3 -0
  36. package/account/components/Profile/ProfileHeader.js +3 -0
  37. package/account/components/Profile/index.js +1 -0
  38. package/account/components/ProfileContact/ProfileContact.config.js +11 -0
  39. package/account/components/ProfileContact/ProfileContact.constraints.js +5 -0
  40. package/account/components/ProfileContact/ProfileContact.js +13 -0
  41. package/account/components/ProfileContact/index.js +1 -0
  42. package/account/components/index.js +1 -0
  43. package/account/constants/actions.js +1 -0
  44. package/account/constants/index.js +1 -1
  45. package/account/constants/pipelines.js +1 -0
  46. package/account/helper/form.js +61 -0
  47. package/account/index.js +1 -1
  48. package/account/reducers/index.js +6 -0
  49. package/account/selectors/contacts.js +7 -0
  50. package/account/selectors/customer.js +7 -0
  51. package/app-rating/actions/showModal.js +3 -3
  52. package/app-rating/helpers/index.js +1 -1
  53. package/app-rating/subscriptions/index.js +11 -6
  54. package/back-in-stock/actions/index.js +1 -1
  55. package/back-in-stock/components/BackInStockButton/index.js +3 -3
  56. package/back-in-stock/components/CharacteristicsButton/index.js +1 -1
  57. package/back-in-stock/components/ProductInfoBackInStockButton/index.js +1 -1
  58. package/back-in-stock/components/Subscriptions/components/List/index.js +2 -2
  59. package/back-in-stock/components/Subscriptions/components/Subscription/index.js +2 -2
  60. package/back-in-stock/components/Subscriptions/index.js +1 -1
  61. package/back-in-stock/providers/BackInStockSubscriptionsProvider.context.js +1 -1
  62. package/back-in-stock/providers/BackInStockSubscriptionsProvider.js +1 -1
  63. package/back-in-stock/selectors/index.js +5 -3
  64. package/back-in-stock/streams/index.js +1 -1
  65. package/back-in-stock/subscriptions/index.js +2 -2
  66. package/cart/cart.constants.js +1 -0
  67. package/cart/cart.context.js +1 -0
  68. package/cart/cart.helpers.js +15 -0
  69. package/cart/cart.hooks.js +4 -0
  70. package/cart/cart.selectors.js +34 -0
  71. package/cart/cart.types.js +1 -0
  72. package/cart/components/CartHeaderWide/CartHeaderWide.js +3 -0
  73. package/cart/components/CartHeaderWide/CartHeaderWide.style.js +1 -0
  74. package/cart/components/CartHeaderWide/index.js +1 -0
  75. package/cart/components/CartItem/CartItem.hooks.js +7 -0
  76. package/cart/components/CartItem/CartItem.js +7 -0
  77. package/cart/components/CartItem/CartItem.style.js +1 -0
  78. package/cart/components/CartItem/CartItemCoupon.connector.js +7 -0
  79. package/cart/components/CartItem/CartItemCoupon.js +20 -0
  80. package/cart/components/CartItem/CartItemCoupon.style.js +5 -0
  81. package/cart/components/CartItem/CartItemCoupon.types.js +0 -0
  82. package/cart/components/CartItem/CartItemCouponCode.js +5 -0
  83. package/cart/components/CartItem/CartItemCouponDelete.js +5 -0
  84. package/cart/components/CartItem/CartItemCouponDelete.style.js +1 -0
  85. package/cart/components/CartItem/CartItemCouponFreeShipping.js +5 -0
  86. package/cart/components/CartItem/CartItemCouponIcon.js +4 -0
  87. package/cart/components/CartItem/CartItemCouponLayout.js +6 -0
  88. package/cart/components/CartItem/CartItemCouponLayout.style.js +5 -0
  89. package/cart/components/CartItem/CartItemCouponPrice.js +5 -0
  90. package/cart/components/CartItem/CartItemCouponPrice.style.js +1 -0
  91. package/cart/components/CartItem/CartItemCouponTitle.js +5 -0
  92. package/cart/components/CartItem/CartItemCouponTitle.style.js +1 -0
  93. package/cart/components/CartItem/CartItemProduct.js +5 -0
  94. package/cart/components/CartItem/CartItemProduct.style.js +1 -0
  95. package/cart/components/CartItem/CartItemProductLayout.js +6 -0
  96. package/cart/components/CartItem/CartItemProductLayout.style.js +1 -0
  97. package/cart/components/CartItem/CartItemProductLayoutWide.js +4 -0
  98. package/cart/components/CartItem/CartItemProductLayoutWide.style.js +1 -0
  99. package/cart/components/CartItem/CartItemProductLayoutWideFulfillmentLabel.js +4 -0
  100. package/cart/components/CartItem/CartItemProductLayoutWideFulfillmentLabel.style.js +1 -0
  101. package/cart/components/CartItem/CartItemProductLayoutWideOrderDetails.js +3 -0
  102. package/cart/components/CartItem/CartItemProductLayoutWideRemoveItem.js +4 -0
  103. package/cart/components/CartItem/CartItemProductLayoutWideRemoveItem.style.js +1 -0
  104. package/cart/components/CartItem/CartItemProductOrderDetails.js +3 -0
  105. package/cart/components/CartItem/CartItemProductOrderDetails.style.js +1 -0
  106. package/cart/components/CartItem/CartItemProductPriceCaption.js +4 -0
  107. package/cart/components/CartItem/CartItemProductPriceCaption.style.js +1 -0
  108. package/cart/components/CartItem/CartItemProductPriceList.js +5 -0
  109. package/cart/components/CartItem/CartItemProductPriceListPromotion.js +10 -0
  110. package/cart/components/CartItem/CartItemProductProvider.connector.js +9 -0
  111. package/cart/components/CartItem/CartItemProductProvider.context.js +1 -0
  112. package/cart/components/CartItem/CartItemProductProvider.js +12 -0
  113. package/cart/components/CartItem/CartItemProductProvider.types.js +1 -0
  114. package/cart/components/CartItem/CartItemProductProviderLegacy.js +22 -0
  115. package/cart/components/CartItem/CartItemProductTitle.js +7 -0
  116. package/cart/components/CartItem/CartItemProductTitle.style.js +1 -0
  117. package/cart/components/CartItem/CartItemProvider.connector.js +3 -0
  118. package/cart/components/CartItem/CartItemProvider.context.js +1 -0
  119. package/cart/components/CartItem/CartItemProvider.js +5 -0
  120. package/cart/components/CartItem/CartItemQuantityPicker.js +38 -0
  121. package/cart/components/CartItem/CartItemQuantityPicker.style.js +1 -0
  122. package/cart/components/CartItem/CartItemSubstitution.connector.js +5 -0
  123. package/cart/components/CartItem/CartItemSubstitution.js +5 -0
  124. package/cart/components/CartItem/CartItemSubstitution.style.js +1 -0
  125. package/cart/components/CartItem/index.js +1 -0
  126. package/cart/components/CartItems/CartItem.connector.js +4 -0
  127. package/cart/components/CartItems/CartItemCard.js +5 -0
  128. package/cart/components/CartItems/CartItemCard.style.js +1 -0
  129. package/cart/components/CartItems/CartItemCardReservation.js +5 -0
  130. package/cart/components/CartItems/CartItemCardReservationAccordion.js +4 -0
  131. package/cart/components/CartItems/CartItemCardReservationLabel.js +5 -0
  132. package/cart/components/CartItems/CartItemCardReservationLabelChangeStore.js +3 -0
  133. package/cart/components/CartItems/CartItemCardReservationLabelChangeStore.style.js +1 -0
  134. package/cart/components/CartItems/CartItemGroup.js +5 -0
  135. package/cart/components/CartItems/CartItemGroup.style.js +1 -0
  136. package/cart/components/CartItems/CartItemGroupReservation.js +5 -0
  137. package/cart/components/CartItems/CartItemGroupReservationLabel.js +5 -0
  138. package/cart/components/CartItems/CartItemGroupShipping.js +4 -0
  139. package/cart/components/CartItems/CartItems.js +5 -0
  140. package/cart/components/CartItems/CartItems.style.js +1 -0
  141. package/cart/components/CartItems/CartItemsHeaderWide.connector.js +3 -0
  142. package/cart/components/CartItems/CartItemsHeaderWide.js +3 -0
  143. package/cart/components/CartItems/CartItemsHeaderWide.style.js +1 -0
  144. package/cart/components/CartItems/CartItemsSubscription.connector.js +5 -0
  145. package/cart/components/CartItems/CartItemsSubstitution.js +5 -0
  146. package/cart/components/CartItems/index.js +1 -0
  147. package/cart/components/CartSummaryWide/CartSummaryWide.connector.js +4 -0
  148. package/cart/components/CartSummaryWide/CartSummaryWide.js +4 -0
  149. package/cart/components/CartSummaryWide/CartSummaryWide.style.js +1 -0
  150. package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.connector.js +5 -0
  151. package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.js +4 -0
  152. package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.style.js +1 -0
  153. package/cart/components/CartSummaryWide/CartSummaryWideFooter.js +3 -0
  154. package/cart/components/CartSummaryWide/index.js +1 -0
  155. package/cart/components/PaymentBar/PaymentBar.js +5 -0
  156. package/cart/components/PaymentBar/PaymentBarAppliedPromotions.connector.js +5 -0
  157. package/cart/components/PaymentBar/PaymentBarAppliedPromotions.js +3 -0
  158. package/cart/components/PaymentBar/PaymentBarCheckoutButton.connector.js +5 -0
  159. package/cart/components/PaymentBar/PaymentBarCheckoutButton.js +5 -0
  160. package/cart/components/PaymentBar/PaymentBarCheckoutButton.style.js +1 -0
  161. package/cart/components/PaymentBar/PaymentBarContent.js +4 -0
  162. package/cart/components/PaymentBar/PaymentBarContent.style.js +1 -0
  163. package/cart/components/PaymentBar/PaymentBarDiscounts.connector.js +5 -0
  164. package/cart/components/PaymentBar/PaymentBarDiscounts.js +4 -0
  165. package/cart/components/PaymentBar/PaymentBarGrandTotal.connector.js +5 -0
  166. package/cart/components/PaymentBar/PaymentBarGrandTotal.js +4 -0
  167. package/cart/components/PaymentBar/PaymentBarPromotionCouponMessages.js +4 -0
  168. package/cart/components/PaymentBar/PaymentBarPromotionCoupons.connector.js +8 -0
  169. package/cart/components/PaymentBar/PaymentBarPromotionCoupons.js +3 -0
  170. package/cart/components/PaymentBar/PaymentBarPromotionalText.js +4 -0
  171. package/cart/components/PaymentBar/PaymentBarReserveButton.connector.js +1 -0
  172. package/cart/components/PaymentBar/PaymentBarReserveButton.js +7 -0
  173. package/cart/components/PaymentBar/PaymentBarShippingCost.connector.js +5 -0
  174. package/cart/components/PaymentBar/PaymentBarShippingCost.js +3 -0
  175. package/cart/components/PaymentBar/PaymentBarSubTotal.connector.js +5 -0
  176. package/cart/components/PaymentBar/PaymentBarSubTotal.js +3 -0
  177. package/cart/components/PaymentBar/PaymentBarTax.connector.js +5 -0
  178. package/cart/components/PaymentBar/PaymentBarTax.js +4 -0
  179. package/cart/components/PaymentBar/index.js +1 -0
  180. package/cart/components/Substitution/connector.js +5 -0
  181. package/cart/components/Substitution/index.js +9 -0
  182. package/cart/components/Substitution/style.js +1 -0
  183. package/cart/components/SupplementalContent/SupplementalContent.connector.js +4 -0
  184. package/cart/components/SupplementalContent/SupplementalContent.js +5 -0
  185. package/cart/components/SupplementalContent/SupplementalContent.styles.js +1 -0
  186. package/cart/components/SupplementalContent/index.js +1 -0
  187. package/cart/index.js +10 -5
  188. package/cart/streams/index.js +1 -0
  189. package/category/actions/index.js +1 -0
  190. package/category/components/CategoryImage/connector.js +5 -0
  191. package/category/components/CategoryImage/index.js +5 -0
  192. package/category/components/CategoryList/index.js +2 -2
  193. package/category/components/CategoryList/style.js +1 -1
  194. package/category/components/index.js +1 -0
  195. package/category/constants/index.js +1 -0
  196. package/category/helpers/index.js +1 -0
  197. package/category/index.js +1 -7
  198. package/category/selectors/index.js +2 -0
  199. package/category/streams/index.js +1 -0
  200. package/checkout/action-creators/addCheckoutCampaign.js +5 -0
  201. package/checkout/action-creators/clearCheckoutCampaign.js +5 -0
  202. package/checkout/action-creators/clearCheckoutOrder.js +4 -0
  203. package/checkout/action-creators/index.js +1 -0
  204. package/checkout/action-creators/validationErrorsCheckout.js +5 -0
  205. package/checkout/actions/errorCheckout.js +17 -0
  206. package/checkout/actions/fetchCheckoutOrder.js +4 -0
  207. package/checkout/actions/fetchPaymentMethods.js +4 -0
  208. package/checkout/actions/index.js +1 -0
  209. package/checkout/actions/initializeCheckout.js +4 -0
  210. package/checkout/actions/prepareCheckout.js +8 -0
  211. package/checkout/actions/submitCheckoutOrder.js +5 -0
  212. package/checkout/actions/updateCheckoutOrder.js +5 -0
  213. package/checkout/components/AddressBook/AddressBook.js +5 -0
  214. package/checkout/components/AddressBook/AddressList.js +9 -0
  215. package/checkout/components/AddressBook/index.js +1 -0
  216. package/checkout/components/AddressBookContact/AddressBookContact.js +5 -0
  217. package/checkout/components/AddressBookContact/index.js +1 -0
  218. package/checkout/components/Checkout/Checkout.js +4 -0
  219. package/checkout/components/Checkout/CheckoutActions.js +4 -0
  220. package/checkout/components/Checkout/CheckoutAddress.js +6 -0
  221. package/checkout/components/Checkout/CheckoutHeader.js +4 -0
  222. package/checkout/components/Checkout/CheckoutPickupContactForm.config.js +8 -0
  223. package/checkout/components/Checkout/CheckoutPickupContactForm.js +4 -0
  224. package/checkout/components/Checkout/CheckoutSection.js +4 -0
  225. package/checkout/components/Checkout/CheckoutSectionInfo.js +4 -0
  226. package/checkout/components/Checkout/CheckoutSectionMessages.js +4 -0
  227. package/checkout/components/Checkout/CheckoutSummary.js +4 -0
  228. package/checkout/components/CheckoutConfirmation/CheckoutConfirmation.connector.js +3 -0
  229. package/checkout/components/CheckoutConfirmation/CheckoutConfirmation.js +7 -0
  230. package/checkout/components/CheckoutConfirmation/CheckoutConfirmationBilledTo.js +4 -0
  231. package/checkout/components/CheckoutConfirmation/CheckoutConfirmationOrderContact.js +4 -0
  232. package/checkout/components/CheckoutConfirmation/CheckoutConfirmationOrderSummary.js +4 -0
  233. package/checkout/components/CheckoutConfirmation/CheckoutConfirmationPickUpContact.js +4 -0
  234. package/checkout/components/CheckoutConfirmation/CheckoutConfirmationPickupNotes.js +4 -0
  235. package/checkout/components/CheckoutConfirmation/CheckoutConfirmationSection.js +4 -0
  236. package/checkout/components/CheckoutConfirmation/CheckoutConfirmationShippedTo.js +4 -0
  237. package/checkout/components/CheckoutConfirmation/index.js +1 -0
  238. package/checkout/components/GuestCheckout/GuestCheckout.js +4 -0
  239. package/checkout/components/GuestCheckout/GuestCheckoutOptIn.config.js +4 -0
  240. package/checkout/components/GuestCheckout/GuestCheckoutOptIn.js +3 -0
  241. package/checkout/components/GuestCheckout/GuestCheckoutPickup.js +4 -0
  242. package/checkout/components/GuestCheckout/GuestCheckoutPickupNotes.config.js +4 -0
  243. package/checkout/components/GuestCheckout/GuestCheckoutPickupNotes.js +4 -0
  244. package/checkout/components/PaymentMethodButton/PaymentMethodButton.js +5 -0
  245. package/checkout/components/PaymentMethodButton/index.js +1 -0
  246. package/checkout/components/ResponsiveBackButton/ResponsiveBackButton.js +4 -0
  247. package/checkout/components/ResponsiveBackButton/ResponsiveBackButton.style.js +1 -0
  248. package/checkout/components/ResponsiveBackButton/index.js +1 -0
  249. package/checkout/components/ShippingMethods/ShippingMethod.js +5 -0
  250. package/checkout/components/ShippingMethods/ShippingMethods.js +23 -0
  251. package/checkout/components/ShippingMethods/connector.js +7 -0
  252. package/checkout/components/ShippingMethods/index.js +1 -0
  253. package/checkout/components/SupplementalContent/SupplementalContent.connector.js +4 -0
  254. package/checkout/components/SupplementalContent/SupplementalContent.js +5 -0
  255. package/checkout/components/SupplementalContent/SupplementalContent.styles.js +1 -0
  256. package/checkout/components/SupplementalContent/index.js +1 -0
  257. package/checkout/components/index.js +1 -0
  258. package/checkout/constants/actionTypes.js +1 -0
  259. package/checkout/constants/errorCodes.js +1 -0
  260. package/checkout/constants/index.js +1 -0
  261. package/checkout/constants/routes.js +1 -0
  262. package/checkout/helpers/index.js +34 -0
  263. package/checkout/hooks/common.js +7 -0
  264. package/checkout/index.js +6 -5
  265. package/checkout/paymentMethods/context.js +1 -0
  266. package/checkout/paymentMethods/index.js +28 -0
  267. package/checkout/paymentMethods/paypal/PaypalButton.js +5 -0
  268. package/checkout/paymentMethods/paypal/PaypalButtonApp.js +4 -0
  269. package/checkout/paymentMethods/paypal/PaypalButtonWeb.js +8 -0
  270. package/checkout/paymentMethods/paypal/PaypalPayButton.js +12 -0
  271. package/checkout/paymentMethods/paypal/PaypalProvider.js +6 -0
  272. package/checkout/paymentMethods/paypal/index.js +1 -0
  273. package/checkout/paymentMethods/paypal/paypal_logo.png +0 -0
  274. package/checkout/paymentMethods/paypal/sdk.js +9 -0
  275. package/checkout/paymentMethods/stripe/StripeButton.connector.js +6 -0
  276. package/checkout/paymentMethods/stripe/StripeButton.js +5 -0
  277. package/checkout/paymentMethods/stripe/StripeCreditCard.js +10 -0
  278. package/checkout/paymentMethods/stripe/StripePayButton.js +6 -0
  279. package/checkout/paymentMethods/stripe/StripeProvider.connector.js +6 -0
  280. package/checkout/paymentMethods/stripe/StripeProvider.context.js +1 -0
  281. package/checkout/paymentMethods/stripe/StripeProvider.js +33 -0
  282. package/checkout/paymentMethods/stripe/applepay.svg +84 -0
  283. package/checkout/paymentMethods/stripe/googlepay.png +0 -0
  284. package/checkout/paymentMethods/stripe/index.js +1 -0
  285. package/checkout/paymentMethods/stripe/sdk.js +9 -0
  286. package/checkout/providers/AddressBookProvider.context.js +1 -0
  287. package/checkout/providers/AddressBookProvider.js +11 -0
  288. package/checkout/providers/CheckoutProvider.connector.js +7 -0
  289. package/checkout/providers/CheckoutProvider.constraints.js +1 -0
  290. package/checkout/providers/CheckoutProvider.context.js +1 -0
  291. package/checkout/providers/CheckoutProvider.js +28 -0
  292. package/checkout/reducers/index.js +6 -0
  293. package/checkout/selectors/campaign.js +5 -0
  294. package/checkout/selectors/guestCheckout.js +5 -0
  295. package/checkout/selectors/order.js +59 -0
  296. package/checkout/selectors/payment.js +17 -0
  297. package/checkout/selectors/route.js +4 -0
  298. package/checkout/streams/index.js +1 -0
  299. package/checkout/subscriptions/index.js +3 -0
  300. package/components/BrandingColorBanner/BrandingColorBanner.js +5 -0
  301. package/components/BrandingColorBanner/index.js +1 -0
  302. package/components/ChipLayout/index.js +7 -7
  303. package/components/ChipLayout/spec.js +1 -1
  304. package/components/ChipLayout/style.js +2 -2
  305. package/components/ConditionalWrapper/ConditionalWrapper.js +10 -0
  306. package/components/ConditionalWrapper/index.js +1 -5
  307. package/components/ConnectedReactPortal/index.js +13 -0
  308. package/components/Footer/Footer.js +4 -23
  309. package/components/Footer/Footer.style.js +1 -7
  310. package/components/Footer/constants.js +1 -0
  311. package/components/Footer/helpers.js +75 -0
  312. package/components/Form/Builder/Builder.constants.js +1 -1
  313. package/components/Form/Builder/Builder.js +53 -37
  314. package/components/Form/Builder/ElementCheckbox.js +2 -2
  315. package/components/Form/Builder/ElementMultiSelect.js +6 -0
  316. package/components/Form/Builder/ElementPhoneNumber.js +20 -0
  317. package/components/Form/Builder/ElementRadio.js +2 -2
  318. package/components/Form/Builder/ElementSelect.js +3 -3
  319. package/components/Form/Builder/ElementText.js +4 -4
  320. package/components/Form/Builder/FormHelper.js +5 -0
  321. package/components/Form/Builder/classes/ActionListener.constants.js +2 -2
  322. package/components/Form/Builder/classes/ActionListener.js +72 -15
  323. package/components/Form/Builder/helpers/buildCountryList.js +3 -3
  324. package/components/Form/Builder/helpers/buildFormDefaults.js +1 -1
  325. package/components/Form/Builder/helpers/buildProvinceList.js +1 -1
  326. package/components/Form/Builder/helpers/common.js +6 -0
  327. package/components/Form/Builder/stylePresets.js +1 -0
  328. package/components/Form/Form.js +11 -8
  329. package/components/Form/index.js +1 -1
  330. package/components/IntersectionVisibility/index.js +13 -6
  331. package/components/Logo/connector.js +4 -0
  332. package/components/Logo/index.js +2 -2
  333. package/components/Logo/spec.js +1 -1
  334. package/components/Logo/style.js +1 -1
  335. package/components/Menu/components/Item/index.js +8 -0
  336. package/components/Menu/components/Item/style.js +4 -0
  337. package/components/Menu/components/Position/index.js +16 -0
  338. package/components/Menu/components/Position/style.js +1 -0
  339. package/components/Menu/index.js +12 -0
  340. package/components/Menu/style.js +1 -0
  341. package/components/MessageBar/MessageBar.js +9 -0
  342. package/components/MessageBar/MessageBar.style.js +11 -0
  343. package/components/MessageBar/index.js +1 -7
  344. package/components/NavigationHandler/connector.js +1 -1
  345. package/components/NavigationHandler/index.js +6 -6
  346. package/components/NavigationHandler/spec.js +1 -1
  347. package/components/Picker/components/Button/index.js +1 -1
  348. package/components/Picker/components/List/index.js +2 -2
  349. package/components/Picker/components/Modal/index.js +7 -7
  350. package/components/Picker/index.js +19 -10
  351. package/components/Picker/spec.js +2 -2
  352. package/components/PickerUtilize/components/Button/index.js +1 -1
  353. package/components/PickerUtilize/index.js +8 -6
  354. package/components/PickerUtilize/spec.js +2 -1
  355. package/components/QuantityInput/QuantityInput.js +5 -4
  356. package/components/QuantityLabel/QuantityLabel.js +4 -0
  357. package/components/QuantityLabel/index.js +1 -0
  358. package/components/Radio/Radio.js +5 -0
  359. package/components/Radio/index.js +1 -0
  360. package/components/RadioCard/RadioCard.js +9 -0
  361. package/components/RadioCard/index.js +1 -0
  362. package/components/RadioGroup/RadioGroup.context.js +1 -0
  363. package/components/RadioGroup/RadioGroup.js +4 -0
  364. package/components/RadioGroup/index.js +1 -0
  365. package/components/RadioGroup/useRadioGroup.js +4 -0
  366. package/components/RangeSlider/components/Handle/index.js +2 -2
  367. package/components/RangeSlider/components/Handle/style.js +1 -1
  368. package/components/RangeSlider/helper.js +3 -3
  369. package/components/RangeSlider/index.js +35 -23
  370. package/components/RangeSlider/spec.js +4 -4
  371. package/components/ResponsiveContainer/ResponsiveContainer.js +6 -0
  372. package/components/ResponsiveContainer/breakpoints.js +14 -0
  373. package/components/ResponsiveContainer/condition.js +6 -0
  374. package/components/ResponsiveContainer/hooks.js +20 -0
  375. package/components/ResponsiveContainer/index.js +1 -0
  376. package/components/ResponsiveContainer/listener.js +10 -0
  377. package/components/ResponsiveContainer/mediaQuery.js +8 -0
  378. package/components/ScrollHeader/index.js +22 -5
  379. package/components/ScrollHeader/style.js +1 -1
  380. package/components/SheetDrawer/index.js +4 -3
  381. package/components/SheetList/components/Item/index.js +5 -5
  382. package/components/SheetList/components/Item/spec.js +2 -2
  383. package/components/SheetList/components/Item/style.js +1 -1
  384. package/components/SheetList/index.js +4 -4
  385. package/components/SheetList/spec.js +1 -1
  386. package/components/SheetList/style.js +1 -1
  387. package/components/SideNavigation/SideNavigation.hooks.js +4 -0
  388. package/components/SideNavigation/SideNavigation.js +4 -0
  389. package/components/SideNavigation/SideNavigationCategories.connector.js +8 -0
  390. package/components/SideNavigation/SideNavigationCategories.js +4 -0
  391. package/components/SideNavigation/SideNavigationCategories.style.js +1 -0
  392. package/components/SideNavigation/SideNavigationCategoriesItem.connector.js +8 -0
  393. package/components/SideNavigation/SideNavigationCategoriesItem.js +5 -0
  394. package/components/SideNavigation/SideNavigationCategoriesItem.style.js +2 -0
  395. package/components/SideNavigation/SideNavigationCategoriesItemChildren.js +5 -0
  396. package/components/SideNavigation/SideNavigationContent.js +3 -0
  397. package/components/SideNavigation/SideNavigationContent.style.js +4 -0
  398. package/components/SideNavigation/SideNavigationItem.js +4 -0
  399. package/components/SideNavigation/SideNavigationItem.style.js +4 -0
  400. package/components/SideNavigation/SideNavigationLinks.js +4 -0
  401. package/components/SideNavigation/SideNavigationLinksLegal.connector.js +4 -0
  402. package/components/SideNavigation/SideNavigationLinksLegal.js +5 -0
  403. package/components/SideNavigation/SideNavigationLinksQuicklinks.connector.js +4 -0
  404. package/components/SideNavigation/SideNavigationLinksQuicklinks.js +5 -0
  405. package/components/SideNavigation/SideNavigationNestedItem.js +4 -0
  406. package/components/SideNavigation/SideNavigationProvider.connector.js +8 -0
  407. package/components/SideNavigation/SideNavigationProvider.context.js +1 -0
  408. package/components/SideNavigation/SideNavigationProvider.js +4 -0
  409. package/components/SideNavigation/index.js +1 -0
  410. package/components/SideNavigation/selectors.js +17 -0
  411. package/components/SnackBarContainer/index.js +1 -1
  412. package/components/Switch/index.js +1 -1
  413. package/components/Tabs/TabContext.js +7 -0
  414. package/components/Tabs/components/Tab.js +11 -0
  415. package/components/Tabs/components/Tab.style.js +1 -0
  416. package/components/Tabs/components/TabIndicator.js +5 -0
  417. package/components/Tabs/components/TabIndicator.style.js +1 -0
  418. package/components/Tabs/components/TabPanel.js +5 -0
  419. package/components/Tabs/components/Tabs.js +11 -0
  420. package/components/Tabs/components/Tabs.style.js +2 -0
  421. package/components/Tabs/debounce.js +11 -0
  422. package/components/Tabs/index.js +1 -0
  423. package/components/Tabs/ownerDocument.js +4 -0
  424. package/components/Tabs/ownerWindow.js +4 -0
  425. package/components/Tabs/useEventCallback.js +6 -0
  426. package/components/TextLink/TextLink.js +5 -0
  427. package/components/TextLink/TextLink.style.js +1 -0
  428. package/components/TimeBoundary/index.js +10 -8
  429. package/components/TimeBoundary/spec.js +3 -3
  430. package/components/Toggle/index.js +5 -0
  431. package/components/Toggle/style.js +1 -0
  432. package/components/VideoPlayer/index.js +9 -6
  433. package/components/View/components/Above/index.js +1 -1
  434. package/components/View/components/Below/index.js +1 -1
  435. package/components/View/components/Content/index.js +13 -13
  436. package/components/View/components/Content/style.js +1 -1
  437. package/components/View/context.js +1 -1
  438. package/components/View/index.js +5 -5
  439. package/components/View/provider.js +24 -7
  440. package/components/View/style.js +1 -6
  441. package/components/index.js +4 -4
  442. package/core/action-creators/appPermissions.js +1 -1
  443. package/core/action-creators/index.js +1 -1
  444. package/core/action-creators/merchantSettings.js +5 -0
  445. package/core/action-creators/optIns.js +37 -0
  446. package/core/action-creators/shopSettings.js +9 -0
  447. package/core/actions/getGeolocation.js +2 -2
  448. package/core/actions/grantAppTrackingTransparencyPermission.js +3 -1
  449. package/core/actions/grantGeolocationPermissions.js +6 -2
  450. package/core/actions/grantPermissions.js +16 -4
  451. package/core/actions/grantPushPermissions.js +4 -3
  452. package/core/actions/index.js +2 -2
  453. package/core/actions/requestAppPermission.js +7 -2
  454. package/core/actions/requestAppPermissionStatus.js +7 -2
  455. package/core/actions/updateStatusBarBackground.js +3 -3
  456. package/core/classes/GeolocationRequest.js +8 -4
  457. package/core/classes/GeolocationRequestApp.js +16 -0
  458. package/core/classes/GeolocationRequestBrowser.js +8 -0
  459. package/core/collections/AppInitialization.js +4 -6
  460. package/core/config/ThemeConfigResolver.js +3 -3
  461. package/core/config/config.action-creators.js +12 -0
  462. package/core/config/config.actions.js +3 -0
  463. package/core/config/config.constants.js +1 -0
  464. package/core/config/config.reducers.js +6 -0
  465. package/core/config/config.selectors.js +39 -0
  466. package/core/config/config.streams.js +1 -0
  467. package/core/config/config.subscriptions.js +4 -0
  468. package/core/config/config.types.js +0 -0
  469. package/core/config/index.js +1 -0
  470. package/core/constants/appFeatures.js +1 -1
  471. package/core/constants/deviceTypes.js +1 -0
  472. package/core/constants/geolocationRequest.js +1 -1
  473. package/core/constants/index.js +9 -3
  474. package/core/constants/merchantSettings.js +1 -0
  475. package/core/constants/optIns.js +1 -0
  476. package/core/constants/pipelines.js +1 -0
  477. package/core/constants/shopSettings.js +2 -0
  478. package/core/contexts/AppContext.js +1 -1
  479. package/core/contexts/ThemeResourcesContext.d.ts +69 -0
  480. package/core/contexts/ThemeResourcesContext.js +3 -0
  481. package/core/contexts/index.js +1 -0
  482. package/core/events/index.js +1 -0
  483. package/core/helpers/androidNavigationBar.js +12 -0
  484. package/core/helpers/appFeatures.js +21 -9
  485. package/core/helpers/appPermissions.js +58 -0
  486. package/core/helpers/baseUrl.js +1 -1
  487. package/core/helpers/bridge.js +4 -0
  488. package/core/helpers/deviceType.js +5 -0
  489. package/core/helpers/environment.js +4 -0
  490. package/core/helpers/errorBehavior.js +32 -0
  491. package/core/helpers/featureFlag.js +11 -0
  492. package/core/helpers/getFullImageSource.js +21 -2
  493. package/core/helpers/googleMaps.js +8 -0
  494. package/core/helpers/i18n.js +10 -5
  495. package/core/helpers/index.js +3 -3
  496. package/core/helpers/isIOSTheme.js +4 -0
  497. package/core/helpers/isTouchDevice.js +4 -0
  498. package/core/helpers/nl2br.js +1 -0
  499. package/core/helpers/scrollContainer.js +4 -0
  500. package/core/helpers/string.js +9 -0
  501. package/core/helpers/svgToDataUrl.js +9 -0
  502. package/core/helpers/updateLegacyNavigationBar.js +5 -2
  503. package/core/hocs/index.js +1 -0
  504. package/core/hocs/withApp.js +1 -1
  505. package/core/hocs/withCurrentProduct.js +3 -3
  506. package/core/hocs/withForwardedRef.js +1 -1
  507. package/core/hocs/withNavigation.js +1 -1
  508. package/core/hocs/withRoute.js +1 -1
  509. package/core/hocs/withTheme.js +42 -3
  510. package/core/hocs/withThemeResources.js +19 -0
  511. package/core/hocs/withWidgetSettings.js +1 -1
  512. package/core/hocs/withWidgetStyles.js +1 -1
  513. package/core/hooks/events/index.js +1 -0
  514. package/core/hooks/events/useLongPress.d.ts +68 -0
  515. package/core/hooks/events/useLongPress.js +13 -0
  516. package/core/hooks/events/usePressHandler.js +38 -0
  517. package/core/hooks/events/useScrollDirectionChange.d.ts +74 -0
  518. package/core/hooks/events/useScrollDirectionChange.js +18 -0
  519. package/core/hooks/html/useLoadImage.js +1 -1
  520. package/core/hooks/index.js +1 -0
  521. package/core/hooks/layout/index.js +1 -0
  522. package/core/hooks/layout/useElementSize.d.ts +46 -0
  523. package/core/hooks/layout/useElementSize.js +18 -0
  524. package/core/hooks/useAsyncMemo.js +12 -0
  525. package/core/hooks/useFormState.js +27 -0
  526. package/core/hooks/usePrevious.js +2 -0
  527. package/core/hooks/useScrollTo.js +5 -0
  528. package/core/hooks/useTheme.js +38 -2
  529. package/core/hooks/useThemeResources.js +22 -0
  530. package/core/hooks/useWidgetStyles.js +1 -1
  531. package/core/index.js +5 -11
  532. package/core/initialization/index.js +19 -4
  533. package/core/providers/AppProvider.js +9 -9
  534. package/core/providers/ThemeResourcesProvider.js +19 -0
  535. package/core/providers/index.js +1 -0
  536. package/core/reducers/index.js +1 -1
  537. package/core/reducers/merchantSettings.js +6 -0
  538. package/core/reducers/shopSettings.js +6 -0
  539. package/core/selectors/index.js +1 -1
  540. package/core/selectors/merchantSettings.js +10 -0
  541. package/core/selectors/shopSettings.js +25 -0
  542. package/core/streams/app.js +1 -1
  543. package/core/streams/index.js +1 -1
  544. package/core/streams/optIns.js +13 -0
  545. package/core/subscriptions/app.js +4 -3
  546. package/core/validation/index.js +1 -0
  547. package/core/validation/validation.hooks.js +4 -0
  548. package/core/validation/validation.js +12 -0
  549. package/development/action-creators/index.js +1 -0
  550. package/development/action-creators/settings.js +9 -0
  551. package/development/action-creators/storage.js +6 -0
  552. package/development/components/DevelopmentTools/DevelopmentTools.js +6 -0
  553. package/development/components/DevelopmentTools/Shortcuts.js +4 -0
  554. package/development/components/DevelopmentTools/hooks.js +8 -0
  555. package/development/components/DevelopmentTools/index.js +1 -0
  556. package/development/components/SimulatedInsets/SimulatedInsetBottom.js +7 -0
  557. package/development/components/SimulatedInsets/SimulatedInsetTop.js +12 -0
  558. package/development/components/SimulatedInsets/SimulatedInsets.js +6 -0
  559. package/development/components/SimulatedInsets/index.js +1 -0
  560. package/development/components/index.js +1 -0
  561. package/development/constants/actionTypes.js +1 -0
  562. package/development/constants/index.js +1 -0
  563. package/development/reducers/index.js +1 -0
  564. package/development/reducers/settings.js +10 -0
  565. package/development/reducers/storage.js +9 -0
  566. package/development/selectors/index.js +1 -0
  567. package/development/selectors/settings.js +21 -0
  568. package/development/selectors/storage.js +16 -0
  569. package/development/streams/index.js +1 -0
  570. package/development/streams/insets.js +4 -0
  571. package/development/subscriptions/index.js +6 -0
  572. package/favorites/components/CommentDialog/CommentDialog.js +12 -0
  573. package/favorites/components/CommentDialog/index.js +1 -0
  574. package/favorites/components/FavoriteButtonWide/FavoriteButtonWide.js +8 -0
  575. package/favorites/components/FavoriteButtonWide/index.js +1 -0
  576. package/favorites/components/Item/Item.js +13 -9
  577. package/favorites/components/Item/ItemCharacteristics.js +2 -2
  578. package/favorites/components/Item/ItemNotes.js +7 -0
  579. package/favorites/components/Item/ItemQuantity.js +7 -0
  580. package/favorites/components/ItemFulfillmentMethod/ItemFulfillmentMethod.js +4 -0
  581. package/favorites/components/ItemFulfillmentMethod/index.js +1 -0
  582. package/favorites/components/List/List.js +19 -15
  583. package/favorites/components/List/ListAccordionHeader.js +8 -0
  584. package/favorites/components/List/ListAccordionLabel.js +5 -0
  585. package/favorites/components/List/ListContent.js +8 -0
  586. package/favorites/components/List/ListItemWrapper.js +6 -0
  587. package/favorites/components/List/styles.js +1 -0
  588. package/favorites/components/ListChooser/ListChooser.js +2 -2
  589. package/favorites/components/ListChooser/ListChooserItem.js +4 -5
  590. package/favorites/components/Lists/Lists.js +17 -13
  591. package/favorites/components/Lists/ListsModal.js +3 -4
  592. package/favorites/components/RemoveButton/RemoveButton.js +2 -2
  593. package/favorites/constants/Portals.js +1 -2
  594. package/favorites/constants/index.js +1 -0
  595. package/favorites/index.js +2 -2
  596. package/filter/actions/index.js +1 -0
  597. package/filter/components/FilterItem/index.js +2 -2
  598. package/filter/components/FilterItem/spec.js +1 -1
  599. package/filter/components/FilterPageContent/components/ApplyButton/index.js +7 -0
  600. package/filter/components/FilterPageContent/components/ApplyButton/spec.js +1 -0
  601. package/filter/components/FilterPageContent/components/ApplyButton/style.js +1 -0
  602. package/filter/components/FilterPageContent/components/ResetButton/index.js +7 -0
  603. package/filter/components/FilterPageContent/components/ResetButton/spec.js +1 -0
  604. package/filter/components/FilterPageContent/components/ResetButton/style.js +1 -0
  605. package/filter/components/FilterPageContent/components/Selector/components/Selected/index.js +7 -0
  606. package/filter/components/FilterPageContent/components/Selector/components/Selected/spec.js +1 -0
  607. package/filter/components/FilterPageContent/components/Selector/components/Selected/style.js +1 -0
  608. package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.js +7 -0
  609. package/filter/components/FilterPageContent/components/Selector/components/Toggle/spec.js +1 -0
  610. package/filter/components/FilterPageContent/components/Selector/components/Toggle/style.js +1 -0
  611. package/filter/components/FilterPageContent/components/Selector/components/ValueButton/index.js +7 -0
  612. package/filter/components/FilterPageContent/components/Selector/components/ValueButton/spec.js +1 -0
  613. package/filter/components/FilterPageContent/components/Selector/components/ValueButton/style.js +1 -0
  614. package/filter/components/FilterPageContent/components/Selector/index.js +19 -0
  615. package/filter/components/FilterPageContent/components/Selector/spec.js +1 -0
  616. package/filter/components/FilterPageContent/components/Selector/style.js +1 -0
  617. package/filter/components/FilterPageContent/index.js +6 -0
  618. package/filter/components/FilterPageContentWithProvider/index.js +16 -0
  619. package/filter/components/PriceSlider/components/Label/index.js +3 -3
  620. package/filter/components/PriceSlider/components/Label/spec.js +1 -1
  621. package/filter/components/PriceSlider/index.js +8 -8
  622. package/filter/components/PriceSlider/spec.js +1 -1
  623. package/filter/components/PriceSlider/style.js +1 -1
  624. package/filter/components/index.js +1 -0
  625. package/filter/constants/index.js +1 -0
  626. package/filter/constants/sort.js +11 -0
  627. package/filter/helpers/buildFilterParamsForFetchFiltersRequest.js +2 -2
  628. package/filter/helpers/buildInitialFilters.js +2 -2
  629. package/filter/helpers/buildUpdatedFilters.js +2 -2
  630. package/filter/helpers/index.js +1 -0
  631. package/filter/helpers/translateFilterLabel.js +3 -3
  632. package/filter/hocs/index.js +1 -0
  633. package/filter/hocs/withSort.js +16 -0
  634. package/filter/hooks/filterPage.js +5 -0
  635. package/filter/hooks/index.js +4 -0
  636. package/filter/index.js +2 -7
  637. package/filter/providers/FilterPageProvider.context.js +54 -0
  638. package/filter/providers/FilterPageProvider.js +98 -0
  639. package/filter/providers/SortProvider.connector.js +3 -0
  640. package/filter/providers/SortProvider.context.js +1 -0
  641. package/filter/providers/SortProvider.helpers.js +8 -0
  642. package/filter/providers/SortProvider.js +6 -0
  643. package/filter/providers/index.js +1 -0
  644. package/filter/selectors/index.js +17 -0
  645. package/filter/streams/index.js +1 -0
  646. package/i18n/countries.helpers.js +6 -0
  647. package/i18n/countries.hooks.js +6 -0
  648. package/i18n/index.js +1 -0
  649. package/i18n/locale/cs-cz/countries.json +255 -0
  650. package/i18n/locale/de-de/countries.json +255 -0
  651. package/i18n/locale/el-gr/countries.json +255 -0
  652. package/i18n/locale/en-us/countries.json +255 -0
  653. package/i18n/locale/es-es/countries.json +255 -0
  654. package/i18n/locale/fi-fi/countries.json +255 -0
  655. package/i18n/locale/fr-fr/countries.json +255 -0
  656. package/i18n/locale/hu-hu/countries.json +255 -0
  657. package/i18n/locale/it-it/countries.json +255 -0
  658. package/i18n/locale/nl-nl/countries.json +255 -0
  659. package/i18n/locale/pl-pl/countries.json +255 -0
  660. package/i18n/locale/pt-pt/countries.json +255 -0
  661. package/i18n/locale/ro-ro/countries.json +255 -0
  662. package/i18n/locale/sv-se/countries.json +255 -0
  663. package/locations/action-creators/errorInventories.js +7 -0
  664. package/locations/action-creators/errorLocations.js +6 -0
  665. package/locations/action-creators/errorProductInventories.js +7 -0
  666. package/locations/action-creators/errorProductLocations.js +6 -0
  667. package/locations/action-creators/index.js +1 -0
  668. package/locations/action-creators/provideProductAlternativeLocation.js +5 -0
  669. package/locations/action-creators/receiveInventories.js +5 -0
  670. package/locations/action-creators/receiveLocations.js +6 -0
  671. package/locations/action-creators/receiveProductInventories.js +7 -0
  672. package/locations/action-creators/receiveProductLocations.js +7 -0
  673. package/locations/action-creators/requestInventories.js +6 -0
  674. package/locations/action-creators/requestLocations.js +5 -0
  675. package/locations/action-creators/requestProductInventories.js +6 -0
  676. package/locations/action-creators/requestProductLocations.js +5 -0
  677. package/locations/action-creators/selectGlobalLocation.js +5 -0
  678. package/locations/action-creators/selectLocation.js +6 -0
  679. package/locations/action-creators/setStoreFinderSearchRadius.js +5 -0
  680. package/locations/action-creators/setUserGeolocation.js +5 -0
  681. package/locations/action-creators/setUserSearchCountryCode.js +7 -0
  682. package/locations/action-creators/setUserSearchGeolocation.js +8 -0
  683. package/locations/action-creators/setUserSearchPostalCode.js +7 -0
  684. package/locations/action-creators/storeFormInput.js +5 -0
  685. package/locations/action-creators/storeFulfillmentMethod.js +5 -0
  686. package/locations/action-creators/submitReservationError.js +5 -0
  687. package/locations/action-creators/submitReservationRequest.js +5 -0
  688. package/locations/action-creators/submitReservationSuccess.js +5 -0
  689. package/locations/actions/fetchDefaultLocation.js +4 -0
  690. package/locations/actions/fetchFulfillmentSlots.js +6 -0
  691. package/locations/actions/fetchInventories.js +6 -0
  692. package/locations/actions/fetchLocations.js +19 -0
  693. package/locations/actions/fetchProductInventories.js +7 -0
  694. package/locations/actions/fetchProductLocations.js +12 -0
  695. package/locations/actions/index.js +5 -0
  696. package/locations/actions/sendDefaultLocationCode.js +6 -0
  697. package/locations/actions/setUserGeolocation.js +1 -0
  698. package/locations/actions/setUserSearchGeolocation.js +1 -0
  699. package/locations/actions/submitReservation.js +5 -0
  700. package/locations/assets/leaflet.css +765 -0
  701. package/locations/components/Cart/CartChangeFulfillmentMethod.connector.js +4 -0
  702. package/locations/components/Cart/CartChangeFulfillmentMethod.js +8 -0
  703. package/locations/components/Cart/CartChangeFulfillmentMethod.types.js +0 -0
  704. package/locations/components/Cart/CartContextMenuChangeFulfillment.js +6 -0
  705. package/locations/components/Cart/CartContextMenuChangeFulfillmentContent.js +5 -0
  706. package/locations/components/Cart/CartContextMenuChangeFulfillmentContent.style.js +1 -0
  707. package/locations/components/Cart/CartContextMenuItemChangeFulfillment.connector.js +4 -0
  708. package/locations/components/Cart/CartContextMenuItemChangeFulfillment.js +6 -0
  709. package/locations/components/Cart/CartContextMenuItemChangeLocation.js +7 -0
  710. package/locations/components/Cart/CartItemProductChangeLocation.connector.js +5 -0
  711. package/locations/components/Cart/CartItemProductChangeLocation.js +11 -0
  712. package/locations/components/Cart/CartItemProductChangeLocation.types.js +0 -0
  713. package/locations/components/Cart/index.js +1 -0
  714. package/locations/components/ChangeLocationButton/ChangeLocationButton.js +4 -0
  715. package/locations/components/ChangeLocationButton/ChangeLocationButton.style.js +2 -0
  716. package/locations/components/ChangeLocationButton/index.js +1 -0
  717. package/locations/components/FulfillmentPath/FulfillmentPath.js +4 -0
  718. package/locations/components/FulfillmentPath/FulfillmentPath.style.js +2 -0
  719. package/locations/components/FulfillmentPath/FulfillmentPathItem.js +6 -0
  720. package/locations/components/FulfillmentPath/index.js +1 -0
  721. package/locations/components/FulfillmentPathSelector/FulfillmentPathSelector.js +14 -0
  722. package/locations/components/FulfillmentPathSelector/FulfillmentPathSelector.style.js +1 -0
  723. package/locations/components/FulfillmentPathSelector/index.js +1 -0
  724. package/locations/components/FulfillmentSelector/FulfillmentSelector.connector.js +9 -0
  725. package/locations/components/FulfillmentSelector/FulfillmentSelector.context.js +1 -0
  726. package/locations/components/FulfillmentSelector/FulfillmentSelector.hooks.js +3 -0
  727. package/locations/components/FulfillmentSelector/FulfillmentSelector.js +20 -0
  728. package/locations/components/FulfillmentSelector/FulfillmentSelector.style.js +1 -0
  729. package/locations/components/FulfillmentSelector/FulfillmentSelector.types.js +1 -0
  730. package/locations/components/FulfillmentSelector/FulfillmentSelectorAddToCart.js +10 -0
  731. package/locations/components/FulfillmentSelector/FulfillmentSelectorAlternativeLocation.js +8 -0
  732. package/locations/components/FulfillmentSelector/FulfillmentSelectorBOPIS.js +4 -0
  733. package/locations/components/FulfillmentSelector/FulfillmentSelectorDirectShip.js +5 -0
  734. package/locations/components/FulfillmentSelector/FulfillmentSelectorHeader.js +4 -0
  735. package/locations/components/FulfillmentSelector/FulfillmentSelectorHeader.style.js +1 -0
  736. package/locations/components/FulfillmentSelector/FulfillmentSelectorImpossibleError.js +4 -0
  737. package/locations/components/FulfillmentSelector/FulfillmentSelectorImpossibleError.style.js +1 -0
  738. package/locations/components/FulfillmentSelector/FulfillmentSelectorItem.js +8 -0
  739. package/locations/components/FulfillmentSelector/FulfillmentSelectorItem.style.js +1 -0
  740. package/locations/components/FulfillmentSelector/FulfillmentSelectorLocation.js +4 -0
  741. package/locations/components/FulfillmentSelector/FulfillmentSelectorLocation.style.js +1 -0
  742. package/locations/components/FulfillmentSelector/FulfillmentSelectorLocationMethodNotAvailable.js +3 -0
  743. package/locations/components/FulfillmentSelector/FulfillmentSelectorROPIS.js +4 -0
  744. package/locations/components/FulfillmentSelector/index.js +1 -0
  745. package/locations/components/FulfillmentSheet/FulfillmentSheet.js +6 -0
  746. package/locations/components/FulfillmentSheet/FulfillmentSheet.style.js +1 -0
  747. package/locations/components/FulfillmentSheet/FulfillmentSheetContent.js +6 -0
  748. package/locations/components/FulfillmentSheet/index.js +1 -0
  749. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotDialog.js +28 -0
  750. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotProvider.connector.js +8 -0
  751. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotProvider.context.js +1 -0
  752. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotProvider.js +9 -0
  753. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcher.connector.js +4 -0
  754. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcher.js +4 -0
  755. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherBar.js +3 -0
  756. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherBar.style.js +1 -0
  757. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherDefault.js +3 -0
  758. package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherDefault.style.js +1 -0
  759. package/locations/components/FulfillmentSlotSwitcher/index.js +1 -0
  760. package/locations/components/FulfillmentSlotSwitcher/time.js +5 -0
  761. package/locations/components/GlobalLocationSelector/GlobalLocationSelector.js +16 -0
  762. package/locations/components/GlobalLocationSelector/index.js +1 -0
  763. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcher.connector.js +8 -0
  764. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcher.js +3 -0
  765. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherBar.js +3 -0
  766. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherBar.style.js +1 -0
  767. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherDefault.js +3 -0
  768. package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherDefault.style.js +1 -0
  769. package/locations/components/GlobalLocationSwitcher/index.js +1 -0
  770. package/locations/components/ReservationResponses/ReservationError.js +4 -0
  771. package/locations/components/ReservationResponses/ReservationResponse.style.js +1 -0
  772. package/locations/components/ReservationResponses/ReservationSuccess.js +4 -0
  773. package/locations/components/ReservationResponses/index.js +1 -0
  774. package/locations/components/ReserveForm/ReserveForm.constraints.js +1 -0
  775. package/locations/components/ReserveForm/ReserveForm.js +10 -0
  776. package/locations/components/ReserveForm/ReserveForm.style.js +1 -0
  777. package/locations/components/ReserveForm/ReserveFormPhone.connector.js +3 -0
  778. package/locations/components/ReserveForm/ReserveFormPhone.js +5 -0
  779. package/locations/components/ReserveForm/ReserveFormPhone.types.js +0 -0
  780. package/locations/components/ReserveForm/index.js +1 -0
  781. package/locations/components/StockInfo/StockInfo.defaultSettings.js +1 -0
  782. package/locations/components/StockInfo/StockInfo.js +8 -0
  783. package/locations/components/StockInfo/StockInfoInventory.js +9 -0
  784. package/locations/components/StockInfo/index.js +1 -0
  785. package/locations/components/StockInfoLists/index.js +9 -0
  786. package/locations/components/StoreDetails/components/FindMoreStores.js +4 -0
  787. package/locations/components/StoreDetails/components/GetDirectionsButton.js +7 -0
  788. package/locations/components/StoreDetails/components/StoreDetails.js +5 -0
  789. package/locations/components/StoreDetails/components/StoreFinderMap.js +20 -0
  790. package/locations/components/StoreDetails/components/StoreFinderMap.style.js +1 -0
  791. package/locations/components/StoreDetails/components/StoreLocationMap.js +4 -0
  792. package/locations/components/StoreDetails/components/StoresNearby.js +4 -0
  793. package/locations/components/StoreDetails/components/StoresNearbyListItem.js +9 -0
  794. package/locations/components/StoreDetails/index.js +4 -0
  795. package/locations/components/StoreFinder/Store.context.js +1 -0
  796. package/locations/components/StoreFinder/StoreFinder.js +3 -0
  797. package/locations/components/StoreFinder/StoreFinder.style.js +1 -0
  798. package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.connector.js +4 -0
  799. package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.js +4 -0
  800. package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.style.js +1 -0
  801. package/locations/components/StoreFinder/StoreFinderLocation.js +3 -0
  802. package/locations/components/StoreFinder/StoreFinderLocation.style.js +1 -0
  803. package/locations/components/StoreFinder/StoreFinderLocationDetails.js +3 -0
  804. package/locations/components/StoreFinder/StoreFinderLocationDetails.style.js +1 -0
  805. package/locations/components/StoreFinder/StoreFinderLocationHeader.js +3 -0
  806. package/locations/components/StoreFinder/StoreFinderLocationHeader.style.js +1 -0
  807. package/locations/components/StoreFinder/StoreFinderLocationHeaderPhoneNumber.js +4 -0
  808. package/locations/components/StoreFinder/StoreFinderLocations.js +5 -0
  809. package/locations/components/StoreFinder/StoreFinderLocations.style.js +1 -0
  810. package/locations/components/StoreFinder/StoreFinderSearch.js +3 -0
  811. package/locations/components/StoreFinder/StoreFinderSearch.style.js +1 -0
  812. package/locations/components/StoreFinder/StoreFinderSelectLocationButton.js +5 -0
  813. package/locations/components/StoreFinder/StoreFinderStoreInfoButton.js +8 -0
  814. package/locations/components/StoreFinder/index.js +1 -0
  815. package/locations/components/StoreList/Store.context.js +1 -0
  816. package/locations/components/StoreList/Store.style.js +1 -0
  817. package/locations/components/StoreList/StoreAddress.js +7 -0
  818. package/locations/components/StoreList/StoreAddressShort.js +7 -0
  819. package/locations/components/StoreList/StoreCard.js +4 -0
  820. package/locations/components/StoreList/StoreDetails.js +4 -0
  821. package/locations/components/StoreList/StoreDetailsLine.js +8 -0
  822. package/locations/components/StoreList/StoreDistance.js +7 -0
  823. package/locations/components/StoreList/StoreHeader.js +4 -0
  824. package/locations/components/StoreList/StoreHoursToday.js +7 -0
  825. package/locations/components/StoreList/StoreList.js +4 -0
  826. package/locations/components/StoreList/StoreListLocations.js +4 -0
  827. package/locations/components/StoreList/StoreListProduct.js +4 -0
  828. package/locations/components/StoreList/StoreListProduct.style.js +1 -0
  829. package/locations/components/StoreList/StoreListProductInfo.js +4 -0
  830. package/locations/components/StoreList/StoreListProductName.js +4 -0
  831. package/locations/components/StoreList/StoreListSearch.connector.js +7 -0
  832. package/locations/components/StoreList/StoreListSearch.js +23 -0
  833. package/locations/components/StoreList/StoreListSearch.style.js +1 -0
  834. package/locations/components/StoreList/StoreListSearchRadius.connector.js +7 -0
  835. package/locations/components/StoreList/StoreListSearchRadius.js +4 -0
  836. package/locations/components/StoreList/StoreListSearchRadius.style.js +1 -0
  837. package/locations/components/StoreList/StoreOpeningHours.js +7 -0
  838. package/locations/components/StoreList/StoreOpeningHoursLine.js +7 -0
  839. package/locations/components/StoreList/StorePhoneNumber.js +6 -0
  840. package/locations/components/StoreList/StoreSelectLocationButton.js +4 -0
  841. package/locations/components/StoreList/index.js +1 -0
  842. package/locations/components/index.js +1 -0
  843. package/locations/constants/ActionTypes.js +10 -0
  844. package/locations/constants/Pipelines.js +1 -0
  845. package/locations/constants/Portals.js +2 -0
  846. package/locations/constants/Stages.js +1 -0
  847. package/locations/constants/index.js +7 -0
  848. package/locations/constants/routes.js +1 -0
  849. package/locations/helpers/createOrder.js +28 -0
  850. package/locations/helpers/formatDistance.js +9 -0
  851. package/locations/helpers/getAvailabilitySettings.js +12 -0
  852. package/locations/helpers/index.js +1 -0
  853. package/locations/helpers/productInventory.js +7 -0
  854. package/locations/helpers/showInventoryInLists.js +7 -0
  855. package/locations/index.js +9 -0
  856. package/locations/locations.context.js +1 -0
  857. package/locations/locations.hooks.js +4 -0
  858. package/locations/locations.streams.js +1 -0
  859. package/locations/locations.types.js +1 -0
  860. package/locations/providers/FulfillmentProvider.connector.js +10 -0
  861. package/locations/providers/FulfillmentProvider.js +49 -0
  862. package/locations/providers/FulfillmentProvider.types.js +1 -0
  863. package/locations/providers/StoreDetailsContext.js +1 -0
  864. package/locations/providers/StoreDetailsProvider.js +4 -0
  865. package/locations/providers/StoreFinder.connector.js +3 -0
  866. package/locations/providers/StoreFinderProvider.js +7 -0
  867. package/locations/providers/index.js +1 -0
  868. package/locations/reducers/index.js +1 -0
  869. package/locations/reducers/storage.js +24 -0
  870. package/locations/reducers/storeFinderSearch.js +6 -0
  871. package/locations/reducers/user.js +5 -0
  872. package/locations/reducers/userFormInput.js +8 -0
  873. package/locations/reducers/userSearch.js +6 -0
  874. package/locations/selectors/index.js +145 -0
  875. package/locations/subscriptions.js +27 -0
  876. package/login/action-creators/index.js +1 -0
  877. package/login/action-creators/resetPassword.js +14 -0
  878. package/login/actions/index.js +1 -0
  879. package/login/actions/resetPassword.js +5 -0
  880. package/login/components/ForgotPassword/ForgotPassword.connector.js +5 -0
  881. package/login/components/ForgotPassword/ForgotPassword.js +5 -0
  882. package/login/components/ForgotPassword/ForgotPassword.style.js +1 -0
  883. package/login/components/ForgotPassword/index.js +1 -0
  884. package/login/constants/actions.js +1 -0
  885. package/login/constants/index.js +1 -0
  886. package/login/constants/pipelines.js +1 -0
  887. package/login/constants/routes.js +1 -0
  888. package/login/index.js +1 -0
  889. package/orders/action-creators/index.js +1 -0
  890. package/orders/action-creators/orderDetails.js +22 -0
  891. package/orders/action-creators/orders.js +21 -0
  892. package/orders/actions/cancelOrder.js +8 -0
  893. package/orders/actions/fetchOrderDetails.js +10 -0
  894. package/orders/actions/fetchOrderHistory.js +7 -0
  895. package/orders/actions/index.js +1 -0
  896. package/orders/components/OrderDetails/OrderDetails.js +4 -0
  897. package/orders/components/OrderDetails/OrderDetailsAuthenticate.js +3 -0
  898. package/orders/components/OrderDetails/OrderDetailsAuthenticate.style.js +1 -0
  899. package/orders/components/OrderDetails/OrderDetailsAuthenticateForm.config.js +8 -0
  900. package/orders/components/OrderDetails/OrderDetailsContent.js +3 -0
  901. package/orders/components/OrderDetails/OrderDetailsContent.style.js +1 -0
  902. package/orders/components/OrderDetails/OrderDetailsOrder.js +4 -0
  903. package/orders/components/OrderDetails/OrderDetailsOrder.style.js +1 -0
  904. package/orders/components/OrderDetails/OrderDetailsOrderHeader.js +4 -0
  905. package/orders/components/OrderDetails/OrderDetailsOrderHeader.style.js +1 -0
  906. package/orders/components/OrderDetails/OrderDetailsOrderPickupLocation.connector.js +3 -0
  907. package/orders/components/OrderDetails/OrderDetailsOrderPickupLocation.js +4 -0
  908. package/orders/components/OrderDetails/OrderDetailsOrderPickupLocation.style.js +1 -0
  909. package/orders/components/OrderDetails/index.js +1 -0
  910. package/orders/components/OrderHistory/OrderHistory.js +4 -0
  911. package/orders/components/OrderHistory/OrderHistory.style.js +1 -0
  912. package/orders/components/OrderHistory/OrderHistoryList.js +9 -0
  913. package/orders/components/OrderHistory/OrderHistoryList.style.js +1 -0
  914. package/orders/components/OrderHistory/OrderHistoryLoader.js +4 -0
  915. package/orders/components/OrderHistory/OrderHistoryTable.js +9 -0
  916. package/orders/components/OrderHistory/OrderHistoryTable.style.js +1 -0
  917. package/orders/components/OrderHistory/index.js +1 -0
  918. package/orders/components/index.js +1 -0
  919. package/orders/constants/actionTypes.js +1 -0
  920. package/orders/constants/index.js +1 -0
  921. package/orders/constants/pipelines.js +1 -0
  922. package/orders/constants/routes.js +1 -0
  923. package/orders/constants/status.js +12 -0
  924. package/orders/helpers/index.js +1 -0
  925. package/orders/helpers/orderDetails.js +5 -0
  926. package/orders/helpers/orderStatus.js +15 -0
  927. package/orders/hooks/index.js +7 -0
  928. package/orders/index.js +1 -1
  929. package/orders/providers/OrderDetailsPrivateProvider.connector.js +11 -0
  930. package/orders/providers/OrderDetailsPrivateProvider.js +5 -0
  931. package/orders/providers/OrderDetailsProvider.connector.js +11 -0
  932. package/orders/providers/OrderDetailsProvider.constraints.js +1 -0
  933. package/orders/providers/OrderDetailsProvider.context.js +1 -0
  934. package/orders/providers/OrderDetailsProvider.js +11 -0
  935. package/orders/providers/OrderHistoryProvider.connector.js +9 -0
  936. package/orders/providers/OrderHistoryProvider.context.js +1 -0
  937. package/orders/providers/OrderHistoryProvider.js +4 -0
  938. package/orders/reducers/index.js +1 -0
  939. package/orders/reducers/orders.js +7 -0
  940. package/orders/reducers/ordersById.js +7 -0
  941. package/orders/reducers/ordersByNumber.js +7 -0
  942. package/orders/selectors/index.js +27 -0
  943. package/orders/subscriptions/index.js +4 -0
  944. package/package.json +28 -18
  945. package/page/action-creators/index.js +22 -0
  946. package/page/actions/index.js +1 -0
  947. package/page/components/NotFound.js +3 -0
  948. package/page/components/Widgets/Overlay.js +51 -0
  949. package/page/components/Widgets/Tooltip.js +22 -0
  950. package/page/components/Widgets/Widget.js +15 -0
  951. package/page/components/Widgets/WidgetContext.d.ts +42 -0
  952. package/page/components/Widgets/WidgetContext.js +9 -0
  953. package/page/components/Widgets/WidgetProvider.js +8 -0
  954. package/page/components/Widgets/Widgets.js +11 -0
  955. package/page/components/Widgets/WidgetsPreviewContext.js +9 -0
  956. package/page/components/Widgets/WidgetsPreviewProvider.js +8 -0
  957. package/page/components/Widgets/constants.js +4 -0
  958. package/page/components/Widgets/events.js +23 -0
  959. package/page/components/Widgets/helpers.js +23 -0
  960. package/page/components/Widgets/hooks.js +69 -0
  961. package/page/components/Widgets/index.js +1 -0
  962. package/page/components/Widgets/types.d.ts +127 -0
  963. package/page/components/index.js +1 -0
  964. package/page/constants/actionTypes.js +1 -0
  965. package/page/constants/index.js +5 -1
  966. package/page/hooks/index.d.ts +60 -0
  967. package/page/hooks/index.js +25 -0
  968. package/page/index.js +1 -4
  969. package/page/reducers/index.js +6 -0
  970. package/page/selectors/index.js +53 -0
  971. package/page/subscriptions/index.js +4 -0
  972. package/page/widgets/HTML/HTML.js +5 -0
  973. package/page/widgets/HTML/hooks.js +12 -0
  974. package/page/widgets/HTML/index.js +1 -0
  975. package/page/widgets/Placeholder/Placeholder.js +5 -0
  976. package/page/widgets/Placeholder/hooks.js +12 -0
  977. package/page/widgets/Placeholder/index.js +1 -0
  978. package/page/widgets/ProductList/ProductList.js +5 -0
  979. package/page/widgets/ProductList/hooks.js +25 -0
  980. package/page/widgets/ProductList/index.js +1 -0
  981. package/page/widgets/ProductSlider/ProductSlider.js +4 -0
  982. package/page/widgets/ProductSlider/hooks.js +27 -0
  983. package/page/widgets/ProductSlider/index.js +1 -0
  984. package/page/widgets/index.js +1 -0
  985. package/page/widgets/widgets.json +14 -0
  986. package/product/collections/index.js +1 -0
  987. package/product/components/Availability/Availability.connector.js +5 -0
  988. package/product/components/Availability/Availability.js +6 -0
  989. package/product/components/Availability/Availability.style.js +1 -0
  990. package/product/components/Availability/index.js +1 -0
  991. package/product/components/Characteristics/Characteristic/components/Sheet/index.js +16 -4
  992. package/product/components/Characteristics/Characteristic/components/SheetItem/index.js +8 -3
  993. package/product/components/Characteristics/Characteristic/components/SheetItem/style.js +1 -1
  994. package/product/components/Characteristics/Characteristic/index.js +15 -6
  995. package/product/components/Characteristics/Characteristic/style.js +1 -1
  996. package/product/components/Characteristics/Swatch/index.js +8 -6
  997. package/product/components/Characteristics/index.js +10 -3
  998. package/product/components/Characteristics/transition.js +1 -1
  999. package/product/components/Description/index.js +5 -6
  1000. package/product/components/Description/style.js +1 -1
  1001. package/product/components/EffectivityDates/helpers.js +5 -5
  1002. package/product/components/EffectivityDates/index.js +2 -2
  1003. package/product/components/EffectivityDates/style.js +1 -1
  1004. package/product/components/Header/PriceStriked/index.js +2 -5
  1005. package/product/components/Header/PriceStriked/style.js +1 -1
  1006. package/product/components/Header/Shipping/components/Label/index.js +3 -3
  1007. package/product/components/Header/Shipping/components/Label/style.js +1 -1
  1008. package/product/components/Header/Shipping/index.js +1 -1
  1009. package/product/components/Header/Shipping/spec.js +1 -1
  1010. package/product/components/Header/Tiers/components/Tier/index.js +2 -2
  1011. package/product/components/Header/Tiers/components/Tier/spec.js +1 -1
  1012. package/product/components/Header/Tiers/index.js +1 -1
  1013. package/product/components/Header/Tiers/spec.js +1 -1
  1014. package/product/components/Header/index.js +1 -0
  1015. package/product/components/MapPriceHint/index.js +1 -1
  1016. package/product/components/Media/FeaturedMedia.js +2 -2
  1017. package/product/components/Media/MediaImage.js +3 -3
  1018. package/product/components/Media/MediaPlaceholder.js +1 -1
  1019. package/product/components/MediaSlider/components/MediaImage/index.js +1 -1
  1020. package/product/components/MediaSlider/components/MediaVideo/index.js +1 -1
  1021. package/product/components/MediaSlider/index.js +4 -4
  1022. package/product/components/Options/components/Content/index.js +8 -8
  1023. package/product/components/Options/components/Content/spec.js +2 -2
  1024. package/product/components/Options/components/Option/index.js +2 -2
  1025. package/product/components/Options/components/TextOption/components/OptionInfo/index.js +3 -3
  1026. package/product/components/Options/components/TextOption/components/OptionInfo/spec.js +1 -1
  1027. package/product/components/Options/components/TextOption/components/OptionInfo/style.js +1 -1
  1028. package/product/components/Options/components/TextOption/index.js +19 -7
  1029. package/product/components/Options/components/TextOption/style.js +1 -1
  1030. package/product/components/Options/index.js +2 -2
  1031. package/product/components/OrderQuantityHint/index.js +3 -2
  1032. package/product/components/OrderQuantityHint/style.js +1 -1
  1033. package/product/components/PriceDifference/index.js +1 -1
  1034. package/product/components/PriceDifference/style.js +1 -1
  1035. package/product/components/PriceInfo/PriceInfo.connector.js +4 -0
  1036. package/product/components/PriceInfo/PriceInfo.js +4 -0
  1037. package/product/components/PriceInfo/index.js +1 -0
  1038. package/product/components/ProductBadges/index.js +2 -2
  1039. package/product/components/ProductCard/index.js +12 -3
  1040. package/product/components/ProductCard/style.js +1 -1
  1041. package/product/components/ProductCharacteristics/context.js +1 -1
  1042. package/product/components/ProductCharacteristics/helpers/index.js +1 -1
  1043. package/product/components/ProductCharacteristics/index.js +30 -16
  1044. package/product/components/ProductDiscountBadge/index.js +2 -2
  1045. package/product/components/ProductDiscountBadge/spec.js +2 -2
  1046. package/product/components/ProductDiscountBadge/style.js +1 -1
  1047. package/product/components/ProductGrid/components/Item/components/ItemDetails/index.js +8 -0
  1048. package/product/components/ProductGrid/components/Item/components/ItemDetails/spec.js +1 -0
  1049. package/product/components/ProductGrid/components/Item/components/ItemDiscount/index.js +5 -0
  1050. package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/index.js +5 -0
  1051. package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/spec.js +1 -0
  1052. package/product/components/ProductGrid/components/Item/components/ItemImage/index.js +5 -0
  1053. package/product/components/ProductGrid/components/Item/components/ItemImage/spec.js +1 -0
  1054. package/product/components/ProductGrid/components/Item/components/ItemName/index.js +5 -0
  1055. package/product/components/ProductGrid/components/Item/components/ItemName/spec.js +1 -0
  1056. package/product/components/ProductGrid/components/Item/components/ItemPrice/index.js +5 -0
  1057. package/product/components/ProductGrid/components/Item/components/ItemPrice/spec.js +1 -0
  1058. package/product/components/ProductGrid/components/Item/index.js +7 -0
  1059. package/product/components/ProductGrid/components/Iterator/index.js +5 -0
  1060. package/product/components/ProductGrid/components/Layout/index.js +5 -0
  1061. package/product/components/ProductGrid/index.js +22 -0
  1062. package/product/components/ProductGrid/spec.js +1 -0
  1063. package/product/components/ProductGridPrice/index.js +4 -4
  1064. package/product/components/ProductGridPrice/style.js +1 -1
  1065. package/product/components/ProductImage/ProductImagePlaceholder.js +5 -0
  1066. package/product/components/ProductImage/connector.js +5 -0
  1067. package/product/components/ProductImage/index.js +17 -13
  1068. package/product/components/ProductImage/spec.js +1 -1
  1069. package/product/components/ProductList/components/Item/index.js +2 -2
  1070. package/product/components/ProductList/components/Iterator/index.js +1 -1
  1071. package/product/components/ProductList/components/Layout/index.js +1 -1
  1072. package/product/components/ProductList/index.js +2 -2
  1073. package/product/components/ProductName/ProductName.js +4 -0
  1074. package/product/components/ProductName/ProductNameContent.js +4 -0
  1075. package/product/components/ProductName/index.js +1 -0
  1076. package/product/components/ProductProperties/Content.js +4 -4
  1077. package/product/components/ProductProperties/Group.js +1 -1
  1078. package/product/components/ProductProperties/GroupedProperties.js +2 -2
  1079. package/product/components/ProductProperties/Lists.js +1 -1
  1080. package/product/components/ProductProperties/ListsHTML.js +5 -0
  1081. package/product/components/ProductProperties/ProductProperties.js +2 -2
  1082. package/product/components/ProductProperties/Row.js +1 -1
  1083. package/product/components/ProductProperties/RowHTML.js +5 -0
  1084. package/product/components/ProductProperties/Rows.js +2 -2
  1085. package/product/components/ProductProperties/Wrapper.js +1 -1
  1086. package/product/components/ProductProperties/helpers/getGroupsFromProperties.js +7 -2
  1087. package/product/components/ProductProperties/style.js +1 -1
  1088. package/product/components/ProductSlider/index.js +4 -3
  1089. package/product/components/ProductSlider/spec.js +1 -1
  1090. package/product/components/ProductVariants/VariantAvailability.connector.js +5 -0
  1091. package/product/components/ProductVariants/VariantAvailability.js +5 -0
  1092. package/product/components/ProductVariants/index.js +1 -0
  1093. package/product/components/QuantityPicker/hooks.js +5 -0
  1094. package/product/components/QuantityPicker/index.js +4 -3
  1095. package/product/components/Rating/index.js +3 -3
  1096. package/product/components/Rating/spec.js +2 -2
  1097. package/product/components/RelationsSlider/RelationsSheet.js +2 -2
  1098. package/product/components/RelationsSlider/RelationsSlider.js +1 -1
  1099. package/product/components/RelationsSlider/RelationsSliderContent.js +1 -1
  1100. package/product/components/RelationsSlider/style.js +1 -1
  1101. package/product/components/Swatch/Swatch.js +1 -1
  1102. package/product/components/Swatch/SwatchContent.js +1 -1
  1103. package/product/components/Swatch/VariantSwatch.js +1 -1
  1104. package/product/components/Swatch/style.js +1 -1
  1105. package/product/components/Swatches/Swatches.js +1 -1
  1106. package/product/components/UnitQuantityPicker/CartUnitQuantityPicker.js +4 -0
  1107. package/product/components/UnitQuantityPicker/ProductUnitQuantityPicker.js +3 -6
  1108. package/product/components/UnitQuantityPicker/UnitQuantityPicker.js +11 -13
  1109. package/product/components/UnitQuantityPicker/UnitQuantityPickerWithSection.js +5 -2
  1110. package/product/components/UnitQuantityPicker/index.js +1 -1
  1111. package/product/components/UnitQuantityPicker/styles.js +1 -0
  1112. package/product/components/context.js +1 -1
  1113. package/product/components/index.js +1 -0
  1114. package/product/constants/index.js +2 -1
  1115. package/product/contexts/index.js +1 -0
  1116. package/product/helpers/index.js +2 -2
  1117. package/product/helpers/redirects.js +2 -2
  1118. package/product/hocs/index.js +1 -0
  1119. package/product/hocs/withMapPricing.js +4 -4
  1120. package/product/hocs/withPriceCalculation.js +2 -2
  1121. package/product/hocs/withProduct.js +6 -0
  1122. package/product/hocs/withProductListEntry.js +1 -1
  1123. package/product/hocs/withProductListEntryProduct.js +12 -0
  1124. package/product/hocs/withProductListType.js +1 -1
  1125. package/product/hooks/index.js +1 -0
  1126. package/product/hooks/useLoadProductImage.js +1 -1
  1127. package/product/index.js +4 -11
  1128. package/product/product.types.js +0 -0
  1129. package/product/{components/ProductProvider → providers/Product}/index.js +1 -1
  1130. package/product/providers/ProductListEntry/context.js +1 -1
  1131. package/product/providers/ProductListEntry/index.js +1 -1
  1132. package/product/providers/ProductListType/context.js +2 -1
  1133. package/product/providers/ProductListType/index.js +2 -1
  1134. package/product/providers/index.js +1 -0
  1135. package/product/selectors/product.js +75 -6
  1136. package/product/selectors/variants.js +4 -1
  1137. package/product/streams/index.js +1 -0
  1138. package/push-opt-in/action-creators/pushOptIn.js +2 -1
  1139. package/push-opt-in/actions/pushOptInModal.js +3 -3
  1140. package/push-opt-in/components/PushOptInModal/index.js +3 -6
  1141. package/push-opt-in/components/PushOptInModal/push-opt-in.svg +58 -58
  1142. package/push-opt-in/reducers/optInModal.js +2 -2
  1143. package/push-opt-in/reducers/optInTrigger.js +2 -2
  1144. package/push-opt-in/selectors/optInModal.js +5 -2
  1145. package/push-opt-in/selectors/optInTrigger.js +4 -2
  1146. package/push-opt-in/subscriptions/index.js +1 -1
  1147. package/push-opt-in/subscriptions/optInTracking.js +4 -0
  1148. package/push-opt-in/subscriptions/optInTrigger.js +6 -6
  1149. package/registration/action-creators/index.js +18 -0
  1150. package/registration/actions/index.js +1 -0
  1151. package/registration/actions/submitRegistration.js +4 -0
  1152. package/registration/components/GuestRegistration/GuestRegistration.js +4 -0
  1153. package/registration/components/GuestRegistration/GuestRegistrationContent.js +4 -0
  1154. package/registration/components/GuestRegistration/GuestRegistrationFormPickup.config.js +8 -0
  1155. package/registration/components/GuestRegistration/GuestRegistrationFormPickup.js +4 -0
  1156. package/registration/components/Registration/Registration.js +4 -0
  1157. package/registration/components/Registration/RegistrationContent.js +4 -0
  1158. package/registration/components/Registration/RegistrationContent.style.js +2 -0
  1159. package/registration/components/Registration/RegistrationFormActions.js +5 -0
  1160. package/registration/components/Registration/RegistrationFormBase.config.js +4 -0
  1161. package/registration/components/Registration/RegistrationFormBase.js +4 -0
  1162. package/registration/components/Registration/RegistrationFormBilling.config.js +5 -0
  1163. package/registration/components/Registration/RegistrationFormBilling.js +5 -0
  1164. package/registration/components/Registration/RegistrationFormExtra.config.js +5 -0
  1165. package/registration/components/Registration/RegistrationFormExtra.js +5 -0
  1166. package/registration/components/Registration/RegistrationFormShipping.config.js +5 -0
  1167. package/registration/components/Registration/RegistrationFormShipping.js +5 -0
  1168. package/registration/components/Registration/RegistrationFormToggle.js +4 -0
  1169. package/registration/components/index.js +1 -0
  1170. package/registration/constants/actionTypes.js +1 -0
  1171. package/registration/constants/index.js +1 -0
  1172. package/registration/constants/pipelines.js +1 -0
  1173. package/registration/hooks/index.js +5 -0
  1174. package/registration/index.js +2 -0
  1175. package/registration/providers/GuestRegistrationProvider.actions.js +4 -0
  1176. package/registration/providers/GuestRegistrationProvider.connector.js +7 -0
  1177. package/registration/providers/GuestRegistrationProvider.constraints.js +18 -0
  1178. package/registration/providers/GuestRegistrationProvider.context.js +1 -0
  1179. package/registration/providers/GuestRegistrationProvider.js +22 -0
  1180. package/registration/providers/RegistrationProvider.actions.js +8 -0
  1181. package/registration/providers/RegistrationProvider.connector.js +6 -0
  1182. package/registration/providers/RegistrationProvider.constraints.js +27 -0
  1183. package/registration/providers/RegistrationProvider.context.js +1 -0
  1184. package/registration/providers/RegistrationProvider.js +17 -0
  1185. package/registration/streams/index.js +4 -0
  1186. package/registration/subscriptions/index.js +5 -0
  1187. package/reviews/actions/index.js +1 -0
  1188. package/reviews/components/Reviews/components/AllReviewsLink/index.js +1 -1
  1189. package/reviews/components/Reviews/components/Header/components/AverageRating/index.js +8 -6
  1190. package/reviews/components/Reviews/components/Header/components/NoReviews/index.js +3 -3
  1191. package/reviews/components/Reviews/components/Header/components/ReviewsExcerpt/index.js +3 -3
  1192. package/reviews/components/Reviews/components/Header/components/ReviewsExcerpt/style.js +1 -1
  1193. package/reviews/components/Reviews/components/Header/components/WriteReviewLink/index.js +3 -3
  1194. package/reviews/components/Reviews/components/Header/components/WriteReviewLink/spec.js +2 -2
  1195. package/reviews/components/Reviews/components/Header/index.js +6 -4
  1196. package/reviews/components/Reviews/components/Header/spec.js +2 -2
  1197. package/reviews/components/Reviews/components/List/components/Info/components/Author/index.js +1 -1
  1198. package/reviews/components/Reviews/components/List/components/Info/components/ReviewDate/index.js +1 -1
  1199. package/reviews/components/Reviews/components/List/components/Info/index.js +2 -2
  1200. package/reviews/components/Reviews/components/List/components/Info/style.js +1 -1
  1201. package/reviews/components/Reviews/components/List/components/Rating/index.js +1 -1
  1202. package/reviews/components/Reviews/components/List/components/Review/index.js +1 -1
  1203. package/reviews/components/Reviews/components/List/components/Text/index.js +1 -1
  1204. package/reviews/components/Reviews/components/List/components/Title/index.js +1 -1
  1205. package/reviews/components/Reviews/components/List/index.js +3 -3
  1206. package/reviews/components/Reviews/components/List/spec.js +1 -1
  1207. package/reviews/components/Reviews/components/RatingCount/index.js +1 -1
  1208. package/reviews/components/Reviews/components/RatingCount/spec.js +1 -1
  1209. package/reviews/components/Reviews/components/RatingCount/style.js +1 -1
  1210. package/reviews/components/Reviews/components/ReviewsInfo/index.js +3 -4
  1211. package/reviews/components/Reviews/connector.js +2 -6
  1212. package/reviews/components/Reviews/index.js +1 -1
  1213. package/reviews/components/Reviews/mock.js +2 -6
  1214. package/reviews/components/Reviews/spec.js +4 -3
  1215. package/reviews/components/index.js +1 -0
  1216. package/reviews/constants/index.js +1 -0
  1217. package/reviews/index.js +3 -6
  1218. package/reviews/selectors/index.js +1 -0
  1219. package/reviews/streams/index.js +1 -0
  1220. package/scanner/action-creators/index.js +1 -0
  1221. package/scanner/actions/index.js +1 -0
  1222. package/scanner/classes/index.js +1 -0
  1223. package/scanner/constants/index.js +1 -0
  1224. package/scanner/helpers/index.js +1 -0
  1225. package/scanner/index.js +1 -6
  1226. package/scanner/streams/index.js +1 -0
  1227. package/search/actions/index.js +1 -0
  1228. package/search/constants/index.js +1 -0
  1229. package/search/helpers/index.js +1 -0
  1230. package/search/index.js +1 -6
  1231. package/search/selectors/index.js +1 -0
  1232. package/search/streams/index.js +1 -0
  1233. package/styles/helpers/color.js +23 -0
  1234. package/styles/helpers/cssCustomProperties.js +16 -0
  1235. package/styles/helpers/index.js +1 -0
  1236. package/styles/helpers/initCSSCustomProperties.js +10 -0
  1237. package/styles/helpers/loadCustomStyles.js +6 -0
  1238. package/styles/helpers/setPageBackgroundColor.js +5 -0
  1239. package/styles/helpers/setPageContentWidth.js +5 -0
  1240. package/styles/helpers/setViewportHeight.js +3 -0
  1241. package/styles/helpers/toggleBodyScroll.js +5 -0
  1242. package/styles/helpers/updatePageInsets.js +15 -0
  1243. package/styles/index.d.ts +17 -0
  1244. package/styles/index.js +1 -0
  1245. package/styles/reset/form.js +8 -0
  1246. package/styles/reset/index.js +1 -0
  1247. package/styles/reset/media.js +1 -0
  1248. package/styles/reset/root.js +3 -0
  1249. package/styles/reset/table.js +1 -0
  1250. package/styles/reset/typography.js +1 -0
  1251. package/styles/theme/createTheme/createBreakpoints.d.ts +114 -0
  1252. package/styles/theme/createTheme/createBreakpoints.js +41 -0
  1253. package/styles/theme/createTheme/createSpacing.d.ts +23 -0
  1254. package/styles/theme/createTheme/createSpacing.js +14 -0
  1255. package/styles/theme/createTheme/index.d.ts +19 -0
  1256. package/styles/theme/createTheme/index.js +5 -0
  1257. package/styles/theme/createTheme/transitions.d.ts +100 -0
  1258. package/styles/theme/createTheme/transitions.js +26 -0
  1259. package/styles/theme/createTheme/zIndex.d.ts +12 -0
  1260. package/styles/theme/createTheme/zIndex.js +3 -0
  1261. package/styles/theme/hooks/index.d.ts +4 -0
  1262. package/styles/theme/hooks/index.js +1 -0
  1263. package/styles/theme/hooks/useActiveBreakpoint.d.ts +18 -0
  1264. package/styles/theme/hooks/useActiveBreakpoint.js +4 -0
  1265. package/styles/theme/hooks/useMediaQuery.d.ts +33 -0
  1266. package/styles/theme/hooks/useMediaQuery.js +20 -0
  1267. package/styles/theme/hooks/useResponsiveValue.d.ts +27 -0
  1268. package/styles/theme/hooks/useResponsiveValue.js +4 -0
  1269. package/styles/theme/hooks/useTheme.d.ts +8 -0
  1270. package/styles/theme/hooks/useTheme.js +4 -0
  1271. package/styles/theme/index.d.ts +8 -0
  1272. package/styles/theme/index.js +1 -0
  1273. package/styles/theme/providers/ActiveBreakpointProvider.d.ts +21 -0
  1274. package/styles/theme/providers/ActiveBreakpointProvider.js +13 -0
  1275. package/styles/theme/providers/ThemeProvider.d.ts +18 -0
  1276. package/styles/theme/providers/ThemeProvider.js +7 -0
  1277. package/styles/tss/index.js +3 -0
  1278. package/tracking/action-creators/cookieConsent.js +2 -2
  1279. package/tracking/actions/cookieConsent.js +17 -5
  1280. package/tracking/components/CookieConsentModal/connector.js +3 -5
  1281. package/tracking/components/CookieConsentModal/index.js +3 -6
  1282. package/tracking/components/CookieConsentModal/tracking-opt-in.svg +14 -14
  1283. package/tracking/components/PrivacySettings/connector.js +3 -5
  1284. package/tracking/components/PrivacySettings/index.js +2 -2
  1285. package/tracking/helpers/index.js +1 -0
  1286. package/tracking/selectors/cookieConsent.js +11 -6
  1287. package/tracking/streams/cookieConsent.js +10 -3
  1288. package/tracking/subscriptions/analytics.js +5 -4
  1289. package/tracking/subscriptions/cookieConsent.js +6 -10
  1290. package/types.js +0 -0
  1291. package/user/index.js +2 -2
  1292. package/user/selectors/data.js +10 -0
  1293. package/components/MessageBar/spec.js +0 -1
  1294. package/components/MessageBar/style.js +0 -2
  1295. package/favorites/constants/constants.js +0 -1
  1296. package/product/components/Characteristics/Characteristic/components/VariantAvailability/connector.js +0 -9
  1297. package/product/components/Characteristics/Characteristic/components/VariantAvailability/index.js +0 -5
  1298. package/product/components/QuantityPicker/helpers.js +0 -5
  1299. /package/product/components/{Characteristics/Characteristic/components/VariantAvailability/style.js → ProductVariants/VariantAvailability.style.js} +0 -0
  1300. /package/product/{components/ProductProvider → providers/Product}/connector.js +0 -0
@@ -1,4 +1,4 @@
1
1
  import React from'react';import PropTypes from'prop-types';import{IntersectionVisibility,VideoPlayer}from"../../../../../components";import{useWidgetSettings}from"../../../../../core";import connect from"./connector";import{videoWrapper,videoResponsive,video}from"../../style";/**
2
2
  * The media video component.
3
3
  * @returns {JSX}
4
- */var MediaVideo=function MediaVideo(_ref){var connectivityType=_ref.connectivityType,media=_ref.media;var settings=useWidgetSettings('@shopgate/engage/product/MediaSlider');var autoPlay=settings.videos.autoPlay[connectivityType]||false;return/*#__PURE__*/React.createElement(IntersectionVisibility,null,function(_ref2){var visible=_ref2.visible,ratio=_ref2.ratio,setRef=_ref2.setRef;return/*#__PURE__*/React.createElement("div",{ref:setRef,className:videoWrapper},/*#__PURE__*/React.createElement("div",{className:videoResponsive},/*#__PURE__*/React.createElement(VideoPlayer,{url:media.url,playing:autoPlay&&visible&&ratio>0.8,width:"100%",height:"100%",controls:settings.videos.controls,muted:settings.videos.muted,loop:settings.videos.loop,className:video})));});};export default connect(MediaVideo);
4
+ */var MediaVideo=function MediaVideo(_ref){var connectivityType=_ref.connectivityType,media=_ref.media;var settings=useWidgetSettings('@shopgate/engage/product/MediaSlider');var autoPlay=settings.videos.autoPlay[connectivityType]||false;return React.createElement(IntersectionVisibility,null,function(_ref2){var visible=_ref2.visible,ratio=_ref2.ratio,setRef=_ref2.setRef;return React.createElement("div",{ref:setRef,className:videoWrapper},React.createElement("div",{className:videoResponsive},React.createElement(VideoPlayer,{url:media.url,playing:autoPlay&&visible&&ratio>0.8,width:"100%",height:"100%",controls:settings.videos.controls,muted:settings.videos.muted,loop:settings.videos.loop,className:video})));});};export default connect(MediaVideo);
@@ -1,6 +1,6 @@
1
- var _typeRenders;function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React from'react';import PropTypes from'prop-types';import{SurroundPortals,Swiper}from'@shopgate/engage/components';import{PRODUCT_MEDIA}from'@shopgate/pwa-common-commerce/product';import{MEDIA_TYPE_IMAGE,MEDIA_TYPE_VIDEO}from"../../constants";import MediaImage from"./components/MediaImage";import MediaVideo from"./components/MediaVideo";import connect from"./connector";import{container}from"./style";var typeRenders=(_typeRenders={},_defineProperty(_typeRenders,MEDIA_TYPE_IMAGE,MediaImage),_defineProperty(_typeRenders,MEDIA_TYPE_VIDEO,MediaVideo),_typeRenders);/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React from'react';import PropTypes from'prop-types';import{SurroundPortals,Swiper}from'@shopgate/engage/components';import{PRODUCT_MEDIA}from'@shopgate/pwa-common-commerce/product';import{MEDIA_TYPE_IMAGE,MEDIA_TYPE_VIDEO}from"../../constants";import MediaImage from"./components/MediaImage";import MediaVideo from"./components/MediaVideo";import connect from"./connector";import{container}from"./style";var typeRenders=_defineProperty(_defineProperty({},MEDIA_TYPE_IMAGE,MediaImage),MEDIA_TYPE_VIDEO,MediaVideo);/**
2
2
  * The product media slider component.
3
- * @returns {JSX}
4
- */var MediaSlider=function MediaSlider(_ref){var navigate=_ref.navigate,featuredMedia=_ref.featuredMedia,media=_ref.media,ariaHidden=_ref['aria-hidden'],renderPlaceholder=_ref.renderPlaceholder,className=_ref.className;var currentSlide=0;/**
3
+ * @returns {JSX.Element}
4
+ */var MediaSlider=function MediaSlider(_ref){var navigate=_ref.navigate,featuredMedia=_ref.featuredMedia,media=_ref.media,ariaHidden=_ref['aria-hidden'],renderPlaceholder=_ref.renderPlaceholder,className=_ref.className,paginationType=_ref.paginationType;var currentSlide=0;/**
5
5
  * @param {number} slide slide
6
- */var setCurrentSlide=function setCurrentSlide(slide){currentSlide=slide;};/** Handle click */var handleSlideClick=function handleSlideClick(){if(!media.length){return;}navigate(currentSlide);};if(!Array.isArray(media)||media.length===0){return renderPlaceholder(featuredMedia);}return/*#__PURE__*/React.createElement("div",{className:container},/*#__PURE__*/React.createElement(SurroundPortals,{portalName:PRODUCT_MEDIA},media&&/*#__PURE__*/React.createElement(Swiper,{loop:media.length>1,indicators:true,onSlideChange:setCurrentSlide,disabled:media.length===1,controls:media.some(function(m){return m.type===MEDIA_TYPE_VIDEO;}),className:className,"aria-hidden":ariaHidden},media.map(function(singleMedia){var Type=typeRenders[singleMedia.type];return/*#__PURE__*/React.createElement(Swiper.Item,{key:Object.values(singleMedia).join('_')},/*#__PURE__*/React.createElement(Type,{media:singleMedia,onClick:handleSlideClick}));}))));};MediaSlider.defaultProps={'aria-hidden':null,className:null,featuredMedia:null,media:null,renderPlaceholder:function renderPlaceholder(featuredMedia){return/*#__PURE__*/React.createElement(MediaImage,featuredMedia);}};export default connect(MediaSlider);
6
+ */var setCurrentSlide=function setCurrentSlide(slide){currentSlide=slide;};/** Handle click */var handleSlideClick=function handleSlideClick(){if(!media.length){return;}navigate(currentSlide);};if(!Array.isArray(media)||media.length===0){return renderPlaceholder(featuredMedia);}return React.createElement("div",{className:container},React.createElement(SurroundPortals,{portalName:PRODUCT_MEDIA},media&&React.createElement(Swiper,{paginationType:paginationType,loop:media.length>1,indicators:true,onSlideChange:setCurrentSlide,disabled:media.length===1,controls:media.some(function(m){return m.type===MEDIA_TYPE_VIDEO;}),className:className,"aria-hidden":ariaHidden},media.map(function(singleMedia){var Type=typeRenders[singleMedia.type];return React.createElement(Swiper.Item,{key:Object.values(singleMedia).join('_')},React.createElement(Type,{media:singleMedia,onClick:handleSlideClick}));}))));};MediaSlider.defaultProps={'aria-hidden':null,className:null,featuredMedia:null,paginationType:null,media:null,renderPlaceholder:function renderPlaceholder(featuredMedia){return React.createElement(MediaImage,featuredMedia);}};export default connect(MediaSlider);
@@ -1,16 +1,16 @@
1
- function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj;}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;},_typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);Object.defineProperty(Constructor,"prototype",{writable:false});return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});Object.defineProperty(subClass,"prototype",{writable:false});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}else if(call!==void 0){throw new TypeError("Derived constructors may only return object or undefined");}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{PureComponent}from'react';import PropTypes from'prop-types';import Option from"../Option";import TextOption from"../TextOption";import{ProductContext}from"../../../context";import connect from"./connector";/**
1
+ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{PureComponent}from'react';import PropTypes from'prop-types';import{ProductContext}from'@shopgate/engage/product/contexts';import Option from"../Option";import TextOption from"../TextOption";import connect from"./connector";/**
2
2
  * The Product Options component.
3
- */var Options=/*#__PURE__*/function(_PureComponent){_inherits(Options,_PureComponent);var _super=_createSuper(Options);function Options(){var _this;_classCallCheck(this,Options);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this=_super.call.apply(_super,[this].concat(args));_defineProperty(_assertThisInitialized(_this),"handleStoreSelection",function(props){props.options.forEach(function(option){// Only options of type 'select' have a default value. Type 'text' has no default.
4
- if(option.type!=='select'){return;}_this.context.setOption(option.id,option.items[0].value,option.items[0].price);});});return _this;}_createClass(Options,[{key:"componentDidMount",value:/**
3
+ */var Options=/*#__PURE__*/function(_PureComponent){function Options(){var _this2;_classCallCheck(this,Options);for(var _len=arguments.length,args=new Array(_len),_key=0;_key<_len;_key++){args[_key]=arguments[_key];}_this2=_callSuper(this,Options,[].concat(args));/**
4
+ * @param {Object} props The component props.
5
+ */_defineProperty(_this2,"handleStoreSelection",function(props){props.options.forEach(function(option){// Only options of type 'select' have a default value. Type 'text' has no default.
6
+ if(option.type!=='select'){return;}_this2.context.setOption(option.id,option.items[0].value,option.items[0].price);});});return _this2;}_inherits(Options,_PureComponent);return _createClass(Options,[{key:"componentDidMount",value:/**
5
7
  * Triggers storeSelections when the component is mounted and has options set.
6
8
  */function componentDidMount(){if(!this.context||!this.context.setOption||!this.props.options){return;}this.handleStoreSelection(this.props);}/**
7
9
  * When the component receives the product options
8
10
  * it will set the first value of each option as active
9
11
  * @param {Object} nextProps The incoming props.
10
- */},{key:"UNSAFE_componentWillReceiveProps",value:function UNSAFE_componentWillReceiveProps(nextProps){if(!this.props.options&&nextProps.options){this.handleStoreSelection(nextProps);}}/**
11
- * @param {Object} props The component props.
12
- */},{key:"render",value:/**
12
+ */},{key:"UNSAFE_componentWillReceiveProps",value:function UNSAFE_componentWillReceiveProps(nextProps){if(!this.props.options&&nextProps.options){this.handleStoreSelection(nextProps);}}},{key:"render",value:/**
13
13
  * Renders the component
14
14
  * @returns {JSX}
15
- */function render(){var _this$props=this.props,options=_this$props.options,currentOptions=_this$props.currentOptions;if(!options){return null;}return/*#__PURE__*/React.createElement(ProductContext.Consumer,null,function(_ref){var setOption=_ref.setOption;return/*#__PURE__*/React.createElement("div",{"data-test-id":"optionsPicker",className:"engage__product__options"},options.map(function(option){switch(option.type){case'text':return/*#__PURE__*/React.createElement(TextOption,{key:option.id,id:option.id,label:option.label,value:currentOptions[option.id],info:option.info,onChange:setOption,required:option.required,price:option.price});case'select':return/*#__PURE__*/React.createElement(Option,{key:option.id,label:option.label,id:option.id,items:option.items,value:currentOptions[option.id],onChange:setOption});default:// unknown type
16
- return null;}}));});}}]);return Options;}(PureComponent);_defineProperty(Options,"contextType",ProductContext);_defineProperty(Options,"defaultProps",{currentOptions:{},options:null});export default connect(Options);
15
+ */function render(){var _this$props=this.props,options=_this$props.options,currentOptions=_this$props.currentOptions;if(!options){return null;}return React.createElement(ProductContext.Consumer,null,function(_ref){var setOption=_ref.setOption;return React.createElement("div",{"data-test-id":"optionsPicker",className:"engage__product__options"},options.map(function(option){switch(option.type){case'text':return React.createElement(TextOption,{key:option.id,id:option.id,label:option.label,value:currentOptions[option.id],info:option.info,onChange:setOption,required:option.required,price:option.price});case'select':return React.createElement(Option,{key:option.id,label:option.label,id:option.id,items:option.items,value:currentOptions[option.id],onChange:setOption});default:// unknown type
16
+ return null;}}));});}}]);}(PureComponent);_defineProperty(Options,"contextType",ProductContext);_defineProperty(Options,"defaultProps",{currentOptions:{},options:null});export default connect(Options);
@@ -1,2 +1,2 @@
1
- import React from'react';import{mount,shallow}from'enzyme';import{PickerUtilize as Picker}from'@shopgate/engage/components';import Options from"./index";jest.mock("../../../context",function(){return{ProductContext:{Consumer:jest.fn(function(_ref){var children=_ref.children;return children({setOption:jest.fn(),currency:'EUR'});})}};});jest.mock('@shopgate/engage/components/View');// Mock the redux connect() method instead of providing a fake store.
2
- jest.mock("./connector",function(){return function(obj){var newObj=obj;var mockOptions=[{id:'test-id',type:'select',label:'label',items:[{currency:'USD',price:10,priceDifference:0},{currency:'USD',price:10,priceDifference:0}]}];newObj.defaultProps={options:mockOptions,currentOptions:{}};return newObj;};});describe('<Options />',function(){var mockOptions=[{id:'test-id',type:'select',label:'label',items:[{currency:'USD',price:10,priceDifference:0},{currency:'USD',price:10,priceDifference:0}]}];describe('Given the component was mounted to the DOM',function(){it('should match snapshot',function(){var wrapper=shallow(/*#__PURE__*/React.createElement(Options,{currentOptions:{}})).dive();expect(wrapper).toMatchSnapshot();});it('should render correct number of options',function(){var wrapper=mount(/*#__PURE__*/React.createElement(Options,{options:mockOptions}));var picker=wrapper.find(Picker);expect(picker.length).toBe(mockOptions.length);});});});
1
+ import React from'react';import{mount,shallow}from'enzyme';import{PickerUtilize as Picker}from'@shopgate/engage/components';import Options from"./index";jest.mock('@shopgate/engage/components');jest.mock('@shopgate/engage/product/contexts',function(){return{ProductContext:{Consumer:jest.fn(function(_ref){var children=_ref.children;return children({setOption:jest.fn(),currency:'EUR'});})}};});// Mock the redux connect() method instead of providing a fake store.
2
+ jest.mock("./connector",function(){return function(obj){var newObj=obj;var mockOptions=[{id:'test-id',type:'select',label:'label',items:[{currency:'USD',price:10,priceDifference:0},{currency:'USD',price:10,priceDifference:0}]}];newObj.defaultProps={options:mockOptions,currentOptions:{}};return newObj;};});describe('<Options />',function(){var mockOptions=[{id:'test-id',type:'select',label:'label',items:[{currency:'USD',price:10,priceDifference:0},{currency:'USD',price:10,priceDifference:0}]}];describe('Given the component was mounted to the DOM',function(){it('should match snapshot',function(){var wrapper=shallow(React.createElement(Options,{currentOptions:{}})).dive();expect(wrapper).toMatchSnapshot();});it('should render correct number of options',function(){var wrapper=mount(React.createElement(Options,{options:mockOptions}));var picker=wrapper.find(Picker);expect(picker.length).toBe(mockOptions.length);});});});
@@ -1,4 +1,4 @@
1
- function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React from'react';import PropTypes from'prop-types';import{I18n,PickerUtilize as Picker}from'@shopgate/engage/components';import{PriceDifference}from'@shopgate/engage/product';import{ProductContext}from"../../../context";/**
1
+ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React from'react';import PropTypes from'prop-types';import{I18n,PickerUtilize as Picker}from'@shopgate/engage/components';import{PriceDifference}from'@shopgate/engage/product/components';import{ProductContext}from'@shopgate/engage/product/contexts';/**
2
2
  * @param {Object} props The component props.
3
3
  * @returns {JSX}
4
- */var Option=function Option(_ref){var id=_ref.id,label=_ref.label,items=_ref.items,value=_ref.value,_onChange=_ref.onChange;return/*#__PURE__*/React.createElement(ProductContext.Consumer,null,function(_ref2){var currency=_ref2.currency;return/*#__PURE__*/React.createElement("div",{key:id,"data-test-id":label},/*#__PURE__*/React.createElement(Picker,{label:label,items:items.map(function(item){return _extends({},item,{rightComponent:/*#__PURE__*/React.createElement(PriceDifference,{currency:currency,difference:item.priceDifference})});}),placeholder:/*#__PURE__*/React.createElement(I18n.Text,{string:"product.pick_an_attribute",params:[label]}),value:value,onChange:function onChange(val){return _onChange(id,val,items.find(function(item){return item.value===val;}).price);}}));});};Option.defaultProps={value:null};export default Option;
4
+ */var Option=function Option(_ref){var id=_ref.id,label=_ref.label,items=_ref.items,value=_ref.value,_onChange=_ref.onChange;return React.createElement(ProductContext.Consumer,null,function(_ref2){var currency=_ref2.currency;return React.createElement("div",{key:id,"data-test-id":label},React.createElement(Picker,{label:label,items:items.map(function(item){return _extends({},item,{rightComponent:React.createElement(PriceDifference,{currency:currency,difference:item.priceDifference})});}),placeholder:React.createElement(I18n.Text,{string:"product.pick_an_attribute",params:[label]}),value:value,onChange:function onChange(val){return _onChange(id,val,items.find(function(item){return item.value===val;}).price);}}));});};Option.defaultProps={value:null};export default Option;
@@ -1,9 +1,9 @@
1
- function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React,{memo}from'react';import PropTypes from'prop-types';import Grid from'@shopgate/pwa-common/components/Grid';import I18n from'@shopgate/pwa-common/components/I18n';import{ProductContext}from"../../../../../context";import styles from"./style";/**
1
+ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React,{memo}from'react';import PropTypes from'prop-types';import{Grid,I18n}from'@shopgate/engage/components';import{ProductContext}from'@shopgate/engage/product/contexts';import styles from"./style";/**
2
2
  * The text option info component
3
3
  * @param {Object} props The component props
4
4
  * @param {Object} context The component context
5
5
  * @return {JSX}
6
- */var OptionInfo=function OptionInfo(_ref,context){var required=_ref.required,label=_ref.label,price=_ref.price,currency=_ref.currency,info=_ref.info,optionInfoId=_ref.optionInfoId;if(!required&&!price){return null;}var _context$i18n=context.i18n(),__=_context$i18n.__,_p=_context$i18n._p;var ariaPrice='';var ariaRequired='';if(price){ariaPrice=__('price.label',{price:_p(price,currency,2).replace('-',"\u2212")});}if(required){ariaRequired=__('common.required');}return/*#__PURE__*/React.createElement(Grid,{className:styles.info},required&&/*#__PURE__*/React.createElement(Grid.Item,{className:styles.required,"aria-hidden":true},/*#__PURE__*/React.createElement(I18n.Text,{string:"common.required"})),!!price&&/*#__PURE__*/React.createElement(Grid.Item,{grow:1,className:styles.price,"aria-hidden":true},"".concat(label,": "),/*#__PURE__*/React.createElement(I18n.Price,{currency:currency,price:price})),/*#__PURE__*/React.createElement("div",{hidden:true,id:optionInfoId},ariaRequired,ariaPrice,info));};OptionInfo.contextTypes={i18n:PropTypes.func};/**
6
+ */var OptionInfo=function OptionInfo(_ref,context){var required=_ref.required,label=_ref.label,price=_ref.price,currency=_ref.currency,info=_ref.info,optionInfoId=_ref.optionInfoId;if(!required&&!price){return null;}var _context$i18n=context.i18n(),__=_context$i18n.__,_p=_context$i18n._p;var ariaPrice='';var ariaRequired='';if(price){ariaPrice=__('price.label',{price:_p(price,currency,2).replace('-',"\u2212")});}if(required){ariaRequired=__('common.required');}return React.createElement(Grid,{className:styles.info},required&&React.createElement(Grid.Item,{className:styles.required,"aria-hidden":true},React.createElement(I18n.Text,{string:"common.required"})),!!price&&React.createElement(Grid.Item,{grow:1,className:styles.price,"aria-hidden":true},"".concat(label,": "),React.createElement(I18n.Price,{currency:currency,price:price})),React.createElement("div",{hidden:true,id:optionInfoId},ariaRequired,ariaPrice,info));};OptionInfo.contextTypes={i18n:PropTypes.func};/**
7
7
  * @param {Object} props The component props.
8
8
  * @returns {JSX}
9
- */var OptionInfoWithProductContext=function OptionInfoWithProductContext(props){return/*#__PURE__*/React.createElement(ProductContext.Consumer,null,function(_ref2){var currency=_ref2.currency;return/*#__PURE__*/React.createElement(OptionInfo,_extends({currency:currency},props));});};export default/*#__PURE__*/memo(OptionInfoWithProductContext);export{OptionInfo};
9
+ */var OptionInfoWithProductContext=function OptionInfoWithProductContext(props){return React.createElement(ProductContext.Consumer,null,function(_ref2){var currency=_ref2.currency;return React.createElement(OptionInfo,_extends({currency:currency},props));});};export default memo(OptionInfoWithProductContext);export{OptionInfo};
@@ -1 +1 @@
1
- import React from'react';import{shallow}from'enzyme';import mockRenderOptions from'@shopgate/pwa-common/helpers/mocks/mockRenderOptions';import{OptionInfo}from"./index";var optionInfoText='Some Text';var optionInfoId='some-id';describe('<OptionInfo />',function(){it('should not render when not required and no price',function(){var wrapper=shallow(/*#__PURE__*/React.createElement(OptionInfo,{required:false,label:"",price:0,currency:"EUR",info:optionInfoText,optionInfoId:optionInfoId}),mockRenderOptions);expect(wrapper).toBeEmptyRender();});it('should render required element',function(){var wrapper=shallow(/*#__PURE__*/React.createElement(OptionInfo,{required:true,label:"",price:0,currency:"EUR",info:optionInfoText,optionInfoId:optionInfoId}),mockRenderOptions).dive();expect(wrapper).toMatchSnapshot();});it('should render price element',function(){var wrapper=shallow(/*#__PURE__*/React.createElement(OptionInfo,{required:false,label:"Label",price:10,currency:"EUR",info:optionInfoText,optionInfoId:optionInfoId}),mockRenderOptions).dive();expect(wrapper).toMatchSnapshot();});});
1
+ import React from'react';import{shallow}from'enzyme';import mockRenderOptions from'@shopgate/pwa-common/helpers/mocks/mockRenderOptions';import{OptionInfo}from"./index";var optionInfoText='Some Text';var optionInfoId='some-id';jest.mock('@shopgate/engage/components',function(){var _jest$requireActual=jest.requireActual('@shopgate/pwa-common/components/Grid'),Grid=_jest$requireActual["default"];var _jest$requireActual2=jest.requireActual('@shopgate/pwa-common/components/I18n'),I18n=_jest$requireActual2["default"];return{Grid:Grid,I18n:I18n};});jest.mock('@shopgate/engage/product/contexts',function(){return{ProductContext:{Consumer:function Consumer(_ref){var children=_ref.children;return children({currency:'EUR'});}}};});describe('<OptionInfo />',function(){it('should not render when not required and no price',function(){var wrapper=shallow(React.createElement(OptionInfo,{required:false,label:"",price:0,currency:"EUR",info:optionInfoText,optionInfoId:optionInfoId}),mockRenderOptions);expect(wrapper).toBeEmptyRender();});it('should render required element',function(){var wrapper=shallow(React.createElement(OptionInfo,{required:true,label:"",price:0,currency:"EUR",info:optionInfoText,optionInfoId:optionInfoId}),mockRenderOptions).dive();expect(wrapper).toMatchSnapshot();});it('should render price element',function(){var wrapper=shallow(React.createElement(OptionInfo,{required:false,label:"Label",price:10,currency:"EUR",info:optionInfoText,optionInfoId:optionInfoId}),mockRenderOptions).dive();expect(wrapper).toMatchSnapshot();});});
@@ -1 +1 @@
1
- import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';var colors=themeConfig.colors,variables=themeConfig.variables;var info=css({marginTop:variables.gap.xsmall,padding:"0 ".concat(variables.gap.big,"px")}).toString();var required=css({color:colors.shade9,fontSize:'0.825rem'}).toString();var price=css({textAlign:'right',fontSize:'0.825rem'}).toString();export default{info:info,required:required,price:price};
1
+ import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';var colors=themeConfig.colors,variables=themeConfig.variables;var info=css({marginTop:variables.gap.xsmall,padding:"0 ".concat(variables.gap.big,"px")}).toString();var required=css({color:"var(--color-text-medium-emphasis, ".concat(colors.shade9,")"),fontSize:'0.825rem'}).toString();var price=css({textAlign:'right',fontSize:'0.825rem'}).toString();export default{info:info,required:required,price:price};
@@ -1,10 +1,22 @@
1
- function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj;}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;},_typeof(obj);}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);Object.defineProperty(Constructor,"prototype",{writable:false});return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});Object.defineProperty(subClass,"prototype",{writable:false});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}else if(call!==void 0){throw new TypeError("Derived constructors may only return object or undefined");}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Fragment,PureComponent}from'react';import PropTypes from'prop-types';import Transition from'react-transition-group/Transition';import debounce from'lodash/debounce';import TextField from'@shopgate/pwa-ui-shared/Form/TextField';import InfoIcon from'@shopgate/pwa-ui-shared/icons/InfoIcon';import withShowModal from'@shopgate/pwa-common/helpers/modal/withShowModal';import{broadcastLiveMessage}from'@shopgate/engage/a11y';import transition from"../../../Characteristics/transition";import{ProductContext}from"../../../context";import OptionInformation from"./components/OptionInfo";import styles from"./style";/**
1
+ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Fragment,PureComponent}from'react';import PropTypes from'prop-types';import Transition from'react-transition-group/Transition';import debounce from'lodash/debounce';import{TextField,InfoIcon}from'@shopgate/engage/components';import{withShowModal}from'@shopgate/engage/core/hocs';import{broadcastLiveMessage}from'@shopgate/engage/a11y';import{ProductContext}from'@shopgate/engage/product/contexts';import transition from'@shopgate/engage/product/components/Characteristics/transition';import OptionInformation from"./components/OptionInfo";import styles from"./style";/**
2
2
  * The TextOption component
3
- */var TextOption=/*#__PURE__*/function(_PureComponent){_inherits(TextOption,_PureComponent);var _super=_createSuper(TextOption);/**
4
- * @param {Object} props The component props.
5
- */function TextOption(props){var _this;_classCallCheck(this,TextOption);_this=_super.call(this,props);_defineProperty(_assertThisInitialized(_this),"setRef",function(ref){_this.ref=ref;});_defineProperty(_assertThisInitialized(_this),"removeHighlight",function(){_this.setState({highlight:false});});_defineProperty(_assertThisInitialized(_this),"checkInput",function(){if(!_this.props.required){return true;}if(_this.props.value){return true;}broadcastLiveMessage('product.fill_out_required_input_first');_this.ref.scrollIntoView({behavior:'smooth'});_this.setState({highlight:true});return false;});_defineProperty(_assertThisInitialized(_this),"infoIcon",function(){if(!_this.props.info){return null;}var _this$props=_this.props,label=_this$props.label,info=_this$props.info,showModal=_this$props.showModal;return/*#__PURE__*/React.createElement("div",{onClick:function onClick(){return showModal({title:label,message:info});},"aria-hidden":true},/*#__PURE__*/React.createElement(InfoIcon,{size:24,className:styles.infoIcon}));});_defineProperty(_assertThisInitialized(_this),"handleKeyPress",function(event){// Enter key and on iOS also the "Done" button.
6
- if(event.which===13){_this.ref.blur();}});_defineProperty(_assertThisInitialized(_this),"handleChange",function(val){_this.props.onChange(_this.props.id,val,_this.props.price);});_defineProperty(_assertThisInitialized(_this),"handleDebounced",debounce(_this.handleChange,300));_this.state={highlight:false};_this.ref=null;props.conditioner.addConditioner("text-option-".concat(props.id),_this.checkInput);return _this;}/**
3
+ */var TextOption=/*#__PURE__*/function(_PureComponent){function TextOption(props){var _this2;_classCallCheck(this,TextOption);_this2=_callSuper(this,TextOption,[props]);/**
7
4
  * @param {Object} ref ref
8
- */_createClass(TextOption,[{key:"render",value:/**
5
+ */_defineProperty(_this2,"setRef",function(ref){_this2.ref=ref;});/**
6
+ * Remove highlight state
7
+ */_defineProperty(_this2,"removeHighlight",function(){_this2.setState({highlight:false});});/**
8
+ * Checks if required input is done.
9
+ * @return {boolean}
10
+ */_defineProperty(_this2,"checkInput",function(){if(!_this2.props.required){return true;}if(_this2.props.value){return true;}broadcastLiveMessage('product.fill_out_required_input_first');_this2.ref.scrollIntoView({behavior:'smooth'});_this2.setState({highlight:true});return false;});/**
11
+ * @returns {JSX}
12
+ */_defineProperty(_this2,"infoIcon",function(){if(!_this2.props.info){return null;}var _this2$props=_this2.props,label=_this2$props.label,info=_this2$props.info,showModal=_this2$props.showModal;return React.createElement("div",{onClick:function onClick(){return showModal({title:label,message:info});},"aria-hidden":true},React.createElement(InfoIcon,{size:24,className:styles.infoIcon}));});/**
13
+ * Handles form submits by key.
14
+ * @param {Object} event The event that caused the keypress.
15
+ */_defineProperty(_this2,"handleKeyPress",function(event){// Enter key and on iOS also the "Done" button.
16
+ if(event.which===13){_this2.ref.blur();}});/**
17
+ * @param {string} val value.
18
+ */_defineProperty(_this2,"handleChange",function(val){_this2.props.onChange(_this2.props.id,val,_this2.props.price);});_defineProperty(_this2,"handleDebounced",debounce(_this2.handleChange,300));_this2.state={highlight:false};_this2.ref=null;props.conditioner.addConditioner("text-option-".concat(props.id),_this2.checkInput);return _this2;}_inherits(TextOption,_PureComponent);return _createClass(TextOption,[{key:"render",value:/**
9
19
  * @return {JSX}
10
- */function render(){var _this2=this;var _this$props2=this.props,id=_this$props2.id,label=_this$props2.label,value=_this$props2.value,required=_this$props2.required,price=_this$props2.price,info=_this$props2.info;var optionInfoId=id;return/*#__PURE__*/React.createElement("div",{className:styles.row},/*#__PURE__*/React.createElement(Transition,{"in":this.state.highlight,timeout:700,onEntered:this.removeHighlight},function(state){return/*#__PURE__*/React.createElement(Fragment,null,/*#__PURE__*/React.createElement("div",{className:styles.wrapper,style:transition[state]},/*#__PURE__*/React.createElement(TextField,{setRef:_this2.setRef,name:"text_".concat(id),value:value,onChange:_this2.handleDebounced,onKeyPress:_this2.handleKeyPress,placeholder:label,label:label,rightElement:_this2.infoIcon(),"data-test-id":label,hasUnderline:false,className:styles.element,attributes:{'aria-describedby':optionInfoId}})),/*#__PURE__*/React.createElement(OptionInformation,{label:label,required:required,price:price,info:info,optionInfoId:optionInfoId}));}));}}]);return TextOption;}(PureComponent);_defineProperty(TextOption,"defaultProps",{info:null,value:null});export default withShowModal(function(props){return/*#__PURE__*/React.createElement(ProductContext.Consumer,null,function(_ref){var conditioner=_ref.conditioner;return/*#__PURE__*/React.createElement(TextOption,_extends({conditioner:conditioner},props));});});
20
+ */function render(){var _this3=this;var _this$props=this.props,id=_this$props.id,label=_this$props.label,value=_this$props.value,required=_this$props.required,price=_this$props.price,info=_this$props.info;var optionInfoId=id;return React.createElement("div",{className:styles.row},React.createElement(Transition,{"in":this.state.highlight,timeout:700,onEntered:this.removeHighlight},function(state){return React.createElement(Fragment,null,React.createElement("div",{className:styles.wrapper,style:transition[state]},React.createElement(TextField,{setRef:_this3.setRef,name:"text_".concat(id),value:value,onChange:_this3.handleDebounced,onKeyPress:_this3.handleKeyPress,placeholder:label,label:label,rightElement:_this3.infoIcon(),"data-test-id":label,hasUnderline:false,className:styles.element,attributes:{'aria-describedby':optionInfoId}})),React.createElement(OptionInformation,{label:label,required:required,price:price,info:info,optionInfoId:optionInfoId}));}));}}]);}(PureComponent);_defineProperty(TextOption,"defaultProps",{info:null,value:null/**
21
+ * @param {Object} props The component props.
22
+ */});export default withShowModal(function(props){return React.createElement(ProductContext.Consumer,null,function(_ref){var conditioner=_ref.conditioner;return React.createElement(TextOption,_extends({conditioner:conditioner},props));});});
@@ -1 +1 @@
1
- import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';var colors=themeConfig.colors,variables=themeConfig.variables;var row=css({marginBottom:variables.gap.small}).toString();var wrapper=css({backgroundColor:colors.shade8,padding:"".concat(variables.gap.small,"px ").concat(variables.gap.big,"px"),minHeight:56}).toString();var element=css({paddingBottom:0,'& label':{fontWeight:400,color:'inherit'},'& input':{fontWeight:500}}).toString();var infoIcon=css({color:colors.shade9}).toString();export default{row:row,wrapper:wrapper,element:element,infoIcon:infoIcon};
1
+ import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';var colors=themeConfig.colors,variables=themeConfig.variables;var row=css({marginBottom:variables.gap.small}).toString();var wrapper=css({backgroundColor:"var(--color-background-accent, ".concat(colors.shade8,")"),padding:"".concat(variables.gap.small,"px ").concat(variables.gap.big,"px"),minHeight:56}).toString();var element=css({paddingBottom:0,'& label':{fontWeight:400,color:'var(--color-text-high-emphasis, inherit)'},'& input':{fontWeight:500,color:'var(--color-text-high-emphasis)'},'& .placeholder':{color:'var(--color-text-low-emphasis)'}}).toString();var infoIcon=css({color:colors.shade9}).toString();export default{row:row,wrapper:wrapper,element:element,infoIcon:infoIcon};
@@ -1,5 +1,5 @@
1
- import React from'react';import{PRODUCT_OPTIONS}from'@shopgate/pwa-common-commerce/product/constants/Portals';import SurroundPortals from'@shopgate/pwa-common/components/SurroundPortals';import{ProductContext}from"../context";import Content from"./components/Content";import Option from"./components/Option";import TextOption from"./components/TextOption";// Export for theme api
1
+ import React from'react';import{PRODUCT_OPTIONS}from'@shopgate/engage/product/constants';import{SurroundPortals}from'@shopgate/engage/components';import{ProductContext}from"../context";import Content from"./components/Content";import Option from"./components/Option";import TextOption from"./components/TextOption";// Export for theme api
2
2
  export{TextOption,Option as SelectOption};/**
3
3
  * The Product Options component.
4
4
  * @returns {JSX}
5
- */var Options=function Options(){return/*#__PURE__*/React.createElement(ProductContext.Consumer,null,function(_ref){var productId=_ref.productId,variantId=_ref.variantId,options=_ref.options;return/*#__PURE__*/React.createElement(SurroundPortals,{portalName:PRODUCT_OPTIONS,portalProps:{productId:variantId||productId}},/*#__PURE__*/React.createElement(Content/* props needed in connector */,{productId:variantId||productId,currentOptions:options}));});};export default Options;
5
+ */var Options=function Options(){return React.createElement(ProductContext.Consumer,null,function(_ref){var productId=_ref.productId,variantId=_ref.variantId,options=_ref.options;return React.createElement(SurroundPortals,{portalName:PRODUCT_OPTIONS,portalProps:{productId:variantId||productId}},React.createElement(Content/* props needed in connector */,{productId:variantId||productId,currentOptions:options}));});};export default Options;
@@ -1,4 +1,5 @@
1
- import React from'react';import PropTypes from'prop-types';import{I18n,SurroundPortals}from'@shopgate/engage/components';import{isBeta,useWidgetSettings}from'@shopgate/engage/core';import{PRODUCT_ORDER_QUANTITY}from'@shopgate/engage/product';import withProductStock from"../../hocs/withProductStock";import{hint}from"./style";/**
1
+ import React,{useMemo}from'react';import PropTypes from'prop-types';import{I18n,SurroundPortals}from'@shopgate/engage/components';import{i18n,hasNewServices,isBeta}from'@shopgate/engage/core/helpers';import{useWidgetSettings}from'@shopgate/engage/core/hooks';import{PRODUCT_ORDER_QUANTITY}from'@shopgate/engage/product';import{formatFloat}from'@shopgate/engage/components/QuantityInput/helper';import withProductStock from"../../hocs/withProductStock";import withProduct from"../../hocs/withProduct";import{hint}from"./style";/**
2
2
  * The Product Order Quantity Hint component.
3
3
  * @return {JSX}
4
- */var OrderQuantityHint=function OrderQuantityHint(_ref){var stock=_ref.stock;if(!isBeta()){return null;}var settings=useWidgetSettings('@shopgate/engage/product/OrderQuantityHint');return/*#__PURE__*/React.createElement(SurroundPortals,{portalName:PRODUCT_ORDER_QUANTITY,portalProps:{stock:stock}},settings.show&&stock&&!!stock.minOrderQuantity&&/*#__PURE__*/React.createElement("div",{className:hint},/*#__PURE__*/React.createElement(I18n.Text,{string:"product.minOrderQuantity",params:{quantity:stock.minOrderQuantity}})),settings.show&&stock&&!!stock.maxOrderQuantity&&/*#__PURE__*/React.createElement("div",{className:hint},/*#__PURE__*/React.createElement(I18n.Text,{string:"product.maxOrderQuantity",params:{quantity:stock.maxOrderQuantity}})));};OrderQuantityHint.defaultProps={stock:null};export default withProductStock(OrderQuantityHint);
4
+ */var OrderQuantityHint=function OrderQuantityHint(_ref){var stock=_ref.stock,product=_ref.product,className=_ref.className;var _ref2=product||{},hasCatchWeight=_ref2.hasCatchWeight,productUnit=_ref2.unit;var settings=useWidgetSettings('@shopgate/engage/product/OrderQuantityHint');var showContent=useMemo(function(){if(hasNewServices()){// During development of PWA 7 the component was shown by default
5
+ return true;}return isBeta()&&settings.show===true;},[settings.show]);var unit=useMemo(function(){if(hasCatchWeight){var key="formats.unitOfMeasurement.".concat(productUnit);var text=i18n.text(key);return text!==key?text:productUnit||'';}return'';},[hasCatchWeight,productUnit]);var maxDecimals=useMemo(function(){return hasCatchWeight&&productUnit?2:0;},[hasCatchWeight,productUnit]);return React.createElement("div",{className:className},React.createElement(SurroundPortals,{portalName:PRODUCT_ORDER_QUANTITY,portalProps:{stock:stock}},showContent&&stock&&!!stock.minOrderQuantity&&React.createElement("div",{className:hint},React.createElement(I18n.Text,{string:"product.minOrderQuantity",params:{quantity:formatFloat(stock.minOrderQuantity,maxDecimals),unit:unit}})),showContent&&stock&&!!stock.maxOrderQuantity&&React.createElement("div",{className:hint},React.createElement(I18n.Text,{string:"product.maxOrderQuantity",params:{quantity:formatFloat(stock.maxOrderQuantity,maxDecimals),unit:unit}}))));};OrderQuantityHint.defaultProps={className:null,stock:null,product:null};export default withProduct(withProductStock(OrderQuantityHint));
@@ -1 +1 @@
1
- import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';export var hint=css({fontSize:'0.75rem',color:themeConfig.colors.shade3});
1
+ import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';export var hint=css({fontSize:'0.75rem',color:"var(--color-text-medium-emphasis, ".concat(themeConfig.colors.shade11,")")});
@@ -5,4 +5,4 @@ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj
5
5
  * @param {string} props.currency The currency of the price.
6
6
  * @param {number} props.difference The price difference.
7
7
  * @return {JSX}
8
- */var PriceDifference=function PriceDifference(_ref){var _classNames;var className=_ref.className,currency=_ref.currency,difference=_ref.difference;if(difference===0){return null;}var priceClassName=classNames(className,(_classNames={},_defineProperty(_classNames,styles.positive,difference>0),_defineProperty(_classNames,styles.negative,difference<0),_classNames));return/*#__PURE__*/React.createElement(Price,{className:priceClassName,currency:currency,unitPrice:difference});};PriceDifference.defaultProps={className:''};export default PriceDifference;
8
+ */var PriceDifference=function PriceDifference(_ref){var className=_ref.className,currency=_ref.currency,difference=_ref.difference;if(difference===0){return null;}var priceClassName=classNames(className,_defineProperty(_defineProperty({},styles.positive,difference>0),styles.negative,difference<0));return React.createElement(Price,{className:priceClassName,currency:currency,unitPrice:difference});};PriceDifference.defaultProps={className:''};export default PriceDifference;
@@ -1 +1 @@
1
- import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';var colors=themeConfig.colors;var positive=css({color:colors.shade4,':before':{content:'"+"'}}).toString();var negative=css({color:colors.primary}).toString();export default{positive:positive,negative:negative};
1
+ import{css}from'glamor';import{themeConfig}from'@shopgate/pwa-common/helpers/config';var colors=themeConfig.colors;var positive=css({color:colors.shade4,':before':{content:'"+"'}}).toString();var negative=css({color:"var(--color-primary, ".concat(colors.primary,")")}).toString();export default{positive:positive,negative:negative};
@@ -0,0 +1,4 @@
1
+ import{connect}from'react-redux';import{makeGetShopSettingByKey}from"../../../core/selectors/shopSettings";import{SHOP_SETTING_DISPLAY_PRICE_PER_MEASURE_UNIT}from"../../../core/constants";/**
2
+ * Creates the mapStateToProps connector function.
3
+ * @returns {Function}
4
+ */var makeMapStateToProps=function makeMapStateToProps(){var getShopSetting=makeGetShopSettingByKey(SHOP_SETTING_DISPLAY_PRICE_PER_MEASURE_UNIT,false);return function(state,props){return{displayPricePerMeasureUnit:getShopSetting(state,props)};};};export default connect(makeMapStateToProps);
@@ -0,0 +1,4 @@
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{useMemo}from'react';import PropTypes from'prop-types';import{css}from'glamor';import classNames from'classnames';import{i18n}from'@shopgate/engage/core';import{ConditionalWrapper}from'@shopgate/engage/components';import{themeConfig}from'@shopgate/pwa-common/helpers/config';import connect from"./PriceInfo.connector";var styles={container:css({color:themeConfig.colors.shade3}).toString(),noWrap:css({whiteSpace:'nowrap'}).toString()};/**
2
+ * The price info component
3
+ * @returns {JSX}
4
+ */var PriceInfo=function PriceInfo(_ref){var product=_ref.product,className=_ref.className,wrapper=_ref.wrapper,displayPricePerMeasureUnit=_ref.displayPricePerMeasureUnit,externalCurrency=_ref.currency;var _ref2=product||{},_ref2$price=_ref2.price,price=_ref2$price===void 0?{}:_ref2$price,unitPriceRefValue=_ref2.unitPriceRefValue,unitPriceRefUom=_ref2.unitPriceRefUom;var pricePerMeasureUnit=price.pricePerMeasureUnit,info=price.info,currency=price.currency;var content=useMemo(function(){if(!displayPricePerMeasureUnit){return info;}if(!pricePerMeasureUnit){return null;}var unitKey="formats.unitOfMeasurement.".concat(unitPriceRefUom);var unit=i18n.text(unitKey);if(unit===unitKey){unit=unitPriceRefUom;}return i18n.text('price.pricePerMeasurementFormat',{price:i18n.price(pricePerMeasureUnit,currency||externalCurrency,2),refValue:unitPriceRefValue||'',refUom:unit});},[currency,displayPricePerMeasureUnit,externalCurrency,info,pricePerMeasureUnit,unitPriceRefUom,unitPriceRefValue]);if(!content){return null;}return React.createElement(ConditionalWrapper,{condition:!!wrapper,wrapper:wrapper},React.createElement("div",{className:classNames(styles.container,className,_defineProperty({},styles.noWrap,displayPricePerMeasureUnit)),dangerouslySetInnerHTML:{__html:content},"data-test-id":"priceInfo: ".concat(content)}));};PriceInfo.defaultProps={product:null,className:null,currency:null,wrapper:null,displayPricePerMeasureUnit:false};export default connect(PriceInfo);
@@ -0,0 +1 @@
1
+ export{default as PriceInfo}from"./PriceInfo";
@@ -1,5 +1,5 @@
1
1
  function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React,{useMemo}from'react';import PropTypes from'prop-types';import{css}from'glamor';import classNames from'classnames';import kebabCase from'lodash/kebabCase';import{SurroundPortals}from"../../../components";import{PORTAL_PRODUCT_BADGES}from"../../../components/constants";var styles={root:css({position:'absolute',paddingLeft:10,left:0,top:10,zIndex:5,transform:'translate3d(0, 0, 0)',display:'flex',pointerEvents:'none',width:'100%',' > *:empty':{display:'none'}}).toString()};/**
2
2
  * The ProductBadges component
3
3
  * @param {Object} props The component props
4
- * @returns {JSX}
5
- */var ProductBadges=function ProductBadges(_ref){var children=_ref.children,location=_ref.location,productId=_ref.productId,portalProps=_ref.portalProps,className=_ref.className;var props=useMemo(function(){return _extends({},portalProps,{location:location,productId:productId});},[location,portalProps,productId]);var locationClass=useMemo(function(){if(!location){return'';}return"product_badges__".concat(kebabCase(location));},[location]);return/*#__PURE__*/React.createElement("div",{className:classNames(styles.root,className,'product_badges',locationClass)},/*#__PURE__*/React.createElement(SurroundPortals,{portalName:PORTAL_PRODUCT_BADGES,portalProps:props},children));};ProductBadges.defaultProps={portalProps:null,children:PropTypes.node,className:''};export default ProductBadges;
4
+ * @returns {JSX.Element}
5
+ */var ProductBadges=function ProductBadges(_ref){var children=_ref.children,location=_ref.location,productId=_ref.productId,portalProps=_ref.portalProps,className=_ref.className;var props=useMemo(function(){return _extends({},portalProps,{location:location,productId:productId});},[location,portalProps,productId]);var locationClass=useMemo(function(){if(!location){return'';}return"product_badges__".concat(kebabCase(location));},[location]);return React.createElement("div",{className:classNames(styles.root,className,'product_badges',locationClass)},React.createElement(SurroundPortals,{portalName:PORTAL_PRODUCT_BADGES,portalProps:props},children));};ProductBadges.defaultProps={portalProps:null,children:PropTypes.node,className:''};export default ProductBadges;
@@ -1,4 +1,4 @@
1
- import React,{Fragment}from'react';import PropTypes from'prop-types';import{isBeta,useWidgetSettings}from'@shopgate/engage/core';import{Link,Ellipsis,Portal,RatingStars,DiscountBadge}from'@shopgate/engage/components';import{getProductRoute,MapPriceHint,ProductImage,OrderQuantityHint,FeaturedMedia,Swatches,ProductBadges}from'@shopgate/engage/product';import*as portals from'@shopgate/pwa-common-commerce/category';import ProductGridPrice from"../ProductGridPrice";import{getProductImageSettings}from"../../helpers";import styles from"./style";var location='productCard';/**
1
+ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React,{useMemo}from'react';import PropTypes from'prop-types';import{isBeta}from'@shopgate/engage/core/helpers';import{useWidgetSettings}from'@shopgate/engage/core/hooks';import{useProductListType}from'@shopgate/engage/product/hooks';import{Link,RatingStars,DiscountBadge,SurroundPortals}from'@shopgate/engage/components';import{getProductRoute}from'@shopgate/engage/product';import{MapPriceHint,ProductImage,OrderQuantityHint,FeaturedMedia,Swatches,ProductName,ProductBadges}from'@shopgate/engage/product/components';import{getProductImageSettings}from'@shopgate/engage/product/helpers';import{PRODUCT_ITEM_DISCOUNT,PRODUCT_ITEM_PRICE}from'@shopgate/engage/category';import ProductGridPrice from"../ProductGridPrice";import styles from"./style";var location='productCard';/**
2
2
  * The ProductCard component.
3
3
  * @param {Object} props The component props.
4
4
  * @param {Object} props.product The product data.
@@ -6,5 +6,14 @@ import React,{Fragment}from'react';import PropTypes from'prop-types';import{isBe
6
6
  * @param {boolean} props.hideRating Whether the rating should be hidden.
7
7
  * @param {boolean} props.hideName Whether the name should be hidden.
8
8
  * @param {number} props.titleRows The max number of rows for the product title.
9
- * @return {JSX}
10
- */function ProductCard(props){var product=props.product,hidePrice=props.hidePrice,hideRating=props.hideRating,hideName=props.hideName,titleRows=props.titleRows,linkState=props.linkState,linkReplace=props.linkReplace,linkHref=props.linkHref;var _getProductImageSetti=getProductImageSettings(),gridResolutions=_getProductImageSetti.ListImage;var _useWidgetSettings=useWidgetSettings('@shopgate/engage/rating'),_useWidgetSettings$sh=_useWidgetSettings.showEmptyRatingStars,showEmptyRatingStars=_useWidgetSettings$sh===void 0?false:_useWidgetSettings$sh;var showRatings=false;if(!hideRating&&product.rating&&product.rating.average>0){showRatings=true;}else if(!hideRating&&showEmptyRatingStars&&product.rating){showRatings=true;}return/*#__PURE__*/React.createElement(Link,{className:"engage__product-card",tagName:"a",href:linkHref||getProductRoute(product.id),itemProp:"item",itemScope:true,itemType:"http://schema.org/Product",state:linkState,replace:linkReplace},isBeta()&&product.featuredMedia?/*#__PURE__*/React.createElement(FeaturedMedia,{type:product.featuredMedia.type,url:product.featuredMedia.url,altText:product.featuredMedia.altText}):/*#__PURE__*/React.createElement(ProductImage,{src:product.featuredImageBaseUrl,resolutions:gridResolutions,alt:product.name,itemProp:"image"}),/*#__PURE__*/React.createElement(ProductBadges,{location:location,productId:product.id},!!(!hidePrice&&product.price.discount)&&/*#__PURE__*/React.createElement("div",{className:styles.badgeWrapper},/*#__PURE__*/React.createElement(Portal,{name:portals.PRODUCT_ITEM_DISCOUNT_BEFORE,props:{productId:product.id}}),/*#__PURE__*/React.createElement(Portal,{name:portals.PRODUCT_ITEM_DISCOUNT,props:{productId:product.id}},/*#__PURE__*/React.createElement(DiscountBadge,{text:"-".concat(product.price.discount,"%")})),/*#__PURE__*/React.createElement(Portal,{name:portals.PRODUCT_ITEM_DISCOUNT_AFTER,props:{productId:product.id}}))),!(hidePrice&&hideRating)&&/*#__PURE__*/React.createElement("div",{className:styles.details},showRatings&&/*#__PURE__*/React.createElement(RatingStars,{value:product.rating.average}),/*#__PURE__*/React.createElement(Swatches,{productId:product.id}),!hideName&&/*#__PURE__*/React.createElement("div",{itemProp:"name",className:styles.title,"data-test-id":"Productname: ".concat(product.name)},/*#__PURE__*/React.createElement(Ellipsis,{rows:titleRows||3},product.name)),/*#__PURE__*/React.createElement(MapPriceHint,{productId:product.id}),/*#__PURE__*/React.createElement(OrderQuantityHint,{productId:product.id}),!hidePrice&&/*#__PURE__*/React.createElement(Fragment,null,/*#__PURE__*/React.createElement(Portal,{name:portals.PRODUCT_ITEM_PRICE_BEFORE,props:{productId:product.id,location:location}}),/*#__PURE__*/React.createElement(Portal,{name:portals.PRODUCT_ITEM_PRICE,props:{productId:product.id,location:location}},/*#__PURE__*/React.createElement(ProductGridPrice,{price:product.price})),/*#__PURE__*/React.createElement(Portal,{name:portals.PRODUCT_ITEM_PRICE_AFTER,props:{productId:product.id,location:location}}))));}ProductCard.defaultProps={linkState:{},linkReplace:false,linkHref:''};export default ProductCard;
9
+ * @param {string} props.url Optional alternative url for the product link
10
+ * @return {JSX.Element}
11
+ */function ProductCard(props){var product=props.product,hidePrice=props.hidePrice,hideRating=props.hideRating,hideName=props.hideName,titleRows=props.titleRows,url=props.url;var _useProductListType=useProductListType(),meta=_useProductListType.meta;var _getProductImageSetti=getProductImageSettings(),gridResolutions=_getProductImageSetti.ListImage;var _useWidgetSettings=useWidgetSettings('@shopgate/engage/rating'),_useWidgetSettings$sh=_useWidgetSettings.showEmptyRatingStars,showEmptyRatingStars=_useWidgetSettings$sh===void 0?false:_useWidgetSettings$sh;var showRatings=useMemo(function(){var _product$rating;if(!hideRating&&(product===null||product===void 0?void 0:(_product$rating=product.rating)===null||_product$rating===void 0?void 0:_product$rating.average)>0){return true;}if(!hideRating&&showEmptyRatingStars&&(product===null||product===void 0?void 0:product.rating)){return true;}return false;},[hideRating,product,showEmptyRatingStars]);return React.createElement(Link,{className:"engage__product-card",href:url||getProductRoute(product.id),itemProp:"item",itemScope:true,itemType:"http://schema.org/Product",tabIndex:0,state:_extends({},meta)},isBeta()&&product.featuredMedia?React.createElement(FeaturedMedia,{type:product.featuredMedia.type,url:product.featuredMedia.url,altText:product.featuredMedia.altText}):React.createElement(ProductImage,{src:product.featuredImageBaseUrl,resolutions:gridResolutions,alt:product.name,itemProp:"image"}),React.createElement(ProductBadges,{location:location,productId:product.id},!!(!hidePrice&&product.price.discount)&&React.createElement("div",{className:styles.badgeWrapper},React.createElement(SurroundPortals,{portalName:PRODUCT_ITEM_DISCOUNT,portalProps:{productId:product.id}},React.createElement(DiscountBadge,{text:"-".concat(product.price.discount,"%")})))),!(hidePrice&&hideRating&&hideName)&&React.createElement("div",{className:"".concat(styles.details," engage__product-card__information")},showRatings&&React.createElement(RatingStars,{value:product.rating.average}),React.createElement(Swatches,{productId:product.id}),!hideName&&React.createElement(ProductName,{name:product.name,className:styles.title,testId:"Productname: ".concat(product.name),itemProp:"name",rows:titleRows||3}),React.createElement(MapPriceHint,{productId:product.id}),React.createElement(OrderQuantityHint,{productId:product.id}),!hidePrice&&React.createElement(SurroundPortals,{portalName:PRODUCT_ITEM_PRICE,portalProps:{productId:product.id,location:location}},React.createElement(ProductGridPrice,{product:product}))));}/**
12
+ * After a refactoring of the Theme API ProductCard component, this component replaced a
13
+ * sub-component of the ProductCard.
14
+ * The original implementation exposed a couple of sub-components that don't exist in the new
15
+ * implementation. Since we expect that they are not used anywhere, we replace them with mocks.
16
+ *
17
+ * Link to a GitHub tag that contains the original implementation:
18
+ * @link https://github.com/shopgate/pwa/blob/v7.27.1/themes/theme-ios11/themeApi/ProductCard/components/Render/index.jsx#L115
19
+ */ProductCard.Badge=function(){return null;};ProductCard.Price=function(){return null;};ProductCard.Title=function(){return null;};ProductCard.defaultProps={hideName:false,hidePrice:false,hideRating:false,titleRows:3,url:null};export default ProductCard;
@@ -1 +1 @@
1
- import{css}from'glamor';import{themeConfig,themeName}from'@shopgate/pwa-common/helpers/config';var isIOS=themeName.includes('ios');var colors=themeConfig.colors;var container=css(isIOS?{fontSize:14}:{position:'relative',display:'block',background:colors.light,fontSize:14,height:'100%'}).toString();var details=css({padding:'12px 16px',lineHeight:1.35}).toString();var title=css({fontWeight:'500',lineHeight:1.15,marginTop:1}).toString();var badgeWrapper=css({minWidth:40}).toString();var wishlist=css({display:'none',position:'absolute',right:16,left:'auto',transform:'translate3d(0, -50%, 0)'}).toString();export default{badgeWrapper:badgeWrapper,container:container,details:details,title:title,wishlist:wishlist};
1
+ import{css}from'glamor';var details=css({padding:'12px 16px',lineHeight:1.35}).toString();var title=css({fontWeight:'500',lineHeight:1.15,marginTop:1}).toString();var badgeWrapper=css({minWidth:40}).toString();export default{badgeWrapper:badgeWrapper,details:details,title:title};
@@ -1 +1 @@
1
- import React from'react';export default/*#__PURE__*/React.createContext();
1
+ import React from'react';export default React.createContext();
@@ -1,4 +1,4 @@
1
- function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import isMatch from'lodash/isMatch';import appConfig from'@shopgate/pwa-common/helpers/config';var variantSelectionMode=appConfig.variantSelectionMode,_appConfig$product=appConfig.product;_appConfig$product=_appConfig$product===void 0?{}:_appConfig$product;var variantPreselect=_appConfig$product.variantPreselect;var preselectVariant=variantPreselect||parseInt(variantSelectionMode,10)===1;/**
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import isMatch from'lodash/isMatch';import appConfig from'@shopgate/pwa-common/helpers/config';var variantSelectionMode=appConfig.variantSelectionMode,_appConfig$product=appConfig.product,_appConfig$product2=_appConfig$product===void 0?{}:_appConfig$product,variantPreselect=_appConfig$product2.variantPreselect;var preselectVariant=variantPreselect||parseInt(variantSelectionMode,10)===1;/**
2
2
  * Returns the index of a particular characteristic from a set of characteristics.
3
3
  * @param {Array} characteristics The characteristics of a product.
4
4
  * @param {number} characteristicId The id of the characteristic to find.
@@ -1,25 +1,39 @@
1
- function _typeof(obj){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(obj){return typeof obj;}:function(obj){return obj&&"function"==typeof Symbol&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;},_typeof(obj);}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);Object.defineProperty(Constructor,"prototype",{writable:false});return Constructor;}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});Object.defineProperty(subClass,"prototype",{writable:false});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _createSuper(Derived){var hasNativeReflectConstruct=_isNativeReflectConstruct();return function _createSuperInternal(){var Super=_getPrototypeOf(Derived),result;if(hasNativeReflectConstruct){var NewTarget=_getPrototypeOf(this).constructor;result=Reflect.construct(Super,arguments,NewTarget);}else{result=Super.apply(this,arguments);}return _possibleConstructorReturn(this,result);};}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}else if(call!==void 0){throw new TypeError("Derived constructors may only return object or undefined");}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));return true;}catch(e){return false;}}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Component}from'react';import PropTypes from'prop-types';import isMatch from'lodash/isMatch';import isEqual from'lodash/isEqual';import{broadcastLiveMessage}from'@shopgate/engage/a11y';import connect from"./connector";import VariantsContext from"./context";import{isCharacteristicEnabled,getSelectedValue,prepareState,selectCharacteristics}from"./helpers";/**
1
+ function _typeof(obj){if(typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"){_typeof=function _typeof(obj){return typeof obj;};}else{_typeof=function _typeof(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};}return _typeof(obj);}function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor)){throw new TypeError("Cannot call a class as a function");}}function _defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||false;descriptor.configurable=true;if("value"in descriptor)descriptor.writable=true;Object.defineProperty(target,descriptor.key,descriptor);}}function _createClass(Constructor,protoProps,staticProps){if(protoProps)_defineProperties(Constructor.prototype,protoProps);if(staticProps)_defineProperties(Constructor,staticProps);return Constructor;}function _callSuper(_this,derived,args){function isNativeReflectConstruct(){if(typeof Reflect==="undefined"||!Reflect.construct)return false;if(Reflect.construct.sham)return false;if(typeof Proxy==="function")return true;try{return!Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){}));}catch(e){return false;}}derived=_getPrototypeOf(derived);return _possibleConstructorReturn(_this,isNativeReflectConstruct()?Reflect.construct(derived,args||[],_getPrototypeOf(_this).constructor):derived.apply(_this,args));}function _possibleConstructorReturn(self,call){if(call&&(_typeof(call)==="object"||typeof call==="function")){return call;}return _assertThisInitialized(self);}function _assertThisInitialized(self){if(self===void 0){throw new ReferenceError("this hasn't been initialised - super() hasn't been called");}return self;}function _getPrototypeOf(o){_getPrototypeOf=Object.setPrototypeOf?Object.getPrototypeOf:function _getPrototypeOf(o){return o.__proto__||Object.getPrototypeOf(o);};return _getPrototypeOf(o);}function _inherits(subClass,superClass){if(typeof superClass!=="function"&&superClass!==null){throw new TypeError("Super expression must either be null or a function");}subClass.prototype=Object.create(superClass&&superClass.prototype,{constructor:{value:subClass,writable:true,configurable:true}});if(superClass)_setPrototypeOf(subClass,superClass);}function _setPrototypeOf(o,p){_setPrototypeOf=Object.setPrototypeOf||function _setPrototypeOf(o,p){o.__proto__=p;return o;};return _setPrototypeOf(o,p);}function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import React,{Component}from'react';import PropTypes from'prop-types';import isMatch from'lodash/isMatch';import isEqual from'lodash/isEqual';import{broadcastLiveMessage}from'@shopgate/engage/a11y';import{responsiveCondition}from'@shopgate/engage/styles';import connect from"./connector";import VariantsContext from"./context";import{isCharacteristicEnabled,getSelectedValue,prepareState,selectCharacteristics}from"./helpers";/**
2
2
  * The ProductCharacteristics component.
3
- */var ProductCharacteristics=/*#__PURE__*/function(_Component){_inherits(ProductCharacteristics,_Component);var _super=_createSuper(ProductCharacteristics);/**
4
- * @param {Object} props The component props.
5
- */function ProductCharacteristics(_props){var _this;_classCallCheck(this,ProductCharacteristics);_this=_super.call(this,_props);_defineProperty(_assertThisInitialized(_this),"setRefs",function(props){var variants=props.variants;if(variants){variants.characteristics.forEach(function(_char){_this.refsStore[_char.id]=/*#__PURE__*/React.createRef();});}});_defineProperty(_assertThisInitialized(_this),"checkSelection",function(){var characteristics=_this.state.characteristics;var _this$props=_this.props,variants=_this$props.variants,variantId=_this$props.variantId;if(!variants){return true;}var filteredValues=Object.keys(characteristics).filter(function(key){return!!characteristics[key];});var selected=!!(filteredValues.length===variants.characteristics.length&&variantId);if(!selected){var firstUnselected=_this.findUnselectedCharacteristic();if(firstUnselected){var ref=_this.refsStore[firstUnselected.id];// Focus the item for screen readers and broadcast a related live message.
6
- ref.current.focus();var option=ref.current.innerText;broadcastLiveMessage('product.pick_option_first',{params:{option:option}});ref.current.scrollIntoView({behavior:'smooth'});_this.setState({highlight:firstUnselected.id});}}return selected;});_defineProperty(_assertThisInitialized(_this),"checkSelectedCharacteristics",function(){var characteristics=_this.state.characteristics;var _this$props2=_this.props,variantId=_this$props2.variantId,variants=_this$props2.variants,finishTimeout=_this$props2.finishTimeout;if(!variants){return;}var filteredValues=Object.keys(characteristics).filter(function(key){return!!characteristics[key];});if(filteredValues.length!==variants.characteristics.length){return;}var products=variants.products.filter(function(product){return isMatch(product.characteristics,characteristics);});if(!products.length){return;}if(products[0].id===variantId){return;}setTimeout(function(){_this.props.navigate(products[0].id);},finishTimeout);});_defineProperty(_assertThisInitialized(_this),"handleSelection",function(selection){var _this$props3=_this.props,variants=_this$props3.variants,setCharacteristics=_this$props3.setCharacteristics;var id=selection.id,value=selection.value;_this.setState(function(_ref){var characteristics=_ref.characteristics;var state=prepareState(id,value,characteristics,variants.characteristics,variants.products);setCharacteristics(state);return{characteristics:_extends({},state),highlight:null};},_this.checkSelectedCharacteristics);});_defineProperty(_assertThisInitialized(_this),"buildValues",function(selections,charId,values,charIndex,selectedValue,charDisabled){// If this is the first characteristic then all values are selectable.
7
- if(charIndex===0){return values.map(function(value){return _extends({},value,{selectable:!charDisabled,selected:selectedValue===value.id});});}var variants=_this.props.variants;var subset={};Object.keys(selections).forEach(function(item,index){if(index<charIndex){subset[item]=selections[item];}});// Filter products that match or partially match the current characteristic selection.
3
+ */var ProductCharacteristics=/*#__PURE__*/function(_Component){function ProductCharacteristics(_props){var _this2;_classCallCheck(this,ProductCharacteristics);_this2=_callSuper(this,ProductCharacteristics,[_props]);/**
4
+ * Sets the refs to the characteristics selects.
5
+ * @param {Object} props The props to check against.
6
+ */_defineProperty(_this2,"setRefs",function(props){var variants=props.variants;if(variants){variants.characteristics.forEach(function(_char){_this2.refsStore[_char.id]=React.createRef();});}});/**
7
+ * Checks if all selections have been made.
8
+ * @return {boolean}
9
+ */_defineProperty(_this2,"checkSelection",function(){var characteristics=_this2.state.characteristics;var _this2$props=_this2.props,variants=_this2$props.variants,variantId=_this2$props.variantId;if(!variants){return true;}var filteredValues=Object.keys(characteristics).filter(function(key){return!!characteristics[key];});var selected=!!(filteredValues.length===variants.characteristics.length&&variantId);if(!selected){var firstUnselected=_this2.findUnselectedCharacteristic();if(firstUnselected){var ref=_this2.refsStore[firstUnselected.id];// Focus the item for screen readers and broadcast a related live message.
10
+ ref.current.focus();var option=ref.current.innerText;broadcastLiveMessage('product.pick_option_first',{params:{option:option}});if(responsiveCondition('>xs',{webOnly:true})){ref.current.scrollIntoView({behavior:'smooth',block:'center'});}else{ref.current.scrollIntoView({behavior:'smooth'});}_this2.setState({highlight:firstUnselected.id});}}return selected;});_defineProperty(_this2,"checkSelectedCharacteristics",function(){var characteristics=_this2.state.characteristics;var _this2$props2=_this2.props,variantId=_this2$props2.variantId,variants=_this2$props2.variants,finishTimeout=_this2$props2.finishTimeout;if(!variants){return;}var filteredValues=Object.keys(characteristics).filter(function(key){return!!characteristics[key];});if(filteredValues.length!==variants.characteristics.length){return;}var products=variants.products.filter(function(product){return isMatch(product.characteristics,characteristics);});if(!products.length){return;}if(products[0].id===variantId){return;}setTimeout(function(){_this2.props.navigate(products[0].id);},finishTimeout);});/**
11
+ * Stores a selected characteristic into the local state.
12
+ * @param {Object} selection The selected item.
13
+ */_defineProperty(_this2,"handleSelection",function(selection){var _this2$props3=_this2.props,variants=_this2$props3.variants,setCharacteristics=_this2$props3.setCharacteristics;var id=selection.id,value=selection.value;_this2.setState(function(_ref){var characteristics=_ref.characteristics;var state=prepareState(id,value,characteristics,variants.characteristics,variants.products);setCharacteristics(state);return{characteristics:_extends({},state),highlight:null};},_this2.checkSelectedCharacteristics);});/**
14
+ * @param {Object} selections The selections stored in the state.
15
+ * @param {string} charId The current characteristic ID.
16
+ * @param {Array} values The characteristic values.
17
+ * @param {number} charIndex The characteristic index.
18
+ * @param {string|null} selectedValue selectedValue
19
+ * @param {boolean} charDisabled Whether the characteristic for the values is disabled
20
+ * @return {Array}
21
+ */_defineProperty(_this2,"buildValues",function(selections,charId,values,charIndex,selectedValue,charDisabled){// If this is the first characteristic then all values are selectable.
22
+ if(charIndex===0){return values.map(function(value){return _extends({},value,{selectable:!charDisabled,selected:selectedValue===value.id});});}var variants=_this2.props.variants;var subset={};Object.keys(selections).forEach(function(item,index){if(index<charIndex){subset[item]=selections[item];}});// Filter products that match or partially match the current characteristic selection.
8
23
  var products=variants.products.filter(function(_ref2){var characteristics=_ref2.characteristics;return isMatch(characteristics,subset);});// Check if any of the values are present inside any of the matching products.
9
- return values.map(function(value){var selectable=products.some(function(_ref3){var characteristics=_ref3.characteristics;return isMatch(characteristics,_defineProperty({},charId,value.id));});return _extends({},value,{selectable:charDisabled?false:selectable,selected:selectedValue===value.id});});});_defineProperty(_assertThisInitialized(_this),"resetHighlight",function(){_this.setState({highlight:null});});_this.refsStore={};var _characteristics=selectCharacteristics(_props);_this.state={highlight:null,characteristics:_characteristics};_props.setCharacteristics(_characteristics);_this.setRefs(_props);_props.conditioner.addConditioner('product-variants',_this.checkSelection);return _this;}/** @inheritDoc */_createClass(ProductCharacteristics,[{key:"componentDidMount",value:function componentDidMount(){this.checkSelectedCharacteristics();}/**
24
+ return values.map(function(value){var selectable=products.some(function(_ref3){var characteristics=_ref3.characteristics;return isMatch(characteristics,_defineProperty({},charId,value.id));});return _extends({},value,{selectable:charDisabled?false:selectable,selected:selectedValue===value.id});});});/**
25
+ * Resets the highlight state
26
+ */_defineProperty(_this2,"resetHighlight",function(){_this2.setState({highlight:null});});_this2.refsStore={};var _characteristics=selectCharacteristics(_props);_this2.state={highlight:null,characteristics:_characteristics};_props.setCharacteristics(_characteristics);_this2.setRefs(_props);_props.conditioner.addConditioner('product-variants',_this2.checkSelection);return _this2;}/** @inheritDoc */_inherits(ProductCharacteristics,_Component);return _createClass(ProductCharacteristics,[{key:"componentDidMount",value:function componentDidMount(){this.checkSelectedCharacteristics();}/**
10
27
  * @param {Object} nextProps The next component props.
11
28
  */},{key:"UNSAFE_componentWillReceiveProps",value:function UNSAFE_componentWillReceiveProps(nextProps){if(!this.props.variants&&nextProps.variants){// Initialize refs and characteristics when the variants prop was updated with a valid value.
12
29
  this.setRefs(nextProps);var characteristics=selectCharacteristics(nextProps);this.setState({characteristics:characteristics},this.checkSelectedCharacteristics);// Inform parent component about potential updates e.g. preselected characteristic values
13
30
  nextProps.setCharacteristics(characteristics);}else if(nextProps.characteristics&&!isEqual(this.state.characteristics,nextProps.characteristics)){// Sync back characteristics from parent if set
14
- this.setState({characteristics:nextProps.characteristics});}}/**
15
- * Sets the refs to the characteristics selects.
16
- * @param {Object} props The props to check against.
17
- */},{key:"findUnselectedCharacteristic",value:/**
31
+ this.setState({characteristics:nextProps.characteristics});}}},{key:"findUnselectedCharacteristic",value:/**
18
32
  * Finds the first unselected characteristic.
19
33
  * @return {Object|null}
20
- */function findUnselectedCharacteristic(){var characteristics=this.state.characteristics;var unselected=this.props.variants.characteristics.filter(function(_char2){return!characteristics.hasOwnProperty(_char2.id);});if(unselected.length){return unselected[0];}return null;}/**
21
- * Resets the highlight state
22
- */},{key:"render",value:/**
34
+ */function findUnselectedCharacteristic(){var characteristics=this.state.characteristics;var unselected=this.props.variants.characteristics.filter(function(_char2){return!characteristics.hasOwnProperty(_char2.id);});if(unselected.length){return unselected[0];}return null;}},{key:"render",value:/**
23
35
  * @return {JSX}
24
- */function render(){var _this2=this;var characteristics=this.state.characteristics;var variants=this.props.variants;if(!variants){return null;}return/*#__PURE__*/React.createElement(VariantsContext.Provider,{value:this.state},variants.characteristics.map(function(_char3,index){var disabled=!isCharacteristicEnabled(characteristics,index);var selected=getSelectedValue(_char3.id,characteristics);var values=_this2.buildValues(characteristics,_char3.id,_char3.values,index,selected,disabled);return _this2.props.render({charRef:_this2.refsStore[_char3.id],disabled:disabled,highlight:_this2.state.highlight===_char3.id,id:_char3.id,key:_char3.id,label:_char3.label,swatch:!!_char3.swatch,// BETA
25
- select:_this2.handleSelection,selected:selected,values:values,resetHighlight:_this2.resetHighlight});}));}}]);return ProductCharacteristics;}(Component);_defineProperty(ProductCharacteristics,"defaultProps",{finishTimeout:0,variantId:null,variants:null,characteristics:null});export default connect(ProductCharacteristics);
36
+ */function render(){var _this3=this;var characteristics=this.state.characteristics;var variants=this.props.variants;if(!variants){return null;}return React.createElement(VariantsContext.Provider,{value:this.state},variants.characteristics.map(function(_char3,index){var disabled=!isCharacteristicEnabled(characteristics,index);var selected=getSelectedValue(_char3.id,characteristics);var values=_this3.buildValues(characteristics,_char3.id,_char3.values,index,selected,disabled);return _this3.props.render({charRef:_this3.refsStore[_char3.id],disabled:disabled,highlight:_this3.state.highlight===_char3.id,id:_char3.id,key:_char3.id,label:_char3.label,swatch:!!_char3.swatch,// BETA
37
+ select:_this3.handleSelection,selected:selected,values:values,resetHighlight:_this3.resetHighlight});}));}}]);}(Component);_defineProperty(ProductCharacteristics,"defaultProps",{finishTimeout:0,variantId:null,variants:null,characteristics:null/**
38
+ * @param {Object} props The component props.
39
+ */});export default connect(ProductCharacteristics);
@@ -1,4 +1,4 @@
1
1
  function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React from'react';import PropTypes from'prop-types';import{css}from'glamor';import{SurroundPortals}from'@shopgate/engage/components';import DiscountBadge from'@shopgate/pwa-ui-shared/DiscountBadge';import{PRODUCT_DISCOUNT}from'@shopgate/pwa-common-commerce/product/constants/Portals';import{useWidgetSettings}from'@shopgate/engage/core';import ProductBadges from"../ProductBadges";import styles from"./style";import connect from"./connector";/**
2
2
  * ProductDiscountBadge
3
- * @return {JSX}
4
- */var ProductDiscountBadge=function ProductDiscountBadge(_ref){var productId=_ref.productId,discount=_ref.discount;var _ref2=useWidgetSettings('@shopgate/engage/product/components/ProductDiscountBadge')||{},_ref2$pdp=_ref2.pdp,pdp=_ref2$pdp===void 0?{show:false,style:{}}:_ref2$pdp;return/*#__PURE__*/React.createElement(ProductBadges,{className:styles.portal,location:"productDiscountBadge",productId:productId,portalProps:_extends({},pdp)},pdp.show&&discount?/*#__PURE__*/React.createElement("div",{className:"".concat(styles.container," ").concat(css(pdp.style)," theme__product__product-discount"),"aria-hidden":true},/*#__PURE__*/React.createElement(SurroundPortals,{portalName:PRODUCT_DISCOUNT,portalProps:{productId:productId,discount:discount}},/*#__PURE__*/React.createElement(DiscountBadge,{className:styles.badge,text:"-".concat(discount,"%")}))):null);};ProductDiscountBadge.defaultProps={discount:null};export default connect(ProductDiscountBadge);
3
+ * @return {JSX.Element}
4
+ */var ProductDiscountBadge=function ProductDiscountBadge(_ref){var productId=_ref.productId,discount=_ref.discount;var _ref2=useWidgetSettings('@shopgate/engage/product/components/ProductDiscountBadge')||{},_ref2$pdp=_ref2.pdp,pdp=_ref2$pdp===void 0?{show:false,style:{}}:_ref2$pdp;return React.createElement(ProductBadges,{className:styles.portal,location:"productDiscountBadge",productId:productId,portalProps:_extends({},pdp)},pdp.show&&discount?React.createElement("div",{className:"".concat(styles.container," ").concat(css(pdp.style)," theme__product__product-discount")},React.createElement(SurroundPortals,{portalName:PRODUCT_DISCOUNT,portalProps:{productId:productId,discount:discount}},React.createElement(DiscountBadge,{className:styles.badge,text:"-".concat(discount,"%")}))):null);};ProductDiscountBadge.defaultProps={discount:null};export default connect(ProductDiscountBadge);
@@ -1,5 +1,5 @@
1
- import React from'react';import{mount}from'enzyme';import configureStore from'redux-mock-store';import{Provider}from'react-redux';import{useWidgetSettings}from'@shopgate/engage/core/hooks/useWidgetSettings';import{mockedProduct1,mockedStateWithDiscount,mockedStateWithoutDiscount}from"./mock";import ProductDiscountBadge from"./index";jest.mock('@shopgate/engage/core/hooks/useWidgetSettings',function(){return{useWidgetSettings:jest.fn()};});describe('<ProductDiscountBadge />',function(){var mockedStore=configureStore();beforeEach(function(){useWidgetSettings.mockReturnValue({pdp:{show:true,style:{color:'blue'}}});});/**
1
+ import React from'react';import{mount}from'enzyme';import configureStore from'redux-mock-store';import{Provider}from'react-redux';import{useWidgetSettings}from'@shopgate/engage/core/hooks/useWidgetSettings';import{mockedProduct1,mockedStateWithDiscount,mockedStateWithoutDiscount}from"./mock";import ProductDiscountBadge from"./index";jest.mock('@shopgate/engage/components');jest.mock('@shopgate/engage/core/hooks/useWidgetSettings',function(){return{useWidgetSettings:jest.fn()};});describe('<ProductDiscountBadge />',function(){var mockedStore=configureStore();beforeEach(function(){useWidgetSettings.mockReturnValue({pdp:{show:true,style:{color:'blue'}}});});/**
2
2
  * createComponent
3
3
  * @param {Object} mockedState mockedState
4
4
  * @return {*}
5
- */var createComponent=function createComponent(mockedState){var store=mockedStore(mockedState);return mount(/*#__PURE__*/React.createElement(Provider,{store:store},/*#__PURE__*/React.createElement(ProductDiscountBadge,{productId:mockedProduct1.productId})));};it('should render without discount',function(){var wrapper=createComponent(mockedStateWithoutDiscount);expect(wrapper).toMatchSnapshot();});it('should render with discount',function(){var wrapper=createComponent(mockedStateWithDiscount);expect(wrapper).toMatchSnapshot();});it('should not render with discount if widgetSetting is false',function(){useWidgetSettings.mockReturnValue({pdp:{show:false,style:{}}});var wrapper=createComponent(mockedStateWithDiscount);expect(wrapper).toMatchSnapshot();});});
5
+ */var createComponent=function createComponent(mockedState){var store=mockedStore(mockedState);return mount(React.createElement(Provider,{store:store},React.createElement(ProductDiscountBadge,{productId:mockedProduct1.productId})));};it('should render without discount',function(){var wrapper=createComponent(mockedStateWithoutDiscount);expect(wrapper).toMatchSnapshot();});it('should render with discount',function(){var wrapper=createComponent(mockedStateWithDiscount);expect(wrapper).toMatchSnapshot();});it('should not render with discount if widgetSetting is false',function(){useWidgetSettings.mockReturnValue({pdp:{show:false,style:{}}});var wrapper=createComponent(mockedStateWithDiscount);expect(wrapper).toMatchSnapshot();});});
@@ -1 +1 @@
1
- import{css}from'glamor';var styles={portal:css({top:12}).toString(),container:css({minWidth:65,zIndex:10}),badge:css({fontSize:'1.15rem'}).toString()};export default styles;
1
+ function _defineProperty(obj,key,value){if(key in obj){Object.defineProperty(obj,key,{value:value,enumerable:true,configurable:true,writable:true});}else{obj[key]=value;}return obj;}import{css}from'glamor';import{responsiveMediaQuery}from'@shopgate/engage/styles';var styles={portal:css(_defineProperty({top:12},responsiveMediaQuery('>xs',{webOnly:true}),{top:25,left:25})).toString(),container:css(_defineProperty({minWidth:65,zIndex:10},responsiveMediaQuery('>xs',{webOnly:true}),{minWidth:50})),badge:css(_defineProperty({fontSize:'1.15rem'},responsiveMediaQuery('>xs',{webOnly:true}),{fontSize:14})).toString()};export default styles;
@@ -0,0 +1,8 @@
1
+ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React,{useMemo,memo}from'react';import PropTypes from'prop-types';import{MapPriceHint,OrderQuantityHint,EffectivityDates,Swatches,AVAILABILITY_STATE_OK,AVAILABILITY_STATE_ALERT,getProductRoute}from'@shopgate/engage/product';import{hasNewServices as checkHasNewServices,i18n}from'@shopgate/engage/core/helpers';import{Availability,Link}from'@shopgate/engage/components';import{StockInfoLists}from'@shopgate/engage/locations/components';import{makeStyles}from'@shopgate/engage/styles';import ItemName from"../ItemName";import ItemPrice from"../ItemPrice";var useStyles=makeStyles()({root:{lineHeight:1.2,':not(:empty)':{padding:'12px 0 16px'}},quantityHint:{paddingTop:8}});/**
2
+ * The Product Grid Item Detail component.
3
+ * @param {Object} props The component props.
4
+ * @param {Object} props.product The product.
5
+ * @param {Object} props.display The display object.
6
+ * @param {Object} [props.productListTypeMeta] Optional meta object with data from the product list
7
+ * @returns {JSX.Element}
8
+ */var ItemDetails=function ItemDetails(_ref){var product=_ref.product,display=_ref.display,productListTypeMeta=_ref.productListTypeMeta;var productId=product.id,_product$name=product.name,name=_product$name===void 0?null:_product$name,_product$stock=product.stock,stock=_product$stock===void 0?null:_product$stock;var _useStyles=useStyles(),classes=_useStyles.classes,cx=_useStyles.cx;var hasNewServices=useMemo(function(){return checkHasNewServices();},[]);if(display&&!display.name&&!display.price&&!display.reviews){return null;}return React.createElement(Link,{className:cx(classes.root,'theme__product-grid__item__item-details'),tabIndex:0,href:getProductRoute(productId),state:_extends({title:product.name},productListTypeMeta)},React.createElement(Swatches,{productId:productId}),React.createElement(ItemName,{display:display,productId:productId,name:name}),React.createElement(MapPriceHint,{productId:productId}),React.createElement(OrderQuantityHint,{productId:productId,className:classes.quantityHint}),React.createElement(EffectivityDates,{productId:productId}),hasNewServices&&React.createElement(React.Fragment,null,React.createElement(Availability,{state:!stock||stock.orderable?AVAILABILITY_STATE_OK:AVAILABILITY_STATE_ALERT,text:i18n.text('product.available.not'),showWhenAvailable:false}),React.createElement(StockInfoLists,{product:product})),React.createElement(ItemPrice,{product:product,display:display}));};ItemDetails.defaultProps={display:null,productListTypeMeta:null};export default memo(ItemDetails);
@@ -0,0 +1 @@
1
+ function _extends(){_extends=Object.assign||function(target){for(var i=1;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(Object.prototype.hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;};return _extends.apply(this,arguments);}import React from'react';import{shallow}from'enzyme';import{hasNewServices}from'@shopgate/engage/core/helpers';import{Availability}from'@shopgate/engage/components';import{StockInfoLists}from'@shopgate/engage/locations/components';import ItemDetails from"./index";jest.mock('@shopgate/engage/product',function(){return{MapPriceHint:function MapPriceHint(){return null;},OrderQuantityHint:function OrderQuantityHint(){return null;},EffectivityDates:function EffectivityDates(){return null;},Swatches:function Swatches(){return null;},AVAILABILITY_STATE_OK:'AVAILABILITY_STATE_OK',AVAILABILITY_STATE_ALERT:'AVAILABILITY_STATE_ALERT',getProductRoute:jest.fn(function(productId){return"link-to-product/".concat(productId);})};});jest.mock('@shopgate/engage/locations/components',function(){return{StockInfoLists:function StockInfoLists(){return null;}};});jest.mock('@shopgate/engage/core/helpers',function(){return{hasNewServices:jest.fn().mockReturnValue(false),i18n:{text:function text(str){return str;}}};});jest.mock('@shopgate/engage/components');jest.mock('@shopgate/engage/core',function(){return{isIOSTheme:jest.fn().mockReturnValue(true),hasWebBridge:jest.fn().mockReturnValue(false),i18n:{text:function text(_text){return _text;}}};});jest.mock("../ItemName");jest.mock("../ItemPrice");describe('<ItemDetails />',function(){var props={product:{id:'1234',name:'Foo',price:{}}};var display={name:false,price:false,reviews:false};it('should render with minimal props',function(){var wrapper=shallow(React.createElement(ItemDetails,props));expect(wrapper).toMatchSnapshot();expect(wrapper.find(Availability).exists()).toBe(false);expect(wrapper.find(StockInfoLists).exists()).toBe(false);});it('should render additional components with new services',function(){hasNewServices.mockReturnValueOnce(true);var wrapper=shallow(React.createElement(ItemDetails,props));expect(wrapper).toMatchSnapshot();expect(wrapper.find(Availability).exists()).toBe(true);expect(wrapper.find(StockInfoLists).exists()).toBe(true);});it('should not render with display props set',function(){var wrapper=shallow(React.createElement(ItemDetails,_extends({},props,{display:display})));expect(wrapper).toBeEmptyRender();});});
@@ -0,0 +1,5 @@
1
+ import React,{memo,useMemo}from'react';import PropTypes from'prop-types';import{SurroundPortals,DiscountBadge}from'@shopgate/engage/components';import{PRODUCT_ITEM_DISCOUNT}from'@shopgate/engage/category';import{makeStyles}from'@shopgate/engage/styles';var useStyles=makeStyles()({root:{minWidth:40}});/**
2
+ * The item discount component
3
+ * @param {Object} props The component props.
4
+ * @returns {JSX.Element|null}
5
+ */var ItemDiscount=function ItemDiscount(_ref){var productId=_ref.productId,discount=_ref.discount;var _useStyles=useStyles(),classes=_useStyles.classes,cx=_useStyles.cx;var portalProps=useMemo(function(){return{productId:productId};},[productId]);if(!discount){return null;}return React.createElement("div",{className:cx(classes.root,'theme__product-grid__item__item-discount')},React.createElement(SurroundPortals,{portalName:PRODUCT_ITEM_DISCOUNT,portalProps:portalProps},React.createElement(DiscountBadge,{text:"-".concat(discount,"%")})));};ItemDiscount.defaultProps={discount:null};export default memo(ItemDiscount);
@@ -0,0 +1,5 @@
1
+ import React,{memo,useMemo}from'react';import PropTypes from'prop-types';import{useSelector}from'react-redux';import{SurroundPortals,FavoritesButton}from'@shopgate/engage/components';import{PRODUCT_ITEM_FAVORITES_BUTTON}from'@shopgate/engage/category';import{isRelativeProductOnList}from'@shopgate/engage/favorites';import{getLoadWishlistOnAppStartEnabled}from'@shopgate/engage/core';import{makeStyles}from'@shopgate/engage/styles';var useStyles=makeStyles()({root:{position:'absolute',top:0,right:16,left:'auto',transform:'translate3d(0, -50%, 0)'}});/**
2
+ * The item favorites button component.
3
+ * @param {Object} props The component props.
4
+ * @returns {JSX.Element}
5
+ */var ItemFavoritesButton=function ItemFavoritesButton(_ref){var productId=_ref.productId;var _useStyles=useStyles(),classes=_useStyles.classes;var loadWishlistOnAppStartEnabled=useSelector(getLoadWishlistOnAppStartEnabled);var isOnWishlist=useSelector(function(state){return isRelativeProductOnList(state,{productId:productId});});var isFavorite=useMemo(function(){return!loadWishlistOnAppStartEnabled?false:isOnWishlist;},[isOnWishlist,loadWishlistOnAppStartEnabled]);var portalProps=useMemo(function(){return{productId:productId};},[productId]);return React.createElement(SurroundPortals,{portalName:PRODUCT_ITEM_FAVORITES_BUTTON,portalProps:portalProps},React.createElement("div",{className:classes.root,"data-test-id":"favorites"},React.createElement(FavoritesButton,{active:isFavorite,productId:productId,noShadow:true,removeWithRelatives:true})));};export default memo(ItemFavoritesButton);
@@ -0,0 +1 @@
1
+ import React from'react';import{shallow}from'enzyme';import{combineReducers}from'redux';import{Provider}from'react-redux';import{createMockStore}from'@shopgate/pwa-common/store';import favorites from'@shopgate/pwa-common-commerce/favorites/reducers';import ItemFavoritesButton from"./index";jest.mock('@shopgate/engage/components');var store=createMockStore(combineReducers({favorites:favorites}));describe('<ItemFavoritesButton />',function(){it('should not render when its not a favorite',function(){var wrapper=shallow(React.createElement(Provider,{store:store},React.createElement(ItemFavoritesButton,{productId:"1234"})));expect(wrapper).toMatchSnapshot();});it('should render if its a favorite',function(){var wrapper=shallow(React.createElement(Provider,{store:store},React.createElement(ItemFavoritesButton,{productId:"1234",isFavorite:true})));expect(wrapper).toMatchSnapshot();});});
@@ -0,0 +1,5 @@
1
+ import React,{useMemo,memo}from'react';import PropTypes from'prop-types';import{SurroundPortals}from'@shopgate/engage/components';import{PRODUCT_ITEM_IMAGE}from'@shopgate/engage/category/constants';import{getProductImageSettings,ProductImage}from'@shopgate/engage/product';var _getProductImageSetti=getProductImageSettings(),gridResolutions=_getProductImageSetti.ListImage;/**
2
+ * The item image component.
3
+ * @param {Object} props The component props.
4
+ * @returns {JSX.Element}
5
+ */var ItemImage=function ItemImage(_ref){var productId=_ref.productId,name=_ref.name,imageUrl=_ref.imageUrl;var portalProps=useMemo(function(){return{productId:productId};},[productId]);return React.createElement(SurroundPortals,{portalName:PRODUCT_ITEM_IMAGE,portalProps:portalProps},React.createElement(ProductImage,{alt:name,src:imageUrl,resolutions:gridResolutions,itemProp:"image"}));};ItemImage.defaultProps={imageUrl:null,name:null};export default memo(ItemImage);
@@ -0,0 +1 @@
1
+ import React from'react';import{shallow}from'enzyme';import ItemImage from"./index";jest.mock('@shopgate/engage/components',function(){return{ProductImage:function ProductImage(){return null;}};});describe('<ItemImage />',function(){it('should render',function(){var wrapper=shallow(React.createElement(ItemImage,{productId:"1234",imageUrl:"http://www.google.com",name:"FooBar"}));expect(wrapper).toMatchSnapshot();});});