@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.
- package/a11y/action-creators/index.js +9 -0
- package/a11y/components/FocusTrap/index.js +1 -0
- package/a11y/components/LiveMessage/index.js +1 -1
- package/a11y/components/LiveMessenger/helpers.js +1 -1
- package/a11y/components/LiveMessenger/index.js +2 -2
- package/a11y/components/ModalStateTracker/index.js +14 -0
- package/a11y/components/Navigation/index.js +1 -1
- package/a11y/components/Section/index.js +3 -3
- package/a11y/components/VisuallyHidden/index.js +1 -1
- package/a11y/components/index.js +1 -1
- package/a11y/constants/index.js +1 -0
- package/a11y/helpers/index.js +1 -0
- package/a11y/hooks/index.js +37 -0
- package/a11y/index.js +1 -4
- package/a11y/reducers/index.js +6 -0
- package/a11y/selectors/index.js +8 -0
- package/a11y/styles.js +2 -0
- package/account/actions/addContacts.js +4 -0
- package/account/actions/deleteContact.js +5 -0
- package/account/actions/deleteCustomer.js +4 -0
- package/account/actions/fetchContacts.js +4 -0
- package/account/actions/fetchCustomer.js +4 -0
- package/account/actions/updateContact.js +4 -0
- package/account/actions/updateCustomer.js +4 -0
- package/account/components/Account/Account.connector.js +5 -0
- package/account/components/Account/Account.js +4 -0
- package/account/components/Account/Account.style.js +1 -0
- package/account/components/Account/index.js +1 -0
- package/account/components/Profile/Profile.config.js +11 -0
- package/account/components/Profile/Profile.constraints.js +1 -0
- package/account/components/Profile/Profile.js +1 -0
- package/account/components/Profile/Profile.provider.js +22 -0
- package/account/components/Profile/ProfileAddressBook.js +6 -0
- package/account/components/Profile/ProfileAddressCard.js +3 -0
- package/account/components/Profile/ProfileForm.js +3 -0
- package/account/components/Profile/ProfileHeader.js +3 -0
- package/account/components/Profile/index.js +1 -0
- package/account/components/ProfileContact/ProfileContact.config.js +11 -0
- package/account/components/ProfileContact/ProfileContact.constraints.js +5 -0
- package/account/components/ProfileContact/ProfileContact.js +13 -0
- package/account/components/ProfileContact/index.js +1 -0
- package/account/components/index.js +1 -0
- package/account/constants/actions.js +1 -0
- package/account/constants/index.js +1 -1
- package/account/constants/pipelines.js +1 -0
- package/account/helper/form.js +61 -0
- package/account/index.js +1 -1
- package/account/reducers/index.js +6 -0
- package/account/selectors/contacts.js +7 -0
- package/account/selectors/customer.js +7 -0
- package/app-rating/actions/showModal.js +3 -3
- package/app-rating/helpers/index.js +1 -1
- package/app-rating/subscriptions/index.js +11 -6
- package/back-in-stock/actions/index.js +1 -1
- package/back-in-stock/components/BackInStockButton/index.js +3 -3
- package/back-in-stock/components/CharacteristicsButton/index.js +1 -1
- package/back-in-stock/components/ProductInfoBackInStockButton/index.js +1 -1
- package/back-in-stock/components/Subscriptions/components/List/index.js +2 -2
- package/back-in-stock/components/Subscriptions/components/Subscription/index.js +2 -2
- package/back-in-stock/components/Subscriptions/index.js +1 -1
- package/back-in-stock/providers/BackInStockSubscriptionsProvider.context.js +1 -1
- package/back-in-stock/providers/BackInStockSubscriptionsProvider.js +1 -1
- package/back-in-stock/selectors/index.js +5 -3
- package/back-in-stock/streams/index.js +1 -1
- package/back-in-stock/subscriptions/index.js +2 -2
- package/cart/cart.constants.js +1 -0
- package/cart/cart.context.js +1 -0
- package/cart/cart.helpers.js +15 -0
- package/cart/cart.hooks.js +4 -0
- package/cart/cart.selectors.js +34 -0
- package/cart/cart.types.js +1 -0
- package/cart/components/CartHeaderWide/CartHeaderWide.js +3 -0
- package/cart/components/CartHeaderWide/CartHeaderWide.style.js +1 -0
- package/cart/components/CartHeaderWide/index.js +1 -0
- package/cart/components/CartItem/CartItem.hooks.js +7 -0
- package/cart/components/CartItem/CartItem.js +7 -0
- package/cart/components/CartItem/CartItem.style.js +1 -0
- package/cart/components/CartItem/CartItemCoupon.connector.js +7 -0
- package/cart/components/CartItem/CartItemCoupon.js +20 -0
- package/cart/components/CartItem/CartItemCoupon.style.js +5 -0
- package/cart/components/CartItem/CartItemCoupon.types.js +0 -0
- package/cart/components/CartItem/CartItemCouponCode.js +5 -0
- package/cart/components/CartItem/CartItemCouponDelete.js +5 -0
- package/cart/components/CartItem/CartItemCouponDelete.style.js +1 -0
- package/cart/components/CartItem/CartItemCouponFreeShipping.js +5 -0
- package/cart/components/CartItem/CartItemCouponIcon.js +4 -0
- package/cart/components/CartItem/CartItemCouponLayout.js +6 -0
- package/cart/components/CartItem/CartItemCouponLayout.style.js +5 -0
- package/cart/components/CartItem/CartItemCouponPrice.js +5 -0
- package/cart/components/CartItem/CartItemCouponPrice.style.js +1 -0
- package/cart/components/CartItem/CartItemCouponTitle.js +5 -0
- package/cart/components/CartItem/CartItemCouponTitle.style.js +1 -0
- package/cart/components/CartItem/CartItemProduct.js +5 -0
- package/cart/components/CartItem/CartItemProduct.style.js +1 -0
- package/cart/components/CartItem/CartItemProductLayout.js +6 -0
- package/cart/components/CartItem/CartItemProductLayout.style.js +1 -0
- package/cart/components/CartItem/CartItemProductLayoutWide.js +4 -0
- package/cart/components/CartItem/CartItemProductLayoutWide.style.js +1 -0
- package/cart/components/CartItem/CartItemProductLayoutWideFulfillmentLabel.js +4 -0
- package/cart/components/CartItem/CartItemProductLayoutWideFulfillmentLabel.style.js +1 -0
- package/cart/components/CartItem/CartItemProductLayoutWideOrderDetails.js +3 -0
- package/cart/components/CartItem/CartItemProductLayoutWideRemoveItem.js +4 -0
- package/cart/components/CartItem/CartItemProductLayoutWideRemoveItem.style.js +1 -0
- package/cart/components/CartItem/CartItemProductOrderDetails.js +3 -0
- package/cart/components/CartItem/CartItemProductOrderDetails.style.js +1 -0
- package/cart/components/CartItem/CartItemProductPriceCaption.js +4 -0
- package/cart/components/CartItem/CartItemProductPriceCaption.style.js +1 -0
- package/cart/components/CartItem/CartItemProductPriceList.js +5 -0
- package/cart/components/CartItem/CartItemProductPriceListPromotion.js +10 -0
- package/cart/components/CartItem/CartItemProductProvider.connector.js +9 -0
- package/cart/components/CartItem/CartItemProductProvider.context.js +1 -0
- package/cart/components/CartItem/CartItemProductProvider.js +12 -0
- package/cart/components/CartItem/CartItemProductProvider.types.js +1 -0
- package/cart/components/CartItem/CartItemProductProviderLegacy.js +22 -0
- package/cart/components/CartItem/CartItemProductTitle.js +7 -0
- package/cart/components/CartItem/CartItemProductTitle.style.js +1 -0
- package/cart/components/CartItem/CartItemProvider.connector.js +3 -0
- package/cart/components/CartItem/CartItemProvider.context.js +1 -0
- package/cart/components/CartItem/CartItemProvider.js +5 -0
- package/cart/components/CartItem/CartItemQuantityPicker.js +38 -0
- package/cart/components/CartItem/CartItemQuantityPicker.style.js +1 -0
- package/cart/components/CartItem/CartItemSubstitution.connector.js +5 -0
- package/cart/components/CartItem/CartItemSubstitution.js +5 -0
- package/cart/components/CartItem/CartItemSubstitution.style.js +1 -0
- package/cart/components/CartItem/index.js +1 -0
- package/cart/components/CartItems/CartItem.connector.js +4 -0
- package/cart/components/CartItems/CartItemCard.js +5 -0
- package/cart/components/CartItems/CartItemCard.style.js +1 -0
- package/cart/components/CartItems/CartItemCardReservation.js +5 -0
- package/cart/components/CartItems/CartItemCardReservationAccordion.js +4 -0
- package/cart/components/CartItems/CartItemCardReservationLabel.js +5 -0
- package/cart/components/CartItems/CartItemCardReservationLabelChangeStore.js +3 -0
- package/cart/components/CartItems/CartItemCardReservationLabelChangeStore.style.js +1 -0
- package/cart/components/CartItems/CartItemGroup.js +5 -0
- package/cart/components/CartItems/CartItemGroup.style.js +1 -0
- package/cart/components/CartItems/CartItemGroupReservation.js +5 -0
- package/cart/components/CartItems/CartItemGroupReservationLabel.js +5 -0
- package/cart/components/CartItems/CartItemGroupShipping.js +4 -0
- package/cart/components/CartItems/CartItems.js +5 -0
- package/cart/components/CartItems/CartItems.style.js +1 -0
- package/cart/components/CartItems/CartItemsHeaderWide.connector.js +3 -0
- package/cart/components/CartItems/CartItemsHeaderWide.js +3 -0
- package/cart/components/CartItems/CartItemsHeaderWide.style.js +1 -0
- package/cart/components/CartItems/CartItemsSubscription.connector.js +5 -0
- package/cart/components/CartItems/CartItemsSubstitution.js +5 -0
- package/cart/components/CartItems/index.js +1 -0
- package/cart/components/CartSummaryWide/CartSummaryWide.connector.js +4 -0
- package/cart/components/CartSummaryWide/CartSummaryWide.js +4 -0
- package/cart/components/CartSummaryWide/CartSummaryWide.style.js +1 -0
- package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.connector.js +5 -0
- package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.js +4 -0
- package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.style.js +1 -0
- package/cart/components/CartSummaryWide/CartSummaryWideFooter.js +3 -0
- package/cart/components/CartSummaryWide/index.js +1 -0
- package/cart/components/PaymentBar/PaymentBar.js +5 -0
- package/cart/components/PaymentBar/PaymentBarAppliedPromotions.connector.js +5 -0
- package/cart/components/PaymentBar/PaymentBarAppliedPromotions.js +3 -0
- package/cart/components/PaymentBar/PaymentBarCheckoutButton.connector.js +5 -0
- package/cart/components/PaymentBar/PaymentBarCheckoutButton.js +5 -0
- package/cart/components/PaymentBar/PaymentBarCheckoutButton.style.js +1 -0
- package/cart/components/PaymentBar/PaymentBarContent.js +4 -0
- package/cart/components/PaymentBar/PaymentBarContent.style.js +1 -0
- package/cart/components/PaymentBar/PaymentBarDiscounts.connector.js +5 -0
- package/cart/components/PaymentBar/PaymentBarDiscounts.js +4 -0
- package/cart/components/PaymentBar/PaymentBarGrandTotal.connector.js +5 -0
- package/cart/components/PaymentBar/PaymentBarGrandTotal.js +4 -0
- package/cart/components/PaymentBar/PaymentBarPromotionCouponMessages.js +4 -0
- package/cart/components/PaymentBar/PaymentBarPromotionCoupons.connector.js +8 -0
- package/cart/components/PaymentBar/PaymentBarPromotionCoupons.js +3 -0
- package/cart/components/PaymentBar/PaymentBarPromotionalText.js +4 -0
- package/cart/components/PaymentBar/PaymentBarReserveButton.connector.js +1 -0
- package/cart/components/PaymentBar/PaymentBarReserveButton.js +7 -0
- package/cart/components/PaymentBar/PaymentBarShippingCost.connector.js +5 -0
- package/cart/components/PaymentBar/PaymentBarShippingCost.js +3 -0
- package/cart/components/PaymentBar/PaymentBarSubTotal.connector.js +5 -0
- package/cart/components/PaymentBar/PaymentBarSubTotal.js +3 -0
- package/cart/components/PaymentBar/PaymentBarTax.connector.js +5 -0
- package/cart/components/PaymentBar/PaymentBarTax.js +4 -0
- package/cart/components/PaymentBar/index.js +1 -0
- package/cart/components/Substitution/connector.js +5 -0
- package/cart/components/Substitution/index.js +9 -0
- package/cart/components/Substitution/style.js +1 -0
- package/cart/components/SupplementalContent/SupplementalContent.connector.js +4 -0
- package/cart/components/SupplementalContent/SupplementalContent.js +5 -0
- package/cart/components/SupplementalContent/SupplementalContent.styles.js +1 -0
- package/cart/components/SupplementalContent/index.js +1 -0
- package/cart/index.js +10 -5
- package/cart/streams/index.js +1 -0
- package/category/actions/index.js +1 -0
- package/category/components/CategoryImage/connector.js +5 -0
- package/category/components/CategoryImage/index.js +5 -0
- package/category/components/CategoryList/index.js +2 -2
- package/category/components/CategoryList/style.js +1 -1
- package/category/components/index.js +1 -0
- package/category/constants/index.js +1 -0
- package/category/helpers/index.js +1 -0
- package/category/index.js +1 -7
- package/category/selectors/index.js +2 -0
- package/category/streams/index.js +1 -0
- package/checkout/action-creators/addCheckoutCampaign.js +5 -0
- package/checkout/action-creators/clearCheckoutCampaign.js +5 -0
- package/checkout/action-creators/clearCheckoutOrder.js +4 -0
- package/checkout/action-creators/index.js +1 -0
- package/checkout/action-creators/validationErrorsCheckout.js +5 -0
- package/checkout/actions/errorCheckout.js +17 -0
- package/checkout/actions/fetchCheckoutOrder.js +4 -0
- package/checkout/actions/fetchPaymentMethods.js +4 -0
- package/checkout/actions/index.js +1 -0
- package/checkout/actions/initializeCheckout.js +4 -0
- package/checkout/actions/prepareCheckout.js +8 -0
- package/checkout/actions/submitCheckoutOrder.js +5 -0
- package/checkout/actions/updateCheckoutOrder.js +5 -0
- package/checkout/components/AddressBook/AddressBook.js +5 -0
- package/checkout/components/AddressBook/AddressList.js +9 -0
- package/checkout/components/AddressBook/index.js +1 -0
- package/checkout/components/AddressBookContact/AddressBookContact.js +5 -0
- package/checkout/components/AddressBookContact/index.js +1 -0
- package/checkout/components/Checkout/Checkout.js +4 -0
- package/checkout/components/Checkout/CheckoutActions.js +4 -0
- package/checkout/components/Checkout/CheckoutAddress.js +6 -0
- package/checkout/components/Checkout/CheckoutHeader.js +4 -0
- package/checkout/components/Checkout/CheckoutPickupContactForm.config.js +8 -0
- package/checkout/components/Checkout/CheckoutPickupContactForm.js +4 -0
- package/checkout/components/Checkout/CheckoutSection.js +4 -0
- package/checkout/components/Checkout/CheckoutSectionInfo.js +4 -0
- package/checkout/components/Checkout/CheckoutSectionMessages.js +4 -0
- package/checkout/components/Checkout/CheckoutSummary.js +4 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmation.connector.js +3 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmation.js +7 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmationBilledTo.js +4 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmationOrderContact.js +4 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmationOrderSummary.js +4 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmationPickUpContact.js +4 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmationPickupNotes.js +4 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmationSection.js +4 -0
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmationShippedTo.js +4 -0
- package/checkout/components/CheckoutConfirmation/index.js +1 -0
- package/checkout/components/GuestCheckout/GuestCheckout.js +4 -0
- package/checkout/components/GuestCheckout/GuestCheckoutOptIn.config.js +4 -0
- package/checkout/components/GuestCheckout/GuestCheckoutOptIn.js +3 -0
- package/checkout/components/GuestCheckout/GuestCheckoutPickup.js +4 -0
- package/checkout/components/GuestCheckout/GuestCheckoutPickupNotes.config.js +4 -0
- package/checkout/components/GuestCheckout/GuestCheckoutPickupNotes.js +4 -0
- package/checkout/components/PaymentMethodButton/PaymentMethodButton.js +5 -0
- package/checkout/components/PaymentMethodButton/index.js +1 -0
- package/checkout/components/ResponsiveBackButton/ResponsiveBackButton.js +4 -0
- package/checkout/components/ResponsiveBackButton/ResponsiveBackButton.style.js +1 -0
- package/checkout/components/ResponsiveBackButton/index.js +1 -0
- package/checkout/components/ShippingMethods/ShippingMethod.js +5 -0
- package/checkout/components/ShippingMethods/ShippingMethods.js +23 -0
- package/checkout/components/ShippingMethods/connector.js +7 -0
- package/checkout/components/ShippingMethods/index.js +1 -0
- package/checkout/components/SupplementalContent/SupplementalContent.connector.js +4 -0
- package/checkout/components/SupplementalContent/SupplementalContent.js +5 -0
- package/checkout/components/SupplementalContent/SupplementalContent.styles.js +1 -0
- package/checkout/components/SupplementalContent/index.js +1 -0
- package/checkout/components/index.js +1 -0
- package/checkout/constants/actionTypes.js +1 -0
- package/checkout/constants/errorCodes.js +1 -0
- package/checkout/constants/index.js +1 -0
- package/checkout/constants/routes.js +1 -0
- package/checkout/helpers/index.js +34 -0
- package/checkout/hooks/common.js +7 -0
- package/checkout/index.js +6 -5
- package/checkout/paymentMethods/context.js +1 -0
- package/checkout/paymentMethods/index.js +28 -0
- package/checkout/paymentMethods/paypal/PaypalButton.js +5 -0
- package/checkout/paymentMethods/paypal/PaypalButtonApp.js +4 -0
- package/checkout/paymentMethods/paypal/PaypalButtonWeb.js +8 -0
- package/checkout/paymentMethods/paypal/PaypalPayButton.js +12 -0
- package/checkout/paymentMethods/paypal/PaypalProvider.js +6 -0
- package/checkout/paymentMethods/paypal/index.js +1 -0
- package/checkout/paymentMethods/paypal/paypal_logo.png +0 -0
- package/checkout/paymentMethods/paypal/sdk.js +9 -0
- package/checkout/paymentMethods/stripe/StripeButton.connector.js +6 -0
- package/checkout/paymentMethods/stripe/StripeButton.js +5 -0
- package/checkout/paymentMethods/stripe/StripeCreditCard.js +10 -0
- package/checkout/paymentMethods/stripe/StripePayButton.js +6 -0
- package/checkout/paymentMethods/stripe/StripeProvider.connector.js +6 -0
- package/checkout/paymentMethods/stripe/StripeProvider.context.js +1 -0
- package/checkout/paymentMethods/stripe/StripeProvider.js +33 -0
- package/checkout/paymentMethods/stripe/applepay.svg +84 -0
- package/checkout/paymentMethods/stripe/googlepay.png +0 -0
- package/checkout/paymentMethods/stripe/index.js +1 -0
- package/checkout/paymentMethods/stripe/sdk.js +9 -0
- package/checkout/providers/AddressBookProvider.context.js +1 -0
- package/checkout/providers/AddressBookProvider.js +11 -0
- package/checkout/providers/CheckoutProvider.connector.js +7 -0
- package/checkout/providers/CheckoutProvider.constraints.js +1 -0
- package/checkout/providers/CheckoutProvider.context.js +1 -0
- package/checkout/providers/CheckoutProvider.js +28 -0
- package/checkout/reducers/index.js +6 -0
- package/checkout/selectors/campaign.js +5 -0
- package/checkout/selectors/guestCheckout.js +5 -0
- package/checkout/selectors/order.js +59 -0
- package/checkout/selectors/payment.js +17 -0
- package/checkout/selectors/route.js +4 -0
- package/checkout/streams/index.js +1 -0
- package/checkout/subscriptions/index.js +3 -0
- package/components/BrandingColorBanner/BrandingColorBanner.js +5 -0
- package/components/BrandingColorBanner/index.js +1 -0
- package/components/ChipLayout/index.js +7 -7
- package/components/ChipLayout/spec.js +1 -1
- package/components/ChipLayout/style.js +2 -2
- package/components/ConditionalWrapper/ConditionalWrapper.js +10 -0
- package/components/ConditionalWrapper/index.js +1 -5
- package/components/ConnectedReactPortal/index.js +13 -0
- package/components/Footer/Footer.js +4 -23
- package/components/Footer/Footer.style.js +1 -7
- package/components/Footer/constants.js +1 -0
- package/components/Footer/helpers.js +75 -0
- package/components/Form/Builder/Builder.constants.js +1 -1
- package/components/Form/Builder/Builder.js +53 -37
- package/components/Form/Builder/ElementCheckbox.js +2 -2
- package/components/Form/Builder/ElementMultiSelect.js +6 -0
- package/components/Form/Builder/ElementPhoneNumber.js +20 -0
- package/components/Form/Builder/ElementRadio.js +2 -2
- package/components/Form/Builder/ElementSelect.js +3 -3
- package/components/Form/Builder/ElementText.js +4 -4
- package/components/Form/Builder/FormHelper.js +5 -0
- package/components/Form/Builder/classes/ActionListener.constants.js +2 -2
- package/components/Form/Builder/classes/ActionListener.js +72 -15
- package/components/Form/Builder/helpers/buildCountryList.js +3 -3
- package/components/Form/Builder/helpers/buildFormDefaults.js +1 -1
- package/components/Form/Builder/helpers/buildProvinceList.js +1 -1
- package/components/Form/Builder/helpers/common.js +6 -0
- package/components/Form/Builder/stylePresets.js +1 -0
- package/components/Form/Form.js +11 -8
- package/components/Form/index.js +1 -1
- package/components/IntersectionVisibility/index.js +13 -6
- package/components/Logo/connector.js +4 -0
- package/components/Logo/index.js +2 -2
- package/components/Logo/spec.js +1 -1
- package/components/Logo/style.js +1 -1
- package/components/Menu/components/Item/index.js +8 -0
- package/components/Menu/components/Item/style.js +4 -0
- package/components/Menu/components/Position/index.js +16 -0
- package/components/Menu/components/Position/style.js +1 -0
- package/components/Menu/index.js +12 -0
- package/components/Menu/style.js +1 -0
- package/components/MessageBar/MessageBar.js +9 -0
- package/components/MessageBar/MessageBar.style.js +11 -0
- package/components/MessageBar/index.js +1 -7
- package/components/NavigationHandler/connector.js +1 -1
- package/components/NavigationHandler/index.js +6 -6
- package/components/NavigationHandler/spec.js +1 -1
- package/components/Picker/components/Button/index.js +1 -1
- package/components/Picker/components/List/index.js +2 -2
- package/components/Picker/components/Modal/index.js +7 -7
- package/components/Picker/index.js +19 -10
- package/components/Picker/spec.js +2 -2
- package/components/PickerUtilize/components/Button/index.js +1 -1
- package/components/PickerUtilize/index.js +8 -6
- package/components/PickerUtilize/spec.js +2 -1
- package/components/QuantityInput/QuantityInput.js +5 -4
- package/components/QuantityLabel/QuantityLabel.js +4 -0
- package/components/QuantityLabel/index.js +1 -0
- package/components/Radio/Radio.js +5 -0
- package/components/Radio/index.js +1 -0
- package/components/RadioCard/RadioCard.js +9 -0
- package/components/RadioCard/index.js +1 -0
- package/components/RadioGroup/RadioGroup.context.js +1 -0
- package/components/RadioGroup/RadioGroup.js +4 -0
- package/components/RadioGroup/index.js +1 -0
- package/components/RadioGroup/useRadioGroup.js +4 -0
- package/components/RangeSlider/components/Handle/index.js +2 -2
- package/components/RangeSlider/components/Handle/style.js +1 -1
- package/components/RangeSlider/helper.js +3 -3
- package/components/RangeSlider/index.js +35 -23
- package/components/RangeSlider/spec.js +4 -4
- package/components/ResponsiveContainer/ResponsiveContainer.js +6 -0
- package/components/ResponsiveContainer/breakpoints.js +14 -0
- package/components/ResponsiveContainer/condition.js +6 -0
- package/components/ResponsiveContainer/hooks.js +20 -0
- package/components/ResponsiveContainer/index.js +1 -0
- package/components/ResponsiveContainer/listener.js +10 -0
- package/components/ResponsiveContainer/mediaQuery.js +8 -0
- package/components/ScrollHeader/index.js +22 -5
- package/components/ScrollHeader/style.js +1 -1
- package/components/SheetDrawer/index.js +4 -3
- package/components/SheetList/components/Item/index.js +5 -5
- package/components/SheetList/components/Item/spec.js +2 -2
- package/components/SheetList/components/Item/style.js +1 -1
- package/components/SheetList/index.js +4 -4
- package/components/SheetList/spec.js +1 -1
- package/components/SheetList/style.js +1 -1
- package/components/SideNavigation/SideNavigation.hooks.js +4 -0
- package/components/SideNavigation/SideNavigation.js +4 -0
- package/components/SideNavigation/SideNavigationCategories.connector.js +8 -0
- package/components/SideNavigation/SideNavigationCategories.js +4 -0
- package/components/SideNavigation/SideNavigationCategories.style.js +1 -0
- package/components/SideNavigation/SideNavigationCategoriesItem.connector.js +8 -0
- package/components/SideNavigation/SideNavigationCategoriesItem.js +5 -0
- package/components/SideNavigation/SideNavigationCategoriesItem.style.js +2 -0
- package/components/SideNavigation/SideNavigationCategoriesItemChildren.js +5 -0
- package/components/SideNavigation/SideNavigationContent.js +3 -0
- package/components/SideNavigation/SideNavigationContent.style.js +4 -0
- package/components/SideNavigation/SideNavigationItem.js +4 -0
- package/components/SideNavigation/SideNavigationItem.style.js +4 -0
- package/components/SideNavigation/SideNavigationLinks.js +4 -0
- package/components/SideNavigation/SideNavigationLinksLegal.connector.js +4 -0
- package/components/SideNavigation/SideNavigationLinksLegal.js +5 -0
- package/components/SideNavigation/SideNavigationLinksQuicklinks.connector.js +4 -0
- package/components/SideNavigation/SideNavigationLinksQuicklinks.js +5 -0
- package/components/SideNavigation/SideNavigationNestedItem.js +4 -0
- package/components/SideNavigation/SideNavigationProvider.connector.js +8 -0
- package/components/SideNavigation/SideNavigationProvider.context.js +1 -0
- package/components/SideNavigation/SideNavigationProvider.js +4 -0
- package/components/SideNavigation/index.js +1 -0
- package/components/SideNavigation/selectors.js +17 -0
- package/components/SnackBarContainer/index.js +1 -1
- package/components/Switch/index.js +1 -1
- package/components/Tabs/TabContext.js +7 -0
- package/components/Tabs/components/Tab.js +11 -0
- package/components/Tabs/components/Tab.style.js +1 -0
- package/components/Tabs/components/TabIndicator.js +5 -0
- package/components/Tabs/components/TabIndicator.style.js +1 -0
- package/components/Tabs/components/TabPanel.js +5 -0
- package/components/Tabs/components/Tabs.js +11 -0
- package/components/Tabs/components/Tabs.style.js +2 -0
- package/components/Tabs/debounce.js +11 -0
- package/components/Tabs/index.js +1 -0
- package/components/Tabs/ownerDocument.js +4 -0
- package/components/Tabs/ownerWindow.js +4 -0
- package/components/Tabs/useEventCallback.js +6 -0
- package/components/TextLink/TextLink.js +5 -0
- package/components/TextLink/TextLink.style.js +1 -0
- package/components/TimeBoundary/index.js +10 -8
- package/components/TimeBoundary/spec.js +3 -3
- package/components/Toggle/index.js +5 -0
- package/components/Toggle/style.js +1 -0
- package/components/VideoPlayer/index.js +9 -6
- package/components/View/components/Above/index.js +1 -1
- package/components/View/components/Below/index.js +1 -1
- package/components/View/components/Content/index.js +13 -13
- package/components/View/components/Content/style.js +1 -1
- package/components/View/context.js +1 -1
- package/components/View/index.js +5 -5
- package/components/View/provider.js +24 -7
- package/components/View/style.js +1 -6
- package/components/index.js +4 -4
- package/core/action-creators/appPermissions.js +1 -1
- package/core/action-creators/index.js +1 -1
- package/core/action-creators/merchantSettings.js +5 -0
- package/core/action-creators/optIns.js +37 -0
- package/core/action-creators/shopSettings.js +9 -0
- package/core/actions/getGeolocation.js +2 -2
- package/core/actions/grantAppTrackingTransparencyPermission.js +3 -1
- package/core/actions/grantGeolocationPermissions.js +6 -2
- package/core/actions/grantPermissions.js +16 -4
- package/core/actions/grantPushPermissions.js +4 -3
- package/core/actions/index.js +2 -2
- package/core/actions/requestAppPermission.js +7 -2
- package/core/actions/requestAppPermissionStatus.js +7 -2
- package/core/actions/updateStatusBarBackground.js +3 -3
- package/core/classes/GeolocationRequest.js +8 -4
- package/core/classes/GeolocationRequestApp.js +16 -0
- package/core/classes/GeolocationRequestBrowser.js +8 -0
- package/core/collections/AppInitialization.js +4 -6
- package/core/config/ThemeConfigResolver.js +3 -3
- package/core/config/config.action-creators.js +12 -0
- package/core/config/config.actions.js +3 -0
- package/core/config/config.constants.js +1 -0
- package/core/config/config.reducers.js +6 -0
- package/core/config/config.selectors.js +39 -0
- package/core/config/config.streams.js +1 -0
- package/core/config/config.subscriptions.js +4 -0
- package/core/config/config.types.js +0 -0
- package/core/config/index.js +1 -0
- package/core/constants/appFeatures.js +1 -1
- package/core/constants/deviceTypes.js +1 -0
- package/core/constants/geolocationRequest.js +1 -1
- package/core/constants/index.js +9 -3
- package/core/constants/merchantSettings.js +1 -0
- package/core/constants/optIns.js +1 -0
- package/core/constants/pipelines.js +1 -0
- package/core/constants/shopSettings.js +2 -0
- package/core/contexts/AppContext.js +1 -1
- package/core/contexts/ThemeResourcesContext.d.ts +69 -0
- package/core/contexts/ThemeResourcesContext.js +3 -0
- package/core/contexts/index.js +1 -0
- package/core/events/index.js +1 -0
- package/core/helpers/androidNavigationBar.js +12 -0
- package/core/helpers/appFeatures.js +21 -9
- package/core/helpers/appPermissions.js +58 -0
- package/core/helpers/baseUrl.js +1 -1
- package/core/helpers/bridge.js +4 -0
- package/core/helpers/deviceType.js +5 -0
- package/core/helpers/environment.js +4 -0
- package/core/helpers/errorBehavior.js +32 -0
- package/core/helpers/featureFlag.js +11 -0
- package/core/helpers/getFullImageSource.js +21 -2
- package/core/helpers/googleMaps.js +8 -0
- package/core/helpers/i18n.js +10 -5
- package/core/helpers/index.js +3 -3
- package/core/helpers/isIOSTheme.js +4 -0
- package/core/helpers/isTouchDevice.js +4 -0
- package/core/helpers/nl2br.js +1 -0
- package/core/helpers/scrollContainer.js +4 -0
- package/core/helpers/string.js +9 -0
- package/core/helpers/svgToDataUrl.js +9 -0
- package/core/helpers/updateLegacyNavigationBar.js +5 -2
- package/core/hocs/index.js +1 -0
- package/core/hocs/withApp.js +1 -1
- package/core/hocs/withCurrentProduct.js +3 -3
- package/core/hocs/withForwardedRef.js +1 -1
- package/core/hocs/withNavigation.js +1 -1
- package/core/hocs/withRoute.js +1 -1
- package/core/hocs/withTheme.js +42 -3
- package/core/hocs/withThemeResources.js +19 -0
- package/core/hocs/withWidgetSettings.js +1 -1
- package/core/hocs/withWidgetStyles.js +1 -1
- package/core/hooks/events/index.js +1 -0
- package/core/hooks/events/useLongPress.d.ts +68 -0
- package/core/hooks/events/useLongPress.js +13 -0
- package/core/hooks/events/usePressHandler.js +38 -0
- package/core/hooks/events/useScrollDirectionChange.d.ts +74 -0
- package/core/hooks/events/useScrollDirectionChange.js +18 -0
- package/core/hooks/html/useLoadImage.js +1 -1
- package/core/hooks/index.js +1 -0
- package/core/hooks/layout/index.js +1 -0
- package/core/hooks/layout/useElementSize.d.ts +46 -0
- package/core/hooks/layout/useElementSize.js +18 -0
- package/core/hooks/useAsyncMemo.js +12 -0
- package/core/hooks/useFormState.js +27 -0
- package/core/hooks/usePrevious.js +2 -0
- package/core/hooks/useScrollTo.js +5 -0
- package/core/hooks/useTheme.js +38 -2
- package/core/hooks/useThemeResources.js +22 -0
- package/core/hooks/useWidgetStyles.js +1 -1
- package/core/index.js +5 -11
- package/core/initialization/index.js +19 -4
- package/core/providers/AppProvider.js +9 -9
- package/core/providers/ThemeResourcesProvider.js +19 -0
- package/core/providers/index.js +1 -0
- package/core/reducers/index.js +1 -1
- package/core/reducers/merchantSettings.js +6 -0
- package/core/reducers/shopSettings.js +6 -0
- package/core/selectors/index.js +1 -1
- package/core/selectors/merchantSettings.js +10 -0
- package/core/selectors/shopSettings.js +25 -0
- package/core/streams/app.js +1 -1
- package/core/streams/index.js +1 -1
- package/core/streams/optIns.js +13 -0
- package/core/subscriptions/app.js +4 -3
- package/core/validation/index.js +1 -0
- package/core/validation/validation.hooks.js +4 -0
- package/core/validation/validation.js +12 -0
- package/development/action-creators/index.js +1 -0
- package/development/action-creators/settings.js +9 -0
- package/development/action-creators/storage.js +6 -0
- package/development/components/DevelopmentTools/DevelopmentTools.js +6 -0
- package/development/components/DevelopmentTools/Shortcuts.js +4 -0
- package/development/components/DevelopmentTools/hooks.js +8 -0
- package/development/components/DevelopmentTools/index.js +1 -0
- package/development/components/SimulatedInsets/SimulatedInsetBottom.js +7 -0
- package/development/components/SimulatedInsets/SimulatedInsetTop.js +12 -0
- package/development/components/SimulatedInsets/SimulatedInsets.js +6 -0
- package/development/components/SimulatedInsets/index.js +1 -0
- package/development/components/index.js +1 -0
- package/development/constants/actionTypes.js +1 -0
- package/development/constants/index.js +1 -0
- package/development/reducers/index.js +1 -0
- package/development/reducers/settings.js +10 -0
- package/development/reducers/storage.js +9 -0
- package/development/selectors/index.js +1 -0
- package/development/selectors/settings.js +21 -0
- package/development/selectors/storage.js +16 -0
- package/development/streams/index.js +1 -0
- package/development/streams/insets.js +4 -0
- package/development/subscriptions/index.js +6 -0
- package/favorites/components/CommentDialog/CommentDialog.js +12 -0
- package/favorites/components/CommentDialog/index.js +1 -0
- package/favorites/components/FavoriteButtonWide/FavoriteButtonWide.js +8 -0
- package/favorites/components/FavoriteButtonWide/index.js +1 -0
- package/favorites/components/Item/Item.js +13 -9
- package/favorites/components/Item/ItemCharacteristics.js +2 -2
- package/favorites/components/Item/ItemNotes.js +7 -0
- package/favorites/components/Item/ItemQuantity.js +7 -0
- package/favorites/components/ItemFulfillmentMethod/ItemFulfillmentMethod.js +4 -0
- package/favorites/components/ItemFulfillmentMethod/index.js +1 -0
- package/favorites/components/List/List.js +19 -15
- package/favorites/components/List/ListAccordionHeader.js +8 -0
- package/favorites/components/List/ListAccordionLabel.js +5 -0
- package/favorites/components/List/ListContent.js +8 -0
- package/favorites/components/List/ListItemWrapper.js +6 -0
- package/favorites/components/List/styles.js +1 -0
- package/favorites/components/ListChooser/ListChooser.js +2 -2
- package/favorites/components/ListChooser/ListChooserItem.js +4 -5
- package/favorites/components/Lists/Lists.js +17 -13
- package/favorites/components/Lists/ListsModal.js +3 -4
- package/favorites/components/RemoveButton/RemoveButton.js +2 -2
- package/favorites/constants/Portals.js +1 -2
- package/favorites/constants/index.js +1 -0
- package/favorites/index.js +2 -2
- package/filter/actions/index.js +1 -0
- package/filter/components/FilterItem/index.js +2 -2
- package/filter/components/FilterItem/spec.js +1 -1
- package/filter/components/FilterPageContent/components/ApplyButton/index.js +7 -0
- package/filter/components/FilterPageContent/components/ApplyButton/spec.js +1 -0
- package/filter/components/FilterPageContent/components/ApplyButton/style.js +1 -0
- package/filter/components/FilterPageContent/components/ResetButton/index.js +7 -0
- package/filter/components/FilterPageContent/components/ResetButton/spec.js +1 -0
- package/filter/components/FilterPageContent/components/ResetButton/style.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/Selected/index.js +7 -0
- package/filter/components/FilterPageContent/components/Selector/components/Selected/spec.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/Selected/style.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.js +7 -0
- package/filter/components/FilterPageContent/components/Selector/components/Toggle/spec.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/Toggle/style.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/ValueButton/index.js +7 -0
- package/filter/components/FilterPageContent/components/Selector/components/ValueButton/spec.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/ValueButton/style.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/index.js +19 -0
- package/filter/components/FilterPageContent/components/Selector/spec.js +1 -0
- package/filter/components/FilterPageContent/components/Selector/style.js +1 -0
- package/filter/components/FilterPageContent/index.js +6 -0
- package/filter/components/FilterPageContentWithProvider/index.js +16 -0
- package/filter/components/PriceSlider/components/Label/index.js +3 -3
- package/filter/components/PriceSlider/components/Label/spec.js +1 -1
- package/filter/components/PriceSlider/index.js +8 -8
- package/filter/components/PriceSlider/spec.js +1 -1
- package/filter/components/PriceSlider/style.js +1 -1
- package/filter/components/index.js +1 -0
- package/filter/constants/index.js +1 -0
- package/filter/constants/sort.js +11 -0
- package/filter/helpers/buildFilterParamsForFetchFiltersRequest.js +2 -2
- package/filter/helpers/buildInitialFilters.js +2 -2
- package/filter/helpers/buildUpdatedFilters.js +2 -2
- package/filter/helpers/index.js +1 -0
- package/filter/helpers/translateFilterLabel.js +3 -3
- package/filter/hocs/index.js +1 -0
- package/filter/hocs/withSort.js +16 -0
- package/filter/hooks/filterPage.js +5 -0
- package/filter/hooks/index.js +4 -0
- package/filter/index.js +2 -7
- package/filter/providers/FilterPageProvider.context.js +54 -0
- package/filter/providers/FilterPageProvider.js +98 -0
- package/filter/providers/SortProvider.connector.js +3 -0
- package/filter/providers/SortProvider.context.js +1 -0
- package/filter/providers/SortProvider.helpers.js +8 -0
- package/filter/providers/SortProvider.js +6 -0
- package/filter/providers/index.js +1 -0
- package/filter/selectors/index.js +17 -0
- package/filter/streams/index.js +1 -0
- package/i18n/countries.helpers.js +6 -0
- package/i18n/countries.hooks.js +6 -0
- package/i18n/index.js +1 -0
- package/i18n/locale/cs-cz/countries.json +255 -0
- package/i18n/locale/de-de/countries.json +255 -0
- package/i18n/locale/el-gr/countries.json +255 -0
- package/i18n/locale/en-us/countries.json +255 -0
- package/i18n/locale/es-es/countries.json +255 -0
- package/i18n/locale/fi-fi/countries.json +255 -0
- package/i18n/locale/fr-fr/countries.json +255 -0
- package/i18n/locale/hu-hu/countries.json +255 -0
- package/i18n/locale/it-it/countries.json +255 -0
- package/i18n/locale/nl-nl/countries.json +255 -0
- package/i18n/locale/pl-pl/countries.json +255 -0
- package/i18n/locale/pt-pt/countries.json +255 -0
- package/i18n/locale/ro-ro/countries.json +255 -0
- package/i18n/locale/sv-se/countries.json +255 -0
- package/locations/action-creators/errorInventories.js +7 -0
- package/locations/action-creators/errorLocations.js +6 -0
- package/locations/action-creators/errorProductInventories.js +7 -0
- package/locations/action-creators/errorProductLocations.js +6 -0
- package/locations/action-creators/index.js +1 -0
- package/locations/action-creators/provideProductAlternativeLocation.js +5 -0
- package/locations/action-creators/receiveInventories.js +5 -0
- package/locations/action-creators/receiveLocations.js +6 -0
- package/locations/action-creators/receiveProductInventories.js +7 -0
- package/locations/action-creators/receiveProductLocations.js +7 -0
- package/locations/action-creators/requestInventories.js +6 -0
- package/locations/action-creators/requestLocations.js +5 -0
- package/locations/action-creators/requestProductInventories.js +6 -0
- package/locations/action-creators/requestProductLocations.js +5 -0
- package/locations/action-creators/selectGlobalLocation.js +5 -0
- package/locations/action-creators/selectLocation.js +6 -0
- package/locations/action-creators/setStoreFinderSearchRadius.js +5 -0
- package/locations/action-creators/setUserGeolocation.js +5 -0
- package/locations/action-creators/setUserSearchCountryCode.js +7 -0
- package/locations/action-creators/setUserSearchGeolocation.js +8 -0
- package/locations/action-creators/setUserSearchPostalCode.js +7 -0
- package/locations/action-creators/storeFormInput.js +5 -0
- package/locations/action-creators/storeFulfillmentMethod.js +5 -0
- package/locations/action-creators/submitReservationError.js +5 -0
- package/locations/action-creators/submitReservationRequest.js +5 -0
- package/locations/action-creators/submitReservationSuccess.js +5 -0
- package/locations/actions/fetchDefaultLocation.js +4 -0
- package/locations/actions/fetchFulfillmentSlots.js +6 -0
- package/locations/actions/fetchInventories.js +6 -0
- package/locations/actions/fetchLocations.js +19 -0
- package/locations/actions/fetchProductInventories.js +7 -0
- package/locations/actions/fetchProductLocations.js +12 -0
- package/locations/actions/index.js +5 -0
- package/locations/actions/sendDefaultLocationCode.js +6 -0
- package/locations/actions/setUserGeolocation.js +1 -0
- package/locations/actions/setUserSearchGeolocation.js +1 -0
- package/locations/actions/submitReservation.js +5 -0
- package/locations/assets/leaflet.css +765 -0
- package/locations/components/Cart/CartChangeFulfillmentMethod.connector.js +4 -0
- package/locations/components/Cart/CartChangeFulfillmentMethod.js +8 -0
- package/locations/components/Cart/CartChangeFulfillmentMethod.types.js +0 -0
- package/locations/components/Cart/CartContextMenuChangeFulfillment.js +6 -0
- package/locations/components/Cart/CartContextMenuChangeFulfillmentContent.js +5 -0
- package/locations/components/Cart/CartContextMenuChangeFulfillmentContent.style.js +1 -0
- package/locations/components/Cart/CartContextMenuItemChangeFulfillment.connector.js +4 -0
- package/locations/components/Cart/CartContextMenuItemChangeFulfillment.js +6 -0
- package/locations/components/Cart/CartContextMenuItemChangeLocation.js +7 -0
- package/locations/components/Cart/CartItemProductChangeLocation.connector.js +5 -0
- package/locations/components/Cart/CartItemProductChangeLocation.js +11 -0
- package/locations/components/Cart/CartItemProductChangeLocation.types.js +0 -0
- package/locations/components/Cart/index.js +1 -0
- package/locations/components/ChangeLocationButton/ChangeLocationButton.js +4 -0
- package/locations/components/ChangeLocationButton/ChangeLocationButton.style.js +2 -0
- package/locations/components/ChangeLocationButton/index.js +1 -0
- package/locations/components/FulfillmentPath/FulfillmentPath.js +4 -0
- package/locations/components/FulfillmentPath/FulfillmentPath.style.js +2 -0
- package/locations/components/FulfillmentPath/FulfillmentPathItem.js +6 -0
- package/locations/components/FulfillmentPath/index.js +1 -0
- package/locations/components/FulfillmentPathSelector/FulfillmentPathSelector.js +14 -0
- package/locations/components/FulfillmentPathSelector/FulfillmentPathSelector.style.js +1 -0
- package/locations/components/FulfillmentPathSelector/index.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelector.connector.js +9 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelector.context.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelector.hooks.js +3 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelector.js +20 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelector.style.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelector.types.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorAddToCart.js +10 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorAlternativeLocation.js +8 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorBOPIS.js +4 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorDirectShip.js +5 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorHeader.js +4 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorHeader.style.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorImpossibleError.js +4 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorImpossibleError.style.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorItem.js +8 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorItem.style.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorLocation.js +4 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorLocation.style.js +1 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorLocationMethodNotAvailable.js +3 -0
- package/locations/components/FulfillmentSelector/FulfillmentSelectorROPIS.js +4 -0
- package/locations/components/FulfillmentSelector/index.js +1 -0
- package/locations/components/FulfillmentSheet/FulfillmentSheet.js +6 -0
- package/locations/components/FulfillmentSheet/FulfillmentSheet.style.js +1 -0
- package/locations/components/FulfillmentSheet/FulfillmentSheetContent.js +6 -0
- package/locations/components/FulfillmentSheet/index.js +1 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotDialog.js +28 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotProvider.connector.js +8 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotProvider.context.js +1 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotProvider.js +9 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcher.connector.js +4 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcher.js +4 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherBar.js +3 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherBar.style.js +1 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherDefault.js +3 -0
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherDefault.style.js +1 -0
- package/locations/components/FulfillmentSlotSwitcher/index.js +1 -0
- package/locations/components/FulfillmentSlotSwitcher/time.js +5 -0
- package/locations/components/GlobalLocationSelector/GlobalLocationSelector.js +16 -0
- package/locations/components/GlobalLocationSelector/index.js +1 -0
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcher.connector.js +8 -0
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcher.js +3 -0
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherBar.js +3 -0
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherBar.style.js +1 -0
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherDefault.js +3 -0
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherDefault.style.js +1 -0
- package/locations/components/GlobalLocationSwitcher/index.js +1 -0
- package/locations/components/ReservationResponses/ReservationError.js +4 -0
- package/locations/components/ReservationResponses/ReservationResponse.style.js +1 -0
- package/locations/components/ReservationResponses/ReservationSuccess.js +4 -0
- package/locations/components/ReservationResponses/index.js +1 -0
- package/locations/components/ReserveForm/ReserveForm.constraints.js +1 -0
- package/locations/components/ReserveForm/ReserveForm.js +10 -0
- package/locations/components/ReserveForm/ReserveForm.style.js +1 -0
- package/locations/components/ReserveForm/ReserveFormPhone.connector.js +3 -0
- package/locations/components/ReserveForm/ReserveFormPhone.js +5 -0
- package/locations/components/ReserveForm/ReserveFormPhone.types.js +0 -0
- package/locations/components/ReserveForm/index.js +1 -0
- package/locations/components/StockInfo/StockInfo.defaultSettings.js +1 -0
- package/locations/components/StockInfo/StockInfo.js +8 -0
- package/locations/components/StockInfo/StockInfoInventory.js +9 -0
- package/locations/components/StockInfo/index.js +1 -0
- package/locations/components/StockInfoLists/index.js +9 -0
- package/locations/components/StoreDetails/components/FindMoreStores.js +4 -0
- package/locations/components/StoreDetails/components/GetDirectionsButton.js +7 -0
- package/locations/components/StoreDetails/components/StoreDetails.js +5 -0
- package/locations/components/StoreDetails/components/StoreFinderMap.js +20 -0
- package/locations/components/StoreDetails/components/StoreFinderMap.style.js +1 -0
- package/locations/components/StoreDetails/components/StoreLocationMap.js +4 -0
- package/locations/components/StoreDetails/components/StoresNearby.js +4 -0
- package/locations/components/StoreDetails/components/StoresNearbyListItem.js +9 -0
- package/locations/components/StoreDetails/index.js +4 -0
- package/locations/components/StoreFinder/Store.context.js +1 -0
- package/locations/components/StoreFinder/StoreFinder.js +3 -0
- package/locations/components/StoreFinder/StoreFinder.style.js +1 -0
- package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.connector.js +4 -0
- package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.js +4 -0
- package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.style.js +1 -0
- package/locations/components/StoreFinder/StoreFinderLocation.js +3 -0
- package/locations/components/StoreFinder/StoreFinderLocation.style.js +1 -0
- package/locations/components/StoreFinder/StoreFinderLocationDetails.js +3 -0
- package/locations/components/StoreFinder/StoreFinderLocationDetails.style.js +1 -0
- package/locations/components/StoreFinder/StoreFinderLocationHeader.js +3 -0
- package/locations/components/StoreFinder/StoreFinderLocationHeader.style.js +1 -0
- package/locations/components/StoreFinder/StoreFinderLocationHeaderPhoneNumber.js +4 -0
- package/locations/components/StoreFinder/StoreFinderLocations.js +5 -0
- package/locations/components/StoreFinder/StoreFinderLocations.style.js +1 -0
- package/locations/components/StoreFinder/StoreFinderSearch.js +3 -0
- package/locations/components/StoreFinder/StoreFinderSearch.style.js +1 -0
- package/locations/components/StoreFinder/StoreFinderSelectLocationButton.js +5 -0
- package/locations/components/StoreFinder/StoreFinderStoreInfoButton.js +8 -0
- package/locations/components/StoreFinder/index.js +1 -0
- package/locations/components/StoreList/Store.context.js +1 -0
- package/locations/components/StoreList/Store.style.js +1 -0
- package/locations/components/StoreList/StoreAddress.js +7 -0
- package/locations/components/StoreList/StoreAddressShort.js +7 -0
- package/locations/components/StoreList/StoreCard.js +4 -0
- package/locations/components/StoreList/StoreDetails.js +4 -0
- package/locations/components/StoreList/StoreDetailsLine.js +8 -0
- package/locations/components/StoreList/StoreDistance.js +7 -0
- package/locations/components/StoreList/StoreHeader.js +4 -0
- package/locations/components/StoreList/StoreHoursToday.js +7 -0
- package/locations/components/StoreList/StoreList.js +4 -0
- package/locations/components/StoreList/StoreListLocations.js +4 -0
- package/locations/components/StoreList/StoreListProduct.js +4 -0
- package/locations/components/StoreList/StoreListProduct.style.js +1 -0
- package/locations/components/StoreList/StoreListProductInfo.js +4 -0
- package/locations/components/StoreList/StoreListProductName.js +4 -0
- package/locations/components/StoreList/StoreListSearch.connector.js +7 -0
- package/locations/components/StoreList/StoreListSearch.js +23 -0
- package/locations/components/StoreList/StoreListSearch.style.js +1 -0
- package/locations/components/StoreList/StoreListSearchRadius.connector.js +7 -0
- package/locations/components/StoreList/StoreListSearchRadius.js +4 -0
- package/locations/components/StoreList/StoreListSearchRadius.style.js +1 -0
- package/locations/components/StoreList/StoreOpeningHours.js +7 -0
- package/locations/components/StoreList/StoreOpeningHoursLine.js +7 -0
- package/locations/components/StoreList/StorePhoneNumber.js +6 -0
- package/locations/components/StoreList/StoreSelectLocationButton.js +4 -0
- package/locations/components/StoreList/index.js +1 -0
- package/locations/components/index.js +1 -0
- package/locations/constants/ActionTypes.js +10 -0
- package/locations/constants/Pipelines.js +1 -0
- package/locations/constants/Portals.js +2 -0
- package/locations/constants/Stages.js +1 -0
- package/locations/constants/index.js +7 -0
- package/locations/constants/routes.js +1 -0
- package/locations/helpers/createOrder.js +28 -0
- package/locations/helpers/formatDistance.js +9 -0
- package/locations/helpers/getAvailabilitySettings.js +12 -0
- package/locations/helpers/index.js +1 -0
- package/locations/helpers/productInventory.js +7 -0
- package/locations/helpers/showInventoryInLists.js +7 -0
- package/locations/index.js +9 -0
- package/locations/locations.context.js +1 -0
- package/locations/locations.hooks.js +4 -0
- package/locations/locations.streams.js +1 -0
- package/locations/locations.types.js +1 -0
- package/locations/providers/FulfillmentProvider.connector.js +10 -0
- package/locations/providers/FulfillmentProvider.js +49 -0
- package/locations/providers/FulfillmentProvider.types.js +1 -0
- package/locations/providers/StoreDetailsContext.js +1 -0
- package/locations/providers/StoreDetailsProvider.js +4 -0
- package/locations/providers/StoreFinder.connector.js +3 -0
- package/locations/providers/StoreFinderProvider.js +7 -0
- package/locations/providers/index.js +1 -0
- package/locations/reducers/index.js +1 -0
- package/locations/reducers/storage.js +24 -0
- package/locations/reducers/storeFinderSearch.js +6 -0
- package/locations/reducers/user.js +5 -0
- package/locations/reducers/userFormInput.js +8 -0
- package/locations/reducers/userSearch.js +6 -0
- package/locations/selectors/index.js +145 -0
- package/locations/subscriptions.js +27 -0
- package/login/action-creators/index.js +1 -0
- package/login/action-creators/resetPassword.js +14 -0
- package/login/actions/index.js +1 -0
- package/login/actions/resetPassword.js +5 -0
- package/login/components/ForgotPassword/ForgotPassword.connector.js +5 -0
- package/login/components/ForgotPassword/ForgotPassword.js +5 -0
- package/login/components/ForgotPassword/ForgotPassword.style.js +1 -0
- package/login/components/ForgotPassword/index.js +1 -0
- package/login/constants/actions.js +1 -0
- package/login/constants/index.js +1 -0
- package/login/constants/pipelines.js +1 -0
- package/login/constants/routes.js +1 -0
- package/login/index.js +1 -0
- package/orders/action-creators/index.js +1 -0
- package/orders/action-creators/orderDetails.js +22 -0
- package/orders/action-creators/orders.js +21 -0
- package/orders/actions/cancelOrder.js +8 -0
- package/orders/actions/fetchOrderDetails.js +10 -0
- package/orders/actions/fetchOrderHistory.js +7 -0
- package/orders/actions/index.js +1 -0
- package/orders/components/OrderDetails/OrderDetails.js +4 -0
- package/orders/components/OrderDetails/OrderDetailsAuthenticate.js +3 -0
- package/orders/components/OrderDetails/OrderDetailsAuthenticate.style.js +1 -0
- package/orders/components/OrderDetails/OrderDetailsAuthenticateForm.config.js +8 -0
- package/orders/components/OrderDetails/OrderDetailsContent.js +3 -0
- package/orders/components/OrderDetails/OrderDetailsContent.style.js +1 -0
- package/orders/components/OrderDetails/OrderDetailsOrder.js +4 -0
- package/orders/components/OrderDetails/OrderDetailsOrder.style.js +1 -0
- package/orders/components/OrderDetails/OrderDetailsOrderHeader.js +4 -0
- package/orders/components/OrderDetails/OrderDetailsOrderHeader.style.js +1 -0
- package/orders/components/OrderDetails/OrderDetailsOrderPickupLocation.connector.js +3 -0
- package/orders/components/OrderDetails/OrderDetailsOrderPickupLocation.js +4 -0
- package/orders/components/OrderDetails/OrderDetailsOrderPickupLocation.style.js +1 -0
- package/orders/components/OrderDetails/index.js +1 -0
- package/orders/components/OrderHistory/OrderHistory.js +4 -0
- package/orders/components/OrderHistory/OrderHistory.style.js +1 -0
- package/orders/components/OrderHistory/OrderHistoryList.js +9 -0
- package/orders/components/OrderHistory/OrderHistoryList.style.js +1 -0
- package/orders/components/OrderHistory/OrderHistoryLoader.js +4 -0
- package/orders/components/OrderHistory/OrderHistoryTable.js +9 -0
- package/orders/components/OrderHistory/OrderHistoryTable.style.js +1 -0
- package/orders/components/OrderHistory/index.js +1 -0
- package/orders/components/index.js +1 -0
- package/orders/constants/actionTypes.js +1 -0
- package/orders/constants/index.js +1 -0
- package/orders/constants/pipelines.js +1 -0
- package/orders/constants/routes.js +1 -0
- package/orders/constants/status.js +12 -0
- package/orders/helpers/index.js +1 -0
- package/orders/helpers/orderDetails.js +5 -0
- package/orders/helpers/orderStatus.js +15 -0
- package/orders/hooks/index.js +7 -0
- package/orders/index.js +1 -1
- package/orders/providers/OrderDetailsPrivateProvider.connector.js +11 -0
- package/orders/providers/OrderDetailsPrivateProvider.js +5 -0
- package/orders/providers/OrderDetailsProvider.connector.js +11 -0
- package/orders/providers/OrderDetailsProvider.constraints.js +1 -0
- package/orders/providers/OrderDetailsProvider.context.js +1 -0
- package/orders/providers/OrderDetailsProvider.js +11 -0
- package/orders/providers/OrderHistoryProvider.connector.js +9 -0
- package/orders/providers/OrderHistoryProvider.context.js +1 -0
- package/orders/providers/OrderHistoryProvider.js +4 -0
- package/orders/reducers/index.js +1 -0
- package/orders/reducers/orders.js +7 -0
- package/orders/reducers/ordersById.js +7 -0
- package/orders/reducers/ordersByNumber.js +7 -0
- package/orders/selectors/index.js +27 -0
- package/orders/subscriptions/index.js +4 -0
- package/package.json +28 -18
- package/page/action-creators/index.js +22 -0
- package/page/actions/index.js +1 -0
- package/page/components/NotFound.js +3 -0
- package/page/components/Widgets/Overlay.js +51 -0
- package/page/components/Widgets/Tooltip.js +22 -0
- package/page/components/Widgets/Widget.js +15 -0
- package/page/components/Widgets/WidgetContext.d.ts +42 -0
- package/page/components/Widgets/WidgetContext.js +9 -0
- package/page/components/Widgets/WidgetProvider.js +8 -0
- package/page/components/Widgets/Widgets.js +11 -0
- package/page/components/Widgets/WidgetsPreviewContext.js +9 -0
- package/page/components/Widgets/WidgetsPreviewProvider.js +8 -0
- package/page/components/Widgets/constants.js +4 -0
- package/page/components/Widgets/events.js +23 -0
- package/page/components/Widgets/helpers.js +23 -0
- package/page/components/Widgets/hooks.js +69 -0
- package/page/components/Widgets/index.js +1 -0
- package/page/components/Widgets/types.d.ts +127 -0
- package/page/components/index.js +1 -0
- package/page/constants/actionTypes.js +1 -0
- package/page/constants/index.js +5 -1
- package/page/hooks/index.d.ts +60 -0
- package/page/hooks/index.js +25 -0
- package/page/index.js +1 -4
- package/page/reducers/index.js +6 -0
- package/page/selectors/index.js +53 -0
- package/page/subscriptions/index.js +4 -0
- package/page/widgets/HTML/HTML.js +5 -0
- package/page/widgets/HTML/hooks.js +12 -0
- package/page/widgets/HTML/index.js +1 -0
- package/page/widgets/Placeholder/Placeholder.js +5 -0
- package/page/widgets/Placeholder/hooks.js +12 -0
- package/page/widgets/Placeholder/index.js +1 -0
- package/page/widgets/ProductList/ProductList.js +5 -0
- package/page/widgets/ProductList/hooks.js +25 -0
- package/page/widgets/ProductList/index.js +1 -0
- package/page/widgets/ProductSlider/ProductSlider.js +4 -0
- package/page/widgets/ProductSlider/hooks.js +27 -0
- package/page/widgets/ProductSlider/index.js +1 -0
- package/page/widgets/index.js +1 -0
- package/page/widgets/widgets.json +14 -0
- package/product/collections/index.js +1 -0
- package/product/components/Availability/Availability.connector.js +5 -0
- package/product/components/Availability/Availability.js +6 -0
- package/product/components/Availability/Availability.style.js +1 -0
- package/product/components/Availability/index.js +1 -0
- package/product/components/Characteristics/Characteristic/components/Sheet/index.js +16 -4
- package/product/components/Characteristics/Characteristic/components/SheetItem/index.js +8 -3
- package/product/components/Characteristics/Characteristic/components/SheetItem/style.js +1 -1
- package/product/components/Characteristics/Characteristic/index.js +15 -6
- package/product/components/Characteristics/Characteristic/style.js +1 -1
- package/product/components/Characteristics/Swatch/index.js +8 -6
- package/product/components/Characteristics/index.js +10 -3
- package/product/components/Characteristics/transition.js +1 -1
- package/product/components/Description/index.js +5 -6
- package/product/components/Description/style.js +1 -1
- package/product/components/EffectivityDates/helpers.js +5 -5
- package/product/components/EffectivityDates/index.js +2 -2
- package/product/components/EffectivityDates/style.js +1 -1
- package/product/components/Header/PriceStriked/index.js +2 -5
- package/product/components/Header/PriceStriked/style.js +1 -1
- package/product/components/Header/Shipping/components/Label/index.js +3 -3
- package/product/components/Header/Shipping/components/Label/style.js +1 -1
- package/product/components/Header/Shipping/index.js +1 -1
- package/product/components/Header/Shipping/spec.js +1 -1
- package/product/components/Header/Tiers/components/Tier/index.js +2 -2
- package/product/components/Header/Tiers/components/Tier/spec.js +1 -1
- package/product/components/Header/Tiers/index.js +1 -1
- package/product/components/Header/Tiers/spec.js +1 -1
- package/product/components/Header/index.js +1 -0
- package/product/components/MapPriceHint/index.js +1 -1
- package/product/components/Media/FeaturedMedia.js +2 -2
- package/product/components/Media/MediaImage.js +3 -3
- package/product/components/Media/MediaPlaceholder.js +1 -1
- package/product/components/MediaSlider/components/MediaImage/index.js +1 -1
- package/product/components/MediaSlider/components/MediaVideo/index.js +1 -1
- package/product/components/MediaSlider/index.js +4 -4
- package/product/components/Options/components/Content/index.js +8 -8
- package/product/components/Options/components/Content/spec.js +2 -2
- package/product/components/Options/components/Option/index.js +2 -2
- package/product/components/Options/components/TextOption/components/OptionInfo/index.js +3 -3
- package/product/components/Options/components/TextOption/components/OptionInfo/spec.js +1 -1
- package/product/components/Options/components/TextOption/components/OptionInfo/style.js +1 -1
- package/product/components/Options/components/TextOption/index.js +19 -7
- package/product/components/Options/components/TextOption/style.js +1 -1
- package/product/components/Options/index.js +2 -2
- package/product/components/OrderQuantityHint/index.js +3 -2
- package/product/components/OrderQuantityHint/style.js +1 -1
- package/product/components/PriceDifference/index.js +1 -1
- package/product/components/PriceDifference/style.js +1 -1
- package/product/components/PriceInfo/PriceInfo.connector.js +4 -0
- package/product/components/PriceInfo/PriceInfo.js +4 -0
- package/product/components/PriceInfo/index.js +1 -0
- package/product/components/ProductBadges/index.js +2 -2
- package/product/components/ProductCard/index.js +12 -3
- package/product/components/ProductCard/style.js +1 -1
- package/product/components/ProductCharacteristics/context.js +1 -1
- package/product/components/ProductCharacteristics/helpers/index.js +1 -1
- package/product/components/ProductCharacteristics/index.js +30 -16
- package/product/components/ProductDiscountBadge/index.js +2 -2
- package/product/components/ProductDiscountBadge/spec.js +2 -2
- package/product/components/ProductDiscountBadge/style.js +1 -1
- package/product/components/ProductGrid/components/Item/components/ItemDetails/index.js +8 -0
- package/product/components/ProductGrid/components/Item/components/ItemDetails/spec.js +1 -0
- package/product/components/ProductGrid/components/Item/components/ItemDiscount/index.js +5 -0
- package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/index.js +5 -0
- package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/spec.js +1 -0
- package/product/components/ProductGrid/components/Item/components/ItemImage/index.js +5 -0
- package/product/components/ProductGrid/components/Item/components/ItemImage/spec.js +1 -0
- package/product/components/ProductGrid/components/Item/components/ItemName/index.js +5 -0
- package/product/components/ProductGrid/components/Item/components/ItemName/spec.js +1 -0
- package/product/components/ProductGrid/components/Item/components/ItemPrice/index.js +5 -0
- package/product/components/ProductGrid/components/Item/components/ItemPrice/spec.js +1 -0
- package/product/components/ProductGrid/components/Item/index.js +7 -0
- package/product/components/ProductGrid/components/Iterator/index.js +5 -0
- package/product/components/ProductGrid/components/Layout/index.js +5 -0
- package/product/components/ProductGrid/index.js +22 -0
- package/product/components/ProductGrid/spec.js +1 -0
- package/product/components/ProductGridPrice/index.js +4 -4
- package/product/components/ProductGridPrice/style.js +1 -1
- package/product/components/ProductImage/ProductImagePlaceholder.js +5 -0
- package/product/components/ProductImage/connector.js +5 -0
- package/product/components/ProductImage/index.js +17 -13
- package/product/components/ProductImage/spec.js +1 -1
- package/product/components/ProductList/components/Item/index.js +2 -2
- package/product/components/ProductList/components/Iterator/index.js +1 -1
- package/product/components/ProductList/components/Layout/index.js +1 -1
- package/product/components/ProductList/index.js +2 -2
- package/product/components/ProductName/ProductName.js +4 -0
- package/product/components/ProductName/ProductNameContent.js +4 -0
- package/product/components/ProductName/index.js +1 -0
- package/product/components/ProductProperties/Content.js +4 -4
- package/product/components/ProductProperties/Group.js +1 -1
- package/product/components/ProductProperties/GroupedProperties.js +2 -2
- package/product/components/ProductProperties/Lists.js +1 -1
- package/product/components/ProductProperties/ListsHTML.js +5 -0
- package/product/components/ProductProperties/ProductProperties.js +2 -2
- package/product/components/ProductProperties/Row.js +1 -1
- package/product/components/ProductProperties/RowHTML.js +5 -0
- package/product/components/ProductProperties/Rows.js +2 -2
- package/product/components/ProductProperties/Wrapper.js +1 -1
- package/product/components/ProductProperties/helpers/getGroupsFromProperties.js +7 -2
- package/product/components/ProductProperties/style.js +1 -1
- package/product/components/ProductSlider/index.js +4 -3
- package/product/components/ProductSlider/spec.js +1 -1
- package/product/components/ProductVariants/VariantAvailability.connector.js +5 -0
- package/product/components/ProductVariants/VariantAvailability.js +5 -0
- package/product/components/ProductVariants/index.js +1 -0
- package/product/components/QuantityPicker/hooks.js +5 -0
- package/product/components/QuantityPicker/index.js +4 -3
- package/product/components/Rating/index.js +3 -3
- package/product/components/Rating/spec.js +2 -2
- package/product/components/RelationsSlider/RelationsSheet.js +2 -2
- package/product/components/RelationsSlider/RelationsSlider.js +1 -1
- package/product/components/RelationsSlider/RelationsSliderContent.js +1 -1
- package/product/components/RelationsSlider/style.js +1 -1
- package/product/components/Swatch/Swatch.js +1 -1
- package/product/components/Swatch/SwatchContent.js +1 -1
- package/product/components/Swatch/VariantSwatch.js +1 -1
- package/product/components/Swatch/style.js +1 -1
- package/product/components/Swatches/Swatches.js +1 -1
- package/product/components/UnitQuantityPicker/CartUnitQuantityPicker.js +4 -0
- package/product/components/UnitQuantityPicker/ProductUnitQuantityPicker.js +3 -6
- package/product/components/UnitQuantityPicker/UnitQuantityPicker.js +11 -13
- package/product/components/UnitQuantityPicker/UnitQuantityPickerWithSection.js +5 -2
- package/product/components/UnitQuantityPicker/index.js +1 -1
- package/product/components/UnitQuantityPicker/styles.js +1 -0
- package/product/components/context.js +1 -1
- package/product/components/index.js +1 -0
- package/product/constants/index.js +2 -1
- package/product/contexts/index.js +1 -0
- package/product/helpers/index.js +2 -2
- package/product/helpers/redirects.js +2 -2
- package/product/hocs/index.js +1 -0
- package/product/hocs/withMapPricing.js +4 -4
- package/product/hocs/withPriceCalculation.js +2 -2
- package/product/hocs/withProduct.js +6 -0
- package/product/hocs/withProductListEntry.js +1 -1
- package/product/hocs/withProductListEntryProduct.js +12 -0
- package/product/hocs/withProductListType.js +1 -1
- package/product/hooks/index.js +1 -0
- package/product/hooks/useLoadProductImage.js +1 -1
- package/product/index.js +4 -11
- package/product/product.types.js +0 -0
- package/product/{components/ProductProvider → providers/Product}/index.js +1 -1
- package/product/providers/ProductListEntry/context.js +1 -1
- package/product/providers/ProductListEntry/index.js +1 -1
- package/product/providers/ProductListType/context.js +2 -1
- package/product/providers/ProductListType/index.js +2 -1
- package/product/providers/index.js +1 -0
- package/product/selectors/product.js +75 -6
- package/product/selectors/variants.js +4 -1
- package/product/streams/index.js +1 -0
- package/push-opt-in/action-creators/pushOptIn.js +2 -1
- package/push-opt-in/actions/pushOptInModal.js +3 -3
- package/push-opt-in/components/PushOptInModal/index.js +3 -6
- package/push-opt-in/components/PushOptInModal/push-opt-in.svg +58 -58
- package/push-opt-in/reducers/optInModal.js +2 -2
- package/push-opt-in/reducers/optInTrigger.js +2 -2
- package/push-opt-in/selectors/optInModal.js +5 -2
- package/push-opt-in/selectors/optInTrigger.js +4 -2
- package/push-opt-in/subscriptions/index.js +1 -1
- package/push-opt-in/subscriptions/optInTracking.js +4 -0
- package/push-opt-in/subscriptions/optInTrigger.js +6 -6
- package/registration/action-creators/index.js +18 -0
- package/registration/actions/index.js +1 -0
- package/registration/actions/submitRegistration.js +4 -0
- package/registration/components/GuestRegistration/GuestRegistration.js +4 -0
- package/registration/components/GuestRegistration/GuestRegistrationContent.js +4 -0
- package/registration/components/GuestRegistration/GuestRegistrationFormPickup.config.js +8 -0
- package/registration/components/GuestRegistration/GuestRegistrationFormPickup.js +4 -0
- package/registration/components/Registration/Registration.js +4 -0
- package/registration/components/Registration/RegistrationContent.js +4 -0
- package/registration/components/Registration/RegistrationContent.style.js +2 -0
- package/registration/components/Registration/RegistrationFormActions.js +5 -0
- package/registration/components/Registration/RegistrationFormBase.config.js +4 -0
- package/registration/components/Registration/RegistrationFormBase.js +4 -0
- package/registration/components/Registration/RegistrationFormBilling.config.js +5 -0
- package/registration/components/Registration/RegistrationFormBilling.js +5 -0
- package/registration/components/Registration/RegistrationFormExtra.config.js +5 -0
- package/registration/components/Registration/RegistrationFormExtra.js +5 -0
- package/registration/components/Registration/RegistrationFormShipping.config.js +5 -0
- package/registration/components/Registration/RegistrationFormShipping.js +5 -0
- package/registration/components/Registration/RegistrationFormToggle.js +4 -0
- package/registration/components/index.js +1 -0
- package/registration/constants/actionTypes.js +1 -0
- package/registration/constants/index.js +1 -0
- package/registration/constants/pipelines.js +1 -0
- package/registration/hooks/index.js +5 -0
- package/registration/index.js +2 -0
- package/registration/providers/GuestRegistrationProvider.actions.js +4 -0
- package/registration/providers/GuestRegistrationProvider.connector.js +7 -0
- package/registration/providers/GuestRegistrationProvider.constraints.js +18 -0
- package/registration/providers/GuestRegistrationProvider.context.js +1 -0
- package/registration/providers/GuestRegistrationProvider.js +22 -0
- package/registration/providers/RegistrationProvider.actions.js +8 -0
- package/registration/providers/RegistrationProvider.connector.js +6 -0
- package/registration/providers/RegistrationProvider.constraints.js +27 -0
- package/registration/providers/RegistrationProvider.context.js +1 -0
- package/registration/providers/RegistrationProvider.js +17 -0
- package/registration/streams/index.js +4 -0
- package/registration/subscriptions/index.js +5 -0
- package/reviews/actions/index.js +1 -0
- package/reviews/components/Reviews/components/AllReviewsLink/index.js +1 -1
- package/reviews/components/Reviews/components/Header/components/AverageRating/index.js +8 -6
- package/reviews/components/Reviews/components/Header/components/NoReviews/index.js +3 -3
- package/reviews/components/Reviews/components/Header/components/ReviewsExcerpt/index.js +3 -3
- package/reviews/components/Reviews/components/Header/components/ReviewsExcerpt/style.js +1 -1
- package/reviews/components/Reviews/components/Header/components/WriteReviewLink/index.js +3 -3
- package/reviews/components/Reviews/components/Header/components/WriteReviewLink/spec.js +2 -2
- package/reviews/components/Reviews/components/Header/index.js +6 -4
- package/reviews/components/Reviews/components/Header/spec.js +2 -2
- package/reviews/components/Reviews/components/List/components/Info/components/Author/index.js +1 -1
- package/reviews/components/Reviews/components/List/components/Info/components/ReviewDate/index.js +1 -1
- package/reviews/components/Reviews/components/List/components/Info/index.js +2 -2
- package/reviews/components/Reviews/components/List/components/Info/style.js +1 -1
- package/reviews/components/Reviews/components/List/components/Rating/index.js +1 -1
- package/reviews/components/Reviews/components/List/components/Review/index.js +1 -1
- package/reviews/components/Reviews/components/List/components/Text/index.js +1 -1
- package/reviews/components/Reviews/components/List/components/Title/index.js +1 -1
- package/reviews/components/Reviews/components/List/index.js +3 -3
- package/reviews/components/Reviews/components/List/spec.js +1 -1
- package/reviews/components/Reviews/components/RatingCount/index.js +1 -1
- package/reviews/components/Reviews/components/RatingCount/spec.js +1 -1
- package/reviews/components/Reviews/components/RatingCount/style.js +1 -1
- package/reviews/components/Reviews/components/ReviewsInfo/index.js +3 -4
- package/reviews/components/Reviews/connector.js +2 -6
- package/reviews/components/Reviews/index.js +1 -1
- package/reviews/components/Reviews/mock.js +2 -6
- package/reviews/components/Reviews/spec.js +4 -3
- package/reviews/components/index.js +1 -0
- package/reviews/constants/index.js +1 -0
- package/reviews/index.js +3 -6
- package/reviews/selectors/index.js +1 -0
- package/reviews/streams/index.js +1 -0
- package/scanner/action-creators/index.js +1 -0
- package/scanner/actions/index.js +1 -0
- package/scanner/classes/index.js +1 -0
- package/scanner/constants/index.js +1 -0
- package/scanner/helpers/index.js +1 -0
- package/scanner/index.js +1 -6
- package/scanner/streams/index.js +1 -0
- package/search/actions/index.js +1 -0
- package/search/constants/index.js +1 -0
- package/search/helpers/index.js +1 -0
- package/search/index.js +1 -6
- package/search/selectors/index.js +1 -0
- package/search/streams/index.js +1 -0
- package/styles/helpers/color.js +23 -0
- package/styles/helpers/cssCustomProperties.js +16 -0
- package/styles/helpers/index.js +1 -0
- package/styles/helpers/initCSSCustomProperties.js +10 -0
- package/styles/helpers/loadCustomStyles.js +6 -0
- package/styles/helpers/setPageBackgroundColor.js +5 -0
- package/styles/helpers/setPageContentWidth.js +5 -0
- package/styles/helpers/setViewportHeight.js +3 -0
- package/styles/helpers/toggleBodyScroll.js +5 -0
- package/styles/helpers/updatePageInsets.js +15 -0
- package/styles/index.d.ts +17 -0
- package/styles/index.js +1 -0
- package/styles/reset/form.js +8 -0
- package/styles/reset/index.js +1 -0
- package/styles/reset/media.js +1 -0
- package/styles/reset/root.js +3 -0
- package/styles/reset/table.js +1 -0
- package/styles/reset/typography.js +1 -0
- package/styles/theme/createTheme/createBreakpoints.d.ts +114 -0
- package/styles/theme/createTheme/createBreakpoints.js +41 -0
- package/styles/theme/createTheme/createSpacing.d.ts +23 -0
- package/styles/theme/createTheme/createSpacing.js +14 -0
- package/styles/theme/createTheme/index.d.ts +19 -0
- package/styles/theme/createTheme/index.js +5 -0
- package/styles/theme/createTheme/transitions.d.ts +100 -0
- package/styles/theme/createTheme/transitions.js +26 -0
- package/styles/theme/createTheme/zIndex.d.ts +12 -0
- package/styles/theme/createTheme/zIndex.js +3 -0
- package/styles/theme/hooks/index.d.ts +4 -0
- package/styles/theme/hooks/index.js +1 -0
- package/styles/theme/hooks/useActiveBreakpoint.d.ts +18 -0
- package/styles/theme/hooks/useActiveBreakpoint.js +4 -0
- package/styles/theme/hooks/useMediaQuery.d.ts +33 -0
- package/styles/theme/hooks/useMediaQuery.js +20 -0
- package/styles/theme/hooks/useResponsiveValue.d.ts +27 -0
- package/styles/theme/hooks/useResponsiveValue.js +4 -0
- package/styles/theme/hooks/useTheme.d.ts +8 -0
- package/styles/theme/hooks/useTheme.js +4 -0
- package/styles/theme/index.d.ts +8 -0
- package/styles/theme/index.js +1 -0
- package/styles/theme/providers/ActiveBreakpointProvider.d.ts +21 -0
- package/styles/theme/providers/ActiveBreakpointProvider.js +13 -0
- package/styles/theme/providers/ThemeProvider.d.ts +18 -0
- package/styles/theme/providers/ThemeProvider.js +7 -0
- package/styles/tss/index.js +3 -0
- package/tracking/action-creators/cookieConsent.js +2 -2
- package/tracking/actions/cookieConsent.js +17 -5
- package/tracking/components/CookieConsentModal/connector.js +3 -5
- package/tracking/components/CookieConsentModal/index.js +3 -6
- package/tracking/components/CookieConsentModal/tracking-opt-in.svg +14 -14
- package/tracking/components/PrivacySettings/connector.js +3 -5
- package/tracking/components/PrivacySettings/index.js +2 -2
- package/tracking/helpers/index.js +1 -0
- package/tracking/selectors/cookieConsent.js +11 -6
- package/tracking/streams/cookieConsent.js +10 -3
- package/tracking/subscriptions/analytics.js +5 -4
- package/tracking/subscriptions/cookieConsent.js +6 -10
- package/types.js +0 -0
- package/user/index.js +2 -2
- package/user/selectors/data.js +10 -0
- package/components/MessageBar/spec.js +0 -1
- package/components/MessageBar/style.js +0 -2
- package/favorites/constants/constants.js +0 -1
- package/product/components/Characteristics/Characteristic/components/VariantAvailability/connector.js +0 -9
- package/product/components/Characteristics/Characteristic/components/VariantAvailability/index.js +0 -5
- package/product/components/QuantityPicker/helpers.js +0 -5
- /package/product/components/{Characteristics/Characteristic/components/VariantAvailability/style.js → ProductVariants/VariantAvailability.style.js} +0 -0
- /package/product/{components/ProductProvider → providers/Product}/connector.js +0 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import{createSelector}from'reselect';import{WISHLIST_MODE_PERSIST_ON_ADD,SHOP_SETTING_WISHLIST_MODE,SHOP_SETTING_IMAGES,SHOP_SETTING_IMAGES_PRODUCT_PLACEHOLDER,SHOP_SETTING_IMAGES_CATEGORY_PLACEHOLDER,SHOP_SETTING_IMAGES_FAVICON,SHOP_SETTING_NUMBER_OF_ADDRESS_LINES,SHOP_SETTING_GOOGLE_SITE_VERIFICATION_CODE,SHOP_SETTINGS_SHOW_CATEGORY_IMAGES,SHOP_SETTING_REGISTRATION_MODE,SHOP_SETTING_REGISTRATION_MODE_EXTENDED,SHOP_SETTING_LOAD_WISHLIST_ON_APP_START_ENABLED,SHOP_SETTING_WISHLIST_ITEM_QUANTITY_ENABLED,SHOP_SETTING_WISHLIST_ITEM_NOTES_ENABLED,SHOP_SETTING_SHOW_WISHLIST_ITEMS_COUNT_BADGE}from"../constants/shopSettings";/**
|
|
2
|
+
* Retrieves the shopSettings state from the store.
|
|
3
|
+
* @param {Object} state The current application state.
|
|
4
|
+
* @return {Object} The locations state.
|
|
5
|
+
*/export var getState=function getState(state){var _state$settings;return(state===null||state===void 0?void 0:(_state$settings=state.settings)===null||_state$settings===void 0?void 0:_state$settings.shopSettings)||{};};/**
|
|
6
|
+
* Creates a selector to retrieve a single shop setting.
|
|
7
|
+
* @param {string} key The key of the shop setting
|
|
8
|
+
* @param {*} [fallback=null] The fallback value when no value can be determined.
|
|
9
|
+
* @returns {Function}
|
|
10
|
+
*/export var makeGetShopSettingByKey=function makeGetShopSettingByKey(key){var fallback=arguments.length>1&&arguments[1]!==undefined?arguments[1]:null;return createSelector(getState,function(state){return typeof(state===null||state===void 0?void 0:state[key])!=='undefined'?state===null||state===void 0?void 0:state[key]:fallback;});};/**
|
|
11
|
+
* Creates a selector to retrieve multiple shop setting.
|
|
12
|
+
* @param {Array} [keys=[]] Optional keys to filter.
|
|
13
|
+
* @returns {Function}
|
|
14
|
+
*/export var makeGetShopSettings=function makeGetShopSettings(){var keys=arguments.length>0&&arguments[0]!==undefined?arguments[0]:[];return createSelector(getState,function(state){var result=Object.keys(state).filter(function(key){if(Array.isArray(keys)&&keys.length>0){return keys.includes(key);}return true;}).reduce(function(acc,key){if(state===null||state===void 0?void 0:state[key]){acc[key]=state[key];}return acc;},{});return result;});};/** Selects the current wishlist mode */export var getWishlistMode=makeGetShopSettingByKey(SHOP_SETTING_WISHLIST_MODE,WISHLIST_MODE_PERSIST_ON_ADD);var getShopSettingImages=makeGetShopSettingByKey(SHOP_SETTING_IMAGES,{});/**
|
|
15
|
+
* Selects the placeholder image for products
|
|
16
|
+
*/export var getProductImagePlaceholder=createSelector(getShopSettingImages,function(images){return(images===null||images===void 0?void 0:images[SHOP_SETTING_IMAGES_PRODUCT_PLACEHOLDER])||null;});/**
|
|
17
|
+
* Selects the placeholder image for products
|
|
18
|
+
*/export var getCategoryImagePlaceholder=createSelector(getShopSettingImages,function(images){return(images===null||images===void 0?void 0:images[SHOP_SETTING_IMAGES_CATEGORY_PLACEHOLDER])||null;});/**
|
|
19
|
+
* Selects the placeholder image for products
|
|
20
|
+
*/export var getFavicon=createSelector(getShopSettingImages,function(images){return(images===null||images===void 0?void 0:images[SHOP_SETTING_IMAGES_FAVICON])||null;});/**
|
|
21
|
+
* Selects the number of address lines for registration / address forms
|
|
22
|
+
*/export var getNumberOfAddressLines=makeGetShopSettingByKey(SHOP_SETTING_NUMBER_OF_ADDRESS_LINES,2);export var getGoogleSiteVerificationCode=makeGetShopSettingByKey(SHOP_SETTING_GOOGLE_SITE_VERIFICATION_CODE,'');export var getShowCategoryImages=makeGetShopSettingByKey(SHOP_SETTINGS_SHOW_CATEGORY_IMAGES,true);/**
|
|
23
|
+
* Creates a selector to retrieve the current active registration mode.
|
|
24
|
+
* When the selector returns "simple" the form will not contain any address related fields.
|
|
25
|
+
*/export var getRegistrationMode=makeGetShopSettingByKey(SHOP_SETTING_REGISTRATION_MODE,SHOP_SETTING_REGISTRATION_MODE_EXTENDED);export var getWishlistItemQuantityEnabled=makeGetShopSettingByKey(SHOP_SETTING_WISHLIST_ITEM_QUANTITY_ENABLED,false);export var getWishlistItemNotesEnabled=makeGetShopSettingByKey(SHOP_SETTING_WISHLIST_ITEM_NOTES_ENABLED,false);export var getLoadWishlistOnAppStartEnabled=makeGetShopSettingByKey(SHOP_SETTING_LOAD_WISHLIST_ON_APP_START_ENABLED,true);export var getShowWishlistItemsCountBadge=createSelector(getLoadWishlistOnAppStartEnabled,makeGetShopSettingByKey(SHOP_SETTING_SHOW_WISHLIST_ITEMS_COUNT_BADGE,true),function(loadWishlistOnAppStartEnabled,showWishlistItemsCountBadge){return loadWishlistOnAppStartEnabled?showWishlistItemsCountBadge:false;});
|
package/core/streams/app.js
CHANGED
|
@@ -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);}function _toArray(arr){return _arrayWithHoles(arr)||_iterableToArray(arr)||
|
|
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 _toArray(arr){return _arrayWithHoles(arr)||_iterableToArray(arr)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArray(iter){if(Symbol.iterator in Object(iter)||Object.prototype.toString.call(iter)==="[object Arguments]")return Array.from(iter);}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import{Observable}from'rxjs/Observable';import{ACTION_RESET}from'@virtuous/conductor';import{main$}from'@shopgate/pwa-common/streams/main';import{routeDidEnter$}from'@shopgate/pwa-common/streams';import{routeDidEnter}from'@shopgate/pwa-common/action-creators';import{getRouterStack}from'@shopgate/engage/core/selectors';import{RELOAD_APP}from"../constants";import{historyReset}from"../actions";/**
|
|
2
2
|
* Gets triggered when the app is supposed to be reloaded
|
|
3
3
|
* @type {Observable}
|
|
4
4
|
*/export var reloadApp$=main$.filter(function(_ref){var action=_ref.action;return action.type===RELOAD_APP;}).switchMap(function(params){var dispatch=params.dispatch,getState=params.getState;var _getRouterStack=getRouterStack(getState()),_getRouterStack2=_toArray(_getRouterStack),initialRoute=_getRouterStack2[0],otherRoutes=_getRouterStack2.slice(1);if(!otherRoutes.length){// When the initial route is the only route inside the router stack, routeDidEnter$ will
|
package/core/streams/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export*from"./app";export*from"./appPermissions";export*from'@shopgate/pwa-common/streams/main';export*from'@shopgate/pwa-common/streams/error';// --------------- APP --------------- //
|
|
1
|
+
export*from"./app";export*from"./appPermissions";export*from"./optIns";export*from'@shopgate/pwa-common/streams/main';export*from'@shopgate/pwa-common/streams/error';export*from'@shopgate/pwa-common/streams/view';// --------------- APP --------------- //
|
|
2
2
|
export*from'@shopgate/pwa-common/streams/app';// --------------- CLIENT --------------- //
|
|
3
3
|
export*from'@shopgate/pwa-common/streams/client';// --------------- ROUTER --------------- //
|
|
4
4
|
export*from'@shopgate/pwa-common/streams/router';
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import{main$}from'@shopgate/pwa-common/streams/main';import{SOFT_OPT_IN_SHOWN,SOFT_OPT_IN_SELECTED,HARD_OPT_IN_SHOWN,HARD_OPT_IN_SELECTED}from"../constants";/**
|
|
2
|
+
* Gets triggered when a SOFT_OPT_IN_SHOWN action was dispatched
|
|
3
|
+
* @type {Observable}
|
|
4
|
+
*/export var softOptInShown$=main$.filter(function(_ref){var action=_ref.action;return action.type===SOFT_OPT_IN_SHOWN;});/**
|
|
5
|
+
* Gets triggered when a SOFT_OPT_IN_SELECTED action was dispatched
|
|
6
|
+
* @type {Observable}
|
|
7
|
+
*/export var softOptInSelected$=main$.filter(function(_ref2){var action=_ref2.action;return action.type===SOFT_OPT_IN_SELECTED;});/**
|
|
8
|
+
* Gets triggered when a HARD_OPT_IN_SHOWN action was dispatched
|
|
9
|
+
* @type {Observable}
|
|
10
|
+
*/export var hardOptInShown$=main$.filter(function(_ref3){var action=_ref3.action;return action.type===HARD_OPT_IN_SHOWN;});/**
|
|
11
|
+
* Gets triggered when a HARD_OPT_IN_SELECTED action was dispatched
|
|
12
|
+
* @type {Observable}
|
|
13
|
+
*/export var hardOptInSelected$=main$.filter(function(_ref4){var action=_ref4.action;return action.type===HARD_OPT_IN_SELECTED;});
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import{appWillStart$}from'@shopgate/
|
|
1
|
+
import{appWillStart$}from'@shopgate/engage/core/streams';import{configuration}from'@shopgate/engage/core/collections';import{hasNewServices,appSupportsAndroidEdgeToEdge,updateAndroidNavigationBarColor}from'@shopgate/engage/core/helpers';import{CONFIGURATION_COLLECTION_KEY_BASE_URL}from'@shopgate/engage/core/constants';import{appConfig}from'@shopgate/engage';import{reloadApp$}from"../streams";import{reloadApp}from"../action-creators";var androidNavigationBarDefaultColor=appConfig.androidNavigationBarDefaultColor;/**
|
|
2
2
|
* App subscriptions
|
|
3
3
|
* @param {Function} subscribe The subscribe function
|
|
4
|
-
*/export default function app(subscribe){subscribe(appWillStart$,function(_ref){var dispatch=_ref.dispatch;// Add global function to enable PWA reload from the console
|
|
5
|
-
window.reloadSGApp=function(){dispatch(reloadApp());};
|
|
4
|
+
*/export default function app(subscribe){subscribe(appWillStart$,function(_ref){var dispatch=_ref.dispatch;console.log("%c\u2139\uFE0F PWA uses ".concat(hasNewServices()?'NEW':'OLD'," services"),'color: blue');// Add global function to enable PWA reload from the console
|
|
5
|
+
window.reloadSGApp=function(){dispatch(reloadApp());};if(appSupportsAndroidEdgeToEdge()&&androidNavigationBarDefaultColor){// Set the navigation bar color for android devices with edge-to-edge screens
|
|
6
|
+
updateAndroidNavigationBarColor({color:androidNavigationBarDefaultColor});}});subscribe(reloadApp$,function(){// A deployed app can only be reloaded on the base url. So we first set this as current route
|
|
6
7
|
// before the reload happens.
|
|
7
8
|
window.history.replaceState({},null,configuration.get(CONFIGURATION_COLLECTION_KEY_BASE_URL));window.location.reload();});}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{validate}from"./validation";export{useValidation}from"./validation.hooks";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import{useState,useEffect,useCallback}from'react';import{validate as validator}from"./validation";/**
|
|
2
|
+
* @param {Object} constraints The rules.
|
|
3
|
+
* @returns {{ valid: ?boolean, validationErrors: ?Object, validate: Function }}
|
|
4
|
+
*/export function useValidation(constraints){var _useState=useState(null),_useState2=_slicedToArray(_useState,2),valid=_useState2[0],setValid=_useState2[1];var _useState3=useState(undefined),_useState4=_slicedToArray(_useState3,2),validationErrors=_useState4[0],setValidationErrors=_useState4[1];useEffect(function(){setValid(null);setValidationErrors(undefined);},[constraints]);var validate=useCallback(function(values){var _validator=validator(values,constraints),isValid=_validator.valid,errors=_validator.validationErrors;setValid(isValid);setValidationErrors(errors);return isValid;},[constraints]);var reset=useCallback(function(){setValidationErrors();},[]);return{valid:valid,validationErrors:validationErrors,validate:validate,reset:reset};}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 moment from'moment';import validateJs from'validate.js';validateJs.options={format:'detailed',fullMessages:false};validateJs.extend(validateJs.validators.datetime,{// The value is guaranteed not to be null or undefined but otherwise it
|
|
2
|
+
// could be anything.
|
|
3
|
+
parse:function parse(value){return+moment.utc(value);},// Input is a unix timestamp
|
|
4
|
+
format:function format(value,options){var format=options.dateOnly?'YYYY-MM-DD':'YYYY-MM-DD hh:mm:ss';return moment.utc(value).format(format);}});/**
|
|
5
|
+
* @param {Object} values The values to validate.
|
|
6
|
+
* @param {Object} constraints The constraints.
|
|
7
|
+
* @returns {{ valid: boolean, validationErrors: Object }}
|
|
8
|
+
*/export function validate(values,constraints){var sanitizedValues=_extends({},values);/**
|
|
9
|
+
* When the presence constrain is not set, empty strings are considered as not empty and those
|
|
10
|
+
* values will be passed through other validators like datetime, where they can cause false
|
|
11
|
+
* negatives. So we'll just convert them to null for the validator.
|
|
12
|
+
*/Object.keys(sanitizedValues).forEach(function(key){var value=sanitizedValues[key];if(value===''){sanitizedValues[key]=null;}});var errors=validateJs(sanitizedValues,constraints);if(errors&&Object.keys(errors).length>0){errors=errors.reduce(function(obj,item){var _item$options;if(obj[item.attribute]){return obj;}return _extends({},obj,_defineProperty({},item.attribute,(item===null||item===void 0?void 0:(_item$options=item.options)===null||_item$options===void 0?void 0:_item$options.message)||(item===null||item===void 0?void 0:item.error)));},{});}return{valid:!errors,validationErrors:errors};}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./settings";export*from"./storage";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{DEVELOPMENT_TOOLS_TOGGLE_INSETS,DEVELOPMENT_TOOLS_TOGGLE_INSET_HIGHLIGHT}from"../constants";/**
|
|
2
|
+
* Toggles the simulation of iOS safe area insets.
|
|
3
|
+
* @param {boolean} visible Whether the insets should be visible or not.
|
|
4
|
+
* @returns {Object} The action object.
|
|
5
|
+
*/export var toggleInsets=function toggleInsets(){var visible=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;return{type:DEVELOPMENT_TOOLS_TOGGLE_INSETS,visible:visible};};/**
|
|
6
|
+
* Toggles the highlighting of the simulated iOS safe area insets.
|
|
7
|
+
* @param {boolean} visible Whether the insets should be visible or not.
|
|
8
|
+
* @returns {Object} The action object.
|
|
9
|
+
*/export var toggleInsetHighlight=function toggleInsetHighlight(){var visible=arguments.length>0&&arguments[0]!==undefined?arguments[0]:true;return{type:DEVELOPMENT_TOOLS_TOGGLE_INSET_HIGHLIGHT,visible:visible};};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{DEVELOPMENT_TOOLS_UPDATE_STATUS_BAR_STYLE_STORAGE}from"../constants";/**
|
|
2
|
+
* Updates the status bar style storage where latest payload from the updateNavigationBarStyle
|
|
3
|
+
* app event is stored.
|
|
4
|
+
* @param {boolean} style The event payload
|
|
5
|
+
* @returns {Object} The action object.
|
|
6
|
+
*/export var updateStatusBarStyleStorage=function updateStatusBarStyleStorage(){var style=arguments.length>0&&arguments[0]!==undefined?arguments[0]:{};return{type:DEVELOPMENT_TOOLS_UPDATE_STATUS_BAR_STYLE_STORAGE,style:style};};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import React,{memo}from'react';import PropTypes from'prop-types';import{isDev}from'@shopgate/engage/core/helpers';import Shortcuts from"./Shortcuts";import SimulatedInsets from"../SimulatedInsets";/**
|
|
2
|
+
* Provides development tools for the app.
|
|
3
|
+
* @param {Object} props The component props.
|
|
4
|
+
* @param {React.ReactNode} props.children The child components.
|
|
5
|
+
* @returns {JSX.Element}
|
|
6
|
+
*/var DevelopmentTools=function DevelopmentTools(_ref){var children=_ref.children;if(!isDev){return children;}return React.createElement(React.Fragment,null,React.createElement(Shortcuts,null),React.createElement(SimulatedInsets,null,children));};export default memo(DevelopmentTools);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{useSelector,useDispatch}from'react-redux';import{toggleInsets}from'@shopgate/engage/development/action-creators';import{getAreSimulatedInsetsInjected}from'@shopgate/engage/development/selectors';import{useShortcut}from"./hooks";/**
|
|
2
|
+
* The Shortcuts component maps shortcuts to actions in development mode.
|
|
3
|
+
* @returns {JSX.Element}
|
|
4
|
+
*/var Shortcuts=function Shortcuts(){var dispatch=useDispatch();var areInsetsInjected=useSelector(getAreSimulatedInsetsInjected);useShortcut('ctrl+i',function(){dispatch(toggleInsets(!areInsetsInjected));});return null;};export default Shortcuts;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{useEffect,useCallback}from'react';/**
|
|
2
|
+
* Hook to handle a single keyboard shortcut.
|
|
3
|
+
* Supports both 'cmd' (meta) and 'ctrl' keys explicitly.
|
|
4
|
+
*
|
|
5
|
+
* @param {string} shortcut - Shortcut string using mac-style notation, e.g. 'cmd+i'.
|
|
6
|
+
* @param {Function} callback - Function to call when the shortcut is triggered.
|
|
7
|
+
*/export function useShortcut(shortcut,callback){var normalizeShortcut=useCallback(function(){return shortcut.toLowerCase().split('+').map(function(k){return k.trim();}).sort().join('+');},[shortcut]);var handleKeyDown=useCallback(function(event){var keys=[];if(event.ctrlKey)keys.push('ctrl');if(event.metaKey)keys.push('cmd');// Treat meta as cmd
|
|
8
|
+
if(event.altKey)keys.push('alt');if(event.shiftKey)keys.push('shift');var key=event.key.toLowerCase();if(!['control','meta','alt','shift'].includes(key)){keys.push(key);}var pressed=keys.sort().join('+');if(pressed===normalizeShortcut()){event.preventDefault();callback(event);}},[callback,normalizeShortcut]);useEffect(function(){window.addEventListener('keydown',handleKeyDown);return function(){return window.removeEventListener('keydown',handleKeyDown);};},[handleKeyDown]);}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default}from"./DevelopmentTools";
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
var _excluded=["highlightInset","onClick"];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 _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 _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}import React,{useMemo}from'react';import PropTypes from'prop-types';import classNames from'classnames';import{css}from'glamor';var classes={container:css({position:'fixed',bottom:0,display:'flex',justifyContent:'center',alignItems:'center',height:'var(--safe-area-inset-bottom)',width:'100%',zIndex:10000000,pointerEvents:'auto',transition:'background 0.2s ease'}),containerHighlight:css({background:'rgba(255, 0, 0, 0.7)'}),handle:css({width:120,height:3,borderRadius:3,background:'rgba(0, 0, 0, 0.4)',border:'1px solid rgba(255, 255, 255, 0.5)',boxSizing:'content-box'})};/**
|
|
2
|
+
* Renders a simulated iOS bottom inset in development.
|
|
3
|
+
* @param {Object} props The component props.
|
|
4
|
+
* @param {boolean} props.highlightInset Whether the inset is highlighted.
|
|
5
|
+
* @param {Function} props.onClick The function to call when the inset is clicked.
|
|
6
|
+
* @returns {JSX.Element}
|
|
7
|
+
*/var SimulatedInsetBottom=function SimulatedInsetBottom(_ref){var highlightInset=_ref.highlightInset,onClick=_ref.onClick,props=_objectWithoutProperties(_ref,_excluded);var containerClasses=useMemo(function(){return classNames(classes.container,_defineProperty({},classes.containerHighlight,highlightInset));},[highlightInset]);return React.createElement("div",_extends({"aria-hidden":true,role:"presentation",className:containerClasses},props,{onClick:onClick}),React.createElement("div",{className:classes.handle}));};export default SimulatedInsetBottom;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
var _excluded=["highlightInset","onClick"];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 _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 _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}function _objectWithoutProperties(source,excluded){if(source==null)return{};var target=_objectWithoutPropertiesLoose(source,excluded);var key,i;if(Object.getOwnPropertySymbols){var sourceSymbolKeys=Object.getOwnPropertySymbols(source);for(i=0;i<sourceSymbolKeys.length;i++){key=sourceSymbolKeys[i];if(excluded.indexOf(key)>=0)continue;if(!Object.prototype.propertyIsEnumerable.call(source,key))continue;target[key]=source[key];}}return target;}function _objectWithoutPropertiesLoose(source,excluded){if(source==null)return{};var target={};var sourceKeys=Object.keys(source);var key,i;for(i=0;i<sourceKeys.length;i++){key=sourceKeys[i];if(excluded.indexOf(key)>=0)continue;target[key]=source[key];}return target;}import React,{useState,useEffect,useMemo}from'react';import PropTypes from'prop-types';import classNames from'classnames';import{useSelector}from'react-redux';import{css}from'glamor';import{getStatusBarStyleStorage}from'@shopgate/engage/development/selectors';var classes={container:css({position:'fixed',top:0,display:'flex',justifyContent:'space-between',alignItems:'center',height:'var(--safe-area-inset-top)',width:'100%',zIndex:10000000,pointerEvents:'auto',transition:'background 0.2s ease',fontSize:'16px'}),containerHighlight:css({background:'rgba(255, 0, 0, 0.7)'}),styleLight:css({color:'white'}),styleDark:css({color:'black'}),styleNone:css({color:'transparent'}),info:css({flex:1,textAlign:'center',fontWeight:500}),notch:css({flex:1,background:'black',height:'calc(var(--safe-area-inset-top) - 16px)',maxWidth:150,borderRadius:16,border:'1px solid rgba(255, 255, 255, 0.5)'})};/**
|
|
2
|
+
* Creates a human readable time string to mimic the iOS clock.
|
|
3
|
+
* @returns {string} The current time in a human readable format.
|
|
4
|
+
*/var getTime=function getTime(){var now=new Date();return now.toLocaleTimeString([],{hour:'2-digit',minute:'2-digit'});};/**
|
|
5
|
+
* Renders a simulated iOS top inset in development.
|
|
6
|
+
* @param {Object} props The component props.
|
|
7
|
+
* @param {boolean} props.highlightInset Whether the inset is highlighted.
|
|
8
|
+
* @param {Function} props.onClick The function to call when the inset is clicked.
|
|
9
|
+
* @returns {JSX.Element}
|
|
10
|
+
*/var SimulatedInsetTop=function SimulatedInsetTop(_ref){var highlightInset=_ref.highlightInset,onClick=_ref.onClick,props=_objectWithoutProperties(_ref,_excluded);// State to hold the current time string for the status bar
|
|
11
|
+
var _useState=useState(getTime()),_useState2=_slicedToArray(_useState,2),time=_useState2[0],setTime=_useState2[1];// Effect to update the time on regular intervals
|
|
12
|
+
useEffect(function(){var interval=setInterval(function(){setTime(getTime());},10*1000);return function(){return clearInterval(interval);};},[]);var _useSelector=useSelector(getStatusBarStyleStorage),statusBarStyle=_useSelector.statusBarStyle;var containerClasses=useMemo(function(){return classNames(classes.container,_defineProperty(_defineProperty(_defineProperty(_defineProperty({},classes.containerHighlight,highlightInset),classes.styleDark,statusBarStyle==='dark'),classes.styleLight,statusBarStyle==='light'),classes.styleNone,statusBarStyle==='none'));},[highlightInset,statusBarStyle]);return React.createElement("div",_extends({"aria-hidden":true,role:"presentation",className:classNames(containerClasses)},props,{onClick:onClick}),React.createElement("div",{className:classes.info},time),React.createElement("div",{className:classes.notch}),React.createElement("div",{className:classes.info},"5G"));};export default SimulatedInsetTop;
|
|
@@ -0,0 +1,6 @@
|
|
|
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,{useCallback}from'react';import{useSelector,useDispatch}from'react-redux';import PropTypes from'prop-types';import{useLongPress}from'@shopgate/engage/core/hooks';import{getAreSimulatedInsetsInjected,getIsInsetHighlightVisible}from'@shopgate/engage/development/selectors';import{toggleInsetHighlight,toggleInsets}from'@shopgate/engage/development/action-creators';import SimulatedInsetTop from"./SimulatedInsetTop";import SimulatedInsetBottom from"./SimulatedInsetBottom";/**
|
|
2
|
+
* Simulates iOS insets in development mode.
|
|
3
|
+
* @param {Object} props The component props.
|
|
4
|
+
* @param {React.ReactNode} props.children The child components.
|
|
5
|
+
* @returns {JSX.Element}
|
|
6
|
+
*/var SimulatedInsets=function SimulatedInsets(_ref){var children=_ref.children;var hasSimulatedSafeAreaInsets=useSelector(getAreSimulatedInsetsInjected);var dispatch=useDispatch();var highlightInset=useSelector(getIsInsetHighlightVisible);var handleClick=useCallback(function(){dispatch(toggleInsetHighlight(!highlightInset));},[dispatch,highlightInset]);var attrs=useLongPress(function(){dispatch(toggleInsets(!hasSimulatedSafeAreaInsets));});return React.createElement(React.Fragment,null,hasSimulatedSafeAreaInsets&&React.createElement(SimulatedInsetTop,_extends({onClick:handleClick,highlightInset:highlightInset},attrs)),children,hasSimulatedSafeAreaInsets&&React.createElement(SimulatedInsetBottom,_extends({onClick:handleClick,highlightInset:highlightInset},attrs)));};export default SimulatedInsets;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default}from"./SimulatedInsets";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default as DevelopmentTools}from"./DevelopmentTools";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export var DEVELOPMENT_TOOLS_TOGGLE_INSETS='DEVELOPMENT_TOOLS_TOGGLE_INSETS';export var DEVELOPMENT_TOOLS_TOGGLE_INSET_HIGHLIGHT='DEVELOPMENT_TOOLS_TOGGLE_INSET_HIGHLIGHT';export var DEVELOPMENT_TOOLS_UPDATE_STATUS_BAR_STYLE_STORAGE='DEVELOPMENT_TOOLS_UPDATE_STATUS_BAR_STYLE_STORAGE';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./actionTypes";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{combineReducers}from'redux';import settings from"./settings";import storage from"./storage";export default combineReducers({settings:settings,storage:storage});
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import{produce}from'immer';import{isDev}from'@shopgate/engage/core/helpers';import{DEVELOPMENT_TOOLS_TOGGLE_INSETS,DEVELOPMENT_TOOLS_TOGGLE_INSET_HIGHLIGHT}from"../constants";/**
|
|
2
|
+
* @typedef {Object} DevToolsSettingsState
|
|
3
|
+
* @property {boolean} showInsets
|
|
4
|
+
* @property {boolean} showInsetHighlight
|
|
5
|
+
*/ /** @type DevToolsSettingsState */var initialState={showInsets:null,showInsetHighlight:false};/**
|
|
6
|
+
* The reducer for all development tools settings related states.
|
|
7
|
+
* @param {Object} state The application state.
|
|
8
|
+
* @param {Object} action The redux action.
|
|
9
|
+
* @returns {Object}
|
|
10
|
+
*/export default function settingsReducer(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:initialState;var action=arguments.length>1?arguments[1]:undefined;/* eslint-disable no-param-reassign */var producer=produce(/** @param {DevToolsSettingsState} draft The draft */function(draft){if(!isDev){return;}switch(action.type){case DEVELOPMENT_TOOLS_TOGGLE_INSETS:{draft.showInsets=action.visible;break;}case DEVELOPMENT_TOOLS_TOGGLE_INSET_HIGHLIGHT:{draft.showInsetHighlight=action.visible;break;}default:break;}});/* eslint-enable no-param-reassign */return producer(state);}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import{produce}from'immer';import{isDev}from'@shopgate/engage/core/helpers';import{DEVELOPMENT_TOOLS_UPDATE_STATUS_BAR_STYLE_STORAGE}from"../constants";/**
|
|
2
|
+
* @typedef {Object} DevToolsStorageState
|
|
3
|
+
* @property {Object} statusBarStyle
|
|
4
|
+
*/ /** @type DevToolsStorageState */var initialState={statusBarStyle:{styles:{}}};/**
|
|
5
|
+
* The reducer for all developer tools storage related states.
|
|
6
|
+
* @param {Object} state The application state.
|
|
7
|
+
* @param {Object} action The redux action.
|
|
8
|
+
* @returns {Object}
|
|
9
|
+
*/export default function storageReducer(){var state=arguments.length>0&&arguments[0]!==undefined?arguments[0]:initialState;var action=arguments.length>1?arguments[1]:undefined;/* eslint-disable no-param-reassign */var producer=produce(/** @param {DevToolsStorageState} draft The draft */function(draft){if(!isDev){return;}switch(action.type){case DEVELOPMENT_TOOLS_UPDATE_STATUS_BAR_STYLE_STORAGE:{draft.statusBarStyle=action.style;break;}default:break;}});/* eslint-enable no-param-reassign */return producer(state);}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./settings";export*from"./storage";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import{createSelector}from'reselect';import MobileDetect from'mobile-detect';import{isDev as isDevelopment,hasSGJavaScriptBridge}from'@shopgate/engage/core/helpers';var md=new MobileDetect(navigator.userAgent);/**
|
|
2
|
+
* Retrieves the development settings state from the store.
|
|
3
|
+
* @param {Object} state The current application state.
|
|
4
|
+
* @return {Object} The development settings state.
|
|
5
|
+
*/var getState=function getState(state){return state.development.settings;};/**
|
|
6
|
+
* Creates a selector to determine if development mode is enabled.
|
|
7
|
+
* @type {(state: any) => boolean}
|
|
8
|
+
*/export var getIsDev=createSelector(function(){return isDevelopment;});/**
|
|
9
|
+
* Creates a selector to determine if the simulated iOS insets are supposed to be shown.
|
|
10
|
+
* @type {(state: any) => boolean}
|
|
11
|
+
*/export var getAreInsetsVisible=createSelector(getIsDev,getState,function(isDev,settings){if(!isDev){return false;}return settings.showInsets;});/**
|
|
12
|
+
* Creates a selector to determine if the inset highlight is visible.
|
|
13
|
+
* @type {(state: any) => boolean}
|
|
14
|
+
*/export var getIsInsetHighlightVisible=createSelector(getIsDev,getState,function(isDev,settings){if(!isDev){return false;}return settings.showInsetHighlight;});/**
|
|
15
|
+
* Creates a selector to check if simulated safe area insets are supposed to be injected.
|
|
16
|
+
* @type {(state: any) => boolean}
|
|
17
|
+
*/export var getAreSimulatedInsetsInjected=createSelector(getIsDev,getAreInsetsVisible,function(isDev,insetsVisible){// No insets injected if the app is not in development mode.
|
|
18
|
+
if(!isDev){return false;}// No insets injected if PWA is running inside the app
|
|
19
|
+
if(hasSGJavaScriptBridge()){return false;}// If the state contains a bool value, respect is.
|
|
20
|
+
if(typeof insetsVisible==='boolean'){return insetsVisible;}// Show insets on simulated iOS devices by default if insets decision is not set.
|
|
21
|
+
return insetsVisible===null&&md.os()==='iOS';});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import{createSelector}from'reselect';/**
|
|
2
|
+
* Retrieves the development storage state from the store.
|
|
3
|
+
* @param {Object} state The current application state.
|
|
4
|
+
* @return {Object} The development storage state.
|
|
5
|
+
*/var getState=function getState(state){return state.development.storage;};/**
|
|
6
|
+
* @typedef {Object} StatusBarStyleStyles
|
|
7
|
+
* @property {string} statusBarBackground Current background color of the app bar
|
|
8
|
+
*/ /**
|
|
9
|
+
* @typedef {Object} StatusBarStyle
|
|
10
|
+
* @property {boolean} isDefault Whether the style is the default one which was initially applied
|
|
11
|
+
* @property {"light"|"dark"} statusBarStyle The status style for the iOS status bar
|
|
12
|
+
* @property {StatusBarStyleStyles} styles Additional styles for the status bar
|
|
13
|
+
*/ /**
|
|
14
|
+
* Creates a selector that returns the current status bar style object from the storage.
|
|
15
|
+
* @type {(state: any) => StatusBarStyle}
|
|
16
|
+
*/export var getStatusBarStyleStorage=createSelector(getState,function(state){return state.statusBarStyle;});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export*from"./insets";
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{main$}from'@shopgate/engage/core/streams';import{DEVELOPMENT_TOOLS_TOGGLE_INSETS}from"../constants";/**
|
|
2
|
+
* Gets triggered after the simulated page insets were updated
|
|
3
|
+
* @type {Observable}
|
|
4
|
+
*/export var simulatedPageInsetsDidUpdate$=main$.filter(function(_ref){var action=_ref.action;return action.type===DEVELOPMENT_TOOLS_TOGGLE_INSETS;});
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import{appWillStart$}from'@shopgate/engage/core/streams';import{UIEvents}from'@shopgate/engage/core/events';import{updateStatusBarStyleStorage}from'@shopgate/engage/development/action-creators';/**
|
|
2
|
+
* Development subscriptions
|
|
3
|
+
* @param {Function} subscribe The subscribe function
|
|
4
|
+
*/export default function development(subscribe){subscribe(appWillStart$,function(_ref){var dispatch=_ref.dispatch;// Listen for the app event which updates the status bar style and store it into the
|
|
5
|
+
// development storage redux store.
|
|
6
|
+
UIEvents.addListener('devInternalUpdateStatusBarStyle',function(event){dispatch(updateStatusBarStyleStorage(event));});});}
|
|
@@ -0,0 +1,12 @@
|
|
|
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 _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import React,{useEffect,useState,useMemo,useCallback,useRef}from'react';import PropTypes from'prop-types';import{connect}from'react-redux';import{css}from'glamor';import{getCommentDialogSettings}from'@shopgate/pwa-common-commerce/favorites/selectors';import{i18n,usePrevious}from'@shopgate/engage/core';import{Dialog,TextField}from'@shopgate/engage/components';import{broadcastLiveMessage}from'@shopgate/engage/a11y';import{closeFavoritesCommentDialog}from'@shopgate/pwa-common-commerce/favorites/action-creators';import{themeName}from'@shopgate/pwa-common/helpers/config';import{updateFavorite}from'@shopgate/pwa-common-commerce/favorites/actions/toggleFavorites';import I18n from'@shopgate/pwa-common/components/I18n';var isIos=themeName.includes('ios');/**
|
|
2
|
+
* @param {Object} state State.
|
|
3
|
+
* @returns {Object}
|
|
4
|
+
*/var mapStateToProps=function mapStateToProps(state){return{settings:getCommentDialogSettings(state)};};/**
|
|
5
|
+
* @param {Object} dispatch Dispatch.
|
|
6
|
+
* @returns {Object}
|
|
7
|
+
*/var mapDispatchToProps=function mapDispatchToProps(dispatch){return{close:function close(){return dispatch(closeFavoritesCommentDialog());},updateFavoriteItem:function updateFavoriteItem(productId,listId,quantity,notes){dispatch(updateFavorite(productId,listId,quantity,notes));}};};var styles={root:css({display:'flex',flexDirection:'column'}),input:css({textAlign:'left',fontSize:'1rem'}).toString(),characterCount:css({textAlign:'right',marginTop:-16,fontSize:'0.875rem',color:'var(--color-text-medium-emphasis)'}).toString()};var MAX_CHARACTER_COUNT=250;/**
|
|
8
|
+
* @param {Object} props Props.
|
|
9
|
+
* @returns {JSX}
|
|
10
|
+
*/var CommentDialog=function CommentDialog(_ref){var settings=_ref.settings,close=_ref.close,updateFavoriteItem=_ref.updateFavoriteItem;var isVisible=!!settings;var _ref2=settings||{},productId=_ref2.productId,listId=_ref2.listId,item=_ref2.item;var prevProdId=usePrevious(productId);var _useState=useState(item===null||item===void 0?void 0:item.notes),_useState2=_slicedToArray(_useState,2),value=_useState2[0],setValue=_useState2[1];// Reference to the element that triggered the dialog
|
|
11
|
+
var triggerRef=useRef(null);useEffect(function(){if(prevProdId!==productId){setValue(item===null||item===void 0?void 0:item.notes);}},[item,prevProdId,productId]);useEffect(function(){if(isVisible){triggerRef.current=document.activeElement;}},[isVisible]);var handleClose=useCallback(function(){setTimeout(function(){if(triggerRef===null||triggerRef===void 0?void 0:triggerRef.current){// Focus the element that triggered the dialog after dialog (a11y improvement)
|
|
12
|
+
triggerRef.current.focus();}if(!(item===null||item===void 0?void 0:item.notes)&&!!value){broadcastLiveMessage('favorites.comments.added');}if((item===null||item===void 0?void 0:item.notes)&&value!==item.notes){broadcastLiveMessage('favorites.comments.updated');}},300);close();},[close,item,value]);var handleSubmit=useCallback(function(){if((item===null||item===void 0?void 0:item.notes)!==value){updateFavoriteItem(productId,listId,undefined,value);}handleClose();},[handleClose,item,listId,productId,updateFavoriteItem,value]);var handleChange=useCallback(function(newValue){setValue(newValue);},[]);var attributes=useMemo(function(){return{style:{maxHeight:150,placeholder:i18n.text('favorites.comment_modal.label')},maxLength:MAX_CHARACTER_COUNT};},[]);if(!isVisible){return null;}return React.createElement(Dialog,{onConfirm:handleSubmit,onDismiss:handleClose,modal:{title:i18n.text("favorites.comment_modal.".concat(((item===null||item===void 0?void 0:item.notes)||'').length===0?'titleAdd':'titleEdit')),dismiss:i18n.text('favorites.comment_modal.dismiss'),confirm:i18n.text('favorites.comment_modal.confirm')}},React.createElement("div",{className:styles.root},React.createElement(TextField,_extends({name:"name"},isIos?{placeholder:i18n.text('favorites.comment_modal.label')}:{label:i18n.text('favorites.comment_modal.label')},{onChange:handleChange,value:value,className:styles.input,attributes:attributes,multiLine:true,tabIndex:0})),React.createElement(I18n.Text,{className:styles.characterCount,string:"favorites.comment_modal.characterCount","aria-hidden":true,params:{maxCount:MAX_CHARACTER_COUNT,count:(value===null||value===void 0?void 0:value.length)||0}})));};CommentDialog.defaultProps={settings:null};export default connect(mapStateToProps,mapDispatchToProps)(CommentDialog);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default}from"./CommentDialog";
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React,{useMemo}from'react';import PropTypes from'prop-types';import{css}from'glamor';import{connect}from'react-redux';import{RippleButton}from'@shopgate/engage/components';import{i18n}from'@shopgate/engage/core';import{toggleFavoriteWithListChooser}from'@shopgate/pwa-common-commerce/favorites/actions/toggleFavorites';import{makeIsProductOnFavoriteList,hasMultipleFavoritesList}from'@shopgate/pwa-common-commerce/favorites/selectors';import{getWishlistItemQuantityEnabled}from'@shopgate/engage/core/selectors/shopSettings';import appConfig from'@shopgate/pwa-common/helpers/config';/**
|
|
2
|
+
* @param {Object} state State.
|
|
3
|
+
* @returns {Object}
|
|
4
|
+
*/var makeMapStateToProps=function makeMapStateToProps(){var getIsOnList=makeIsProductOnFavoriteList(function(_,props){return props.productId;});return function(state,props){return{isOnList:getIsOnList(state,props),hasMultipleLists:hasMultipleFavoritesList(state),wishlistItemQuantityEnabled:getWishlistItemQuantityEnabled(state)};};};/**
|
|
5
|
+
* @param {Function} dispatch Dispatch
|
|
6
|
+
* @returns {Object}
|
|
7
|
+
* */var mapDispatchToProps=function mapDispatchToProps(dispatch){return{toggle:function toggle(productId){return dispatch(toggleFavoriteWithListChooser(productId));}};};var styles={root:css({'&&':{margin:'0 0px 16px 16px',backgroundColor:'#fff',border:'1px solid var(--color-primary)',color:'var(--color-high-emphasis)',borderRadius:5,fontSize:14,textTransform:'none',padding:0}}).toString(),ripple:css({padding:'8px 16px'}).toString()};/** @returns {JSX} */var FavoriteButtonWide=function FavoriteButtonWide(_ref){var productId=_ref.productId,toggle=_ref.toggle,isOnList=_ref.isOnList,hasMultipleLists=_ref.hasMultipleLists,wishlistItemQuantityEnabled=_ref.wishlistItemQuantityEnabled;var label=useMemo(function(){// When wishlist item quantity is active, items cannot be removed via the button
|
|
8
|
+
if(!isOnList||wishlistItemQuantityEnabled){return'favorites.add_to_list';}if(hasMultipleLists){return'favorites.edit_lists';}return'favorites.remove_from_list';},[hasMultipleLists,isOnList,wishlistItemQuantityEnabled]);if(!appConfig.hasFavorites){return null;}return React.createElement(RippleButton,{className:styles.root,rippleClassName:styles.ripple,type:"primary",onClick:function onClick(){return toggle(productId);}},i18n.text(label));};export default connect(makeMapStateToProps,mapDispatchToProps)(FavoriteButtonWide);
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default}from"./FavoriteButtonWide";
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
function
|
|
2
|
-
* The extended component props.
|
|
3
|
-
|
|
4
|
-
* @param {
|
|
5
|
-
* @
|
|
6
|
-
*/var
|
|
1
|
+
function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}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,{useCallback,useMemo,useLayoutEffect,useState,useEffect,useRef}from'react';import PropTypes from'prop-types';import{connect}from'react-redux';import{css}from'glamor';import{MODAL_VARIANT_SELECT}from'@shopgate/pwa-ui-shared/Dialog/constants';import{ProductImage,ITEM_PATH,PriceInfo,isBaseProduct as isBaseProductSelector,isProductOrderable,hasProductVariants,ProductListEntryProvider}from'@shopgate/engage/product';import{bin2hex,showModal as showModalAction,historyPush as historyPushAction,getThemeSettings,i18n}from'@shopgate/engage/core';import{hasNewServices}from'@shopgate/engage/core/helpers';import{Link,TextLink,SurroundPortals}from'@shopgate/engage/components';import{makeIsRopeProductOrderable,getPreferredLocation,StockInfoLists}from'@shopgate/engage/locations';import{FAVORITES_PRODUCT_NAME,FAVORITES_PRODUCT_PRICE,FAVORITES_ADD_TO_CART,FAVORITES_AVAILABILITY_TEXT}from'@shopgate/engage/favorites';import{broadcastLiveMessage}from'@shopgate/engage/a11y';import{responsiveMediaQuery}from'@shopgate/engage/styles';import Price from'@shopgate/pwa-ui-shared/Price';import PriceStriked from'@shopgate/pwa-ui-shared/PriceStriked';import AddToCart from'@shopgate/pwa-ui-shared/AddToCartButton';import{themeConfig}from'@shopgate/pwa-common/helpers/config';import{updateFavorite}from'@shopgate/pwa-common-commerce/favorites/actions/toggleFavorites';import{openFavoritesCommentDialog}from'@shopgate/pwa-common-commerce/favorites/action-creators';import AvailableText from'@shopgate/pwa-ui-shared/Availability';import classNames from'classnames';import Remove from"../RemoveButton";import ItemCharacteristics from"./ItemCharacteristics";import ItemQuantity from"./ItemQuantity";import ItemNotes from"./ItemNotes";import{FAVORITES_LIST_ITEM,FAVORITES_NOTES,FAVORITES_QUANTITY}from"../../constants/Portals";var variables=themeConfig.variables;/**
|
|
2
|
+
* @return {Function} The extended component props.
|
|
3
|
+
*/var makeMapStateToProps=function makeMapStateToProps(){var isRopeProductOrderable=makeIsRopeProductOrderable(function(state,props){var _getPreferredLocation;return(_getPreferredLocation=getPreferredLocation(state,props))===null||_getPreferredLocation===void 0?void 0:_getPreferredLocation.code;},function(state,props){return props.variantId||props.productId||null;});return function(state,props){return{isBaseProduct:isBaseProductSelector(state,props),hasVariants:hasProductVariants(state,props),isOrderable:isProductOrderable(state,props),isRopeProductOrderable:isRopeProductOrderable(state,props)};};};/**
|
|
4
|
+
* @param {Function} dispatch Dispatch.
|
|
5
|
+
* @returns {Object}
|
|
6
|
+
*/var mapDispatchToProps=function mapDispatchToProps(dispatch){return{showModal:function showModal(){return dispatch(showModalAction.apply(void 0,arguments));},historyPush:function historyPush(){return dispatch(historyPushAction.apply(void 0,arguments));},updateFavoriteItem:function updateFavoriteItem(productId,listId,quantity,notes){dispatch(updateFavorite(productId,listId,quantity,notes));},openCommentDialog:function openCommentDialog(productId,listId){return dispatch(openFavoritesCommentDialog(productId,listId));}};};var styles={root:css({display:'flex',position:'relative','&:not(:last-child)':{marginBottom:16}}).toString(),imageContainer:css(_defineProperty(_defineProperty(_defineProperty({flex:0.4,marginRight:18},responsiveMediaQuery('>=xs',{appAlways:true}),{maxWidth:120,minWidth:80}),responsiveMediaQuery('>=md',{webOnly:true}),{maxWidth:120,minWidth:80}),responsiveMediaQuery('>=md',{webOnly:true}),{width:120,flex:'none'})).toString(),infoContainer:css({flex:1,display:'flex',flexDirection:'column',flexWrap:'wrap',gap:8}).toString(),infoContainerRow:css({flexDirection:'row',display:'flex',justifyContent:'space-between'}).toString(),quantityContainer:css({flexDirection:'row',display:'flex',alignItems:'center',flexWrap:'wrap',gap:16}).toString(),priceContainer:css({minWidth:100}).toString(),priceContainerInner:css({display:'inline-block',textAlign:'right'}),price:css({justifyContent:'flex-end'}).toString(),priceInfo:css({wordBreak:'break-word',fontSize:'0.875rem',lineHeight:'0.875rem',color:'var(--color-text-low-emphasis)',padding:"".concat(variables.gap.xsmall,"px 0")}).toString(),titleWrapper:css({display:'flex',flexDirection:'column',gap:8}).toString(),titleContainer:css({marginRight:10,flex:1}).toString(),title:css({fontSize:17,fontWeight:600}).toString(),removeContainer:css({display:'flex',flexShrink:0,alignItems:'flex-start'})};/**
|
|
7
7
|
* Favorite Item component
|
|
8
|
-
* @return {JSX}
|
|
9
|
-
*/var FavoriteItem=function FavoriteItem(_ref){var _product$price,_product$price2,_product$price3
|
|
10
|
-
showModal({title:null,type:MODAL_VARIANT_SELECT,message:'favorites.modal.message',confirm:'favorites.modal.confirm',dismiss:'common.cancel',params:{productId:product.id}});return false;}
|
|
8
|
+
* @return {JSX.Element}
|
|
9
|
+
*/var FavoriteItem=function FavoriteItem(_ref){var _product$price,_product$price2,_product$price3;var listId=_ref.listId,product=_ref.product,notes=_ref.notes,quantity=_ref.quantity,remove=_ref.remove,addToCart=_ref.addToCart,isBaseProduct=_ref.isBaseProduct,isOrderable=_ref.isOrderable,isRopeProductOrderable=_ref.isRopeProductOrderable,hasVariants=_ref.hasVariants,showModal=_ref.showModal,historyPush=_ref.historyPush,updateFavoriteItem=_ref.updateFavoriteItem,openCommentDialog=_ref.openCommentDialog;var _ref2=getThemeSettings('AppImages')||{},gridResolutions=_ref2.ListImage;var _useState=useState(!isOrderable&&!hasVariants),_useState2=_slicedToArray(_useState,2),isDisabled=_useState2[0],setIsDisabled=_useState2[1];var currency=((_product$price=product.price)===null||_product$price===void 0?void 0:_product$price.currency)||'EUR';var defaultPrice=((_product$price2=product.price)===null||_product$price2===void 0?void 0:_product$price2.unitPrice)||0;var specialPrice=(_product$price3=product.price)===null||_product$price3===void 0?void 0:_product$price3.unitPriceStriked;var hasStrikePrice=typeof specialPrice==='number'&&specialPrice>defaultPrice;var characteristics=(product===null||product===void 0?void 0:product.characteristics)||[];var productLink="".concat(ITEM_PATH,"/").concat(bin2hex(product.id));var notesButtonRef=useRef();var _useState3=useState(quantity),_useState4=_slicedToArray(_useState3,2),internalQuantity=_useState4[0],setInternalQuantity=_useState4[1];useEffect(function(){setInternalQuantity(quantity);},[quantity]);useLayoutEffect(function(){setIsDisabled(!isOrderable&&!hasVariants);},[hasVariants,isOrderable]);var handleOpenComment=useCallback(function(e){e.preventDefault();e.stopPropagation();openCommentDialog(product.id,listId);},[listId,openCommentDialog,product.id]);var handleAddToCart=useCallback(function(e){e.preventDefault();e.stopPropagation();if(isBaseProduct&&hasVariants){// Called for a parent product. User needs to confirm the navigation to the PDP
|
|
10
|
+
showModal({title:null,type:MODAL_VARIANT_SELECT,message:'favorites.modal.message',confirm:'favorites.modal.confirm',dismiss:'common.cancel',params:{productId:product.id}});return false;}if(hasNewServices()&&!isRopeProductOrderable){// Product is not orderable for ROPE. So users need to do some corrections. Just redirect.
|
|
11
|
+
historyPush({pathname:productLink});return false;}broadcastLiveMessage('product.adding_item',{params:{count:1}});return addToCart(e);},[addToCart,hasVariants,historyPush,isBaseProduct,isRopeProductOrderable,product.id,productLink,showModal]);var commonPortalProps=useMemo(function(){var availability=product.availability,id=product.id,name=product.name;return{availability:availability,characteristics:characteristics,id:id,name:name,price:defaultPrice,listId:listId};},[characteristics,defaultPrice,listId,product]);var ctaPortalProps=useMemo(function(){return{isLoading:false,noShadow:false,listId:listId,isBaseProduct:isBaseProduct,isDisabled:isDisabled,productId:product.id,handleRemoveFromCart:remove,handleAddToCart:handleAddToCart};},[handleAddToCart,isBaseProduct,isDisabled,listId,product.id,remove]);var handleChangeQuantity=useCallback(function(newQuantity){// Do nothing when quantity didn't change
|
|
12
|
+
if(newQuantity===quantity)return;updateFavoriteItem(product.id,listId,newQuantity,notes);},[listId,notes,product.id,quantity,updateFavoriteItem]);var handleDeleteComment=useCallback(function(event){event.preventDefault();event.stopPropagation();updateFavoriteItem(product.id,listId,quantity,'');setTimeout(function(){if(notesButtonRef===null||notesButtonRef===void 0?void 0:notesButtonRef.current){// Focus the add button after item deletion to improve a11y
|
|
13
|
+
notesButtonRef.current.focus();}broadcastLiveMessage('favorites.comments.removed');},300);},[listId,product.id,quantity,updateFavoriteItem]);return React.createElement(ProductListEntryProvider,{productId:product.id},React.createElement(SurroundPortals,{portalName:FAVORITES_LIST_ITEM,portalProps:product},React.createElement("div",{className:classNames(styles.root,'engage__favorites__item')},React.createElement(Link,{className:classNames(styles.imageContainer,'engage__favorites__item__image-container'),component:"div",href:productLink,"aria-hidden":true},React.createElement(ProductImage,{className:classNames('engage__favorites__item__image'),src:product.featuredImageBaseUrl,resolutions:gridResolutions})),React.createElement("div",{className:classNames(styles.infoContainer,'engage__favorites__item__info-container')},React.createElement("div",{className:classNames(styles.infoContainerRow)},React.createElement("div",{className:styles.titleWrapper},React.createElement(SurroundPortals,{portalName:FAVORITES_PRODUCT_NAME,portalProps:commonPortalProps},React.createElement(TextLink,{href:productLink,tag:"span",className:classNames(styles.titleContainer,'engage__favorites__item__title-container')},React.createElement("span",{className:styles.title// eslint-disable-next-line react/no-danger
|
|
14
|
+
,dangerouslySetInnerHTML:{__html:"".concat(product.name)}})))),React.createElement("div",{className:styles.removeContainer},React.createElement(Remove,{onClick:remove}))),React.createElement(ItemCharacteristics,{characteristics:characteristics}),!hasNewServices()?React.createElement(SurroundPortals,{portalName:FAVORITES_AVAILABILITY_TEXT,portalProps:commonPortalProps},React.createElement(AvailableText,{text:commonPortalProps.availability.text,state:commonPortalProps.availability.state,showWhenAvailable:true,className:styles.availability})):React.createElement(StockInfoLists,{product:product}),React.createElement("div",{className:styles.infoContainerRow},React.createElement("div",{className:styles.quantityContainer},React.createElement(SurroundPortals,{portalName:FAVORITES_QUANTITY,portalProps:commonPortalProps},React.createElement(ItemQuantity,{quantity:internalQuantity,onChange:handleChangeQuantity})),React.createElement(SurroundPortals,{portalName:FAVORITES_PRODUCT_PRICE,portalProps:commonPortalProps},React.createElement("div",{className:styles.priceContainer},React.createElement("div",{className:styles.priceContainerInner},hasStrikePrice?React.createElement(PriceStriked,{value:specialPrice,currency:currency}):null,React.createElement(Price,{currency:currency,discounted:hasStrikePrice,unitPrice:defaultPrice,className:styles.price})),React.createElement(PriceInfo,{product:product,currency:currency,className:styles.priceInfo})))),React.createElement(SurroundPortals,{portalName:FAVORITES_ADD_TO_CART,portalProps:ctaPortalProps},React.createElement(AddToCart,{onClick:handleAddToCart,isLoading:false,isDisabled:isDisabled,"aria-label":i18n.text('product.add_to_cart')}))),React.createElement(SurroundPortals,{portalName:FAVORITES_NOTES,portalProps:commonPortalProps},React.createElement(ItemNotes,{notes:notes,onClickDeleteComment:handleDeleteComment,onClickOpenComment:handleOpenComment,notesButtonRef:notesButtonRef}))))));};FavoriteItem.defaultProps={isBaseProduct:true,isOrderable:true,isRopeProductOrderable:true,hasVariants:false,notes:undefined,quantity:1};export default connect(makeMapStateToProps,mapDispatchToProps)(FavoriteItem);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React from'react';import PropTypes from'prop-types';import{css}from'glamor';var styles={property:css({fontSize:14,color:'var(--color-text-
|
|
1
|
+
import React from'react';import PropTypes from'prop-types';import{css}from'glamor';var styles={property:css({fontSize:14,color:'var(--color-text-medium-emphasis)',fontWeight:400})};/**
|
|
2
2
|
* @param {Object} props The component props
|
|
3
3
|
* @returns {JSX}
|
|
4
|
-
*/var ItemCharacteristics=function ItemCharacteristics(_ref){var characteristics=_ref.characteristics;if(!characteristics||characteristics.length===0){return null;}return
|
|
4
|
+
*/var ItemCharacteristics=function ItemCharacteristics(_ref){var characteristics=_ref.characteristics;if(!characteristics||characteristics.length===0){return null;}return React.createElement("ul",null,characteristics.map(function(_ref2){var label=_ref2.label,value=_ref2.value;return React.createElement("li",{key:"".concat(label,"-").concat(value),className:styles.property},label,': ',value);}));};ItemCharacteristics.defaultProps={characteristics:null};export default ItemCharacteristics;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import React from'react';import PropTypes from'prop-types';import{css}from'glamor';import{connect}from'react-redux';import{i18n}from'@shopgate/engage/core';import{getWishlistItemNotesEnabled}from"../../../core/selectors/shopSettings";var styles={root:css({display:'flex',flexWrap:'wrap',alignItems:'center'}),addCommentButton:css({fontSize:17,color:'var(--color-secondary)',fontWeight:500,whiteSpace:'nowrap',overflow:'hidden',textOverflow:'ellipsis',paddingLeft:0,paddingRight:0,textAlign:'left'}),comment:css({fontSize:17,color:'var(--color-text-high-emphasis)',fontWeight:500,whiteSpace:'nowrap',overflow:'hidden',textOverflow:'ellipsis'}),notes:css({paddingRight:4,fontStyle:'italic'}),buttons:css({whiteSpace:'nowrap'})};/**
|
|
2
|
+
* @return {Function} The extended component props.
|
|
3
|
+
*/var makeMapStateToProps=function makeMapStateToProps(){return function(state){return{wishlistItemNotesEnabled:getWishlistItemNotesEnabled(state)};};};/**
|
|
4
|
+
*
|
|
5
|
+
* @param {Object} props The component props
|
|
6
|
+
* @returns {JSX}
|
|
7
|
+
*/var ItemNotes=function ItemNotes(_ref){var wishlistItemNotesEnabled=_ref.wishlistItemNotesEnabled,notes=_ref.notes,onClickOpenComment=_ref.onClickOpenComment,onClickDeleteComment=_ref.onClickDeleteComment,notesButtonRef=_ref.notesButtonRef;if(!wishlistItemNotesEnabled){return null;}/* eslint-disable jsx-a11y/aria-role */return React.createElement("div",{className:styles.root},notes&&React.createElement("span",{role:"text"},React.createElement("span",{className:styles.comment},"".concat(i18n.text('favorites.comments.notes'),": ")),React.createElement("span",{className:styles.notes},"\"".concat(notes,"\""))),React.createElement("span",{className:styles.buttons},React.createElement("button",{type:"button",onClick:onClickOpenComment,className:styles.addCommentButton,ref:notesButtonRef},notes?i18n.text('favorites.comments.edit'):i18n.text('favorites.comments.add')),notes&&React.createElement(React.Fragment,null,React.createElement("span",{"aria-hidden":true}," | "),React.createElement("button",{type:"button",onClick:onClickDeleteComment,className:styles.addCommentButton},i18n.text('favorites.comments.delete')))));/* eslint-enable jsx-a11y/aria-role */};ItemNotes.defaultProps={notes:null,notesButtonRef:null};export default connect(makeMapStateToProps)(ItemNotes);
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}import React,{useState,useCallback,useEffect}from'react';import PropTypes from'prop-types';import{css}from'glamor';import{connect}from'react-redux';import{getWishlistItemQuantityEnabled}from"../../../core/selectors/shopSettings";import UnitQuantityPicker from"../../../product/components/UnitQuantityPicker/UnitQuantityPicker";var styles={root:css({width:120})};/**
|
|
2
|
+
* @return {Function} The extended component props.
|
|
3
|
+
*/var makeMapStateToProps=function makeMapStateToProps(){return function(state){return{wishlistItemQuantityEnabled:getWishlistItemQuantityEnabled(state)};};};/**
|
|
4
|
+
*
|
|
5
|
+
* @param {Object} props The component props
|
|
6
|
+
* @returns {JSX}
|
|
7
|
+
*/var ItemQuantity=function ItemQuantity(_ref){var wishlistItemQuantityEnabled=_ref.wishlistItemQuantityEnabled,quantity=_ref.quantity,onChange=_ref.onChange;var _useState=useState(quantity),_useState2=_slicedToArray(_useState,2),internalQuantity=_useState2[0],setInternalQuantity=_useState2[1];var handleChange=useCallback(function(newQuantity){setInternalQuantity(newQuantity);onChange(newQuantity);},[onChange]);useEffect(function(){setInternalQuantity(quantity);},[quantity]);if(!wishlistItemQuantityEnabled){return null;}return React.createElement("div",{className:styles.root},React.createElement(UnitQuantityPicker,{maxValue:99,minValue:1,maxDecimals:0,incrementStep:1,decrementStep:1,onChange:handleChange,value:internalQuantity,toggleTabBarOnFocus:true}));};export default connect(makeMapStateToProps)(ItemQuantity);
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import React from'react';import PropTypes from'prop-types';import{i18n}from'@shopgate/engage/core';import{SheetList,SheetDrawer}from'@shopgate/engage/components';/**
|
|
2
|
+
* @param {Object} props Props.
|
|
3
|
+
* @returns {JSX.Element}
|
|
4
|
+
*/var ItemFulfillmentMethod=function ItemFulfillmentMethod(_ref){var isOpen=_ref.isOpen,methods=_ref.methods,onClose=_ref.onClose,onSelect=_ref.onSelect;return React.createElement(SheetDrawer,{isOpen:isOpen,title:i18n.text('favorites.fo_method_chooser.title'),onDidClose:function onDidClose(){return onClose(null);}},React.createElement(SheetList,null,methods.includes('ROPIS')?React.createElement(SheetList.Item,{title:i18n.text('locations.method.ropis'),onClick:function onClick(){return onSelect('ROPIS');}}):null,methods.includes('BOPIS')?React.createElement(SheetList.Item,{title:i18n.text('locations.method.bopis'),onClick:function onClick(){return onSelect('BOPIS');}}):null,methods.includes('directShip')?React.createElement(SheetList.Item,{title:i18n.text('locations.method.direct_ship'),onClick:function onClick(){return onSelect('directShip');}}):null));};export default ItemFulfillmentMethod;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export{default}from"./ItemFulfillmentMethod";
|
|
@@ -1,22 +1,26 @@
|
|
|
1
|
-
function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||
|
|
2
|
-
* Favorite List Label component
|
|
3
|
-
* @return {JSX}
|
|
4
|
-
*/var FavoriteListLabel=function FavoriteListLabel(_ref){var id=_ref.id,title=_ref.title,rename=_ref.rename,remove=_ref.remove,disableRemoveList=_ref.disableRemoveList;return/*#__PURE__*/React.createElement(Fragment,null,/*#__PURE__*/React.createElement("span",{className:styles.title},title),/*#__PURE__*/React.createElement(SurroundPortals,{portalName:FAVORITES_LIST_CONTEXT_MENU,portalProps:{id:id}},/*#__PURE__*/React.createElement(ContextMenu,null,/*#__PURE__*/React.createElement(ContextMenu.Item,{onClick:rename},i18n.text('favorites.rename_list')),/*#__PURE__*/React.createElement(ContextMenu.Item,{onClick:remove,disabled:disableRemoveList},i18n.text('favorites.remove_list')))));};/**
|
|
5
|
-
* The content of a favorites list
|
|
6
|
-
* @returns {JSX}
|
|
7
|
-
*/var FavoritesListContent=function FavoritesListContent(_ref2){var id=_ref2.id,productIds=_ref2.productIds,_addToCart=_ref2.addToCart,removeItem=_ref2.removeItem,shouldShowLoadMoreButton=_ref2.shouldShowLoadMoreButton,loadMore=_ref2.loadMore,hasMultipleFavoritesListsSupport=_ref2.hasMultipleFavoritesListsSupport;return/*#__PURE__*/ (/**
|
|
8
|
-
* TODO find a way to indicate loading of the list. products are fetched via the ProductProvider,
|
|
9
|
-
* so there is not a reliable way to determine if product fetching is done, since we might not
|
|
10
|
-
* receive a product for every list item.
|
|
11
|
-
*/React.createElement(React.Fragment,null,hasMultipleFavoritesListsSupport?/*#__PURE__*/React.createElement("div",{className:styles.divider}):/*#__PURE__*/React.createElement("div",{className:styles.spacer}),productIds.length===0?/*#__PURE__*/React.createElement("span",null,i18n.text('favorites.empty')):null,/*#__PURE__*/React.createElement(ProductListTypeProvider,{type:"favoritesList"},productIds.map(function(_ref3){var productId=_ref3.productId;return/*#__PURE__*/React.createElement(ProductProvider,{productId:productId,key:productId},function(_ref4){var product=_ref4.product;return product?/*#__PURE__*/React.createElement(Item,{key:product.id,product:product,listId:id,productId:product.id,addToCart:function addToCart(e){e.preventDefault();e.stopPropagation();return _addToCart(product);},remove:function remove(e){e.preventDefault();e.stopPropagation();removeItem(product.id);}}):null;});})),shouldShowLoadMoreButton&&/*#__PURE__*/React.createElement(RippleButton,{type:"primary",className:styles.loadMoreButton,onClick:loadMore},i18n.text('favorites.load_more_button')),/*#__PURE__*/React.createElement("div",{className:styles.spacer})));};FavoritesListContent.defaultProps={hasMultipleFavoritesListsSupport:false};/**
|
|
1
|
+
import _regeneratorRuntime from"@babel/runtime/regenerator";function _slicedToArray(arr,i){return _arrayWithHoles(arr)||_iterableToArrayLimit(arr,i)||_nonIterableRest();}function _nonIterableRest(){throw new TypeError("Invalid attempt to destructure non-iterable instance");}function _iterableToArrayLimit(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"]!=null)_i["return"]();}finally{if(_d)throw _e;}}return _arr;}function _arrayWithHoles(arr){if(Array.isArray(arr))return arr;}function asyncGeneratorStep(gen,resolve,reject,_next,_throw,key,arg){try{var info=gen[key](arg);var value=info.value;}catch(error){reject(error);return;}if(info.done){resolve(value);}else{Promise.resolve(value).then(_next,_throw);}}function _asyncToGenerator(fn){return function(){var self=this,args=arguments;return new Promise(function(resolve,reject){var gen=fn.apply(self,args);function _next(value){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"next",value);}function _throw(err){asyncGeneratorStep(gen,resolve,reject,_next,_throw,"throw",err);}_next(undefined);});};}import React,{useState,useEffect,useCallback,useMemo}from'react';import PropTypes from'prop-types';import{connect}from'react-redux';import{showModal}from'@shopgate/engage/core/actions';import{Accordion,Card,ConditionalWrapper}from'@shopgate/engage/components';import{makeGetFavorites,getUseGetFavoriteIdsPipeline}from'@shopgate/pwa-common-commerce/favorites/selectors';import{FAVORITES_SHOW_LIMIT}from'@shopgate/engage/favorites/constants';import ListAccordionLabel from"./ListAccordionLabel";import ListContent from"./ListContent";import styles from"./styles";import ListAccordionHeader from"./ListAccordionHeader";/**
|
|
12
2
|
* @param {Object} _ State
|
|
13
3
|
* @param {Object} props Props
|
|
14
4
|
* @returns {Object}
|
|
15
|
-
*/var makeMapStateToProps=function makeMapStateToProps(_,
|
|
5
|
+
*/var makeMapStateToProps=function makeMapStateToProps(_,_ref){var id=_ref.id;var getFavorites=makeGetFavorites(function(){return id;});return function(state){return{items:getFavorites(state),useGetFavoriteIdsPipeline:getUseGetFavoriteIdsPipeline(state)};};};/**
|
|
16
6
|
* @param {Object} dispatch Dispatch
|
|
17
7
|
* @param {Object} props The component props
|
|
18
8
|
* @returns {Object}
|
|
19
|
-
*/var mapDispatchToProps=function mapDispatchToProps(dispatch,props){return{remove:function(){var _remove=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(id){var confirmed;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)
|
|
9
|
+
*/var mapDispatchToProps=function mapDispatchToProps(dispatch,props){return{remove:function(){var _remove=_asyncToGenerator(/*#__PURE__*/_regeneratorRuntime.mark(function _callee(id){var confirmed;return _regeneratorRuntime.wrap(function _callee$(_context){while(1)switch(_context.prev=_context.next){case 0:_context.next=2;return dispatch(showModal({message:'favorites.delete_list_modal.message',title:'favorites.delete_list_modal.title',params:{name:props.name}}));case 2:confirmed=_context.sent;if(confirmed){props.remove(id);}case 4:case"end":return _context.stop();}},_callee);}));function remove(_x){return _remove.apply(this,arguments);}return remove;}()};};/**
|
|
20
10
|
* Favorite List component
|
|
21
|
-
* @return {JSX}
|
|
22
|
-
*/var FavoriteList=function FavoriteList(
|
|
11
|
+
* @return {JSX.Element}
|
|
12
|
+
*/var FavoriteList=function FavoriteList(_ref2){var id=_ref2.id,name=_ref2.name,items=_ref2.items,_rename=_ref2.rename,remove=_ref2.remove,removeItem=_ref2.removeItem,addToCart=_ref2.addToCart,hasMultipleFavoritesListsSupport=_ref2.hasMultipleFavoritesListsSupport,useGetFavoriteIdsPipeline=_ref2.useGetFavoriteIdsPipeline;var _useState=useState(FAVORITES_SHOW_LIMIT),_useState2=_slicedToArray(_useState,2),offset=_useState2[0],setOffset=_useState2[1];var filteredItems=useMemo(function(){/**
|
|
13
|
+
* The getFavoriteIds pipeline doesn't return full products, but only product ids. Product data
|
|
14
|
+
* is selected inside the ListContent component via the ProductProvider. To avoid requests with
|
|
15
|
+
* huge response data, the favlist items are splitted into chunks, so that the ProductProvider
|
|
16
|
+
* only has to request fresh data for each chunk.
|
|
17
|
+
*
|
|
18
|
+
* As long as not all products from the list are shown, a "Load More" button is presented to the
|
|
19
|
+
* user, which will add an additional chunk of product ids to the ListContent component.
|
|
20
|
+
*/if(useGetFavoriteIdsPipeline){return items.slice(0,offset);}// When the getFavorites pipeline is used, no special handling is necessary. "items" can passed
|
|
21
|
+
// the the ListContent component as they are.
|
|
22
|
+
return items;},[items,offset,useGetFavoriteIdsPipeline]);var allFavoritesLoaded=useMemo(function(){if(useGetFavoriteIdsPipeline){return items.length-filteredItems.length>0;}/**
|
|
23
|
+
* In case of getFavorites pipeline is used, and all favorites are always loaded, "false" as
|
|
24
|
+
* return value might seem a bit weird, but the value is actually used to determine if the
|
|
25
|
+
* load more button is supposed to be shown (not needed if all favorites are already present).
|
|
26
|
+
*/return false;},[filteredItems.length,items.length,useGetFavoriteIdsPipeline]);var _useState3=useState(allFavoritesLoaded),_useState4=_slicedToArray(_useState3,2),showLoadMoreButton=_useState4[0],setShowLoadMoreButton=_useState4[1];var handleLoadMore=useCallback(function(){setOffset(offset+FAVORITES_SHOW_LIMIT);},[offset]);useEffect(function(){setShowLoadMoreButton(allFavoritesLoaded);},[offset,allFavoritesLoaded]);return React.createElement(ConditionalWrapper,{condition:hasMultipleFavoritesListsSupport,wrapperFalsy:function wrapperFalsy(children){return React.createElement("div",{className:styles.rootNoFavoritesLists},children);},wrapper:function wrapper(children){return React.createElement(Card,{className:styles.root},React.createElement(Accordion,{className:"",renderAdditionalHeaderContent:function renderAdditionalHeaderContent(){return React.createElement(ListAccordionHeader,{rename:function rename(newName){return _rename(id,newName);},remove:remove,id:id});},renderLabel:function renderLabel(){return React.createElement(ListAccordionLabel,{title:name});},chevronPosition:"left",startOpened:true},children));}},React.createElement(ListContent,{listId:id,items:filteredItems,removeItem:removeItem,addToCart:addToCart,onLoadMore:handleLoadMore,showLoadMoreButton:showLoadMoreButton}));};FavoriteList.defaultProps={hasMultipleFavoritesListsSupport:false,useGetFavoriteIdsPipeline:false};export default connect(makeMapStateToProps,mapDispatchToProps)(FavoriteList);
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import React from'react';import PropTypes from'prop-types';import{i18n}from'@shopgate/engage/core/helpers';import{ContextMenu,SurroundPortals}from'@shopgate/engage/components';import{FAVORITES_LIST_CONTEXT_MENU}from"../../constants";/**
|
|
2
|
+
* Favorite List Accordion header component
|
|
3
|
+
* @param {Object} props The component props
|
|
4
|
+
* @param {Function} props.rename The rename function
|
|
5
|
+
* @param {Function} props.remove The remove function
|
|
6
|
+
* @param {string} props.id The label name
|
|
7
|
+
* @return {JSX.Element}
|
|
8
|
+
*/var ListAccordionHeader=function ListAccordionHeader(_ref){var rename=_ref.rename,remove=_ref.remove,id=_ref.id;return React.createElement(SurroundPortals,{portalName:FAVORITES_LIST_CONTEXT_MENU,portalProps:{id:id}},React.createElement(ContextMenu,null,React.createElement(ContextMenu.Item,{onClick:rename},i18n.text('favorites.rename_list')),React.createElement(ContextMenu.Item,{onClick:remove,disabled:id==='DEFAULT'},i18n.text('favorites.remove_list'))));};export default ListAccordionHeader;
|