@shopgate/engage 7.32.0-beta.2 → 7.32.0-beta.20
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/account/components/Profile/Profile.provider.d.ts +1 -1
- package/account/components/Profile/ProfileAddressBook.d.ts.map +1 -1
- package/account/components/Profile/ProfileAddressBook.js +13 -22
- package/account/components/Profile/ProfileAddressCard.d.ts.map +1 -1
- package/account/components/Profile/ProfileAddressCard.js +9 -18
- package/account/components/Profile/ProfileForm.d.ts.map +1 -1
- package/account/components/Profile/ProfileForm.js +15 -42
- package/account/components/ProfileContact/ProfileContact.js +13 -21
- package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.d.ts +2 -1
- package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.d.ts.map +1 -1
- package/admin-preview/components/FrontendSettingsPreviewBridge/FrontendSettingsPreviewBridge.js +61 -5
- package/admin-preview/components/FrontendSettingsPreviewBridge/helpers.d.ts +7 -1
- package/admin-preview/components/FrontendSettingsPreviewBridge/helpers.d.ts.map +1 -1
- package/admin-preview/components/FrontendSettingsPreviewBridge/helpers.js +14 -2
- package/admin-preview/components/FrontendSettingsPreviewBridge/types.d.ts +15 -2
- package/admin-preview/components/FrontendSettingsPreviewBridge/types.d.ts.map +1 -1
- package/admin-preview/constants/index.d.ts +9 -22
- package/admin-preview/constants/index.d.ts.map +1 -1
- package/admin-preview/constants/index.js +10 -27
- package/admin-preview/{detection.d.ts → helpers/_internal/detection.d.ts} +12 -8
- package/admin-preview/helpers/_internal/detection.d.ts.map +1 -0
- package/admin-preview/helpers/_internal/detection.js +93 -0
- package/admin-preview/helpers/_internal/origins.d.ts +20 -0
- package/admin-preview/helpers/_internal/origins.d.ts.map +1 -0
- package/admin-preview/helpers/_internal/origins.js +72 -0
- package/admin-preview/helpers/index.d.ts +20 -0
- package/admin-preview/helpers/index.d.ts.map +1 -1
- package/admin-preview/helpers/index.js +26 -2
- package/admin-preview/hooks/index.d.ts +9 -7
- package/admin-preview/hooks/index.d.ts.map +1 -1
- package/admin-preview/hooks/index.js +21 -18
- package/admin-preview/initialization/_internal/initialFrontendSettings.d.ts +32 -0
- package/admin-preview/initialization/_internal/initialFrontendSettings.d.ts.map +1 -0
- package/admin-preview/initialization/_internal/initialFrontendSettings.js +43 -0
- package/admin-preview/initialization/awaitInitialFrontendSettings.d.ts +23 -0
- package/admin-preview/initialization/awaitInitialFrontendSettings.d.ts.map +1 -0
- package/admin-preview/initialization/awaitInitialFrontendSettings.js +88 -0
- package/back-in-stock/components/BackInStockButton/index.js +5 -5
- package/back-in-stock/components/Subscriptions/components/Subscription/index.js +2 -5
- package/cart/components/CartItem/CartItemProductLayout.js +2 -1
- package/cart/components/CartItem/CartItemProductLayoutWide.js +2 -2
- package/cart/components/CartItem/CartItemProductLayoutWideRemoveItem.js +7 -14
- package/cart/components/CartItem/CartItemQuantityPicker.js +3 -2
- package/cart/components/CartItems/CartItemCardReservationLabelChangeStore.js +6 -24
- package/cart/components/CartItems/CartItems.js +8 -10
- package/cart/components/CartItems/CartItemsSubstitution.js +3 -2
- package/cart/components/CartSummaryWide/CartSummaryWide.js +2 -2
- package/cart/components/CartSummaryWide/CartSummaryWideCheckoutButton.js +9 -23
- package/cart/components/PaymentBar/PaymentBarCheckoutButton.js +8 -30
- package/cart/components/PaymentBar/testUtils/mockFactories.js +4 -11
- package/category/components/CategoryImage/index.js +24 -17
- package/checkout/components/AddressBook/AddressList.js +14 -23
- package/checkout/components/Checkout/CheckoutActions.js +4 -3
- package/checkout/components/Checkout/CheckoutAddress.js +8 -0
- package/checkout/components/Checkout/CheckoutSection.js +6 -2
- package/checkout/components/CheckoutConfirmation/CheckoutConfirmation.js +6 -7
- package/checkout/components/ResponsiveBackButton/ResponsiveBackButton.js +7 -17
- package/components/Badge/Badge.d.ts +30 -0
- package/components/Badge/Badge.d.ts.map +1 -0
- package/components/Badge/Badge.js +49 -0
- package/components/Badge/index.d.ts +3 -0
- package/components/Badge/index.d.ts.map +1 -0
- package/components/Badge/index.js +1 -0
- package/components/Card/Card.d.ts +27 -0
- package/components/Card/Card.d.ts.map +1 -0
- package/components/Card/Card.js +57 -0
- package/components/Card/index.d.ts +4 -0
- package/components/Card/index.d.ts.map +1 -0
- package/components/Card/index.js +2 -0
- package/components/Card/useCardAppearance.d.ts +11 -0
- package/components/Card/useCardAppearance.d.ts.map +1 -0
- package/components/Card/useCardAppearance.js +22 -0
- package/components/ChipLayout/index.js +2 -4
- package/components/NavigationHandler/connector.js +1 -1
- package/components/NavigationHandler/index.d.ts +2 -2
- package/components/Paper/Paper.d.ts +48 -0
- package/components/Paper/Paper.d.ts.map +1 -0
- package/components/Paper/Paper.js +64 -0
- package/components/Paper/index.d.ts +3 -0
- package/components/Paper/index.d.ts.map +1 -0
- package/components/Paper/index.js +1 -0
- package/components/RadioCard/RadioCard.d.ts.map +1 -1
- package/components/RadioCard/RadioCard.js +2 -1
- package/components/SheetList/components/Item/index.js +8 -8
- package/components/Tabs/components/Tab.d.ts.map +1 -1
- package/components/Tabs/components/Tab.js +14 -16
- package/components/Typography/Typography.d.ts +1 -1
- package/components/Typography/Typography.d.ts.map +1 -1
- package/components/Typography/Typography.js +2 -0
- package/components/View/components/Content/index.d.ts.map +1 -1
- package/components/View/components/Content/index.js +4 -1
- package/components/constants.d.ts +6 -0
- package/components/constants.d.ts.map +1 -0
- package/components/index.d.ts +6 -1
- package/components/index.d.ts.map +1 -1
- package/components/index.js +6 -2
- package/components/v2/Button/Button.d.ts +24 -13
- package/components/v2/Button/Button.d.ts.map +1 -1
- package/components/v2/Button/Button.js +139 -41
- package/components/v2/ButtonBase/ButtonBase.d.ts +50 -10
- package/components/v2/ButtonBase/ButtonBase.d.ts.map +1 -1
- package/components/v2/ButtonBase/ButtonBase.js +192 -17
- package/components/v2/ButtonBase/hooks.d.ts +0 -1
- package/components/v2/ButtonBase/hooks.d.ts.map +1 -1
- package/components/v2/ButtonBase/hooks.js +36 -12
- package/components/v2/ButtonGroup/ButtonGroup.d.ts +11 -5
- package/components/v2/ButtonGroup/ButtonGroup.d.ts.map +1 -1
- package/components/v2/ButtonGroup/ButtonGroup.js +49 -26
- package/components/v2/CircularProgress/CircularProgress.d.ts.map +1 -1
- package/components/v2/CircularProgress/CircularProgress.js +10 -5
- package/components/v2/IconButton/IconButton.d.ts +72 -0
- package/components/v2/IconButton/IconButton.d.ts.map +1 -0
- package/components/v2/IconButton/IconButton.js +169 -0
- package/components/v2/IconButton/index.d.ts +3 -0
- package/components/v2/IconButton/index.d.ts.map +1 -0
- package/components/v2/IconButton/index.js +1 -0
- package/components/v2/index.d.ts +1 -0
- package/components/v2/index.d.ts.map +1 -1
- package/components/v2/index.js +1 -0
- package/core/helpers/getFullImageSource.d.ts +5 -1
- package/core/helpers/getFullImageSource.d.ts.map +1 -1
- package/core/helpers/getFullImageSource.js +30 -14
- package/core/helpers/i18n.d.ts +4 -0
- package/core/helpers/i18n.d.ts.map +1 -1
- package/core/helpers/i18n.js +3 -0
- package/core/hooks/events/appEvents.d.ts +31 -46
- package/core/hooks/events/appEvents.d.ts.map +1 -0
- package/core/hooks/events/appEvents.js +26 -29
- package/core/hooks/events/index.d.ts +4 -4
- package/core/hooks/events/index.d.ts.map +1 -1
- package/core/hooks/events/useLongPress.d.ts +55 -58
- package/core/hooks/events/useLongPress.d.ts.map +1 -0
- package/core/hooks/events/useLongPress.js +23 -16
- package/core/hooks/events/usePressHandler.d.ts +32 -21
- package/core/hooks/events/usePressHandler.d.ts.map +1 -1
- package/core/hooks/events/usePressHandler.js +12 -10
- package/core/hooks/events/useScrollDirectionChange.d.ts +72 -61
- package/core/hooks/events/useScrollDirectionChange.d.ts.map +1 -0
- package/core/hooks/events/useScrollDirectionChange.js +36 -43
- package/core/hooks/html/useLoadImage.d.ts +3 -3
- package/core/hooks/html/useLoadImage.d.ts.map +1 -1
- package/core/hooks/html/useLoadImage.js +2 -2
- package/core/hooks/useLocalStorage.d.ts +8 -0
- package/core/hooks/useLocalStorage.d.ts.map +1 -1
- package/core/hooks/useLocalStorage.js +22 -15
- package/core/hooks/useNavigation.d.ts +10 -2
- package/core/hooks/useNavigation.d.ts.map +1 -1
- package/core/hooks/useNavigation.js +1 -2
- package/core/initialization/fetchSettings.d.ts +12 -0
- package/core/initialization/fetchSettings.d.ts.map +1 -0
- package/core/initialization/fetchSettings.js +134 -0
- package/core/initialization/index.d.ts +33 -2
- package/core/initialization/index.d.ts.map +1 -1
- package/core/initialization/index.js +44 -103
- package/core/router/conductor.d.ts +9 -0
- package/core/router/helpers.d.ts +28 -15
- package/core/router/helpers.d.ts.map +1 -1
- package/core/router/helpers.js +8 -8
- package/development/action-creators/index.d.ts +3 -0
- package/development/action-creators/index.d.ts.map +1 -0
- package/development/action-creators/settings.d.ts +45 -0
- package/development/action-creators/settings.d.ts.map +1 -0
- package/development/action-creators/settings.js +21 -10
- package/development/action-creators/storage.d.ts +17 -0
- package/development/action-creators/storage.d.ts.map +1 -0
- package/development/action-creators/storage.js +7 -4
- package/development/components/ClientInformation/ClientInformation.d.ts +6 -0
- package/development/components/ClientInformation/ClientInformation.d.ts.map +1 -0
- package/development/components/ClientInformation/ClientInformation.js +7 -4
- package/development/components/ClientInformation/actions.d.ts +6 -0
- package/development/components/ClientInformation/actions.d.ts.map +1 -0
- package/development/components/ClientInformation/actions.js +1 -1
- package/development/components/ClientInformation/index.d.ts +2 -0
- package/development/components/ClientInformation/index.d.ts.map +1 -0
- package/development/components/DevelopmentSettings/DevelopmentSettings.d.ts +16 -0
- package/development/components/DevelopmentSettings/DevelopmentSettings.d.ts.map +1 -0
- package/development/components/DevelopmentSettings/DevelopmentSettings.js +43 -30
- package/development/components/DevelopmentSettings/index.d.ts +2 -0
- package/development/components/DevelopmentSettings/index.d.ts.map +1 -0
- package/development/components/DevelopmentTools/DevelopmentTools.d.ts +10 -0
- package/development/components/DevelopmentTools/DevelopmentTools.d.ts.map +1 -0
- package/development/components/DevelopmentTools/DevelopmentTools.js +8 -8
- package/development/components/DevelopmentTools/Shortcuts.d.ts +6 -0
- package/development/components/DevelopmentTools/Shortcuts.d.ts.map +1 -0
- package/development/components/DevelopmentTools/Shortcuts.js +0 -1
- package/development/components/DevelopmentTools/hooks.d.ts +8 -0
- package/development/components/DevelopmentTools/hooks.d.ts.map +1 -0
- package/development/components/DevelopmentTools/hooks.js +2 -3
- package/development/components/DevelopmentTools/index.d.ts +2 -0
- package/development/components/DevelopmentTools/index.d.ts.map +1 -0
- package/development/components/SimulatedInsets/SimulatedInsetBottom.d.ts +7 -0
- package/development/components/SimulatedInsets/SimulatedInsetBottom.d.ts.map +1 -0
- package/development/components/SimulatedInsets/SimulatedInsetBottom.js +1 -6
- package/development/components/SimulatedInsets/SimulatedInsetTop.d.ts +7 -0
- package/development/components/SimulatedInsets/SimulatedInsetTop.d.ts.map +1 -0
- package/development/components/SimulatedInsets/SimulatedInsetTop.js +2 -7
- package/development/components/SimulatedInsets/SimulatedInsets.d.ts +13 -0
- package/development/components/SimulatedInsets/SimulatedInsets.d.ts.map +1 -0
- package/development/components/SimulatedInsets/SimulatedInsets.js +2 -7
- package/development/components/SimulatedInsets/index.d.ts +2 -0
- package/development/components/SimulatedInsets/index.d.ts.map +1 -0
- package/development/components/SimulatedInsets/types.d.ts +15 -0
- package/development/components/SimulatedInsets/types.d.ts.map +1 -0
- package/development/components/SimulatedInsets/types.js +1 -0
- package/development/components/index.d.ts +3 -0
- package/development/components/index.d.ts.map +1 -0
- package/development/constants/actionTypes.d.ts +6 -0
- package/development/constants/actionTypes.d.ts.map +1 -0
- package/development/constants/actionTypes.js +2 -1
- package/development/constants/index.d.ts +2 -0
- package/development/constants/index.d.ts.map +1 -0
- package/development/reducers/index.d.ts +24 -0
- package/development/reducers/index.d.ts.map +1 -0
- package/development/reducers/settings.d.ts +17 -0
- package/development/reducers/settings.d.ts.map +1 -0
- package/development/reducers/settings.js +48 -35
- package/development/reducers/storage.d.ts +17 -0
- package/development/reducers/storage.d.ts.map +1 -0
- package/development/reducers/storage.js +24 -24
- package/development/selectors/index.d.ts +3 -0
- package/development/selectors/index.d.ts.map +1 -0
- package/development/selectors/settings.d.ts +52 -0
- package/development/selectors/settings.d.ts.map +1 -0
- package/development/selectors/settings.js +21 -11
- package/development/selectors/storage.d.ts +10 -0
- package/development/selectors/storage.d.ts.map +1 -0
- package/development/selectors/storage.js +6 -18
- package/development/streams/index.d.ts +2 -0
- package/development/streams/index.d.ts.map +1 -0
- package/development/streams/insets.d.ts +8 -0
- package/development/streams/insets.d.ts.map +1 -0
- package/development/streams/insets.js +1 -3
- package/development/subscriptions/index.d.ts +15 -0
- package/development/subscriptions/index.d.ts.map +1 -0
- package/development/subscriptions/index.js +6 -2
- package/development/types/development.d.ts +68 -0
- package/development/types/development.d.ts.map +1 -0
- package/development/types/development.js +1 -0
- package/development/types/index.d.ts +2 -0
- package/development/types/index.d.ts.map +1 -0
- package/development/types/index.js +1 -0
- package/favorites/components/FavoriteButtonWide/FavoriteButtonWide.js +7 -17
- package/favorites/components/Item/Item.d.ts +1 -1
- package/favorites/components/Item/Item.d.ts.map +1 -1
- package/favorites/components/Item/Item.js +2 -5
- package/favorites/components/List/List.d.ts +1 -1
- package/favorites/components/List/List.d.ts.map +1 -1
- package/favorites/components/List/List.js +0 -1
- package/favorites/components/List/ListContent.js +4 -5
- package/favorites/components/Lists/Lists.js +4 -5
- package/filter/components/FilterItem/index.js +12 -2
- package/filter/components/FilterPageContent/components/ApplyButton/index.d.ts +21 -0
- package/filter/components/FilterPageContent/components/ApplyButton/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/components/ApplyButton/index.js +27 -56
- package/filter/components/FilterPageContent/components/FilterButtonBar/index.d.ts +8 -0
- package/filter/components/FilterPageContent/components/FilterButtonBar/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/components/FilterButtonBar/index.js +63 -0
- package/filter/components/FilterPageContent/components/ResetButton/index.d.ts +17 -0
- package/filter/components/FilterPageContent/components/ResetButton/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/components/ResetButton/index.js +26 -46
- package/filter/components/FilterPageContent/components/Selector/components/Selected/index.d.ts +19 -0
- package/filter/components/FilterPageContent/components/Selector/components/Selected/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/Selected/index.js +25 -46
- package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.d.ts +14 -0
- package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/Toggle/index.js +13 -46
- package/filter/components/FilterPageContent/components/Selector/components/ValueCheckbox/index.d.ts +25 -0
- package/filter/components/FilterPageContent/components/Selector/components/ValueCheckbox/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/components/Selector/components/ValueCheckbox/index.js +77 -0
- package/filter/components/FilterPageContent/components/Selector/index.d.ts +43 -0
- package/filter/components/FilterPageContent/components/Selector/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/components/Selector/index.js +52 -40
- package/filter/components/FilterPageContent/index.d.ts +16 -0
- package/filter/components/FilterPageContent/index.d.ts.map +1 -0
- package/filter/components/FilterPageContent/index.js +51 -57
- package/filter/components/PriceSlider/components/Label/index.js +86 -94
- package/filter/components/PriceSlider/index.js +43 -30
- package/filter/helpers/buildFilterParamsForFetchFiltersRequest.d.ts +8 -0
- package/filter/helpers/buildFilterParamsForFetchFiltersRequest.d.ts.map +1 -0
- package/filter/helpers/buildInitialFilters.d.ts +7 -0
- package/filter/helpers/buildInitialFilters.d.ts.map +1 -0
- package/filter/helpers/buildUpdatedFilters.d.ts +7 -0
- package/filter/helpers/buildUpdatedFilters.d.ts.map +1 -0
- package/filter/helpers/index.d.ts +5 -0
- package/filter/helpers/index.d.ts.map +1 -0
- package/filter/helpers/translateFilterLabel.d.ts +8 -0
- package/filter/helpers/translateFilterLabel.d.ts.map +1 -0
- package/filter/providers/FilterPageProvider.context.d.ts +157 -0
- package/filter/providers/FilterPageProvider.context.d.ts.map +1 -0
- package/filter/providers/FilterPageProvider.d.ts +24 -0
- package/filter/providers/FilterPageProvider.d.ts.map +1 -0
- package/filter/providers/FilterPageProvider.js +77 -132
- package/locations/components/ChangeLocationButton/ChangeLocationButton.js +10 -14
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotDialog.js +4 -8
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcher.js +1 -1
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherBar.js +8 -13
- package/locations/components/FulfillmentSlotSwitcher/FulfillmentSlotSwitcherDefault.js +10 -10
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherBar.js +12 -16
- package/locations/components/GlobalLocationSwitcher/GlobalLocationSwitcherDefault.js +9 -10
- package/locations/components/ReserveForm/ReserveForm.js +6 -7
- package/locations/components/StoreDetails/components/GetDirectionsButton.js +2 -4
- package/locations/components/StoreDetails/components/StoreDetails.js +5 -10
- package/locations/components/StoreDetails/components/StoresNearbyListItem.js +13 -21
- package/locations/components/StoreFinder/StoreFinderSelectLocationButton.js +5 -11
- package/locations/components/StoreFinder/StoreFinderStoreInfoButton.js +5 -11
- package/locations/components/StoreList/StoreListProduct.js +2 -3
- package/locations/components/StoreList/StoreListSearch.js +1 -0
- package/locations/components/StoreList/StoreSelectLocationButton.js +5 -11
- package/login/components/ForgotPassword/ForgotPassword.js +11 -23
- package/mocks/date.js +31 -0
- package/mocks/index.js +3 -0
- package/mocks/pipelineRequest.js +1 -0
- package/mocks/subscriptions.js +1 -0
- package/orders/components/OrderDetails/OrderDetailsAuthenticate.js +5 -7
- package/orders/components/OrderHistory/OrderHistoryList.d.ts.map +1 -1
- package/orders/components/OrderHistory/OrderHistoryList.js +8 -9
- package/orders/components/OrderHistory/OrderHistoryTable.d.ts.map +1 -1
- package/orders/components/OrderHistory/OrderHistoryTable.js +4 -0
- package/package.json +9 -9
- package/page/components/NotFound.d.ts +7 -0
- package/page/components/NotFound.d.ts.map +1 -0
- package/page/components/NotFound.js +8 -8
- package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.d.ts +52 -0
- package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.d.ts.map +1 -0
- package/page/components/ResponsiveWidgetImage/ResponsiveWidgetImage.js +4 -4
- package/page/components/ResponsiveWidgetImage/index.d.ts +2 -0
- package/page/components/ResponsiveWidgetImage/index.d.ts.map +1 -0
- package/page/components/WidgetRichText/WidgetRichText.d.ts +25 -0
- package/page/components/WidgetRichText/WidgetRichText.d.ts.map +1 -0
- package/page/components/WidgetRichText/index.d.ts +2 -0
- package/page/components/WidgetRichText/index.d.ts.map +1 -0
- package/page/components/WidgetVideo/WidgetVideo.d.ts +43 -0
- package/page/components/WidgetVideo/WidgetVideo.d.ts.map +1 -0
- package/page/components/WidgetVideo/WidgetVideo.js +33 -39
- package/page/components/WidgetVideo/index.d.ts +2 -0
- package/page/components/WidgetVideo/index.d.ts.map +1 -0
- package/page/components/Widgets/Overlay.d.ts +17 -0
- package/page/components/Widgets/Overlay.d.ts.map +1 -0
- package/page/components/Widgets/Overlay.js +24 -38
- package/page/components/Widgets/Tooltip.d.ts +20 -0
- package/page/components/Widgets/Tooltip.d.ts.map +1 -0
- package/page/components/Widgets/Tooltip.js +6 -10
- package/page/components/Widgets/Widget.d.ts +32 -0
- package/page/components/Widgets/Widget.d.ts.map +1 -0
- package/page/components/Widgets/Widget.js +14 -28
- package/page/components/Widgets/WidgetContext.d.ts +32 -38
- package/page/components/Widgets/WidgetContext.d.ts.map +1 -0
- package/page/components/Widgets/WidgetContext.js +2 -8
- package/page/components/Widgets/WidgetProvider.d.ts +29 -0
- package/page/components/Widgets/WidgetProvider.d.ts.map +1 -0
- package/page/components/Widgets/WidgetProvider.js +8 -15
- package/page/components/Widgets/Widgets.d.ts +16 -0
- package/page/components/Widgets/Widgets.d.ts.map +1 -0
- package/page/components/Widgets/Widgets.js +5 -12
- package/page/components/Widgets/WidgetsPreviewContext.d.ts +21 -0
- package/page/components/Widgets/WidgetsPreviewContext.d.ts.map +1 -0
- package/page/components/Widgets/WidgetsPreviewContext.js +5 -7
- package/page/components/Widgets/WidgetsPreviewProvider.d.ts +18 -0
- package/page/components/Widgets/WidgetsPreviewProvider.d.ts.map +1 -0
- package/page/components/Widgets/WidgetsPreviewProvider.js +5 -6
- package/page/components/Widgets/constants.d.ts +18 -0
- package/page/components/Widgets/constants.d.ts.map +1 -0
- package/page/components/Widgets/constants.js +24 -2
- package/page/components/Widgets/events.d.ts +38 -0
- package/page/components/Widgets/events.d.ts.map +1 -0
- package/page/components/Widgets/events.js +8 -12
- package/page/components/Widgets/helpers.d.ts +69 -0
- package/page/components/Widgets/helpers.d.ts.map +1 -0
- package/page/components/Widgets/helpers.js +58 -13
- package/page/components/Widgets/hooks.d.ts +13 -0
- package/page/components/Widgets/hooks.d.ts.map +1 -0
- package/page/components/Widgets/hooks.js +18 -12
- package/page/components/Widgets/index.d.ts +3 -0
- package/page/components/Widgets/index.d.ts.map +1 -0
- package/page/components/Widgets/types.d.ts +138 -114
- package/page/components/Widgets/types.d.ts.map +1 -0
- package/page/components/Widgets/types.js +1 -0
- package/page/components/index.d.ts +5 -0
- package/page/components/index.d.ts.map +1 -0
- package/page/constants/actionTypes.d.ts +4 -0
- package/page/constants/actionTypes.d.ts.map +1 -0
- package/page/constants/index.d.ts +25 -0
- package/page/constants/index.d.ts.map +1 -0
- package/page/constants/index.js +5 -3
- package/page/helpers/index.d.ts +70 -62
- package/page/helpers/index.d.ts.map +1 -0
- package/page/helpers/index.js +31 -29
- package/page/hooks/index.d.ts +54 -53
- package/page/hooks/index.d.ts.map +1 -0
- package/page/hooks/index.js +20 -15
- package/page/selectors/index.d.ts +32 -0
- package/page/selectors/index.d.ts.map +1 -0
- package/page/widget.config.schema.json +54 -0
- package/page/widgets/Button/Button.js +2 -3
- package/page/widgets/CategoryList/CategoryList.js +2 -1
- package/page/widgets/HeroBanner/config.json +6 -0
- package/page/widgets/Image/config.json +6 -0
- package/page/widgets/ImageRow/config.json +6 -0
- package/page/widgets/ImageSlider/config.json +6 -0
- package/page/widgets/ImageSlider/hooks.js +4 -2
- package/page/widgets/NestedCategoryFilter/NestedCategoryFilter.js +8 -8
- package/page/widgets/ProductList/ProductList.js +18 -14
- package/page/widgets/ProductSlider/ProductSlider.js +1 -15
- package/page/widgets/README.md +92 -0
- package/page/widgets/Video/Video.d.ts +6 -0
- package/page/widgets/Video/Video.d.ts.map +1 -0
- package/page/widgets/Video/Video.js +0 -2
- package/page/widgets/Video/config.json +6 -0
- package/page/widgets/Video/hooks.d.ts +53 -0
- package/page/widgets/Video/hooks.d.ts.map +1 -0
- package/page/widgets/Video/hooks.js +4 -12
- package/page/widgets/Video/index.d.ts +2 -0
- package/page/widgets/Video/index.d.ts.map +1 -0
- package/product/components/Description/index.js +0 -2
- package/product/components/FilterBar/components/Content/components/FilterButton/index.js +38 -46
- package/product/components/FilterBar/components/Content/components/FilterChips/components/FilterChip/index.d.ts +38 -0
- package/product/components/FilterBar/components/Content/components/FilterChips/components/FilterChip/index.d.ts.map +1 -0
- package/product/components/FilterBar/components/Content/components/FilterChips/components/FilterChip/index.js +88 -0
- package/product/components/FilterBar/components/Content/components/FilterChips/index.js +54 -35
- package/product/components/FilterBar/components/Content/components/Sort/index.js +1 -1
- package/product/components/FilterBar/components/Content/index.js +7 -3
- package/product/components/FilterBar/index.js +11 -22
- package/product/components/Media/FeaturedMedia.js +7 -1
- package/product/components/Media/MediaImage.js +24 -23
- package/product/components/Media/MediaPlaceholder.js +4 -7
- package/product/components/MediaSlider/components/MediaImage/index.js +6 -2
- package/product/components/MediaSlider/constants.js +1 -12
- package/product/components/OrderQuantityHint/index.js +16 -1
- package/product/components/ProductCard/index.js +36 -23
- package/product/components/ProductFilters/index.js +2 -6
- package/product/components/ProductGrid/components/Item/components/ItemDetails/index.js +12 -4
- package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/index.js +0 -1
- package/product/components/ProductGrid/components/Item/components/ItemImage/index.js +3 -6
- package/product/components/ProductGrid/components/Item/components/ItemName/index.js +6 -1
- package/product/components/ProductGrid/components/Item/index.js +10 -2
- package/product/components/ProductGrid/components/Layout/index.js +19 -4
- package/product/components/ProductGrid/constants.d.ts +2 -0
- package/product/components/ProductGrid/constants.d.ts.map +1 -0
- package/product/components/ProductGrid/constants.js +1 -0
- package/product/components/ProductGrid/hooks.d.ts +11 -0
- package/product/components/ProductGrid/hooks.d.ts.map +1 -0
- package/product/components/ProductGrid/hooks.js +48 -0
- package/product/components/ProductGrid/index.js +3 -6
- package/product/components/ProductGridPrice/index.js +0 -6
- package/product/components/ProductImage/ProductImage.d.ts +42 -0
- package/product/components/ProductImage/ProductImage.d.ts.map +1 -0
- package/product/components/ProductImage/ProductImage.js +158 -0
- package/product/components/ProductImage/ProductImagePlaceholder.d.ts +23 -0
- package/product/components/ProductImage/ProductImagePlaceholder.d.ts.map +1 -0
- package/product/components/ProductImage/ProductImagePlaceholder.js +12 -17
- package/product/components/ProductImage/constants.d.ts +7 -0
- package/product/components/ProductImage/constants.d.ts.map +1 -0
- package/product/components/ProductImage/constants.js +6 -0
- package/product/components/ProductImage/hooks.d.ts +8 -0
- package/product/components/ProductImage/hooks.d.ts.map +1 -0
- package/product/components/ProductImage/hooks.js +32 -0
- package/product/components/ProductImage/index.d.ts +3 -0
- package/product/components/ProductImage/index.d.ts.map +1 -0
- package/product/components/ProductImage/index.js +1 -201
- package/product/components/ProductList/components/Item/index.js +5 -3
- package/product/components/ProductList/components/Layout/index.js +8 -20
- package/product/components/ProductRatingStars/ProductRatingStars.d.ts.map +1 -1
- package/product/components/ProductRatingStars/ProductRatingStars.js +4 -17
- package/product/components/ProductSlider/constants.d.ts +3 -0
- package/product/components/ProductSlider/constants.d.ts.map +1 -0
- package/product/components/ProductSlider/constants.js +2 -0
- package/product/components/ProductSlider/hooks.d.ts +7 -0
- package/product/components/ProductSlider/hooks.d.ts.map +1 -0
- package/product/components/ProductSlider/hooks.js +40 -0
- package/product/components/ProductSlider/index.js +8 -8
- package/product/components/Rating/index.js +12 -21
- package/product/components/RelationsSlider/RelationsSliderContent.js +3 -2
- package/product/components/RelationsSlider/constants.d.ts +3 -0
- package/product/components/RelationsSlider/constants.d.ts.map +1 -0
- package/product/components/RelationsSlider/constants.js +2 -1
- package/product/components/RelationsSlider/hooks.d.ts +6 -0
- package/product/components/RelationsSlider/hooks.d.ts.map +1 -0
- package/product/components/RelationsSlider/hooks.js +34 -0
- package/product/components/UnitQuantityPicker/UnitQuantityPicker.d.ts.map +1 -1
- package/product/components/UnitQuantityPicker/UnitQuantityPicker.js +15 -33
- package/product/helpers/index.js +29 -11
- package/product/hooks/index.js +3 -1
- package/product/hooks/useLoadProductImage.js +4 -2
- package/product/hooks/useShowEmptyRatingStars.d.ts +7 -0
- package/product/hooks/useShowEmptyRatingStars.d.ts.map +1 -0
- package/product/hooks/useShowEmptyRatingStars.js +21 -0
- package/product/index.js +0 -1
- package/product/selectors/mocks/productProperties.mock.js +49 -0
- package/push-opt-in/components/PushOptInModal/index.js +4 -4
- package/registration/components/Registration/RegistrationFormActions.js +4 -4
- package/reviews/components/Reviews/components/AllReviewsLink/index.js +6 -6
- package/reviews/components/Reviews/components/Header/components/WriteReviewLink/index.js +4 -3
- package/settings/action-creators/appSettings.d.ts +3 -3
- package/settings/action-creators/appSettings.d.ts.map +1 -1
- package/settings/constants/appSettings.d.ts +3 -0
- package/settings/constants/appSettings.d.ts.map +1 -1
- package/settings/constants/appSettings.js +6 -1
- package/settings/constants/imageSettings.d.ts +52 -0
- package/settings/constants/imageSettings.d.ts.map +1 -0
- package/settings/constants/imageSettings.js +69 -0
- package/settings/helpers/index.d.ts +3 -0
- package/settings/helpers/index.d.ts.map +1 -0
- package/settings/helpers/index.js +1 -0
- package/settings/helpers/resolveImageSettings.d.ts +70 -0
- package/settings/helpers/resolveImageSettings.d.ts.map +1 -0
- package/settings/helpers/resolveImageSettings.js +171 -0
- package/settings/helpers/toImageQuality.d.ts +7 -0
- package/settings/helpers/toImageQuality.d.ts.map +1 -0
- package/settings/helpers/toImageQuality.js +44 -0
- package/settings/helpers/toThumborColor.d.ts +15 -0
- package/settings/helpers/toThumborColor.d.ts.map +1 -0
- package/settings/helpers/toThumborColor.js +51 -0
- package/settings/hooks/index.d.ts +2 -0
- package/settings/hooks/index.d.ts.map +1 -0
- package/settings/hooks/index.js +1 -0
- package/settings/hooks/useImageSettings.d.ts +28 -0
- package/settings/hooks/useImageSettings.d.ts.map +1 -0
- package/settings/hooks/useImageSettings.js +39 -0
- package/settings/reducers/appSettings.d.ts.map +1 -1
- package/settings/reducers/appSettings.js +123 -8
- package/settings/reducers/index.d.ts +3 -3
- package/settings/selectors/appSettings.d.ts +122 -1
- package/settings/selectors/appSettings.d.ts.map +1 -1
- package/settings/selectors/appSettings.js +80 -1
- package/settings/types/appSettings.d.ts +279 -0
- package/settings/types/appSettings.d.ts.map +1 -1
- package/settings/types/appSettings.js +133 -1
- package/styles/helpers/index.d.ts +2 -0
- package/styles/helpers/index.js +2 -0
- package/styles/helpers/loadFontCss.d.ts +22 -0
- package/styles/helpers/loadFontCss.d.ts.map +1 -0
- package/styles/helpers/loadFontCss.js +138 -0
- package/styles/helpers/loadThemeCss.d.ts +14 -0
- package/styles/helpers/loadThemeCss.d.ts.map +1 -0
- package/styles/helpers/loadThemeCss.js +123 -0
- package/styles/index.d.ts +1 -1
- package/styles/index.d.ts.map +1 -1
- package/styles/reset/root.js +23 -4
- package/styles/reset/typographyCustomProps.d.ts +12 -0
- package/styles/reset/typographyCustomProps.d.ts.map +1 -0
- package/styles/reset/typographyCustomProps.js +11 -0
- package/styles/theme/createDefaultThemeOptions/index.d.ts +11 -1
- package/styles/theme/createDefaultThemeOptions/index.d.ts.map +1 -1
- package/styles/theme/createDefaultThemeOptions/index.js +129 -10
- package/styles/theme/createTheme/createComponents.types.d.ts +118 -4
- package/styles/theme/createTheme/createComponents.types.d.ts.map +1 -1
- package/styles/theme/createTheme/createComponents.types.js +122 -8
- package/styles/theme/createTheme/createCssVarsForColorSchemeThemes.d.ts.map +1 -1
- package/styles/theme/createTheme/createCssVarsForColorSchemeThemes.js +13 -3
- package/styles/theme/createTheme/createPalette.types.d.ts +5 -0
- package/styles/theme/createTheme/createPalette.types.d.ts.map +1 -1
- package/styles/theme/createTheme/createPalette.types.js +7 -2
- package/styles/theme/createTheme/createShape.d.ts +3 -0
- package/styles/theme/createTheme/createShape.d.ts.map +1 -1
- package/styles/theme/createTheme/createThemeFromColorScheme.d.ts +3 -1
- package/styles/theme/createTheme/createThemeFromColorScheme.d.ts.map +1 -1
- package/styles/theme/createTheme/createThemeFromColorScheme.js +6 -3
- package/styles/theme/createTheme/createTypography.d.ts +4 -2
- package/styles/theme/createTheme/createTypography.js +60 -18
- package/styles/theme/createTheme/helpers/cssVarsParser.d.ts.map +1 -1
- package/styles/theme/createTheme/helpers/cssVarsParser.js +10 -3
- package/styles/theme/createTheme/index.d.ts +2 -1
- package/styles/theme/createTheme/index.d.ts.map +1 -1
- package/styles/theme/createTheme/index.js +3 -1
- package/styles/theme/createTheme/shadows.d.ts +11 -1
- package/styles/theme/createTheme/shadows.d.ts.map +1 -1
- package/styles/theme/createTheme/shadows.js +41 -7
- package/styles/theme/createTheme/types.d.ts +16 -5
- package/styles/theme/createTheme/types.d.ts.map +1 -1
- package/styles/theme/createTheme/types.js +8 -3
- package/styles/theme/hooks/useColorScheme.d.ts +4 -3
- package/styles/theme/hooks/useColorScheme.d.ts.map +1 -1
- package/styles/theme/hooks/useColorScheme.js +4 -3
- package/styles/theme/hooks/useMediaQuery.d.ts +7 -0
- package/styles/theme/hooks/useMediaQuery.d.ts.map +1 -1
- package/styles/theme/hooks/useMediaQuery.js +5 -5
- package/styles/theme/hooks/useTheme.js +1 -1
- package/styles/theme/index.d.ts +4 -1
- package/styles/theme/index.d.ts.map +1 -1
- package/styles/theme/providers/ColorSchemeContext.d.ts +40 -0
- package/styles/theme/providers/ColorSchemeContext.d.ts.map +1 -0
- package/styles/theme/providers/ColorSchemeContext.js +14 -0
- package/styles/theme/providers/ThemeContext.d.ts +3 -0
- package/styles/theme/providers/ThemeContext.d.ts.map +1 -0
- package/styles/theme/providers/ThemeContext.js +2 -0
- package/styles/theme/providers/ThemeProvider.d.ts +3 -13
- package/styles/theme/providers/ThemeProvider.d.ts.map +1 -1
- package/styles/theme/providers/ThemeProvider.js +86 -13
- package/styles/theme/utils/color.d.ts +12 -12
- package/styles/theme/utils/color.d.ts.map +1 -1
- package/tracking/components/CookieConsentModal/index.js +3 -4
- package/tracking/components/PrivacySettings/index.js +3 -3
- package/admin-preview/detection.d.ts.map +0 -1
- package/admin-preview/detection.js +0 -166
- package/cart/components/PaymentBar/PaymentBarReserveButton.connector.js +0 -6
- package/cart/components/PaymentBar/PaymentBarReserveButton.js +0 -71
- package/components/ChipLayout/spec.js +0 -41
- package/components/Logo/spec.js +0 -12
- package/components/NavigationHandler/spec.js +0 -84
- package/components/Picker/spec.js +0 -94
- package/components/PickerUtilize/spec.js +0 -35
- package/components/RangeSlider/spec.js +0 -190
- package/components/SheetList/components/Item/spec.js +0 -101
- package/components/SheetList/spec.js +0 -43
- package/components/TimeBoundary/spec.js +0 -83
- package/filter/components/FilterItem/spec.js +0 -14
- package/filter/components/FilterPageContent/components/ApplyButton/spec.js +0 -46
- package/filter/components/FilterPageContent/components/ResetButton/spec.js +0 -29
- package/filter/components/FilterPageContent/components/Selector/components/Selected/spec.js +0 -26
- package/filter/components/FilterPageContent/components/Selector/components/Toggle/spec.js +0 -34
- package/filter/components/FilterPageContent/components/Selector/components/ValueButton/index.js +0 -69
- package/filter/components/FilterPageContent/components/Selector/components/ValueButton/spec.js +0 -32
- package/filter/components/FilterPageContent/components/Selector/spec.js +0 -33
- package/filter/components/PriceSlider/components/Label/spec.js +0 -26
- package/filter/components/PriceSlider/spec.js +0 -30
- package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.connector.js +0 -16
- package/locations/components/StoreFinder/StoreFinderGetDirectionsButton.js +0 -52
- package/product/collections/index.js +0 -1
- package/product/components/EffectivityDates/constants.d.ts +0 -3
- package/product/components/EffectivityDates/constants.d.ts.map +0 -1
- package/product/components/EffectivityDates/helpers.d.ts +0 -6
- package/product/components/EffectivityDates/helpers.d.ts.map +0 -1
- package/product/components/FilterBar/components/Content/components/FilterChips/connector.js +0 -22
- package/product/components/FilterBar/components/Content/spec.js +0 -136
- package/product/components/Header/Shipping/spec.js +0 -36
- package/product/components/Header/Tiers/components/Tier/spec.js +0 -48
- package/product/components/Header/Tiers/spec.js +0 -64
- package/product/components/Media/helpers.d.ts +0 -2
- package/product/components/Media/helpers.d.ts.map +0 -1
- package/product/components/Options/components/Content/spec.js +0 -73
- package/product/components/Options/components/TextOption/components/OptionInfo/spec.js +0 -72
- package/product/components/ProductDiscountBadge/spec.js +0 -58
- package/product/components/ProductGrid/components/Item/components/ItemDetails/spec.js +0 -73
- package/product/components/ProductGrid/components/Item/components/ItemFavoritesButton/spec.js +0 -33
- package/product/components/ProductGrid/components/Item/components/ItemImage/spec.js +0 -16
- package/product/components/ProductGrid/components/Item/components/ItemName/spec.js +0 -21
- package/product/components/ProductGrid/components/Item/components/ItemPrice/spec.js +0 -37
- package/product/components/ProductGrid/spec.js +0 -52
- package/product/components/ProductImage/connector.js +0 -12
- package/product/components/ProductImage/spec.js +0 -87
- package/product/components/ProductSlider/spec.js +0 -37
- package/product/components/Rating/connector.js +0 -26
- package/product/components/Rating/spec.js +0 -58
- package/product/helpers/index.d.ts +0 -13
- package/product/helpers/index.d.ts.map +0 -1
- package/product/helpers/redirects.d.ts +0 -2
- package/product/helpers/redirects.d.ts.map +0 -1
- package/product/selectors/helpers/filterProperties.d.ts +0 -8
- package/product/selectors/helpers/filterProperties.d.ts.map +0 -1
- package/product/selectors/helpers/index.d.ts +0 -3
- package/product/selectors/helpers/index.d.ts.map +0 -1
- package/product/selectors/helpers/wrapMemoizedSelector.d.ts +0 -2
- package/product/selectors/helpers/wrapMemoizedSelector.d.ts.map +0 -1
- package/product/selectors/product.d.ts +0 -112
- package/product/selectors/product.d.ts.map +0 -1
- package/reviews/components/Reviews/components/Header/components/WriteReviewLink/spec.js +0 -52
- package/reviews/components/Reviews/components/Header/spec.js +0 -78
- package/reviews/components/Reviews/components/List/spec.js +0 -108
- package/reviews/components/Reviews/components/RatingCount/spec.js +0 -38
- package/reviews/components/Reviews/spec.js +0 -101
- package/tsconfig.build.json +0 -26
- package/tsconfig.json +0 -19
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolveImageSettings.d.ts","sourceRoot":"","sources":["../../../settings/helpers/resolveImageSettings.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,eAAe,EACf,aAAa,EACb,mBAAmB,EACpB,MAAM,sBAAsB,CAAC;AA2D9B;;;;;;;GAOG;AACH,MAAM,WAAW,2BAA2B;IAC1C;;;OAGG;IACH,WAAW,EAAE,eAAe,EAAE,CAAC;IAC/B;;;;OAIG;IACH,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,MAAM,4BAA4B,GACtC,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,WAAW,4BAA4B;IAC3C;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AA4DD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,2BAA2B,GACtC,wBAAwB,OAAO,EAC/B,eAAe,aAAa,KAC3B,4BAiCF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,GACtC,wBAAwB,OAAO,EAC/B,eAAe,aAAa,KAC3B,4BAyBF,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
import "core-js/modules/es.array.reduce.js";
|
|
2
|
+
// Imported via its module path rather than the "core" barrel, since that barrel pulls in
|
|
3
|
+
// getFullImageSource which reads these settings back, and would create a circular import.
|
|
4
|
+
import { getThemeSettings } from '@shopgate/engage/core/config/getThemeSettings';
|
|
5
|
+
import { DEFAULT_IMAGE_FILL_COLOR, DEFAULT_IMAGE_FILL_TRANSPARENT, DEFAULT_IMAGE_QUALITY, LEGACY_IMAGE_SETTINGS_KEY, MAX_IMAGE_DIMENSION, PRODUCT_IMAGE_BASE_WIDTHS } from "../constants/imageSettings";
|
|
6
|
+
import { toThumborColor } from "./toThumborColor";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The shape of the legacy AppImages theme settings. Every field is optional - the key is absent
|
|
10
|
+
* entirely in most shops, and undefined in every jest run, since the test theme config mock has no
|
|
11
|
+
* settings at all.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Maps a product image context onto the legacy AppImages key that configured it.
|
|
16
|
+
*/
|
|
17
|
+
const LEGACY_RESOLUTION_KEYS = {
|
|
18
|
+
pdp: 'HeroImage',
|
|
19
|
+
gallery: 'GalleryImage',
|
|
20
|
+
list: 'ListImage'
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* The ratio the legacy resolutions are assumed to have when they are not configured at all - the
|
|
25
|
+
* built-in base widths then produce exactly the resolutions the legacy defaults shipped with.
|
|
26
|
+
*/
|
|
27
|
+
const DEFAULT_RATIO = {
|
|
28
|
+
width: 1,
|
|
29
|
+
height: 1
|
|
30
|
+
};
|
|
31
|
+
const PRODUCT_IMAGE_CONTEXTS = Object.keys(PRODUCT_IMAGE_BASE_WIDTHS);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* The resolved settings for one product image context: the resolution ladder to request from the
|
|
35
|
+
* image service, and the aspect ratio to apply to the rendered element.
|
|
36
|
+
*
|
|
37
|
+
* ratio is null while the legacy settings are in effect, because those configure explicit
|
|
38
|
+
* dimensions rather than a ratio - consumers then let the Image component derive the ratio from
|
|
39
|
+
* the largest resolution, exactly as before.
|
|
40
|
+
*/
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* The resolved settings for every product image context, keyed by context.
|
|
44
|
+
*/
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* What getFullImageSource needs to build an image url.
|
|
48
|
+
*
|
|
49
|
+
* The color and the transparency flag stay separate rather than being joined into one token,
|
|
50
|
+
* because the image sources spell them differently.
|
|
51
|
+
*/
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Reads the legacy AppImages settings from the theme configuration.
|
|
55
|
+
* @returns The legacy settings, or an empty object when they are not configured.
|
|
56
|
+
*/
|
|
57
|
+
const getLegacyImageSettings = () => getThemeSettings(LEGACY_IMAGE_SETTINGS_KEY) ?? {};
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Whether a ratio part can be calculated with.
|
|
61
|
+
* @param value The value to check.
|
|
62
|
+
* @returns Whether it is usable.
|
|
63
|
+
*/
|
|
64
|
+
const isUsableRatioPart = value => typeof value === 'number' && Number.isFinite(value) && value > 0;
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Substitutes a ratio that cannot be calculated with. Anything reading a configured ratio goes
|
|
68
|
+
* through here first - a source may send a half typed value, or none at all.
|
|
69
|
+
* @param ratio The configured ratio.
|
|
70
|
+
* @returns The ratio, or the default when it is unusable.
|
|
71
|
+
*/
|
|
72
|
+
const toUsableRatio = ratio => {
|
|
73
|
+
if (!ratio || !isUsableRatioPart(ratio.width) || !isUsableRatioPart(ratio.height)) {
|
|
74
|
+
return DEFAULT_RATIO;
|
|
75
|
+
}
|
|
76
|
+
return ratio;
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Derives a resolution ladder from a context's base widths and an aspect ratio.
|
|
81
|
+
* @param context The product image context.
|
|
82
|
+
* @param ratio The aspect ratio to apply, already passed through toUsableRatio.
|
|
83
|
+
* @returns The resolutions, ordered ascending.
|
|
84
|
+
*/
|
|
85
|
+
const deriveResolutions = (context, ratio) => PRODUCT_IMAGE_BASE_WIDTHS[context].map(baseWidth => {
|
|
86
|
+
const height = Math.max(1, Math.round(baseWidth * ratio.height / ratio.width));
|
|
87
|
+
if (height <= MAX_IMAGE_DIMENSION) {
|
|
88
|
+
return {
|
|
89
|
+
width: baseWidth,
|
|
90
|
+
height
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Scaled down as a whole rather than capping the height alone, so the requested image keeps the
|
|
95
|
+
// shape the layout reserves for it.
|
|
96
|
+
return {
|
|
97
|
+
width: Math.max(1, Math.round(baseWidth * MAX_IMAGE_DIMENSION / height)),
|
|
98
|
+
height: MAX_IMAGE_DIMENSION
|
|
99
|
+
};
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* Resolves the settings for every product image context.
|
|
104
|
+
*
|
|
105
|
+
* Precedence:
|
|
106
|
+
* - Once the app settings are hydrated from a source (admin sync / jsonp), they are authoritative.
|
|
107
|
+
* The configured ratio applies to every context unless that context overrides it.
|
|
108
|
+
* - Before hydration the legacy AppImages resolutions are passed through as-is, with a null ratio.
|
|
109
|
+
* They already carry their own implied proportions, so reverse engineering a ratio from them
|
|
110
|
+
* would only introduce rounding - passing them through unchanged keeps the pre-hydration path
|
|
111
|
+
* identical to the legacy behavior.
|
|
112
|
+
* @param areAppSettingsHydrated Whether the app settings arrived from a source.
|
|
113
|
+
* @param imageSettings The image settings from the store.
|
|
114
|
+
* @returns The resolved settings, keyed by context.
|
|
115
|
+
*/
|
|
116
|
+
export const resolveProductImageSettings = (areAppSettingsHydrated, imageSettings) => {
|
|
117
|
+
const legacy = areAppSettingsHydrated ? null : getLegacyImageSettings();
|
|
118
|
+
return PRODUCT_IMAGE_CONTEXTS.reduce((resolved, context) => {
|
|
119
|
+
if (legacy) {
|
|
120
|
+
const legacyResolutions = legacy[LEGACY_RESOLUTION_KEYS[context]];
|
|
121
|
+
return {
|
|
122
|
+
...resolved,
|
|
123
|
+
[context]: {
|
|
124
|
+
resolutions: legacyResolutions?.length ? legacyResolutions : deriveResolutions(context, DEFAULT_RATIO),
|
|
125
|
+
ratio: null
|
|
126
|
+
}
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
const product = imageSettings?.product;
|
|
130
|
+
const ratio = toUsableRatio(product?.[context]?.ratio ?? product?.ratio);
|
|
131
|
+
const resolutions = deriveResolutions(context, ratio);
|
|
132
|
+
const largest = resolutions[resolutions.length - 1];
|
|
133
|
+
return {
|
|
134
|
+
...resolved,
|
|
135
|
+
[context]: {
|
|
136
|
+
resolutions,
|
|
137
|
+
ratio: [largest.width, largest.height]
|
|
138
|
+
}
|
|
139
|
+
};
|
|
140
|
+
}, {});
|
|
141
|
+
};
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* Resolves the quality and fill that image urls are built with.
|
|
145
|
+
* @param areAppSettingsHydrated Whether the app settings arrived from a source.
|
|
146
|
+
* @param imageSettings The image settings from the store.
|
|
147
|
+
* @returns The image service settings.
|
|
148
|
+
*/
|
|
149
|
+
export const resolveImageServiceSettings = (areAppSettingsHydrated, imageSettings) => {
|
|
150
|
+
let color;
|
|
151
|
+
let fillTransparent;
|
|
152
|
+
if (areAppSettingsHydrated) {
|
|
153
|
+
color = imageSettings?.fillColor ?? DEFAULT_IMAGE_FILL_COLOR;
|
|
154
|
+
fillTransparent = imageSettings?.fillTransparent ?? DEFAULT_IMAGE_FILL_TRANSPARENT;
|
|
155
|
+
} else {
|
|
156
|
+
// The legacy value packs both parts into one string, e.g. "FFFFFF,1". Its color is normalized
|
|
157
|
+
// like a configured one - theme configurations carry values the image service will not take.
|
|
158
|
+
const {
|
|
159
|
+
fillColor: legacyFillColor = ''
|
|
160
|
+
} = getLegacyImageSettings();
|
|
161
|
+
const [legacyColor, legacyFillTransparent] = legacyFillColor.split(',');
|
|
162
|
+
color = legacyColor ? toThumborColor(legacyColor) : DEFAULT_IMAGE_FILL_COLOR;
|
|
163
|
+
fillTransparent = legacyFillTransparent === undefined ? DEFAULT_IMAGE_FILL_TRANSPARENT : legacyFillTransparent.trim() === '1';
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
// No hydration branch, unlike the fill: the unhydrated slice already holds the legacy quality.
|
|
167
|
+
quality: imageSettings?.quality ?? DEFAULT_IMAGE_QUALITY,
|
|
168
|
+
fillColor: color,
|
|
169
|
+
fillTransparent
|
|
170
|
+
};
|
|
171
|
+
};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a configured value into a compression quality the image service accepts.
|
|
3
|
+
* @param value The value to convert.
|
|
4
|
+
* @returns A whole number between 1 and 100.
|
|
5
|
+
*/
|
|
6
|
+
export declare const toImageQuality: (value: unknown) => number;
|
|
7
|
+
//# sourceMappingURL=toImageQuality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toImageQuality.d.ts","sourceRoot":"","sources":["../../../settings/helpers/toImageQuality.ts"],"names":[],"mappings":"AA4BA;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,OAAO,KAAG,MAY/C,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { logger } from '@shopgate/pwa-core/helpers';
|
|
2
|
+
import { DEFAULT_IMAGE_QUALITY } from "../constants/imageSettings";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* The range the image service accepts.
|
|
6
|
+
*/
|
|
7
|
+
const MIN_IMAGE_QUALITY = 1;
|
|
8
|
+
const MAX_IMAGE_QUALITY = 100;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Coerces a configured value into a number.
|
|
12
|
+
* @param value The configured value.
|
|
13
|
+
* @returns The number, or NaN when the value does not express one.
|
|
14
|
+
*/
|
|
15
|
+
const toNumber = value => {
|
|
16
|
+
if (typeof value === 'number') {
|
|
17
|
+
return value;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Emptiness is handled here rather than left to Number(), which would read both "" and null as a
|
|
21
|
+
// perfectly valid zero.
|
|
22
|
+
if (typeof value === 'string' && value.trim() !== '') {
|
|
23
|
+
return Number(value);
|
|
24
|
+
}
|
|
25
|
+
return NaN;
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Converts a configured value into a compression quality the image service accepts.
|
|
30
|
+
* @param value The value to convert.
|
|
31
|
+
* @returns A whole number between 1 and 100.
|
|
32
|
+
*/
|
|
33
|
+
export const toImageQuality = value => {
|
|
34
|
+
const quality = toNumber(value);
|
|
35
|
+
if (!Number.isFinite(quality)) {
|
|
36
|
+
logger.warn(`Invalid image quality "${value}", falling back to ${DEFAULT_IMAGE_QUALITY}`);
|
|
37
|
+
return DEFAULT_IMAGE_QUALITY;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Out of range numbers are clamped rather than rejected, so a value that is still being typed
|
|
41
|
+
// degrades into the nearest usable one instead of jumping back to the default. Zero is included
|
|
42
|
+
// in that - the service takes it, but the images it returns are unusable.
|
|
43
|
+
return Math.min(Math.max(Math.round(quality), MIN_IMAGE_QUALITY), MAX_IMAGE_QUALITY);
|
|
44
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts a color into the format Thumbor's fill filter expects - a hexadecimal RGB expression
|
|
3
|
+
* without the leading "#", or one of its own keywords.
|
|
4
|
+
*
|
|
5
|
+
* Any alpha channel on the input is dropped: Thumbor's fill color cannot carry one, and Color.hex()
|
|
6
|
+
* returns the opaque six digit form. Transparency is only expressible by configuring the
|
|
7
|
+
* "transparent" keyword explicitly.
|
|
8
|
+
*
|
|
9
|
+
* Everything else is canonicalized to hex rather than passing HTML color names through, so that
|
|
10
|
+
* "white", "#fff" and "rgb(255, 255, 255)" all produce the same url and share a CDN cache entry.
|
|
11
|
+
* @param value The color to convert.
|
|
12
|
+
* @returns The Thumbor color token.
|
|
13
|
+
*/
|
|
14
|
+
export declare const toThumborColor: (value: string) => string;
|
|
15
|
+
//# sourceMappingURL=toThumborColor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"toThumborColor.d.ts","sourceRoot":"","sources":["../../../settings/helpers/toThumborColor.ts"],"names":[],"mappings":"AAqBA;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,MAAM,KAAG,MAiB9C,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import "core-js/modules/es.array.includes.js";
|
|
2
|
+
import "core-js/modules/es.string.replace.js";
|
|
3
|
+
import Color from 'color';
|
|
4
|
+
import { logger } from '@shopgate/pwa-core/helpers';
|
|
5
|
+
// Imported via its module path rather than the "styles" barrel, since that barrel pulls in the
|
|
6
|
+
// ThemeProvider and would create a circular import.
|
|
7
|
+
import { isColor } from '@shopgate/engage/styles/theme/utils/color';
|
|
8
|
+
import { DEFAULT_IMAGE_FILL_COLOR } from "../constants/imageSettings";
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Values Thumbor's fill filter accepts that are not CSS colors, so they have to bypass the color
|
|
12
|
+
* parser and be passed through untouched.
|
|
13
|
+
* @see https://thumbor.readthedocs.io/en/latest/filling.html
|
|
14
|
+
*/
|
|
15
|
+
const THUMBOR_COLOR_KEYWORDS = ['auto', 'blur', 'transparent'];
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* A hexadecimal color without the leading "#" - the format the image service itself expects, and
|
|
19
|
+
* therefore what the legacy AppImages config stores. It is not a valid CSS color, so it has to be
|
|
20
|
+
* recognized before the color parser sees it.
|
|
21
|
+
*/
|
|
22
|
+
const BARE_HEX_PATTERN = /^([\da-f]{3}|[\da-f]{4}|[\da-f]{6}|[\da-f]{8})$/i;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Converts a color into the format Thumbor's fill filter expects - a hexadecimal RGB expression
|
|
26
|
+
* without the leading "#", or one of its own keywords.
|
|
27
|
+
*
|
|
28
|
+
* Any alpha channel on the input is dropped: Thumbor's fill color cannot carry one, and Color.hex()
|
|
29
|
+
* returns the opaque six digit form. Transparency is only expressible by configuring the
|
|
30
|
+
* "transparent" keyword explicitly.
|
|
31
|
+
*
|
|
32
|
+
* Everything else is canonicalized to hex rather than passing HTML color names through, so that
|
|
33
|
+
* "white", "#fff" and "rgb(255, 255, 255)" all produce the same url and share a CDN cache entry.
|
|
34
|
+
* @param value The color to convert.
|
|
35
|
+
* @returns The Thumbor color token.
|
|
36
|
+
*/
|
|
37
|
+
export const toThumborColor = value => {
|
|
38
|
+
const trimmed = typeof value === 'string' ? value.trim() : '';
|
|
39
|
+
if (THUMBOR_COLOR_KEYWORDS.includes(trimmed.toLowerCase())) {
|
|
40
|
+
return trimmed.toLowerCase();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// A bare hex is what the image service and the legacy config use, but not something the color
|
|
44
|
+
// parser recognizes, so it gets its "#" back before parsing.
|
|
45
|
+
const parsable = BARE_HEX_PATTERN.test(trimmed) ? `#${trimmed}` : trimmed;
|
|
46
|
+
if (!isColor(parsable)) {
|
|
47
|
+
logger.warn(`Invalid image fill color "${value}", falling back to ${DEFAULT_IMAGE_FILL_COLOR}`);
|
|
48
|
+
return DEFAULT_IMAGE_FILL_COLOR;
|
|
49
|
+
}
|
|
50
|
+
return Color(parsable).hex().replace('#', '').toUpperCase();
|
|
51
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../settings/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { useImageServiceSettings, useProductImageSettings } from "./useImageSettings";
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { ResolvedImageServiceSettings, ResolvedProductImageSettings } from '../helpers';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves the resolutions and aspect ratio to request for every product image context, keyed by
|
|
4
|
+
* `pdp`, `gallery` and `list`.
|
|
5
|
+
*
|
|
6
|
+
* Prefer giving ProductImage a `context` prop, which resolves its own settings. This hook is for
|
|
7
|
+
* the places that render the plain Image component instead, e.g. the fullscreen gallery sliders,
|
|
8
|
+
* which need its unwrapped mode.
|
|
9
|
+
*
|
|
10
|
+
* `ratio` may be null, which the Image component reads as "derive one from the largest
|
|
11
|
+
* resolution" - pass it through rather than substituting a value.
|
|
12
|
+
* @returns The resolved settings, keyed by context.
|
|
13
|
+
*/
|
|
14
|
+
export declare const useProductImageSettings: () => ResolvedProductImageSettings;
|
|
15
|
+
/**
|
|
16
|
+
* Resolves the quality and fill color for image service urls, in the shape getFullImageSource
|
|
17
|
+
* takes as its third argument.
|
|
18
|
+
*
|
|
19
|
+
* Components rarely need this - the Image component already calls it and applies the result. It is
|
|
20
|
+
* separate from useProductImageSettings because both values apply to every image the service
|
|
21
|
+
* serves, not just product images.
|
|
22
|
+
*
|
|
23
|
+
* `fillColor` is a hash free hex, not a CSS color, and the transparency flag is a separate
|
|
24
|
+
* `fillTransparent` - the image sources spell the pair differently.
|
|
25
|
+
* @returns The image service settings.
|
|
26
|
+
*/
|
|
27
|
+
export declare const useImageServiceSettings: () => ResolvedImageServiceSettings;
|
|
28
|
+
//# sourceMappingURL=useImageSettings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useImageSettings.d.ts","sourceRoot":"","sources":["../../../settings/hooks/useImageSettings.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EACV,4BAA4B,EAC5B,4BAA4B,EAC7B,MAAM,YAAY,CAAC;AAEpB;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,QAAO,4BAQ1C,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,uBAAuB,QAAO,4BAQ1C,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { useMemo } from 'react';
|
|
2
|
+
import { useSelector } from 'react-redux';
|
|
3
|
+
import { getAreAppSettingsHydrated, getImageSettings } from "../selectors/appSettings";
|
|
4
|
+
import { resolveImageServiceSettings, resolveProductImageSettings } from "../helpers";
|
|
5
|
+
/**
|
|
6
|
+
* Resolves the resolutions and aspect ratio to request for every product image context, keyed by
|
|
7
|
+
* `pdp`, `gallery` and `list`.
|
|
8
|
+
*
|
|
9
|
+
* Prefer giving ProductImage a `context` prop, which resolves its own settings. This hook is for
|
|
10
|
+
* the places that render the plain Image component instead, e.g. the fullscreen gallery sliders,
|
|
11
|
+
* which need its unwrapped mode.
|
|
12
|
+
*
|
|
13
|
+
* `ratio` may be null, which the Image component reads as "derive one from the largest
|
|
14
|
+
* resolution" - pass it through rather than substituting a value.
|
|
15
|
+
* @returns The resolved settings, keyed by context.
|
|
16
|
+
*/
|
|
17
|
+
export const useProductImageSettings = () => {
|
|
18
|
+
const areAppSettingsHydrated = useSelector(getAreAppSettingsHydrated);
|
|
19
|
+
const imageSettings = useSelector(getImageSettings);
|
|
20
|
+
return useMemo(() => resolveProductImageSettings(areAppSettingsHydrated, imageSettings), [areAppSettingsHydrated, imageSettings]);
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* Resolves the quality and fill color for image service urls, in the shape getFullImageSource
|
|
25
|
+
* takes as its third argument.
|
|
26
|
+
*
|
|
27
|
+
* Components rarely need this - the Image component already calls it and applies the result. It is
|
|
28
|
+
* separate from useProductImageSettings because both values apply to every image the service
|
|
29
|
+
* serves, not just product images.
|
|
30
|
+
*
|
|
31
|
+
* `fillColor` is a hash free hex, not a CSS color, and the transparency flag is a separate
|
|
32
|
+
* `fillTransparent` - the image sources spell the pair differently.
|
|
33
|
+
* @returns The image service settings.
|
|
34
|
+
*/
|
|
35
|
+
export const useImageServiceSettings = () => {
|
|
36
|
+
const areAppSettingsHydrated = useSelector(getAreAppSettingsHydrated);
|
|
37
|
+
const imageSettings = useSelector(getImageSettings);
|
|
38
|
+
return useMemo(() => resolveImageServiceSettings(areAppSettingsHydrated, imageSettings), [areAppSettingsHydrated, imageSettings]);
|
|
39
|
+
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"appSettings.d.ts","sourceRoot":"","sources":["../../../settings/reducers/appSettings.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"appSettings.d.ts","sourceRoot":"","sources":["../../../settings/reducers/appSettings.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACpD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAa/E,KAAK,iBAAiB,GAAG,wBAAwB,GAAG,aAAa,CAAC;AAQlE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAuElC,CAAC;AAEF;;;;;GAKG;AACH,QAAA,MAAM,WAAW,EAAE,OAAO,CAAC,gBAAgB,EAAE,iBAAiB,CAqD7D,CAAC;AAEF,eAAe,WAAW,CAAC"}
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import _merge from "lodash/merge";
|
|
2
|
-
import { produce } from 'immer';
|
|
3
2
|
import { RECEIVE_APP_SETTINGS } from "../constants/appSettings";
|
|
3
|
+
import { DEFAULT_IMAGE_FILL_COLOR, DEFAULT_IMAGE_FILL_TRANSPARENT, DEFAULT_IMAGE_QUALITY, DEFAULT_SHOW_INNER_SHADOW } from "../constants/imageSettings";
|
|
4
|
+
// Deliberately not exported from the "helpers" barrel - they normalize values on their way into
|
|
5
|
+
// the slice, which is nothing a consumer of the settings needs.
|
|
6
|
+
import { toImageQuality } from "../helpers/toImageQuality";
|
|
7
|
+
import { toThumborColor } from "../helpers/toThumborColor";
|
|
4
8
|
const isReceiveAppSettingsAction = action => action.type === RECEIVE_APP_SETTINGS && 'settings' in action;
|
|
5
9
|
|
|
6
10
|
/**
|
|
@@ -17,8 +21,72 @@ export const DEFAULT_APP_SETTINGS = {
|
|
|
17
21
|
transition: 'fade',
|
|
18
22
|
fixed: {
|
|
19
23
|
borderEnabled: true
|
|
24
|
+
},
|
|
25
|
+
favorites: {
|
|
26
|
+
showCounter: true
|
|
20
27
|
}
|
|
21
28
|
}
|
|
29
|
+
},
|
|
30
|
+
product: {
|
|
31
|
+
grid: {
|
|
32
|
+
columns: {
|
|
33
|
+
small: 2,
|
|
34
|
+
large: 4
|
|
35
|
+
}
|
|
36
|
+
},
|
|
37
|
+
slider: {
|
|
38
|
+
slidesPerView: {
|
|
39
|
+
small: 2.3,
|
|
40
|
+
medium: 3.3,
|
|
41
|
+
large: 4.3
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
rating: {
|
|
45
|
+
showEmptyStars: false
|
|
46
|
+
},
|
|
47
|
+
card: {
|
|
48
|
+
productName: {
|
|
49
|
+
maxLines: 3
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
tile: {
|
|
53
|
+
productName: {
|
|
54
|
+
maxLines: 3
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
cards: {
|
|
59
|
+
style: 'shadow',
|
|
60
|
+
shadow: {
|
|
61
|
+
size: 'medium'
|
|
62
|
+
}
|
|
63
|
+
},
|
|
64
|
+
typography: {
|
|
65
|
+
variants: {}
|
|
66
|
+
},
|
|
67
|
+
appearance: {
|
|
68
|
+
defaultColorSchemeMode: 'light'
|
|
69
|
+
},
|
|
70
|
+
widgets: {
|
|
71
|
+
mediaMargins: {
|
|
72
|
+
top: 0,
|
|
73
|
+
bottom: 0,
|
|
74
|
+
left: 0,
|
|
75
|
+
right: 0
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
images: {
|
|
79
|
+
quality: DEFAULT_IMAGE_QUALITY,
|
|
80
|
+
// Already in the image service's format, so the unhydrated path needs no conversion.
|
|
81
|
+
fillColor: DEFAULT_IMAGE_FILL_COLOR,
|
|
82
|
+
fillTransparent: DEFAULT_IMAGE_FILL_TRANSPARENT,
|
|
83
|
+
product: {
|
|
84
|
+
ratio: {
|
|
85
|
+
width: 1,
|
|
86
|
+
height: 1
|
|
87
|
+
},
|
|
88
|
+
showInnerShadow: DEFAULT_SHOW_INNER_SHADOW
|
|
89
|
+
}
|
|
22
90
|
}
|
|
23
91
|
};
|
|
24
92
|
|
|
@@ -30,13 +98,60 @@ export const DEFAULT_APP_SETTINGS = {
|
|
|
30
98
|
*/
|
|
31
99
|
const appSettings = (state, action = {
|
|
32
100
|
type: ''
|
|
33
|
-
}) =>
|
|
101
|
+
}) => {
|
|
34
102
|
if (isReceiveAppSettingsAction(action)) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
103
|
+
const {
|
|
104
|
+
images,
|
|
105
|
+
typography,
|
|
106
|
+
appearance,
|
|
107
|
+
widgets
|
|
108
|
+
} = action.settings ?? {};
|
|
109
|
+
const {
|
|
110
|
+
mediaMargins
|
|
111
|
+
} = widgets ?? {};
|
|
112
|
+
|
|
113
|
+
// Merged over the defaults rather than over the current state, so a field an incoming payload
|
|
114
|
+
// omits falls back to its default instead of keeping the value of an earlier one. The admin
|
|
115
|
+
// preview needs that: it stops sending a shadow size once the card style isn't `shadow`, and it
|
|
116
|
+
// clears a whole branch by sending a null.
|
|
117
|
+
const nextState = _merge({}, DEFAULT_APP_SETTINGS, {
|
|
118
|
+
...action.settings,
|
|
119
|
+
// A cleared branch is mapped to undefined, which merge skips, so the defaults it started from
|
|
120
|
+
// stay in place. A null would be written into the slice like any other value.
|
|
121
|
+
images: images === null ? undefined : {
|
|
122
|
+
...images,
|
|
123
|
+
product: images?.product ?? undefined
|
|
124
|
+
},
|
|
125
|
+
typography: typography === null ? undefined : {
|
|
126
|
+
...typography,
|
|
127
|
+
variants: typography?.variants ?? undefined
|
|
128
|
+
},
|
|
129
|
+
appearance: appearance === null ? undefined : {
|
|
130
|
+
...appearance,
|
|
131
|
+
defaultColorSchemeMode: appearance?.defaultColorSchemeMode ?? undefined
|
|
132
|
+
},
|
|
133
|
+
widgets: widgets === null ? undefined : {
|
|
134
|
+
...widgets,
|
|
135
|
+
// Sides are mapped one by one, because the admin clears a single margin with a null just
|
|
136
|
+
// like it clears a whole branch with one.
|
|
137
|
+
mediaMargins: !mediaMargins ? undefined : {
|
|
138
|
+
top: mediaMargins.top ?? undefined,
|
|
139
|
+
bottom: mediaMargins.bottom ?? undefined,
|
|
140
|
+
left: mediaMargins.left ?? undefined,
|
|
141
|
+
right: mediaMargins.right ?? undefined
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}, {
|
|
145
|
+
isHydrated: true
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// Converted on the way in, so the slice holds wire ready values and every image url does not
|
|
149
|
+
// pay for it. Unconditional, because an empty string or a null reaches here like any other
|
|
150
|
+
// value - both converters are idempotent.
|
|
151
|
+
nextState.images.fillColor = toThumborColor(nextState.images.fillColor);
|
|
152
|
+
nextState.images.quality = toImageQuality(nextState.images.quality);
|
|
153
|
+
return nextState;
|
|
40
154
|
}
|
|
41
|
-
|
|
155
|
+
return state ?? DEFAULT_APP_SETTINGS;
|
|
156
|
+
};
|
|
42
157
|
export default appSettings;
|
|
@@ -3,10 +3,10 @@ export declare const settings: import("redux").Reducer<{
|
|
|
3
3
|
shopSettings: Object;
|
|
4
4
|
merchantSettings: Object;
|
|
5
5
|
appSettings: import("../types/appSettings").AppSettingsSlice;
|
|
6
|
-
}, (
|
|
6
|
+
}, ({
|
|
7
7
|
type: string;
|
|
8
|
-
settings: import("../types/appSettings").AppSettings
|
|
9
|
-
}) | import("redux").Action<string>, Partial<{
|
|
8
|
+
settings: import("../types/appSettings").DeepPartial<import("../types/appSettings").AppSettings>;
|
|
9
|
+
} | import("redux").UnknownAction) | import("redux").Action<string>, Partial<{
|
|
10
10
|
config: Object | undefined;
|
|
11
11
|
shopSettings: Object | undefined;
|
|
12
12
|
merchantSettings: Object | undefined;
|