@jetshop/core 5.13.11-0 → 5.14.0-alpha.abd04298
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 +311 -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 +784 -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 +2476 -1231
- package/time.d.ts +1 -1
- package/time.js +5 -5
@@ -1,267 +1,312 @@
|
|
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
|
-
|
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
|
-
const
|
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.length > 0) {
|
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
|
+
// Is where we determine current channel to get return values in getSelectedAndRecommendedChannel
|
195
|
+
function getCurrentChannel({ url, singleDomainMode, channels, cookies }) {
|
196
|
+
const { activeChannel, activeChannels } = getChannelFromPathOrUrl({
|
197
|
+
url,
|
198
|
+
singleDomainMode,
|
199
|
+
channels
|
200
|
+
});
|
201
|
+
const chosenChannel = getChannelFromCookies({
|
202
|
+
cookies,
|
203
|
+
channels
|
204
|
+
});
|
205
|
+
// But have default channel as fallback,
|
206
|
+
const defaultChannel = getDefaultChannel(channels);
|
207
|
+
return {
|
208
|
+
activeChannel,
|
209
|
+
activeChannels,
|
210
|
+
chosenChannel,
|
211
|
+
defaultChannel
|
212
|
+
};
|
213
|
+
}
|
214
|
+
export function getSelectedAndRecommendedChannel({ url, singleDomainMode, channels, cookies, geoipCountry, acceptedLanguages, disableGeoRedirect }) {
|
215
|
+
setCookiesFromQueryString({ cookies, url });
|
216
|
+
const { defaultChannel, chosenChannel, activeChannel, activeChannels } = getCurrentChannel({
|
217
|
+
url,
|
218
|
+
singleDomainMode,
|
219
|
+
channels,
|
220
|
+
cookies,
|
221
|
+
geoipCountry
|
222
|
+
});
|
223
|
+
// Active channel is given first priority. If it is null we are most likely in staging or development so chosenChannel or defaultChannel is used
|
224
|
+
// Definitions: Requested channel by url || Channel stored in cookies || Default channel
|
225
|
+
const pureChannel = activeChannel || chosenChannel || defaultChannel;
|
226
|
+
// NB: All channels must be grouped and groupName is nullable.
|
227
|
+
const availableChannels = allChannelsGrouped(channels)
|
228
|
+
? getGroupedChannels(channels, {
|
229
|
+
groupName: pureChannel.groupName
|
230
|
+
})
|
231
|
+
: channels;
|
232
|
+
const channelFromGeoIp = findChannelByCountry(geoipCountry || cookies.get('geoipCountry'), availableChannels);
|
233
|
+
let redirect = false;
|
234
|
+
let pureRecommendedChannel;
|
235
|
+
// If a channel has been chosen we want to redirect to it
|
236
|
+
if (chosenChannel &&
|
237
|
+
activeChannel &&
|
238
|
+
activeChannel.id !== chosenChannel.id &&
|
239
|
+
// We don't want to redirect if the URLs of the channels are the same (i.e. demostore)
|
240
|
+
chosenChannel.url !== activeChannel.url &&
|
241
|
+
// It is safe to redirect if the channel is part of the same group
|
242
|
+
(chosenChannel === null || chosenChannel === void 0 ? void 0 : chosenChannel.groupName) === (activeChannel === null || activeChannel === void 0 ? void 0 : activeChannel.groupName)) {
|
243
|
+
redirect = true;
|
244
|
+
pureRecommendedChannel = chosenChannel;
|
245
|
+
}
|
246
|
+
else if (channelFromGeoIp &&
|
247
|
+
// Recommend channel if it not the same as the current channel
|
248
|
+
pureChannel.id !== channelFromGeoIp.id &&
|
249
|
+
// Or is available in channel group
|
250
|
+
(pureChannel === null || pureChannel === void 0 ? void 0 : pureChannel.groupName) === (channelFromGeoIp === null || channelFromGeoIp === void 0 ? void 0 : channelFromGeoIp.groupName)) {
|
251
|
+
pureRecommendedChannel = channelFromGeoIp;
|
252
|
+
// Allow redirect if there's no channel in cookies (chosenChannel)
|
253
|
+
redirect = !disableGeoRedirect && !chosenChannel;
|
254
|
+
// the following should happen when we can't find a matching channel from the url so we want to redirect such that the basename is included
|
255
|
+
}
|
256
|
+
else if (!activeChannel &&
|
257
|
+
singleDomainMode &&
|
258
|
+
activeChannels.length === 0) {
|
259
|
+
redirect = true;
|
260
|
+
pureRecommendedChannel = pureChannel;
|
261
|
+
}
|
262
|
+
// disable all redirects if either redirectDisabled or articlenumber (product previews) is in the query string
|
263
|
+
const { redirectDisabled, articlenumber } = getQueryObject(url);
|
264
|
+
if (redirectDisabled || articlenumber) {
|
265
|
+
redirect = false;
|
266
|
+
}
|
267
|
+
// 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
|
268
|
+
const acceptLanguageCulture = acceptedLanguages &&
|
269
|
+
getCultureFromAcceptLanguages({
|
270
|
+
channel: pureChannel,
|
271
|
+
acceptedLanguages
|
272
|
+
});
|
273
|
+
// set geoip and acceptLanguage as cookies so we can retrieve them on the client
|
274
|
+
setGeoIpAndAcceptLanguageCookies({
|
275
|
+
cookies,
|
276
|
+
geoipCountry,
|
277
|
+
acceptLanguageCulture
|
278
|
+
});
|
279
|
+
const { cultureFromCookie, currencyFromCookie, countryFromCookie } = getChannelFieldsFromCookies(cookies);
|
280
|
+
const urlBasenameLanguage = getURLLanguageBasename({
|
281
|
+
url: new URL(url),
|
282
|
+
singleDomainMode
|
283
|
+
});
|
284
|
+
const selectedChannel = createSelectedChannel(pureChannel, cultureFromCookie, currencyFromCookie, countryFromCookie, urlBasenameLanguage);
|
285
|
+
if (!selectedChannel.language.isDefault &&
|
286
|
+
getLanguageFromCulture(selectedChannel.language.culture) !==
|
287
|
+
urlBasenameLanguage) {
|
288
|
+
redirect = true;
|
289
|
+
pureRecommendedChannel = pureChannel;
|
290
|
+
}
|
291
|
+
const recommendedChannel = pureRecommendedChannel &&
|
292
|
+
createSelectedChannel(pureRecommendedChannel, cultureFromCookie, currencyFromCookie, countryFromCookie, urlBasenameLanguage);
|
293
|
+
return {
|
294
|
+
redirect,
|
295
|
+
selectedChannel,
|
296
|
+
recommendedChannel,
|
297
|
+
// for testing purposes mainly
|
298
|
+
channels: availableChannels
|
299
|
+
};
|
300
|
+
}
|
301
|
+
export function getChannelHeaders(channel) {
|
302
|
+
return channel
|
303
|
+
? {
|
304
|
+
currency: channel.currency.id,
|
305
|
+
channelid: channel.id,
|
306
|
+
culture: channel.language.culture,
|
307
|
+
country: channel.country.code,
|
308
|
+
name: channel.name
|
309
|
+
}
|
310
|
+
: {};
|
311
|
+
}
|
267
312
|
//# sourceMappingURL=channelUtils.js.map
|