@jetshop/core 5.13.10-0 → 5.14.0-alpha.49df897e
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/ChannelHandler/CategoryPathnameRedirectQuery.gql +9 -9
- package/ChannelHandler/ChannelHandler.d.ts +52 -50
- package/ChannelHandler/ChannelHandler.js +114 -108
- package/ChannelHandler/ChannelHandler.js.map +1 -1
- package/ChannelHandler/PagePathnameRedirectQuery.gql +9 -9
- package/ChannelHandler/PreserveRedirectRouteQuery.gql +19 -19
- package/ChannelHandler/ProductPathnameRedirectQuery.gql +9 -9
- package/ChannelHandler/StartPagePathnameRedirectQuery.gql +9 -9
- package/ChannelHandler/channelUtils.d.ts +72 -68
- package/ChannelHandler/channelUtils.js +372 -266
- package/ChannelHandler/channelUtils.js.map +1 -1
- package/ChannelHandler/redirectUtils.d.ts +4 -4
- package/ChannelHandler/redirectUtils.js +49 -49
- package/ChannelHandler/redirectUtils.test.js +514 -538
- package/ChannelHandler/redirectUtilsGroupedChannels.test.js +732 -0
- package/analytics/Analytics.d.ts +18 -18
- package/analytics/Analytics.js +56 -56
- package/analytics/AnalyticsProvider.d.ts +42 -42
- package/analytics/AnalyticsProvider.js +177 -177
- package/analytics/AnalyticsProvider.js.map +1 -1
- package/analytics/deprecatedTracking.d.ts +17 -17
- package/analytics/deprecatedTracking.js +32 -32
- package/analytics/integrations/ga4.d.ts +23 -23
- package/analytics/integrations/ga4.js +144 -145
- package/analytics/integrations/ga4.js.map +1 -1
- package/analytics/integrations/gtag/gtag.d.ts +8 -8
- package/analytics/integrations/gtag/gtag.js +180 -180
- package/analytics/integrations/gtag/index.d.ts +1 -1
- package/analytics/integrations/gtag/index.js +1 -1
- package/analytics/integrations/gtm/index.d.ts +12 -12
- package/analytics/integrations/gtm/index.js +200 -200
- package/analytics/integrations/gtm/referrerModifier.d.ts +1 -1
- package/analytics/integrations/gtm/referrerModifier.js +61 -61
- package/analytics/integrations/releware/index.d.ts +3 -3
- package/analytics/integrations/releware/index.js +38 -38
- package/analytics/integrations/unslugify.d.ts +1 -1
- package/analytics/integrations/unslugify.js +15 -17
- package/analytics/integrations/unslugify.js.map +1 -1
- package/analytics/trackerRegistry.d.ts +101 -101
- package/analytics/trackerRegistry.js +219 -219
- package/analytics/trackerRegistry.test.js +160 -160
- package/analytics/tracking.d.ts +14 -14
- package/analytics/tracking.js +71 -71
- package/analytics/utils/breadcrumbsWithoutProduct.d.ts +1 -1
- package/analytics/utils/breadcrumbsWithoutProduct.js +8 -8
- package/analytics/utils/script.d.ts +8 -8
- package/analytics/utils/script.js +39 -39
- package/analytics/webVitals.d.ts +5 -5
- package/analytics/webVitals.js +38 -38
- package/boot/AuthHandler.d.ts +14 -14
- package/boot/AuthHandler.js +38 -38
- package/boot/ChannelsQuery.gql +7 -7
- package/boot/PreviewHandler.d.ts +7 -7
- package/boot/PreviewHandler.js +13 -13
- package/boot/SharedTree.d.ts +25 -25
- package/boot/SharedTree.js +28 -28
- package/boot/addMissingConfig.d.ts +5 -5
- package/boot/addMissingConfig.js +33 -33
- package/boot/apollo.d.ts +21 -21
- package/boot/apollo.js +197 -197
- package/boot/client/entrypoint.d.ts +1 -1
- package/boot/client/entrypoint.js +4 -4
- package/boot/client/index.d.ts +1 -1
- package/boot/client/index.js +1 -1
- package/boot/client/startClient.d.ts +4 -4
- package/boot/client/startClient.js +142 -142
- package/boot/client-schema.gql +59 -59
- package/boot/server/IntervalQuery.d.ts +32 -32
- package/boot/server/IntervalQuery.js +94 -94
- package/boot/server/IntervalQuery.test.js +280 -280
- package/boot/server/PersistedApolloClient.d.ts +20 -20
- package/boot/server/PersistedApolloClient.js +39 -39
- package/boot/server/PersistedApolloClient.test.js +233 -233
- package/boot/server/asyncErrorHandler.d.ts +3 -3
- package/boot/server/asyncErrorHandler.js +4 -4
- package/boot/server/breakpointMiddleware.d.ts +3 -3
- package/boot/server/breakpointMiddleware.js +9 -9
- package/boot/server/createApolloServer.d.ts +28 -28
- package/boot/server/createApolloServer.js +143 -143
- package/boot/server/createApolloServer.test.js +114 -114
- package/boot/server/createDevServer.d.ts +14 -14
- package/boot/server/createDevServer.js +29 -29
- package/boot/server/createRenderer.d.ts +28 -28
- package/boot/server/createRenderer.js +235 -235
- package/boot/server/createServer.d.ts +14 -14
- package/boot/server/createServer.js +41 -41
- package/boot/server/entrypoint.d.ts +1 -1
- package/boot/server/entrypoint.js +35 -35
- package/boot/server/getPrefetchFiles.d.ts +10 -10
- package/boot/server/getPrefetchFiles.js +19 -19
- package/boot/server/getPreloadAssets.d.ts +10 -10
- package/boot/server/getPreloadAssets.js +17 -17
- package/boot/server/getPreloadAssets.test.js +133 -133
- package/boot/server/index.d.ts +9 -9
- package/boot/server/index.js +122 -122
- package/boot/server/listen.d.ts +13 -13
- package/boot/server/listen.js +16 -16
- package/boot/server/overwriteServerIntl.js +1 -1
- package/boot/server/persistedQueries/PersistedClient.d.ts +22 -22
- package/boot/server/persistedQueries/PersistedClient.js +57 -57
- package/boot/server/persistedQueries/__tests__/getPersistedQueriesForRequest.test.js +201 -201
- package/boot/server/persistedQueries/__tests__/mockQuery.gql +6 -6
- package/boot/server/persistedQueries/getPersistedQueriesForRequest.d.ts +3 -3
- package/boot/server/persistedQueries/getPersistedQueriesForRequest.js +26 -26
- package/boot/server/saleSource.test.js +39 -39
- package/boot/server/salesSource.d.ts +8 -8
- package/boot/server/salesSource.js +15 -15
- package/boot/utils/__tests__/uid.js +47 -47
- package/boot/utils/createIntOptions.d.ts +6 -6
- package/boot/utils/createIntOptions.js +18 -18
- package/boot/utils/queryLoggingMiddleware.d.ts +2 -2
- package/boot/utils/queryLoggingMiddleware.js +14 -14
- package/boot/utils/uid.d.ts +3 -3
- package/boot/utils/uid.js +19 -19
- package/cart/AddToCartFormik.d.ts +42 -42
- package/cart/AddToCartFormik.js +76 -76
- package/cart/useAddToCart.d.ts +88 -88
- package/cart/useAddToCart.js +117 -117
- package/ci/.gitlab-ci.yml +3 -3
- package/components/Auth/CustomerUpdateForm.d.ts +32 -32
- package/components/Auth/CustomerUpdateForm.js +121 -121
- package/components/Auth/ForgotPasswordProvider.d.ts +71 -71
- package/components/Auth/ForgotPasswordProvider.js +56 -56
- package/components/Auth/ResetPasswordProvider.d.ts +88 -88
- package/components/Auth/ResetPasswordProvider.js +77 -77
- package/components/Auth/SSN.d.ts +12 -12
- package/components/Auth/SSN.js +34 -34
- package/components/Auth/SSNLookupContainer.d.ts +15 -15
- package/components/Auth/SSNLookupContainer.js +19 -19
- package/components/Auth/SignupFormContainer.d.ts +19 -19
- package/components/Auth/SignupFormContainer.js +81 -81
- package/components/Auth/UpdatePasswordForm.d.ts +44 -44
- package/components/Auth/UpdatePasswordForm.js +97 -97
- package/components/Auth/formFieldsFromSettings.d.ts +65 -65
- package/components/Auth/formFieldsFromSettings.js +76 -76
- package/components/Auth/formatSignupInput.d.ts +8 -8
- package/components/Auth/formatSignupInput.js +42 -42
- package/components/Auth/signup-context.d.ts +36 -36
- package/components/Auth/signup-context.js +71 -71
- package/components/Auth/signup-field-translations.d.ts +3 -3
- package/components/Auth/signup-field-translations.js +43 -43
- package/components/Auth/signupSubmit.d.ts +6 -6
- package/components/Auth/signupSubmit.js +56 -56
- package/components/Auth/useAddressFields.d.ts +22 -22
- package/components/Auth/useAddressFields.js +32 -32
- package/components/Auth/useAddressFields.test.js +294 -294
- package/components/Auth/useCustomer.d.ts +70 -70
- package/components/Auth/useCustomer.js +167 -167
- package/components/Auth/useLoginFields.d.ts +20 -20
- package/components/Auth/useLoginFields.js +20 -20
- package/components/Auth/useSignupForm.d.ts +7 -7
- package/components/Auth/useSignupForm.js +14 -14
- package/components/AuthContext/AuthContext.d.ts +8 -8
- package/components/AuthContext/AuthContext.js +8 -8
- package/components/AuthContext/AuthProvider.d.ts +6 -6
- package/components/AuthContext/AuthProvider.js +84 -84
- package/components/AuthContext/AuthProvider.js.map +1 -1
- package/components/AuthContext/AuthProvider.test.js +66 -66
- package/components/AuthContext/LogOut.d.ts +5 -5
- package/components/AuthContext/LogOut.js +14 -14
- package/components/AuthContext/googleUserIdQuery.gql +6 -6
- package/components/AuthContext/useAuth.d.ts +6 -6
- package/components/AuthContext/useAuth.js +20 -20
- package/components/BreakpointProvider.d.ts +21 -21
- package/components/BreakpointProvider.js +23 -23
- package/components/Cart/CartIdContext.d.ts +11 -11
- package/components/Cart/CartIdContext.js +60 -60
- package/components/Cart/CartIdContext.test.js +87 -87
- package/components/ChannelContext/ChannelContext.d.ts +21 -20
- package/components/ChannelContext/ChannelContext.js +3 -3
- package/components/ChannelContext/ChannelContext.js.map +1 -1
- package/components/ChannelContext/ChannelProvider.d.ts +10 -10
- package/components/ChannelContext/ChannelProvider.js +44 -42
- package/components/ChannelContext/ChannelProvider.js.map +1 -1
- package/components/ChannelContext/ChannelProvider.test.js +112 -112
- package/components/ChannelContext/CountrySettingsQuery.gql +34 -34
- package/components/ChannelContext/index.d.ts +2 -2
- package/components/ChannelContext/index.js +2 -2
- package/components/ChannelContext/useCountrySettings.d.ts +8 -8
- package/components/ChannelContext/useCountrySettings.js +23 -23
- package/components/ChannelContext/useCountrySettings.js.map +1 -1
- package/components/ConfigProvider.d.ts +107 -108
- package/components/ConfigProvider.js +19 -19
- package/components/ConfigProvider.js.map +1 -1
- package/components/DynamicRoute/ActiveFiltersQuery.gql +21 -21
- package/components/DynamicRoute/CategoryRoute.d.ts +13 -13
- package/components/DynamicRoute/CategoryRoute.js +55 -55
- package/components/DynamicRoute/ContentRoute.d.ts +14 -14
- package/components/DynamicRoute/ContentRoute.js +27 -27
- package/components/DynamicRoute/PreviewRoute.d.ts +17 -17
- package/components/DynamicRoute/PreviewRoute.js +57 -57
- package/components/DynamicRoute/ProductByArticlenumber.d.ts +5 -5
- package/components/DynamicRoute/ProductByArticlenumber.gql +16 -16
- package/components/DynamicRoute/ProductByArticlenumber.js +21 -21
- package/components/DynamicRoute/ProductRoute.d.ts +15 -15
- package/components/DynamicRoute/ProductRoute.js +57 -57
- package/components/DynamicRoute/RouteResolver.d.ts +22 -22
- package/components/DynamicRoute/RouteResolver.js +64 -64
- package/components/DynamicRoute/Status.d.ts +14 -14
- package/components/DynamicRoute/Status.js +19 -19
- package/components/DynamicRoute/index.d.ts +17 -17
- package/components/DynamicRoute/index.js +95 -95
- package/components/Filters/index.d.ts +1 -1
- package/components/Filters/index.js +1 -1
- package/components/Filters/toggleActiveListItem.gql +15 -15
- package/components/Filters/utils/replaceInSearch.d.ts +14 -14
- package/components/Filters/utils/replaceInSearch.js +22 -22
- package/components/Filters/utils/replaceInSearch.test.js +184 -184
- package/components/Filters/utils/updateHistory.d.ts +25 -25
- package/components/Filters/utils/updateHistory.js +29 -29
- package/components/Filters/utils/updateHistory.test.js +102 -102
- package/components/Fonts/CustomFont.d.ts +14 -14
- package/components/Fonts/CustomFont.js +16 -16
- package/components/Fonts/GoogleFont.d.ts +10 -10
- package/components/Fonts/GoogleFont.js +34 -34
- package/components/Fonts/TypekitFont.d.ts +16 -16
- package/components/Fonts/TypekitFont.js +24 -24
- package/components/Fonts/injectFont.d.ts +11 -11
- package/components/Fonts/injectFont.js +29 -29
- package/components/Head.d.ts +11 -11
- package/components/Head.js +79 -74
- package/components/Head.js.map +1 -1
- package/components/Mutation/AddToCart/addToCartUtils.d.ts +18 -18
- package/components/Mutation/AddToCart/addToCartUtils.js +51 -51
- package/components/Mutation/AddToCartFormik.d.ts +53 -53
- package/components/Mutation/AddToCartFormik.js +171 -171
- package/components/Mutation/DecrementQuantity.d.ts +4 -4
- package/components/Mutation/DecrementQuantity.js +34 -34
- package/components/Mutation/IncrementQuantity.d.ts +4 -4
- package/components/Mutation/IncrementQuantity.js +34 -34
- package/components/Mutation/RemoveFromCart.d.ts +5 -5
- package/components/Mutation/RemoveFromCart.js +51 -51
- package/components/Mutation/SetQuantity.d.ts +4 -4
- package/components/Mutation/SetQuantity.js +36 -36
- package/components/Mutation/SubscribeToNewsletter.d.ts +4 -4
- package/components/Mutation/SubscribeToNewsletter.js +29 -29
- package/components/Mutation/SubscribeToStockNotifications.d.ts +4 -4
- package/components/Mutation/SubscribeToStockNotifications.js +30 -30
- package/components/Mutation/cartMutationUtils.d.ts +28 -28
- package/components/Mutation/cartMutationUtils.js +108 -108
- package/components/Mutation/cartMutationUtils.spec.js +142 -142
- package/components/Mutation/useDecrementQuantity.d.ts +11 -11
- package/components/Mutation/useDecrementQuantity.js +53 -53
- package/components/Mutation/useIncrementQuantity.d.ts +11 -11
- package/components/Mutation/useIncrementQuantity.js +53 -53
- package/components/Mutation/useRemoveFromCart.d.ts +13 -13
- package/components/Mutation/useRemoveFromCart.js +49 -49
- package/components/Mutation/useSetQuantity.d.ts +12 -12
- package/components/Mutation/useSetQuantity.js +37 -37
- package/components/Notifications/Notifications.d.ts +15 -15
- package/components/Notifications/Notifications.js +26 -26
- package/components/Notifications/index.d.ts +2 -2
- package/components/Notifications/index.js +2 -2
- package/components/Notifications/notificationMachine.d.ts +30 -30
- package/components/Notifications/notificationMachine.js +73 -73
- package/components/Notifications/notificationsMachine.d.ts +37 -37
- package/components/Notifications/notificationsMachine.js +65 -65
- package/components/Notifications/useNotification.d.ts +9 -9
- package/components/Notifications/useNotification.js +26 -26
- package/components/OpenGraph/OpenGraph.test.js +180 -180
- package/components/OpenGraph/OpenGraphGeneralPageData.d.ts +25 -25
- package/components/OpenGraph/OpenGraphGeneralPageData.js +36 -36
- package/components/OpenGraph/OpenGraphGeneralPageData.js.map +1 -1
- package/components/OpenGraph/OpenGraphProductData.d.ts +25 -25
- package/components/OpenGraph/OpenGraphProductData.js +48 -48
- package/components/OpenGraph/OpenGraphProductData.js.map +1 -1
- package/components/OpenGraph/index.d.ts +2 -2
- package/components/OpenGraph/index.js +2 -2
- package/components/Pagination/PaginationContainer.d.ts +2 -2
- package/components/Pagination/PaginationContainer.js +4 -4
- package/components/Pagination/PaginationContext.d.ts +14 -14
- package/components/Pagination/PaginationContext.js +3 -3
- package/components/Pagination/PaginationProvider.d.ts +19 -19
- package/components/Pagination/PaginationProvider.js +94 -94
- package/components/Pagination/PaginationProvider.test.js +282 -282
- package/components/PreviewContext.d.ts +10 -10
- package/components/PreviewContext.js +26 -26
- package/components/ProductConfigurationProvider/ConfigPrice.gql +22 -22
- package/components/ProductConfigurationProvider/ProductConfigurationContext.d.ts +13 -13
- package/components/ProductConfigurationProvider/ProductConfigurationContext.js +4 -4
- package/components/ProductConfigurationProvider/ProductConfigurationProvider.d.ts +6 -6
- package/components/ProductConfigurationProvider/ProductConfigurationProvider.js +49 -49
- package/components/Query/CartProvider.d.ts +22 -22
- package/components/Query/CartProvider.js +67 -67
- package/components/SortOrder/SortOrderContainer.d.ts +40 -40
- package/components/SortOrder/SortOrderContainer.js +101 -101
- package/components/SortOrder/SortOrderContext.d.ts +9 -9
- package/components/SortOrder/SortOrderContext.js +8 -8
- package/components/StructuredData/SiteLinksSearchStructuredData.d.ts +3 -3
- package/components/StructuredData/SiteLinksSearchStructuredData.js +24 -24
- package/components/StructuredData/StructuredBreadcrumbData.d.ts +12 -12
- package/components/StructuredData/StructuredBreadcrumbData.js +54 -54
- package/components/StructuredData/StructuredCategoryData.d.ts +16 -16
- package/components/StructuredData/StructuredCategoryData.js +17 -17
- package/components/StructuredData/StructuredData.d.ts +9 -9
- package/components/StructuredData/StructuredData.js +6 -6
- package/components/StructuredData/StructuredPageData.d.ts +16 -16
- package/components/StructuredData/StructuredPageData.js +16 -16
- package/components/StructuredData/StructuredProductData.d.ts +18 -18
- package/components/StructuredData/StructuredProductData.js +42 -42
- package/components/StructuredData/StructuredProductData.test.js +130 -130
- package/components/StructuredData/index.d.ts +5 -5
- package/components/StructuredData/index.js +5 -5
- package/data/cache.d.ts +3 -3
- package/data/cache.js +20 -20
- package/data/fragmentTypes.d.ts +8 -8
- package/data/fragmentTypes.js +83 -83
- package/data/fragments/BadgeFragment.gql +7 -7
- package/data/fragments/CartCoreFragment.gql +89 -89
- package/data/fragments/ChannelsFragment.gql +59 -58
- package/data/fragments/CommentsFragment.gql +6 -6
- package/data/fragments/HeadFragment.gql +9 -9
- package/data/fragments/PriceFragment.gql +5 -5
- package/data/fragments/ProductCampaignFragment.gql +10 -10
- package/data/fragments/ProductConfigurationsFragment.gql +24 -24
- package/data/fragments/ProductListsFragments.gql +94 -94
- package/data/fragments/ProductMetadataFragment.gql +20 -20
- package/data/fragments/ProductPriceFragment.gql +10 -10
- package/data/fragments/ProductVariantPriceFragment.gql +10 -10
- package/data/fragments/RouteCrumbFragment.gql +20 -20
- package/data/fragments/RouteMetaFragment.gql +18 -18
- package/data/fragments/StockStatusFragment.gql +7 -7
- package/data/fragments/index.d.ts +1 -1
- package/data/fragments/index.js +1 -1
- package/data/mutations/accountMutations.gql +28 -28
- package/data/mutations/cartMutations.gql +41 -41
- package/data/mutations/productListMutations.gql +18 -18
- package/data/mutations/signup.gql +7 -7
- package/data/mutations/subscribeToNewsletter.gql +3 -3
- package/data/mutations/subscribeToStockNotifications.gql +6 -6
- package/data/mutations/updateCustomer.gql +5 -5
- package/data/mutations/updatePassword.gql +5 -5
- package/data/queries/CartMutationQuery.gql +36 -36
- package/data/queries/CartQuery.gql +7 -7
- package/data/queries/GetCustomerCountryCode.gql +9 -9
- package/data/queries/PersonLookupQuery.gql +28 -28
- package/data/queries/ProductLists.gql +8 -8
- package/dependencies.d.ts +104 -104
- package/errorReporting.browser.d.ts +3 -3
- package/errorReporting.browser.js +11 -11
- package/errorReporting.d.ts +3 -3
- package/errorReporting.js +19 -19
- package/errorReporting.server.d.ts +3 -3
- package/errorReporting.server.js +11 -11
- package/errorReporting.shared.d.ts +5 -5
- package/errorReporting.shared.js +16 -16
- package/experiments/ExperimentsProvider.d.ts +4 -4
- package/experiments/ExperimentsProvider.js +28 -28
- package/experiments/ExperimentsProvider.test.js +105 -105
- package/experiments/integration.test.js +76 -76
- package/experiments/selectExperimentVariant.d.ts +3 -3
- package/experiments/selectExperimentVariant.js +34 -34
- package/experiments/selectExperimentVariant.test.js +64 -64
- package/experiments/useExperiment.d.ts +2 -2
- package/experiments/useExperiment.js +10 -10
- package/experiments/useExperiment.test.js +100 -100
- package/global.d.ts +1 -1
- package/helpers/decodeUrlQuery.d.ts +9 -9
- package/helpers/decodeUrlQuery.js +26 -26
- package/helpers/decodeUrlQuery.test.js +54 -54
- package/helpers/distance.d.ts +7 -7
- package/helpers/distance.js +12 -12
- package/helpers/encodeVariant.d.ts +3 -3
- package/helpers/encodeVariant.js +24 -24
- package/helpers/getBreakpointsFromValues.d.ts +6 -6
- package/helpers/getBreakpointsFromValues.js +14 -14
- package/helpers/getBreakpointsFromValues.test.js +47 -47
- package/helpers/getCartItemVariant.d.ts +7 -7
- package/helpers/getCartItemVariant.js +8 -8
- package/helpers/getErrorDetail.d.ts +7 -7
- package/helpers/getErrorDetail.js +11 -11
- package/helpers/getErrorDetail.test.js +44 -44
- package/helpers/getHeaders.d.ts +6 -6
- package/helpers/getHeaders.js +3 -3
- package/helpers/isRelativeUrl.d.ts +1 -1
- package/helpers/isRelativeUrl.js +3 -3
- package/helpers/logError.d.ts +1 -1
- package/helpers/logError.js +16 -16
- package/helpers/logWarningInDev.d.ts +1 -1
- package/helpers/logWarningInDev.js +6 -6
- package/helpers/throwErrorInDev.d.ts +6 -6
- package/helpers/throwErrorInDev.js +14 -14
- package/helpers/uniqueId.d.ts +5 -5
- package/helpers/uniqueId.js +9 -9
- package/hooks/CartCheckoutQuery.gql +5 -5
- package/hooks/Channels/useChannelSettings.d.ts +7 -7
- package/hooks/Channels/useChannelSettings.js +11 -11
- package/hooks/Channels/useChannelSettings.js.map +1 -1
- package/hooks/Channels/useChannelSettings.test.js +51 -51
- package/hooks/Filters/useBooleanFilter.d.ts +8 -8
- package/hooks/Filters/useBooleanFilter.js +20 -20
- package/hooks/Filters/useFilters.d.ts +3 -3
- package/hooks/Filters/useFilters.js +15 -15
- package/hooks/Filters/useListFilter.d.ts +10 -10
- package/hooks/Filters/useListFilter.js +37 -37
- package/hooks/Filters/useMultiFilter.d.ts +13 -13
- package/hooks/Filters/useMultiFilter.js +49 -49
- package/hooks/Filters/useRangeFilter.d.ts +10 -10
- package/hooks/Filters/useRangeFilter.js +35 -35
- package/hooks/Filters/useSortOrder.d.ts +11 -11
- package/hooks/Filters/useSortOrder.js +21 -21
- package/hooks/FreeShippingQuery.gql +16 -16
- package/hooks/PackageProducts/index.d.ts +2 -2
- package/hooks/PackageProducts/index.js +2 -2
- package/hooks/PackageProducts/packagePriceQuery.gql +29 -29
- package/hooks/PackageProducts/usePackageProductItem.d.ts +17 -17
- package/hooks/PackageProducts/usePackageProductItem.js +26 -26
- package/hooks/PackageProducts/usePackageProducts.d.ts +19 -19
- package/hooks/PackageProducts/usePackageProducts.js +345 -345
- package/hooks/PackageProducts/usePackageProducts.test.js +383 -383
- package/hooks/Product/index.d.ts +1 -1
- package/hooks/Product/index.js +1 -1
- package/hooks/Product/useStockStatus.d.ts +9 -9
- package/hooks/Product/useStockStatus.js +25 -25
- package/hooks/Product/useSwitchToVariantImage.d.ts +9 -9
- package/hooks/Product/useSwitchToVariantImage.js +20 -20
- package/hooks/ProductList/ProductListContext.d.ts +7 -7
- package/hooks/ProductList/ProductListContext.js +110 -110
- package/hooks/ProductList/action-creators.d.ts +46 -46
- package/hooks/ProductList/action-creators.js +296 -296
- package/hooks/ProductList/index.d.ts +118 -118
- package/hooks/ProductList/index.js +21 -21
- package/hooks/ProductList/list-transforms.d.ts +73 -73
- package/hooks/ProductList/list-transforms.js +106 -106
- package/hooks/ProductList/list-transforms.test.js +489 -489
- package/hooks/ProductList/product-list-reducer.d.ts +76 -76
- package/hooks/ProductList/product-list-reducer.js +197 -197
- package/hooks/ProductList/product-list-reducer.test.js +464 -464
- package/hooks/ProductList/useProductList.d.ts +13 -13
- package/hooks/ProductList/useProductList.js +93 -93
- package/hooks/ProductList/useProductListItems.d.ts +10 -10
- package/hooks/ProductList/useProductListItems.js +48 -48
- package/hooks/ProductList/validate-product.d.ts +6 -6
- package/hooks/ProductList/validate-product.js +40 -40
- package/hooks/Subscriptions/useNewsletterSubscription.d.ts +38 -38
- package/hooks/Subscriptions/useNewsletterSubscription.js +41 -41
- package/hooks/Subscriptions/useStockNotifications.d.ts +36 -36
- package/hooks/Subscriptions/useStockNotifications.js +37 -37
- package/hooks/Subscriptions/useStoreSubscriptions.d.ts +48 -48
- package/hooks/Subscriptions/useStoreSubscriptions.js +150 -150
- package/hooks/Subscriptions/useStoresubscriptions.test.js +179 -179
- package/hooks/useAddMultipleToCart.d.ts +27 -27
- package/hooks/useAddMultipleToCart.js +113 -113
- package/hooks/useAddMultipleToCart.test.js +181 -181
- package/hooks/useChannelBanner.js +22 -22
- package/hooks/useChannelBanner.test.js +77 -77
- package/hooks/useCustomerOrders.test.js +176 -176
- package/hooks/useCustomerOrdersQuery.d.ts +21 -21
- package/hooks/useCustomerOrdersQuery.js +20 -20
- package/hooks/useDeleteAccountMutation.d.ts +15 -15
- package/hooks/useDeleteAccountMutation.js +38 -38
- package/hooks/useDynamicPrice.d.ts +3 -3
- package/hooks/useDynamicPrice.js +24 -24
- package/hooks/useFreeShippingCheck.d.ts +15 -15
- package/hooks/useFreeShippingCheck.js +30 -30
- package/hooks/useGeolocation.d.ts +11 -11
- package/hooks/useGeolocation.js +33 -33
- package/hooks/useInfinitePagination.d.ts +37 -37
- package/hooks/useInfinitePagination.js +138 -138
- package/hooks/useLogError.d.ts +1 -1
- package/hooks/useLogError.js +7 -7
- package/hooks/useLoginMutation.d.ts +12 -12
- package/hooks/useLoginMutation.js +14 -14
- package/hooks/useLoginRedirect.d.ts +4 -4
- package/hooks/useLoginRedirect.js +36 -36
- package/hooks/useOrderDetailQuery.d.ts +20 -20
- package/hooks/useOrderDetailQuery.js +28 -28
- package/hooks/usePreconnectLinks.d.ts +10 -10
- package/hooks/usePreconnectLinks.js +29 -29
- package/hooks/usePreconnectLinks.test.js +95 -95
- package/hooks/usePrice.d.ts +39 -39
- package/hooks/usePrice.js +71 -71
- package/hooks/usePrice.test.js +171 -171
- package/hooks/useProductVariants/index.d.ts +1 -1
- package/hooks/useProductVariants/index.js +1 -1
- package/hooks/useProductVariants/useProductVariants.d.ts +19 -19
- package/hooks/useProductVariants/useProductVariants.js +202 -202
- package/hooks/useProductVariants/useProductVariants.test.js +415 -415
- package/hooks/useProductVariants/useVariantFromUrl.d.ts +5 -5
- package/hooks/useProductVariants/useVariantFromUrl.js +15 -15
- package/hooks/useProductVariants/useVariantFromUrl.test.js +79 -79
- package/hooks/useRoutePreload.d.ts +24 -24
- package/hooks/useRoutePreload.js +39 -39
- package/hooks/useShopConfig.d.ts +1 -1
- package/hooks/useShopConfig.js +10 -10
- package/hooks/useShopConfig.js.map +1 -1
- package/hooks/useThrowErrorInDev.d.ts +1 -1
- package/hooks/useThrowErrorInDev.js +7 -7
- package/hooks/useThunkReducer.d.ts +7 -7
- package/hooks/useThunkReducer.js +23 -23
- package/hooks/useWarningInDev.d.ts +1 -1
- package/hooks/useWarningInDev.js +9 -9
- package/inServer.d.ts +1 -1
- package/inServer.js +2 -2
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/integrations/addwishSchemaExtension.d.ts +35 -35
- package/integrations/addwishSchemaExtension.js +140 -140
- package/integrations/nostoSchemaExtension.d.ts +5 -5
- package/integrations/nostoSchemaExtension.js +76 -76
- package/integrations/sluggishSchemaExtension.d.ts +2 -2
- package/integrations/sluggishSchemaExtension.js +26 -26
- package/package.json +2 -2
- package/polyfills.d.ts +1 -1
- package/polyfills.js +37 -37
- package/registerServiceWorker.js +110 -110
- package/resolvers/filters/boolFilter.d.ts +3 -3
- package/resolvers/filters/boolFilter.js +84 -84
- package/resolvers/filters/defaultActiveFilters.d.ts +3 -3
- package/resolvers/filters/defaultActiveFilters.js +8 -8
- package/resolvers/filters/filterParams.d.ts +3 -3
- package/resolvers/filters/filterParams.js +84 -84
- package/resolvers/filters/filters.d.ts +5 -5
- package/resolvers/filters/filters.js +78 -78
- package/resolvers/filters/index.d.ts +27 -27
- package/resolvers/filters/index.js +7 -7
- package/resolvers/filters/listFilter.d.ts +7 -7
- package/resolvers/filters/listFilter.js +73 -73
- package/resolvers/filters/listFilterItem.d.ts +3 -3
- package/resolvers/filters/listFilterItem.js +122 -122
- package/resolvers/filters/multiListFilter.d.ts +5 -5
- package/resolvers/filters/multiListFilter.js +195 -195
- package/resolvers/filters/multiListFilterList.d.ts +3 -3
- package/resolvers/filters/multiListFilterList.js +55 -55
- package/resolvers/filters/rangeFilter.d.ts +5 -5
- package/resolvers/filters/rangeFilter.js +137 -137
- package/resolvers/filters/updateQueryString.d.ts +12 -12
- package/resolvers/filters/updateQueryString.js +116 -116
- package/resolvers/index.d.ts +37 -37
- package/resolvers/index.js +37 -37
- package/scripts/dev-apolloServer.js +31 -31
- package/sentry/client.d.ts +1 -1
- package/sentry/client.js +29 -29
- package/sentry/common.d.ts +1 -1
- package/sentry/common.js +4 -4
- package/sentry/server.d.ts +1 -1
- package/sentry/server.js +19 -19
- package/sentry/utils.d.ts +1 -1
- package/sentry/utils.js +1 -1
- package/server/graphql.d.ts +20 -20
- package/server/graphql.js +118 -118
- package/server/graphql.test.js +123 -123
- package/server/index.d.ts +2 -2
- package/server/index.js +2 -2
- package/server/tracking/facebook.d.ts +5 -5
- package/server/tracking/facebook.js +132 -132
- package/server/tracking/middleware.d.ts +8 -8
- package/server/tracking/middleware.js +14 -14
- package/server/tracking/types.d.ts +33 -33
- package/setupTests.js +2 -2
- package/test-utils/ProviderPyramid.js +45 -45
- package/test-utils/mockShopConfig.js +26 -26
- package/test-utils/mockedProduct.js +253 -253
- package/test-utils/renderWithRouter.js +20 -20
- package/test-utils/variables.js +2465 -1231
- package/time.d.ts +1 -1
- package/time.js +5 -5
@@ -1,267 +1,373 @@
|
|
1
|
-
import acceptLanguageParser from 'accept-language-parser';
|
2
|
-
import qs from 'qs';
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
return
|
12
|
-
}
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
}
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
*
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
const
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
}
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
}
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
}
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
}
|
115
|
-
|
116
|
-
if (
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
return
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
const
|
155
|
-
return
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
const
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
const
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
}
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
1
|
+
import acceptLanguageParser from 'accept-language-parser';
|
2
|
+
import qs from 'qs';
|
3
|
+
const allChannelsGrouped = (availableChannels) => availableChannels.every((channel) => { var _a; return (_a = channel === null || channel === void 0 ? void 0 : channel.groupName) === null || _a === void 0 ? void 0 : _a.length; });
|
4
|
+
export const getGroupedChannels = (availableChannels, { groupName }) => {
|
5
|
+
const currentChannel = availableChannels.find((channel) => channel.groupName === groupName);
|
6
|
+
if (!currentChannel) {
|
7
|
+
return undefined;
|
8
|
+
}
|
9
|
+
const selectedChannelGroup = availableChannels.filter((channel) => channel.groupName === currentChannel.groupName);
|
10
|
+
if (selectedChannelGroup) {
|
11
|
+
return selectedChannelGroup;
|
12
|
+
}
|
13
|
+
else {
|
14
|
+
return undefined;
|
15
|
+
}
|
16
|
+
};
|
17
|
+
export const getURLBasename = (url) => {
|
18
|
+
return url.pathname.split('/')[1];
|
19
|
+
};
|
20
|
+
export const getURLLanguageBasename = ({ url, singleDomainMode }) => {
|
21
|
+
if (singleDomainMode) {
|
22
|
+
return url.pathname.split('/')[2];
|
23
|
+
}
|
24
|
+
else {
|
25
|
+
return getURLBasename(url);
|
26
|
+
}
|
27
|
+
};
|
28
|
+
/**
|
29
|
+
* Returns the default channel from a list of channels
|
30
|
+
* @param channels List of channels to search through
|
31
|
+
*/
|
32
|
+
export const getDefaultChannel = (channels) => {
|
33
|
+
return channels.find((channel) => channel.isDefault) || channels[0];
|
34
|
+
};
|
35
|
+
/**
|
36
|
+
* Converts a Channel object to a SelectedChannel with the specified culture and currency
|
37
|
+
* @param channel Channel to convert
|
38
|
+
* @param culture Desired culture
|
39
|
+
* @param currency Desired currency
|
40
|
+
* @param country? Optional desired country code
|
41
|
+
*/
|
42
|
+
export const createSelectedChannel = (channel, culture, currency, country, urlBasenameLanguage) => {
|
43
|
+
const selectedLanguage = channel.languages.find((language) => getLanguageFromCulture(language.culture) === urlBasenameLanguage) ||
|
44
|
+
channel.languages.find((language) => language.culture === culture) ||
|
45
|
+
channel.languages.find((language) => language.isDefault);
|
46
|
+
const selectedCurrency = channel.currencies.find((c) => c.id === currency) ||
|
47
|
+
channel.currencies.find((c) => c.isDefault);
|
48
|
+
// Set selectedCountry to the prop `country`, else use the default
|
49
|
+
const selectedCountry = channel.countries.find((c) => c.code === country) ||
|
50
|
+
channel.countries.find((c) => c.isDefault);
|
51
|
+
return Object.assign(Object.assign({}, channel), { currency: selectedCurrency || channel.defaultCurrency, language: selectedLanguage || channel.defaultLanguage, country: selectedCountry });
|
52
|
+
};
|
53
|
+
/**
|
54
|
+
* Returns a channel with the specified name
|
55
|
+
* @param channelName Name of the channel to be fond
|
56
|
+
* @param channels Array of channels to search through
|
57
|
+
*/
|
58
|
+
export const findChannel = (channelName, channels) => {
|
59
|
+
return channels.find((channel) => channel.name === channelName);
|
60
|
+
};
|
61
|
+
const sanitizeURL = (url) => String(url).replace(/^(?:[\w]+:\/\/)?(?:www\.)?/, '');
|
62
|
+
export const findChannelById = (id, channels) => {
|
63
|
+
return channels.find((channel) => channel.id === id);
|
64
|
+
};
|
65
|
+
export const findChannelByCountry = (countryCode, channels) => {
|
66
|
+
// We want to give priority to channels that have the country we are looking for as a default country
|
67
|
+
const channelWithDefaultCountry = channels.find((channel) => channel.countries.find((country) => country.code === countryCode && country.isDefault)
|
68
|
+
? true
|
69
|
+
: false);
|
70
|
+
if (!channelWithDefaultCountry) {
|
71
|
+
// If we don't find a channel with the default country then just return the first channel we find with that country
|
72
|
+
return channels.find((channel) => channel.countries.find((country) => country.code === countryCode)
|
73
|
+
? true
|
74
|
+
: false);
|
75
|
+
}
|
76
|
+
else {
|
77
|
+
return channelWithDefaultCountry;
|
78
|
+
}
|
79
|
+
};
|
80
|
+
export const getQueryObject = (url) => {
|
81
|
+
const queryObject = qs.parse(new URL(url).search, {
|
82
|
+
ignoreQueryPrefix: true
|
83
|
+
});
|
84
|
+
// We want to make this property case insensitive
|
85
|
+
if (queryObject.redirectdisabled) {
|
86
|
+
queryObject.redirectDisabled = queryObject.redirectdisabled;
|
87
|
+
}
|
88
|
+
return queryObject;
|
89
|
+
};
|
90
|
+
export const setChannelCookies = ({ culture, currency, channelCountry, channel, redirectDisabled }, cookies) => {
|
91
|
+
const expires = new Date();
|
92
|
+
expires.setFullYear(new Date().getFullYear() + 10);
|
93
|
+
if (redirectDisabled) {
|
94
|
+
cookies.remove('culture');
|
95
|
+
cookies.remove('currency');
|
96
|
+
cookies.remove('country');
|
97
|
+
cookies.remove('channel');
|
98
|
+
}
|
99
|
+
culture && cookies.set('culture', culture, { expires, path: '/' });
|
100
|
+
currency && cookies.set('currency', currency, { expires, path: '/' });
|
101
|
+
channelCountry &&
|
102
|
+
cookies.set('country', channelCountry, { expires, path: '/' });
|
103
|
+
channel && cookies.set('channel', channel, { expires, path: '/' });
|
104
|
+
};
|
105
|
+
export function getLanguageFromCulture(culture) {
|
106
|
+
return culture.split('-')[0];
|
107
|
+
}
|
108
|
+
export function getChannelBasename(selectedChannel) {
|
109
|
+
const channelUrl = new URL(selectedChannel.url);
|
110
|
+
let languageSuffix;
|
111
|
+
if (!selectedChannel.language.isDefault) {
|
112
|
+
languageSuffix =
|
113
|
+
'/' + getLanguageFromCulture(selectedChannel.language.culture);
|
114
|
+
}
|
115
|
+
let basename;
|
116
|
+
if (channelUrl.pathname !== '/') {
|
117
|
+
basename = channelUrl.pathname + (languageSuffix || '');
|
118
|
+
}
|
119
|
+
else if (languageSuffix) {
|
120
|
+
basename = languageSuffix;
|
121
|
+
}
|
122
|
+
return basename;
|
123
|
+
}
|
124
|
+
export function isInDev(url) {
|
125
|
+
return (url.indexOf('localhost') >= 0 ||
|
126
|
+
url.indexOf('.dev.jetshop.se') >= 0 ||
|
127
|
+
process.env.NODE_ENV === 'development');
|
128
|
+
}
|
129
|
+
function getChannelFromPathOrUrl({ url, singleDomainMode, channels }) {
|
130
|
+
if (isInDev(url) && singleDomainMode) {
|
131
|
+
const basename = getURLBasename(new URL(url));
|
132
|
+
const activeChannels = channels.filter((channel) => basename === getURLBasename(new URL(channel.url)));
|
133
|
+
// If we find more than one active channel we will end up in an infinite redirect so we return the first channel
|
134
|
+
// This likely means that there are multiple channels with the same basename but different domains
|
135
|
+
// To handle channel switching on development we also return the activeChannels array
|
136
|
+
return {
|
137
|
+
activeChannel: activeChannels.length > 1 ? null : activeChannels[0],
|
138
|
+
activeChannels
|
139
|
+
};
|
140
|
+
}
|
141
|
+
else {
|
142
|
+
const currentUrl = sanitizeURL(url);
|
143
|
+
const sorted = channels.slice().sort((a, b) => b.url.length - a.url.length);
|
144
|
+
const activeChannels = sorted.filter((channel) => currentUrl.indexOf(sanitizeURL(channel.url)) === 0);
|
145
|
+
// If we find more than one active channel we will end up in an infinite redirect so we return false
|
146
|
+
// This likely means that there are multiple channels with the same domain
|
147
|
+
return {
|
148
|
+
activeChannel: activeChannels.length > 1 ? null : activeChannels[0],
|
149
|
+
activeChannels
|
150
|
+
};
|
151
|
+
}
|
152
|
+
}
|
153
|
+
function getChannelFromCookies({ cookies, channels }) {
|
154
|
+
const channelNameFromCookie = cookies.get('channel');
|
155
|
+
return findChannel(channelNameFromCookie, channels);
|
156
|
+
}
|
157
|
+
function setCookiesFromQueryString({ cookies, url }) {
|
158
|
+
// Get the culture, currency, country, channel from query string if set
|
159
|
+
const queryStringParams = getQueryObject(url);
|
160
|
+
// Set those values in to cookies
|
161
|
+
setChannelCookies(queryStringParams, cookies);
|
162
|
+
}
|
163
|
+
function getChannelFieldsFromCookies(cookies) {
|
164
|
+
const cultureFromCookie = cookies.get('culture');
|
165
|
+
const currencyFromCookie = cookies.get('currency');
|
166
|
+
const countryFromCookie = cookies.get('country');
|
167
|
+
const geoipCountryFromCookie = cookies.get('geoipCountry');
|
168
|
+
const acceptLanguageCultureFromCookie = cookies.get('acceptLanguageCulture');
|
169
|
+
return {
|
170
|
+
cultureFromCookie: cultureFromCookie || acceptLanguageCultureFromCookie,
|
171
|
+
currencyFromCookie,
|
172
|
+
countryFromCookie: countryFromCookie || geoipCountryFromCookie
|
173
|
+
};
|
174
|
+
}
|
175
|
+
function getCultureFromAcceptLanguages({ channel, acceptedLanguages }) {
|
176
|
+
const acceptedLanguagesString = typeof acceptedLanguages !== 'string'
|
177
|
+
? acceptedLanguages[0]
|
178
|
+
: acceptedLanguages;
|
179
|
+
const channelLanguages = channel.languages.map((language) => language.culture);
|
180
|
+
return (acceptedLanguages &&
|
181
|
+
acceptLanguageParser.pick(channelLanguages, acceptedLanguagesString));
|
182
|
+
}
|
183
|
+
function setGeoIpAndAcceptLanguageCookies({ cookies, geoipCountry, acceptLanguageCulture }) {
|
184
|
+
const expires = new Date();
|
185
|
+
expires.setFullYear(new Date().getFullYear() + 10);
|
186
|
+
geoipCountry &&
|
187
|
+
cookies.set('geoipCountry', geoipCountry, { expires, path: '/' });
|
188
|
+
acceptLanguageCulture &&
|
189
|
+
cookies.set('acceptLanguageCulture', acceptLanguageCulture, {
|
190
|
+
expires,
|
191
|
+
path: '/'
|
192
|
+
});
|
193
|
+
}
|
194
|
+
function getGroupedChannelsByUrl({ url, channels, singleDomainMode, cookies, geoipCountry }) {
|
195
|
+
const hasGroupedChannels = allChannelsGrouped(channels);
|
196
|
+
if (!hasGroupedChannels) {
|
197
|
+
return {
|
198
|
+
hasGroupedChannels,
|
199
|
+
groupByChannel: undefined
|
200
|
+
};
|
201
|
+
}
|
202
|
+
switch (true) {
|
203
|
+
case isInDev(url): {
|
204
|
+
if (singleDomainMode) {
|
205
|
+
const currentBaseUrl = getURLBasename(new URL(url));
|
206
|
+
// -> se, de, dk, es etcetc
|
207
|
+
return {
|
208
|
+
hasGroupedChannels,
|
209
|
+
groupByChannel: channels.find((channel) =>
|
210
|
+
// We always split channel.url to consider if trailing slashes are added in as BaseUrl
|
211
|
+
sanitizeURL(channel.url).split('/')[1] === currentBaseUrl)
|
212
|
+
};
|
213
|
+
}
|
214
|
+
else {
|
215
|
+
// Try to match with anything during development + non-singledomain,
|
216
|
+
// this is b/c we can't match dev urls with any baseurl.
|
217
|
+
// If one wan't to test it in dev one can use the ?channel=XX param.
|
218
|
+
const { activeChannel, chosenChannel } = getCurrentChannel({
|
219
|
+
url,
|
220
|
+
singleDomainMode,
|
221
|
+
channels,
|
222
|
+
cookies,
|
223
|
+
geoipCountry
|
224
|
+
});
|
225
|
+
return {
|
226
|
+
hasGroupedChannels,
|
227
|
+
// Active channel is given first priority. If it is null we are most likely in staging or development so chosenChannel or defaultChannel is used
|
228
|
+
groupByChannel: activeChannel || chosenChannel || getDefaultChannel(channels)
|
229
|
+
};
|
230
|
+
}
|
231
|
+
}
|
232
|
+
case singleDomainMode: {
|
233
|
+
const currentBaseUrl = sanitizeURL(url).split('/', 2);
|
234
|
+
// -> se, de, dk, es etcetc
|
235
|
+
return {
|
236
|
+
hasGroupedChannels,
|
237
|
+
groupByChannel: channels.find((channel) =>
|
238
|
+
// We always split channel.url to consider if trailing slashes are added in as BaseUrl
|
239
|
+
sanitizeURL(channel.url).split('/')[1] === currentBaseUrl[1]) || getDefaultChannel(channels)
|
240
|
+
};
|
241
|
+
}
|
242
|
+
default: {
|
243
|
+
const currentBaseUrl = sanitizeURL(url).split('/')[0];
|
244
|
+
// -> domain.com
|
245
|
+
return {
|
246
|
+
hasGroupedChannels,
|
247
|
+
groupByChannel: channels.find((channel) =>
|
248
|
+
// We always split channel.url to consider if trailing slashes are added in as BaseUrl
|
249
|
+
sanitizeURL(channel.url).split('/')[0] === currentBaseUrl)
|
250
|
+
};
|
251
|
+
}
|
252
|
+
}
|
253
|
+
}
|
254
|
+
// Is where we determine current channel to get return values in getSelectedAndRecommendedChannel
|
255
|
+
function getCurrentChannel({ url, singleDomainMode, channels, cookies, geoipCountry }) {
|
256
|
+
const { activeChannel, activeChannels } = getChannelFromPathOrUrl({
|
257
|
+
url,
|
258
|
+
singleDomainMode,
|
259
|
+
channels
|
260
|
+
});
|
261
|
+
const chosenChannel = getChannelFromCookies({
|
262
|
+
cookies,
|
263
|
+
channels
|
264
|
+
});
|
265
|
+
const channelFromGeoIp = findChannelByCountry(geoipCountry || cookies.get('geoipCountry'), channels);
|
266
|
+
// But have default channel as fallback,
|
267
|
+
const defaultChannel = getDefaultChannel(channels);
|
268
|
+
return {
|
269
|
+
activeChannel,
|
270
|
+
activeChannels,
|
271
|
+
chosenChannel,
|
272
|
+
channelFromGeoIp,
|
273
|
+
defaultChannel
|
274
|
+
};
|
275
|
+
}
|
276
|
+
export function getSelectedAndRecommendedChannel({ url, singleDomainMode, channels, cookies, geoipCountry, acceptedLanguages, disableGeoRedirect }) {
|
277
|
+
setCookiesFromQueryString({ cookies, url });
|
278
|
+
const { hasGroupedChannels, groupByChannel } = getGroupedChannelsByUrl({
|
279
|
+
url,
|
280
|
+
channels,
|
281
|
+
singleDomainMode,
|
282
|
+
cookies,
|
283
|
+
geoipCountry
|
284
|
+
});
|
285
|
+
// If available, use channel group from here on
|
286
|
+
// NB: All channels must be grouped and groupName is nullable.
|
287
|
+
const availableChannels = hasGroupedChannels && (groupByChannel === null || groupByChannel === void 0 ? void 0 : groupByChannel.groupName)
|
288
|
+
? getGroupedChannels(channels, {
|
289
|
+
groupName: groupByChannel.groupName
|
290
|
+
})
|
291
|
+
: channels;
|
292
|
+
const { defaultChannel, chosenChannel, activeChannel, activeChannels, channelFromGeoIp } = getCurrentChannel({
|
293
|
+
url,
|
294
|
+
singleDomainMode,
|
295
|
+
channels: availableChannels,
|
296
|
+
cookies,
|
297
|
+
geoipCountry
|
298
|
+
});
|
299
|
+
// Active channel is given first priority. If it is null we are most likely in staging or development so chosenChannel or defaultChannel is used
|
300
|
+
const pureChannel = activeChannel || chosenChannel || defaultChannel;
|
301
|
+
let redirect = false;
|
302
|
+
let pureRecommendedChannel;
|
303
|
+
// If a channel has been chosen we want to redirect to it
|
304
|
+
if (chosenChannel &&
|
305
|
+
activeChannel &&
|
306
|
+
activeChannel.id !== chosenChannel.id &&
|
307
|
+
// We don't want to redirect if the URLs of the channels are the same (i.e. demostore)
|
308
|
+
chosenChannel.url !== activeChannel.url) {
|
309
|
+
redirect = true;
|
310
|
+
pureRecommendedChannel = chosenChannel;
|
311
|
+
}
|
312
|
+
else if (channelFromGeoIp && pureChannel.id !== channelFromGeoIp.id) {
|
313
|
+
pureRecommendedChannel = channelFromGeoIp;
|
314
|
+
redirect = !disableGeoRedirect && !chosenChannel;
|
315
|
+
// this should happen when we can't find a matching channel from the url so we want to redirect such that the basename is included
|
316
|
+
}
|
317
|
+
else if (!activeChannel &&
|
318
|
+
singleDomainMode &&
|
319
|
+
activeChannels.length === 0) {
|
320
|
+
redirect = true;
|
321
|
+
pureRecommendedChannel = pureChannel;
|
322
|
+
}
|
323
|
+
// disable all redirects if either redirectDisabled or articlenumber (product previews) is in the query string
|
324
|
+
const { redirectDisabled, articlenumber } = getQueryObject(url);
|
325
|
+
if (redirectDisabled || articlenumber) {
|
326
|
+
redirect = false;
|
327
|
+
}
|
328
|
+
// This should only happen on the server. We do this because we need to know the channel languages before we can determine accept language culture
|
329
|
+
const acceptLanguageCulture = acceptedLanguages &&
|
330
|
+
getCultureFromAcceptLanguages({
|
331
|
+
channel: pureChannel,
|
332
|
+
acceptedLanguages
|
333
|
+
});
|
334
|
+
// set geoip and acceptLanguage as cookies so we can retrieve them on the client
|
335
|
+
setGeoIpAndAcceptLanguageCookies({
|
336
|
+
cookies,
|
337
|
+
geoipCountry,
|
338
|
+
acceptLanguageCulture
|
339
|
+
});
|
340
|
+
const { cultureFromCookie, currencyFromCookie, countryFromCookie } = getChannelFieldsFromCookies(cookies);
|
341
|
+
const urlBasenameLanguage = getURLLanguageBasename({
|
342
|
+
url: new URL(url),
|
343
|
+
singleDomainMode
|
344
|
+
});
|
345
|
+
const selectedChannel = createSelectedChannel(pureChannel, cultureFromCookie, currencyFromCookie, countryFromCookie, urlBasenameLanguage);
|
346
|
+
if (!selectedChannel.language.isDefault &&
|
347
|
+
getLanguageFromCulture(selectedChannel.language.culture) !==
|
348
|
+
urlBasenameLanguage) {
|
349
|
+
redirect = true;
|
350
|
+
pureRecommendedChannel = pureChannel;
|
351
|
+
}
|
352
|
+
const recommendedChannel = pureRecommendedChannel &&
|
353
|
+
createSelectedChannel(pureRecommendedChannel, cultureFromCookie, currencyFromCookie, countryFromCookie, urlBasenameLanguage);
|
354
|
+
return {
|
355
|
+
redirect,
|
356
|
+
selectedChannel,
|
357
|
+
recommendedChannel,
|
358
|
+
// for testing purposes mainly
|
359
|
+
channels: availableChannels
|
360
|
+
};
|
361
|
+
}
|
362
|
+
export function getChannelHeaders(channel) {
|
363
|
+
return channel
|
364
|
+
? {
|
365
|
+
currency: channel.currency.id,
|
366
|
+
channelid: channel.id,
|
367
|
+
culture: channel.language.culture,
|
368
|
+
country: channel.country.code,
|
369
|
+
name: channel.name
|
370
|
+
}
|
371
|
+
: {};
|
372
|
+
}
|
267
373
|
//# sourceMappingURL=channelUtils.js.map
|