@faststore/core 3.99.1 → 4.0.0-dev.1
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/.turbo/turbo-generate.log +29 -0
- package/.turbo/turbo-test.log +47 -16
- package/@generated/cached-operations.json +24 -0
- package/@generated/gql.ts +134 -210
- package/@generated/graphql.ts +1628 -3037
- package/@generated/index.ts +1 -1
- package/@generated/persisted-documents.json +1 -1
- package/@generated/schema.graphql +1854 -1743
- package/CHANGELOG.md +11 -5
- package/README.md +2 -1
- package/api/index.ts +6 -7
- package/cms/faststore/base.jsonc +1 -1
- package/cms/faststore/components/cms_component__alert.jsonc +5 -1
- package/cms/faststore/components/cms_component__bannernewsletter.jsonc +5 -1
- package/cms/faststore/components/cms_component__bannertext.jsonc +5 -1
- package/cms/faststore/components/cms_component__breadcrumb.jsonc +16 -4
- package/cms/faststore/components/cms_component__cartsidebar.jsonc +21 -1
- package/cms/faststore/components/cms_component__children.jsonc +5 -1
- package/cms/faststore/components/cms_component__crosssellingshelf.jsonc +5 -1
- package/cms/faststore/components/cms_component__emptystate.jsonc +8 -3
- package/cms/faststore/components/cms_component__footer.jsonc +9 -3
- package/cms/faststore/components/cms_component__hero.jsonc +5 -1
- package/cms/faststore/components/cms_component__incentives.jsonc +5 -1
- package/cms/faststore/components/cms_component__navbar.jsonc +139 -1
- package/cms/faststore/components/cms_component__newsletter.jsonc +5 -1
- package/cms/faststore/components/cms_component__productdetails.jsonc +33 -1
- package/cms/faststore/components/cms_component__productgallery.jsonc +113 -15
- package/cms/faststore/components/cms_component__productshelf.jsonc +5 -1
- package/cms/faststore/components/cms_component__producttiles.jsonc +5 -1
- package/cms/faststore/components/cms_component__regionbar.jsonc +5 -1
- package/cms/faststore/components/cms_component__regionmodal.jsonc +5 -1
- package/cms/faststore/components/cms_component__regionpopover.jsonc +5 -1
- package/cms/faststore/components/cms_component__scrolltotopbutton.jsonc +29 -0
- package/cms/faststore/components/cms_component__search.jsonc +5 -1
- package/cms/faststore/content-types.json +115 -0
- package/cms/faststore/pages/cms_content_type__globalsections.jsonc +52 -0
- package/cms/faststore/pages/cms_content_type__home.jsonc +6 -0
- package/cms/faststore/pages/cms_content_type__landingpage.jsonc +8 -1
- package/cms/faststore/pages/cms_content_type__pdp.jsonc +6 -0
- package/cms/faststore/pages/cms_content_type__plp.jsonc +17 -0
- package/cms/faststore/pages/cms_content_type__search.jsonc +17 -0
- package/cms/faststore/schema.json +547 -43
- package/cms/faststore/sections.json +330 -21
- package/discovery.config.default.js +49 -3
- package/next-env.d.ts +2 -1
- package/next.config.js +48 -26
- package/package.json +47 -60
- package/public/icons.svg +5 -1
- package/scripts/i18n.js +76 -0
- package/src/components/account/MyAccountDrawer/OrganizationDrawer/OrganizationDrawer.tsx +2 -1
- package/src/components/account/MyAccountDrawer/OrganizationDrawer/section.module.scss +25 -24
- package/src/components/account/MyAccountDrawer/ProfileSummary/profile-summary.scss +8 -6
- package/src/components/account/MyAccountLayout/styles.scss +16 -12
- package/src/components/account/MyAccountMenu/styles.scss +21 -22
- package/src/components/account/MyAccountUserDetails/styles.module.scss +4 -2
- package/src/components/account/components/MyAccountAccordion/styles.scss +4 -2
- package/src/components/account/components/MyAccountHeader/styles.scss +3 -1
- package/src/components/account/components/MyAccountTable/styles.scss +6 -4
- package/src/components/account/orders/MyAccountListOrders/MyAccountFilterSlider/section.module.scss +21 -19
- package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/MyAccountListOrdersTable.tsx +3 -1
- package/src/components/account/orders/MyAccountListOrders/MyAccountListOrdersTable/styles.scss +5 -3
- package/src/components/account/orders/MyAccountListOrders/styles.module.scss +25 -22
- package/src/components/account/orders/MyAccountOrderDetails/MyAccountBudgetsCard/styles.scss +7 -5
- package/src/components/account/orders/MyAccountOrderDetails/MyAccountDeliveryOptionAccordion/styles.scss +7 -5
- package/src/components/account/orders/MyAccountOrderDetails/MyAccountMoreInformationCard/styles.scss +3 -1
- package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderActionModal/styles.module.scss +8 -6
- package/src/components/account/orders/MyAccountOrderDetails/MyAccountOrderActions/styles.scss +3 -1
- package/src/components/account/orders/MyAccountOrderDetails/MyAccountStatusCard/styles.scss +8 -6
- package/src/components/account/orders/MyAccountOrderDetails/section.module.scss +36 -43
- package/src/components/account/profile/profile.module.scss +3 -1
- package/src/components/account/section.module.scss +3 -1
- package/src/components/account/security/styles.module.scss +14 -8
- package/src/components/cart/CartSidebar/CartSidebar.tsx +10 -1
- package/src/components/cart/CartSidebar/section.module.scss +19 -17
- package/src/components/cart/EmptyCart/EmptyCart.tsx +12 -4
- package/src/components/cms/GlobalSections.tsx +12 -12
- package/src/components/cms/RenderSections.tsx +10 -2
- package/src/components/cms/plp/Components.ts +9 -0
- package/src/components/common/Alert/section.module.scss +10 -5
- package/src/components/common/PreviewTag/section.module.scss +48 -40
- package/src/components/common/Toast/section.module.scss +4 -2
- package/src/components/localization/LocalizationSelector/LocalizationSelector.tsx +320 -0
- package/src/components/localization/LocalizationSelector/index.ts +1 -0
- package/src/components/localization/LocalizationSelector/section.module.scss +18 -0
- package/src/components/localization/index.ts +1 -0
- package/src/components/navigation/Navbar/Navbar.tsx +49 -1
- package/src/components/navigation/NavbarSlider/NavbarSlider.tsx +19 -1
- package/src/components/navigation/NavbarSlider/section.module.scss +12 -10
- package/src/components/product/OutOfStock/OutOfStock.tsx +6 -1
- package/src/components/product/ProductCard/ProductCard.tsx +1 -1
- package/src/components/region/RegionModal/RegionModal.tsx +4 -1
- package/src/components/region/RegionModal/section.module.scss +10 -8
- package/src/components/region/RegionPopover/RegionPopover.tsx +6 -5
- package/src/components/region/RegionPopover/section.module.scss +9 -7
- package/src/components/region/RegionSlider/RegionSlider.tsx +5 -2
- package/src/components/region/RegionSlider/section.module.scss +16 -13
- package/src/components/search/Filter/FilterDeliveryMethodFacet.tsx +5 -5
- package/src/components/search/Filter/FilterDesktop.tsx +13 -4
- package/src/components/search/Filter/FilterSlider.tsx +18 -6
- package/src/components/search/Filter/section.module.scss +21 -19
- package/src/components/search/SearchDropdown/SearchDropdown.tsx +9 -7
- package/src/components/search/SearchHistory/SearchHistory.tsx +7 -2
- package/src/components/search/SearchInput/SearchInput.tsx +21 -8
- package/src/components/search/SearchProductItem/SearchProductItem.tsx +10 -3
- package/src/components/search/SearchTop/SearchTop.tsx +30 -24
- package/src/components/search/Sort/Sort.tsx +17 -19
- package/src/components/sections/Alert/Alert.tsx +6 -1
- package/src/components/sections/BannerNewsletter/section.module.scss +6 -4
- package/src/components/sections/BannerText/section.module.scss +5 -3
- package/src/components/sections/Breadcrumb/Breadcrumb.tsx +6 -2
- package/src/components/sections/Breadcrumb/section.module.scss +7 -5
- package/src/components/sections/EmptyState/section.module.scss +5 -3
- package/src/components/sections/Footer/Footer.tsx +1 -5
- package/src/components/sections/Footer/section.module.scss +10 -8
- package/src/components/sections/Hero/Hero.tsx +3 -1
- package/src/components/sections/Hero/section.module.scss +6 -4
- package/src/components/sections/Incentives/section.module.scss +5 -3
- package/src/components/sections/Navbar/Navbar.tsx +45 -0
- package/src/components/sections/Navbar/section.module.scss +34 -33
- package/src/components/sections/Newsletter/section.module.scss +10 -8
- package/src/components/sections/ProductDetails/ProductDetails.tsx +23 -1
- package/src/components/sections/ProductDetails/section.module.scss +32 -30
- package/src/components/sections/ProductGallery/EmptyGallery.tsx +13 -16
- package/src/components/sections/ProductGallery/section.module.scss +42 -39
- package/src/components/sections/ProductShelf/section.module.scss +22 -17
- package/src/components/sections/ProductTiles/section.module.scss +15 -13
- package/src/components/sections/RegionBar/section.module.scss +5 -3
- package/src/components/sections/ScrollToTopButton/ScrollToTopButton.tsx +4 -3
- package/src/components/sections/ScrollToTopButton/section.module.scss +4 -2
- package/src/components/templates/LandingPage/LandingPage.tsx +22 -16
- package/src/components/templates/ProductListingPage/ProductListing.tsx +1 -13
- package/src/components/templates/ProductListingPage/ProductListingPage.tsx +8 -3
- package/src/components/ui/Breadcrumb/Breadcrumb.tsx +14 -11
- package/src/components/ui/Button/ButtonSignIn/ButtonSignIn.tsx +2 -1
- package/src/components/ui/Button/ButtonSignIn/ButtonSignInFallback/ButtonSignInFallback.tsx +3 -1
- package/src/components/ui/Link/Link.tsx +19 -2
- package/src/components/ui/LinkButton/LinkButton.tsx +28 -0
- package/src/components/ui/LinkButton/index.ts +2 -0
- package/src/components/ui/LocalizationButton/LocalizationButton.tsx +124 -0
- package/src/components/ui/LocalizationButton/index.ts +1 -0
- package/src/components/ui/PickupPoints/PickupPointCards.tsx +2 -4
- package/src/components/ui/ProductComparison/ProductComparisonSidebar.tsx +34 -17
- package/src/components/ui/ProductDescription/ProductDescription.tsx +8 -3
- package/src/components/ui/ProductDetails/AddToCartLoadingSkeleton.tsx +6 -2
- package/src/components/ui/ProductDetails/ProductDetailsSettings.tsx +17 -5
- package/src/components/ui/ProductGallery/ProductGallery.tsx +7 -3
- package/src/components/ui/ProductGallery/ProductGalleryPage.tsx +1 -3
- package/src/components/ui/ShippingSimulation/ShippingSimulation.tsx +6 -1
- package/src/customizations/src/styles/custom-mixins.scss +0 -2
- package/src/experimental/index.ts +26 -0
- package/src/experimental/myAccountServerSideProps.ts +11 -2
- package/src/experimental/searchServerSideFunctions/getServerSideProps.ts +13 -7
- package/src/experimental/searchServerSideFunctions/getStaticProps.ts +5 -4
- package/src/instrumentation.ts +20 -6
- package/src/pages/404.tsx +5 -4
- package/src/pages/500.tsx +5 -4
- package/src/pages/[...slug].tsx +7 -4
- package/src/pages/[slug]/p.tsx +26 -8
- package/src/pages/_app.tsx +9 -1
- package/src/pages/api/fs/logout.ts +3 -2
- package/src/pages/api/graphql.ts +7 -23
- package/src/pages/api/preview.ts +21 -8
- package/src/pages/checkout.tsx +15 -5
- package/src/pages/index.tsx +18 -9
- package/src/pages/login.tsx +5 -4
- package/src/pages/pvt/account/403.tsx +11 -2
- package/src/pages/pvt/account/404.tsx +13 -3
- package/src/pages/pvt/account/index.tsx +6 -4
- package/src/pages/pvt/account/orders/[id].tsx +11 -3
- package/src/pages/pvt/account/orders/index.tsx +11 -3
- package/src/pages/pvt/account/profile.tsx +11 -2
- package/src/pages/pvt/account/security.tsx +11 -2
- package/src/pages/pvt/account/user-details.tsx +11 -2
- package/src/pages/s.tsx +26 -6
- package/src/proxy.ts +154 -0
- package/src/sdk/account/refreshToken.ts +4 -4
- package/src/sdk/account/useReorder.ts +8 -2
- package/src/sdk/analytics/platform/vtex/search.ts +3 -2
- package/src/sdk/cart/redirectToCheckout.ts +14 -8
- package/src/sdk/cart/useCheckoutButton.ts +7 -1
- package/src/sdk/deliveryPromise/useDeliveryPromise.ts +10 -18
- package/src/sdk/graphql/request.ts +102 -50
- package/src/sdk/localization/bindingSelector.ts +91 -0
- package/src/sdk/localization/index.ts +4 -0
- package/src/sdk/localization/match-url.ts +64 -0
- package/src/sdk/localization/types.ts +31 -0
- package/src/sdk/localization/useBindingSelector.ts +183 -0
- package/src/sdk/localization/useLocaleValidation.ts +49 -0
- package/src/sdk/localization/useLocalizationConfig.tsx +160 -0
- package/src/sdk/offer/fetcher.ts +3 -2
- package/src/sdk/product/useLocalizedVariables.ts +1 -1
- package/src/sdk/product/usePageProductsQuery.ts +2 -2
- package/src/sdk/product/useProductGalleryQuery.ts +1 -2
- package/src/sdk/product/useProductLink.ts +3 -1
- package/src/sdk/search/formatSearchPath.ts +28 -3
- package/src/sdk/search/state.ts +22 -13
- package/src/sdk/search/useSearchBase.ts +10 -0
- package/src/sdk/search/useSearchHistory.ts +41 -7
- package/src/sdk/session/index.ts +21 -3
- package/src/sdk/shipping/useShippingSimulation.ts +10 -2
- package/src/sdk/tsconfig.json +6 -0
- package/src/sdk/ui/useLink.ts +48 -0
- package/src/server/cms/global.ts +40 -0
- package/src/server/cms/index.ts +18 -10
- package/src/server/cms/pdp.ts +1 -0
- package/src/server/cms/plp.ts +3 -0
- package/src/server/content/service.ts +36 -24
- package/src/server/content/types.ts +10 -3
- package/src/server/index.ts +27 -20
- package/src/server/options.ts +27 -2
- package/src/styles/global/index.scss +10 -7
- package/src/styles/main.scss +3 -3
- package/src/typings/locales.ts +41 -0
- package/src/utils/fetchProductGallerySSR.ts +3 -1
- package/src/utils/getBaseDomain.ts +2 -1
- package/src/utils/getRequestHostname.ts +26 -0
- package/src/utils/globalSettings.ts +11 -0
- package/src/utils/localization/bindingPaths.ts +337 -0
- package/src/utils/localization/validateLocaleForHostname.ts +69 -0
- package/src/utils/localization/withLocaleValidation.ts +36 -0
- package/src/utils/utilities.ts +22 -0
- package/test/pages/api/preview.test.ts +93 -0
- package/test/sdk/localization/bindingSelector.test.ts +246 -0
- package/test/sdk/localization/store-url.browser.test.ts +140 -0
- package/test/sdk/localization/store-url.test.ts +96 -0
- package/test/sdk/localization/useBindingSelector.test.tsx +219 -0
- package/test/sdk/search/useSearchHistory.test.ts +222 -0
- package/test/server/cms/index.test.ts +3 -4
- package/test/server/content/service.test.ts +98 -0
- package/test/server/index.test.ts +10 -22
- package/test/utils/cookieCacheBusting.test.ts +32 -24
- package/test/utils/getRequestHostname.test.ts +71 -0
- package/test/utils/localization/bindingPaths.test.ts +706 -0
- package/test/utils/match-url.test.ts +388 -0
- package/tsconfig.json +11 -3
- package/vitest.config.ts +61 -0
- package/.next/BUILD_ID +0 -1
- package/.next/build-manifest.json +0 -197
- package/.next/cache/.tsbuildinfo +0 -1
- package/.next/cache/config.json +0 -7
- package/.next/cache/webpack/client-production/0.pack +0 -0
- package/.next/cache/webpack/client-production/index.pack +0 -0
- package/.next/cache/webpack/edge-server-production/0.pack +0 -0
- package/.next/cache/webpack/edge-server-production/index.pack +0 -0
- package/.next/cache/webpack/server-production/0.pack +0 -0
- package/.next/cache/webpack/server-production/index.pack +0 -0
- package/.next/export-marker.json +0 -1
- package/.next/images-manifest.json +0 -1
- package/.next/next-minimal-server.js.nft.json +0 -1
- package/.next/next-server.js.nft.json +0 -1
- package/.next/package.json +0 -1
- package/.next/prerender-manifest.js +0 -1
- package/.next/prerender-manifest.json +0 -1
- package/.next/react-loadable-manifest.json +0 -478
- package/.next/required-server-files.json +0 -1
- package/.next/routes-manifest.json +0 -1
- package/.next/server/chunks/1280.js +0 -1
- package/.next/server/chunks/1454.js +0 -1
- package/.next/server/chunks/1554.js +0 -1
- package/.next/server/chunks/1607.js +0 -1
- package/.next/server/chunks/1780.js +0 -1
- package/.next/server/chunks/1917.js +0 -1
- package/.next/server/chunks/1972.js +0 -1
- package/.next/server/chunks/2230.js +0 -1
- package/.next/server/chunks/2249.js +0 -1
- package/.next/server/chunks/2430.js +0 -1
- package/.next/server/chunks/2445.js +0 -12
- package/.next/server/chunks/2570.js +0 -1
- package/.next/server/chunks/2792.js +0 -1
- package/.next/server/chunks/2903.js +0 -1
- package/.next/server/chunks/294.js +0 -1
- package/.next/server/chunks/2955.js +0 -1
- package/.next/server/chunks/3006.js +0 -1
- package/.next/server/chunks/3029.js +0 -1
- package/.next/server/chunks/3060.js +0 -1
- package/.next/server/chunks/3408.js +0 -1
- package/.next/server/chunks/3483.js +0 -1
- package/.next/server/chunks/3683.js +0 -1
- package/.next/server/chunks/3836.js +0 -1
- package/.next/server/chunks/3890.js +0 -494
- package/.next/server/chunks/3922.js +0 -1
- package/.next/server/chunks/3945.js +0 -1
- package/.next/server/chunks/3951.js +0 -7
- package/.next/server/chunks/416.js +0 -1
- package/.next/server/chunks/4194.js +0 -1
- package/.next/server/chunks/4365.js +0 -1
- package/.next/server/chunks/4451.js +0 -1
- package/.next/server/chunks/4803.js +0 -1
- package/.next/server/chunks/4913.js +0 -13
- package/.next/server/chunks/5402.js +0 -1
- package/.next/server/chunks/5723.js +0 -13
- package/.next/server/chunks/5796.js +0 -1
- package/.next/server/chunks/6393.js +0 -1
- package/.next/server/chunks/6457.js +0 -6
- package/.next/server/chunks/6698.js +0 -1
- package/.next/server/chunks/6804.js +0 -6
- package/.next/server/chunks/6886.js +0 -1
- package/.next/server/chunks/7098.js +0 -9
- package/.next/server/chunks/7169.js +0 -1
- package/.next/server/chunks/7228.js +0 -1
- package/.next/server/chunks/7275.js +0 -1
- package/.next/server/chunks/7371.js +0 -1
- package/.next/server/chunks/7692.js +0 -1
- package/.next/server/chunks/7799.js +0 -1
- package/.next/server/chunks/8068.js +0 -1
- package/.next/server/chunks/83.js +0 -1
- package/.next/server/chunks/831.js +0 -1
- package/.next/server/chunks/8563.js +0 -1
- package/.next/server/chunks/8569.js +0 -1
- package/.next/server/chunks/8687.js +0 -1
- package/.next/server/chunks/870.js +0 -1
- package/.next/server/chunks/8737.js +0 -1
- package/.next/server/chunks/8741.js +0 -1
- package/.next/server/chunks/9088.js +0 -1
- package/.next/server/chunks/9117.js +0 -1
- package/.next/server/chunks/9237.js +0 -1
- package/.next/server/chunks/948.js +0 -3
- package/.next/server/chunks/9563.js +0 -3
- package/.next/server/chunks/9570.js +0 -1
- package/.next/server/chunks/9740.js +0 -1
- package/.next/server/chunks/9853.js +0 -1
- package/.next/server/chunks/9984.js +0 -1
- package/.next/server/chunks/9985.js +0 -1
- package/.next/server/chunks/9990.js +0 -1
- package/.next/server/chunks/ButtonSignIn.js +0 -1
- package/.next/server/chunks/Dropdown.js +0 -1
- package/.next/server/chunks/DropdownButton.js +0 -1
- package/.next/server/chunks/DropdownItem.js +0 -1
- package/.next/server/chunks/DropdownMenu.js +0 -1
- package/.next/server/chunks/FilterSkeleton.js +0 -1
- package/.next/server/chunks/ScrollToTopButton.js +0 -1
- package/.next/server/chunks/UIBannerText.js +0 -1
- package/.next/server/chunks/UISKUMatrixSidebar.js +0 -1
- package/.next/server/chunks/font-manifest.json +0 -1
- package/.next/server/edge-instrumentation.js +0 -2
- package/.next/server/edge-instrumentation.js.map +0 -1
- package/.next/server/edge-runtime-webpack.js +0 -157
- package/.next/server/edge-runtime-webpack.js.map +0 -1
- package/.next/server/font-manifest.json +0 -1
- package/.next/server/functions-config-manifest.json +0 -1
- package/.next/server/instrumentation.js +0 -1
- package/.next/server/instrumentation.js.nft.json +0 -1
- package/.next/server/middleware-build-manifest.js +0 -1
- package/.next/server/middleware-manifest.json +0 -6
- package/.next/server/middleware-react-loadable-manifest.js +0 -1
- package/.next/server/next-font-manifest.js +0 -1
- package/.next/server/next-font-manifest.json +0 -1
- package/.next/server/pages/404.js +0 -1
- package/.next/server/pages/404.js.nft.json +0 -1
- package/.next/server/pages/500.js +0 -1
- package/.next/server/pages/500.js.nft.json +0 -1
- package/.next/server/pages/[...slug].js +0 -1
- package/.next/server/pages/[...slug].js.nft.json +0 -1
- package/.next/server/pages/[slug]/p.js +0 -1
- package/.next/server/pages/[slug]/p.js.nft.json +0 -1
- package/.next/server/pages/_app.js +0 -1
- package/.next/server/pages/_app.js.nft.json +0 -1
- package/.next/server/pages/_document.js +0 -1
- package/.next/server/pages/_document.js.nft.json +0 -1
- package/.next/server/pages/_error.js +0 -1
- package/.next/server/pages/_error.js.nft.json +0 -1
- package/.next/server/pages/api/fs/logout.js +0 -1
- package/.next/server/pages/api/fs/logout.js.nft.json +0 -1
- package/.next/server/pages/api/graphql.js +0 -3
- package/.next/server/pages/api/graphql.js.nft.json +0 -1
- package/.next/server/pages/api/health/live.js +0 -1
- package/.next/server/pages/api/health/live.js.nft.json +0 -1
- package/.next/server/pages/api/health/ready.js +0 -1
- package/.next/server/pages/api/health/ready.js.nft.json +0 -1
- package/.next/server/pages/api/preview.js +0 -1
- package/.next/server/pages/api/preview.js.nft.json +0 -1
- package/.next/server/pages/checkout.js +0 -1
- package/.next/server/pages/checkout.js.nft.json +0 -1
- package/.next/server/pages/en-US/404.html +0 -42
- package/.next/server/pages/en-US/404.json +0 -1
- package/.next/server/pages/en-US/500.html +0 -42
- package/.next/server/pages/en-US/500.json +0 -1
- package/.next/server/pages/en-US/checkout.html +0 -42
- package/.next/server/pages/en-US/checkout.json +0 -1
- package/.next/server/pages/en-US/login.html +0 -42
- package/.next/server/pages/en-US/login.json +0 -1
- package/.next/server/pages/en-US/s.html +0 -42
- package/.next/server/pages/en-US/s.json +0 -1
- package/.next/server/pages/en-US.html +0 -42
- package/.next/server/pages/en-US.json +0 -1
- package/.next/server/pages/index.js +0 -1
- package/.next/server/pages/index.js.nft.json +0 -1
- package/.next/server/pages/login.js +0 -1
- package/.next/server/pages/login.js.nft.json +0 -1
- package/.next/server/pages/pvt/account/403.js +0 -1
- package/.next/server/pages/pvt/account/403.js.nft.json +0 -1
- package/.next/server/pages/pvt/account/404.js +0 -1
- package/.next/server/pages/pvt/account/404.js.nft.json +0 -1
- package/.next/server/pages/pvt/account/[...unknown].js +0 -1
- package/.next/server/pages/pvt/account/[...unknown].js.nft.json +0 -1
- package/.next/server/pages/pvt/account/orders/[id].js +0 -1
- package/.next/server/pages/pvt/account/orders/[id].js.nft.json +0 -1
- package/.next/server/pages/pvt/account/orders.js +0 -1
- package/.next/server/pages/pvt/account/orders.js.nft.json +0 -1
- package/.next/server/pages/pvt/account/profile.js +0 -1
- package/.next/server/pages/pvt/account/profile.js.nft.json +0 -1
- package/.next/server/pages/pvt/account/security.js +0 -1
- package/.next/server/pages/pvt/account/security.js.nft.json +0 -1
- package/.next/server/pages/pvt/account/user-details.js +0 -1
- package/.next/server/pages/pvt/account/user-details.js.nft.json +0 -1
- package/.next/server/pages/pvt/account.js +0 -1
- package/.next/server/pages/pvt/account.js.nft.json +0 -1
- package/.next/server/pages/s.js +0 -1
- package/.next/server/pages/s.js.nft.json +0 -1
- package/.next/server/pages-manifest.json +0 -1
- package/.next/server/webpack-api-runtime.js +0 -1
- package/.next/server/webpack-runtime.js +0 -1
- package/.next/static/NAuY8lqaeBBZf9CMZuYI2/_buildManifest.js +0 -1
- package/.next/static/NAuY8lqaeBBZf9CMZuYI2/_ssgManifest.js +0 -1
- package/.next/static/chunks/227-f109b24190a008ab.js +0 -8
- package/.next/static/chunks/2284.185d834d9829b652.js +0 -1
- package/.next/static/chunks/2851.e68ed3c8d27a032a.js +0 -1
- package/.next/static/chunks/2927.5a79877943a6bf7c.js +0 -1
- package/.next/static/chunks/3155.7bc4c730a79d9ecb.js +0 -1
- package/.next/static/chunks/3166-0b30a3887c0c346d.js +0 -1
- package/.next/static/chunks/3399.017c5209b74b0d97.js +0 -1
- package/.next/static/chunks/3483.ef53d632a763da3f.js +0 -1
- package/.next/static/chunks/349.b3b38e1e9f719dda.js +0 -1
- package/.next/static/chunks/3802.5e8b0b689eacc0f8.js +0 -1
- package/.next/static/chunks/3836.620480018be48233.js +0 -1
- package/.next/static/chunks/4436.e7af66f0b654ee36.js +0 -1
- package/.next/static/chunks/4803.b1920b6e3a1a6304.js +0 -1
- package/.next/static/chunks/5796.4351370494d8b8b6.js +0 -1
- package/.next/static/chunks/6393.55f991b1a6bb4fe7.js +0 -1
- package/.next/static/chunks/6700.b23221a57514e737.js +0 -1
- package/.next/static/chunks/6789.960162355435a81d.js +0 -1
- package/.next/static/chunks/7191-befad64ba238a817.js +0 -1
- package/.next/static/chunks/7692.8d5bf4560341a2f6.js +0 -1
- package/.next/static/chunks/7861.7f9f1a124a43da30.js +0 -6
- package/.next/static/chunks/8068.43663fb64762f7b8.js +0 -1
- package/.next/static/chunks/83.e0c16f0299b364a5.js +0 -1
- package/.next/static/chunks/8325.dabe9aa22eaadeed.js +0 -1
- package/.next/static/chunks/8587.53c8ce185ed1a2cb.js +0 -1
- package/.next/static/chunks/9173-e89da04079c35360.js +0 -2
- package/.next/static/chunks/9237.7555603703f81bf7.js +0 -1
- package/.next/static/chunks/9298-1d1ed0a54133cb59.js +0 -28
- package/.next/static/chunks/9399.d116a7fd62024783.js +0 -1
- package/.next/static/chunks/941.3e2782ab9c490eb0.js +0 -1
- package/.next/static/chunks/9701.f9a0bfffba8807dc.js +0 -1
- package/.next/static/chunks/9909.787576b171184aa5.js +0 -1
- package/.next/static/chunks/9960.7ef77f8a8b046170.js +0 -1
- package/.next/static/chunks/9979.aedbc094bdc2c599.js +0 -1
- package/.next/static/chunks/BannerNewsletter.00328ad162109908.js +0 -1
- package/.next/static/chunks/BannerText.dbbec87cadb8a521.js +0 -1
- package/.next/static/chunks/ButtonSignIn.f6e210eaca873e48.js +0 -1
- package/.next/static/chunks/CartItem.b34e295377f6f94f.js +0 -1
- package/.next/static/chunks/CartSidebar.ac447d1ef6276da1.js +0 -1
- package/.next/static/chunks/Dropdown.38b48c749bad6b60.js +0 -1
- package/.next/static/chunks/DropdownButton.66fa6b25dddb3a07.js +0 -1
- package/.next/static/chunks/DropdownItem.38b8f5a07c7f422a.js +0 -1
- package/.next/static/chunks/DropdownMenu.48b11521a24c6efd.js +0 -1
- package/.next/static/chunks/EmptyCart.320e2f94a0d5e6b1.js +0 -1
- package/.next/static/chunks/FilterSkeleton.7ab99e28f92341c9.js +0 -1
- package/.next/static/chunks/Footer.166b02c2f13980c6.js +0 -1
- package/.next/static/chunks/Gift.c49ba26da2fbab5e.js +0 -1
- package/.next/static/chunks/Newsletter.fc406f6029057022.js +0 -1
- package/.next/static/chunks/OrderSummary.5957d69f990d9add.js +0 -1
- package/.next/static/chunks/PreviewTag.f4f0c8710a7bcad9.js +0 -1
- package/.next/static/chunks/ProductShelf.cc46f5cdeeaeaff6.js +0 -1
- package/.next/static/chunks/ProductTiles.9b804e51b0704d60.js +0 -1
- package/.next/static/chunks/RegionModal.319ad44250cb12d2.js +0 -1
- package/.next/static/chunks/RegionSlider.0e0e93369f4f9c92.js +0 -1
- package/.next/static/chunks/ScrollToTopButton.c15431f2e8bb93ef.js +0 -1
- package/.next/static/chunks/ShoppingAssistant.ba191eb4dbed67e5.js +0 -1
- package/.next/static/chunks/Toast.5f90f0436708be5e.js +0 -1
- package/.next/static/chunks/UIBannerText.7315b16af4457059.js +0 -1
- package/.next/static/chunks/UISKUMatrixSidebar.b4349b2682bbe183.js +0 -1
- package/.next/static/chunks/UIToast.19a8664c01a00d3a.js +0 -1
- package/.next/static/chunks/framework-d514426edf885c68.js +0 -33
- package/.next/static/chunks/main-ec03882c4375091d.js +0 -1
- package/.next/static/chunks/pages/404-e3dfbbac003b02a2.js +0 -1
- package/.next/static/chunks/pages/500-c7814e085081d7b8.js +0 -1
- package/.next/static/chunks/pages/[...slug]-dc8a395a43b081f1.js +0 -1
- package/.next/static/chunks/pages/[slug]/p-644f1132f5a0f736.js +0 -1
- package/.next/static/chunks/pages/_app-84aaff8a9d4de60e.js +0 -1
- package/.next/static/chunks/pages/_error-2b0148be56a716e9.js +0 -1
- package/.next/static/chunks/pages/checkout-2071467ad42dfb99.js +0 -1
- package/.next/static/chunks/pages/index-8774d5b4a8744eb2.js +0 -1
- package/.next/static/chunks/pages/login-e74747c9f9cb5b49.js +0 -1
- package/.next/static/chunks/pages/pvt/account/403-491e6b062487b30f.js +0 -1
- package/.next/static/chunks/pages/pvt/account/404-5ad472d9f2ee1980.js +0 -1
- package/.next/static/chunks/pages/pvt/account/[...unknown]-f80f645594d2740c.js +0 -1
- package/.next/static/chunks/pages/pvt/account/orders/[id]-64e42157c0974c48.js +0 -1
- package/.next/static/chunks/pages/pvt/account/orders-faab39f2aff05fae.js +0 -1
- package/.next/static/chunks/pages/pvt/account/profile-9672177ee2665bc0.js +0 -1
- package/.next/static/chunks/pages/pvt/account/security-03eb1ccab9a30563.js +0 -1
- package/.next/static/chunks/pages/pvt/account/user-details-7838e3f79781596c.js +0 -1
- package/.next/static/chunks/pages/pvt/account-65fefcc699344bdb.js +0 -1
- package/.next/static/chunks/pages/s-162ba789e6611175.js +0 -1
- package/.next/static/chunks/polyfills-c67a75d1b6f99dc8.js +0 -1
- package/.next/static/chunks/webpack-f621ff3e951d2982.js +0 -1
- package/.next/static/css/02259c549b2179f2.css +0 -1
- package/.next/static/css/02eaf202d3d11fd1.css +0 -1
- package/.next/static/css/033e241c58ba6fbb.css +0 -1
- package/.next/static/css/042d012bc1895b5c.css +0 -1
- package/.next/static/css/14176a4704ff97b2.css +0 -1
- package/.next/static/css/146a8678babc61bf.css +0 -1
- package/.next/static/css/16d65422bfa80f51.css +0 -1
- package/.next/static/css/1c4983f11b861ea0.css +0 -1
- package/.next/static/css/204754bbd8cc4bef.css +0 -1
- package/.next/static/css/24d91007fc96be10.css +0 -1
- package/.next/static/css/2980acad3f8e1028.css +0 -1
- package/.next/static/css/2c19433e38fd7533.css +0 -1
- package/.next/static/css/31380ebc6e671486.css +0 -1
- package/.next/static/css/42df884711219edb.css +0 -1
- package/.next/static/css/4f0597b0bf0ef2e1.css +0 -1
- package/.next/static/css/54cedf4b65e5863f.css +0 -1
- package/.next/static/css/6580147d7ab8fcca.css +0 -1
- package/.next/static/css/6819dddf2b1b5ea7.css +0 -1
- package/.next/static/css/7ef7762f412ed665.css +0 -1
- package/.next/static/css/82f3cd529b672812.css +0 -1
- package/.next/static/css/837662922091162f.css +0 -1
- package/.next/static/css/8e6ab59ace21e03b.css +0 -1
- package/.next/static/css/a852afa9be31e946.css +0 -1
- package/.next/static/css/b684b347c5cc6514.css +0 -1
- package/.next/static/css/bcdaef0a83277ef5.css +0 -1
- package/.next/static/css/c33615999008d3f9.css +0 -1
- package/.next/static/css/c34f6ea9953e2f63.css +0 -1
- package/.next/static/css/ea11d74a2848b093.css +0 -1
- package/.next/static/css/f16438bcf4508fb3.css +0 -1
- package/.next/static/css/f60366555f563deb.css +0 -1
- package/.next/trace +0 -143
- package/.turbo/turbo-build.log +0 -140
- package/jest.config.js +0 -17
- package/public/~partytown/debug/partytown-atomics.js +0 -556
- package/public/~partytown/debug/partytown-media.js +0 -374
- package/public/~partytown/debug/partytown-sandbox-sw.js +0 -543
- package/public/~partytown/debug/partytown-sw.js +0 -59
- package/public/~partytown/debug/partytown-ww-atomics.js +0 -1789
- package/public/~partytown/debug/partytown-ww-sw.js +0 -1781
- package/public/~partytown/debug/partytown.js +0 -72
- package/public/~partytown/partytown-atomics.js +0 -2
- package/public/~partytown/partytown-media.js +0 -2
- package/public/~partytown/partytown-sw.js +0 -2
- package/public/~partytown/partytown.js +0 -2
- package/src/middleware__DISABLED.ts +0 -65
- package/src/server/generator/generateGraphQLSchemaFile.ts +0 -3
- package/src/server/generator/schema.ts +0 -81
|
@@ -24,6 +24,7 @@ import { execute } from 'src/server'
|
|
|
24
24
|
import { injectGlobalSections } from 'src/server/cms/global'
|
|
25
25
|
import { getMyAccountRedirect } from 'src/utils/myAccountRedirect'
|
|
26
26
|
import { extractStatusFromError } from 'src/utils/utilities'
|
|
27
|
+
import { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'
|
|
27
28
|
|
|
28
29
|
const COMPONENTS: Record<string, ComponentType<any>> = {
|
|
29
30
|
...GLOBAL_COMPONENTS,
|
|
@@ -280,7 +281,7 @@ const query = gql(`
|
|
|
280
281
|
}
|
|
281
282
|
`)
|
|
282
283
|
|
|
283
|
-
|
|
284
|
+
const getServerSidePropsBase: GetServerSideProps<
|
|
284
285
|
OrderDetailsPageProps,
|
|
285
286
|
Record<string, string>,
|
|
286
287
|
Locator
|
|
@@ -299,15 +300,18 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
299
300
|
}
|
|
300
301
|
|
|
301
302
|
const {
|
|
302
|
-
previewData,
|
|
303
303
|
params: { id },
|
|
304
304
|
} = context
|
|
305
|
+
const contentContext = {
|
|
306
|
+
previewData: context.previewData,
|
|
307
|
+
locale: context.locale,
|
|
308
|
+
}
|
|
305
309
|
|
|
306
310
|
const [
|
|
307
311
|
globalSectionsPromise,
|
|
308
312
|
globalSectionsHeaderPromise,
|
|
309
313
|
globalSectionsFooterPromise,
|
|
310
|
-
] = getGlobalSectionsData(
|
|
314
|
+
] = getGlobalSectionsData(contentContext)
|
|
311
315
|
|
|
312
316
|
const [
|
|
313
317
|
orderDetails,
|
|
@@ -366,3 +370,7 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
366
370
|
},
|
|
367
371
|
}
|
|
368
372
|
}
|
|
373
|
+
|
|
374
|
+
export const getServerSideProps = withLocaleValidationSSR(
|
|
375
|
+
getServerSidePropsBase
|
|
376
|
+
)
|
|
@@ -19,6 +19,7 @@ import { default as BeforeSection } from 'src/customizations/src/myAccount/exten
|
|
|
19
19
|
import type { MyAccountProps } from 'src/experimental/myAccountServerSideProps'
|
|
20
20
|
import { execute } from 'src/server'
|
|
21
21
|
import { injectGlobalSections } from 'src/server/cms/global'
|
|
22
|
+
import { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'
|
|
22
23
|
import { getMyAccountRedirect } from 'src/utils/myAccountRedirect'
|
|
23
24
|
import { groupOrderStatusByLabel } from 'src/utils/userOrderStatus'
|
|
24
25
|
|
|
@@ -125,7 +126,7 @@ const query = gql(`
|
|
|
125
126
|
}
|
|
126
127
|
`)
|
|
127
128
|
|
|
128
|
-
|
|
129
|
+
const getServerSidePropsBase: GetServerSideProps<
|
|
129
130
|
MyAccountProps,
|
|
130
131
|
Record<string, string>,
|
|
131
132
|
Locator
|
|
@@ -135,7 +136,10 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
135
136
|
account: storeConfig.api.storeId,
|
|
136
137
|
})
|
|
137
138
|
|
|
138
|
-
const
|
|
139
|
+
const contentContext = {
|
|
140
|
+
previewData: context.previewData,
|
|
141
|
+
locale: context.locale,
|
|
142
|
+
}
|
|
139
143
|
|
|
140
144
|
const { isFaststoreMyAccountEnabled, redirect } = getMyAccountRedirect({
|
|
141
145
|
query: context.query,
|
|
@@ -149,7 +153,7 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
149
153
|
globalSectionsPromise,
|
|
150
154
|
globalSectionsHeaderPromise,
|
|
151
155
|
globalSectionsFooterPromise,
|
|
152
|
-
] = getGlobalSectionsData(
|
|
156
|
+
] = getGlobalSectionsData(contentContext)
|
|
153
157
|
|
|
154
158
|
const page = Number(context.query.page as string | undefined) || 1
|
|
155
159
|
const perPage = 25 // TODO: make this configurable
|
|
@@ -253,3 +257,7 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
253
257
|
},
|
|
254
258
|
}
|
|
255
259
|
}
|
|
260
|
+
|
|
261
|
+
export const getServerSideProps = withLocaleValidationSSR(
|
|
262
|
+
getServerSidePropsBase
|
|
263
|
+
)
|
|
@@ -21,6 +21,7 @@ import type { MyAccountProps } from 'src/experimental/myAccountServerSideProps'
|
|
|
21
21
|
import { getIsRepresentative } from 'src/sdk/account/getIsRepresentative'
|
|
22
22
|
import { injectGlobalSections } from 'src/server/cms/global'
|
|
23
23
|
import { getMyAccountRedirect } from 'src/utils/myAccountRedirect'
|
|
24
|
+
import { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'
|
|
24
25
|
|
|
25
26
|
import storeConfig from 'discovery.config'
|
|
26
27
|
import PageProvider from 'src/sdk/overrides/PageProvider'
|
|
@@ -77,7 +78,7 @@ const query = gql(`
|
|
|
77
78
|
}
|
|
78
79
|
`)
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
const getServerSidePropsBase: GetServerSideProps<
|
|
81
82
|
MyAccountProps,
|
|
82
83
|
Record<string, string>,
|
|
83
84
|
Locator
|
|
@@ -94,12 +95,16 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
94
95
|
headers: context.req.headers as Record<string, string>,
|
|
95
96
|
account: storeConfig.api.storeId,
|
|
96
97
|
})
|
|
98
|
+
const contentContext = {
|
|
99
|
+
previewData: context.previewData,
|
|
100
|
+
locale: context.locale,
|
|
101
|
+
}
|
|
97
102
|
|
|
98
103
|
const [
|
|
99
104
|
globalSectionsPromise,
|
|
100
105
|
globalSectionsHeaderPromise,
|
|
101
106
|
globalSectionsFooterPromise,
|
|
102
|
-
] = getGlobalSectionsData(
|
|
107
|
+
] = getGlobalSectionsData(contentContext)
|
|
103
108
|
|
|
104
109
|
const [profile, globalSections, globalSectionsHeader, globalSectionsFooter] =
|
|
105
110
|
await Promise.all([
|
|
@@ -150,3 +155,7 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
150
155
|
},
|
|
151
156
|
}
|
|
152
157
|
}
|
|
158
|
+
|
|
159
|
+
export const getServerSideProps = withLocaleValidationSSR(
|
|
160
|
+
getServerSidePropsBase
|
|
161
|
+
)
|
|
@@ -22,6 +22,7 @@ import { getIsRepresentative } from 'src/sdk/account/getIsRepresentative'
|
|
|
22
22
|
import { execute } from 'src/server'
|
|
23
23
|
import { injectGlobalSections } from 'src/server/cms/global'
|
|
24
24
|
import { getMyAccountRedirect } from 'src/utils/myAccountRedirect'
|
|
25
|
+
import { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'
|
|
25
26
|
|
|
26
27
|
import PageProvider from 'src/sdk/overrides/PageProvider'
|
|
27
28
|
|
|
@@ -77,7 +78,7 @@ const query = gql(`
|
|
|
77
78
|
}
|
|
78
79
|
`)
|
|
79
80
|
|
|
80
|
-
|
|
81
|
+
const getServerSidePropsBase: GetServerSideProps<
|
|
81
82
|
MyAccountProps,
|
|
82
83
|
Record<string, string>,
|
|
83
84
|
Locator
|
|
@@ -94,12 +95,16 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
94
95
|
if (!isFaststoreMyAccountEnabled) {
|
|
95
96
|
return { redirect }
|
|
96
97
|
}
|
|
98
|
+
const contentContext = {
|
|
99
|
+
previewData: context.previewData,
|
|
100
|
+
locale: context.locale,
|
|
101
|
+
}
|
|
97
102
|
|
|
98
103
|
const [
|
|
99
104
|
globalSectionsPromise,
|
|
100
105
|
globalSectionsHeaderPromise,
|
|
101
106
|
globalSectionsFooterPromise,
|
|
102
|
-
] = getGlobalSectionsData(
|
|
107
|
+
] = getGlobalSectionsData(contentContext)
|
|
103
108
|
|
|
104
109
|
const [security, globalSections, globalSectionsHeader, globalSectionsFooter] =
|
|
105
110
|
await Promise.all([
|
|
@@ -149,3 +154,7 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
149
154
|
},
|
|
150
155
|
}
|
|
151
156
|
}
|
|
157
|
+
|
|
158
|
+
export const getServerSideProps = withLocaleValidationSSR(
|
|
159
|
+
getServerSidePropsBase
|
|
160
|
+
)
|
|
@@ -25,6 +25,7 @@ import PageProvider from 'src/sdk/overrides/PageProvider'
|
|
|
25
25
|
import { execute } from 'src/server'
|
|
26
26
|
import { injectGlobalSections } from 'src/server/cms/global'
|
|
27
27
|
import { getMyAccountRedirect } from 'src/utils/myAccountRedirect'
|
|
28
|
+
import { withLocaleValidationSSR } from 'src/utils/localization/withLocaleValidation'
|
|
28
29
|
|
|
29
30
|
/* A list of components that can be used in the CMS. */
|
|
30
31
|
const COMPONENTS: Record<string, ComponentType<any>> = {
|
|
@@ -82,7 +83,7 @@ const query = gql(`
|
|
|
82
83
|
}
|
|
83
84
|
`)
|
|
84
85
|
|
|
85
|
-
|
|
86
|
+
const getServerSidePropsBase: GetServerSideProps<
|
|
86
87
|
MyAccountProps,
|
|
87
88
|
Record<string, string>,
|
|
88
89
|
Locator
|
|
@@ -99,12 +100,16 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
99
100
|
if (!isFaststoreMyAccountEnabled) {
|
|
100
101
|
return { redirect }
|
|
101
102
|
}
|
|
103
|
+
const contentContext = {
|
|
104
|
+
previewData: context.previewData,
|
|
105
|
+
locale: context.locale,
|
|
106
|
+
}
|
|
102
107
|
|
|
103
108
|
const [
|
|
104
109
|
globalSectionsPromise,
|
|
105
110
|
globalSectionsHeaderPromise,
|
|
106
111
|
globalSectionsFooterPromise,
|
|
107
|
-
] = getGlobalSectionsData(
|
|
112
|
+
] = getGlobalSectionsData(contentContext)
|
|
108
113
|
|
|
109
114
|
const [
|
|
110
115
|
userDetails,
|
|
@@ -172,3 +177,7 @@ export const getServerSideProps: GetServerSideProps<
|
|
|
172
177
|
},
|
|
173
178
|
}
|
|
174
179
|
}
|
|
180
|
+
|
|
181
|
+
export const getServerSideProps = withLocaleValidationSSR(
|
|
182
|
+
getServerSidePropsBase
|
|
183
|
+
)
|
package/src/pages/s.tsx
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { NextSeo } from 'next-seo'
|
|
2
2
|
import { useRouter } from 'next/router'
|
|
3
|
-
import { useMemo } from 'react'
|
|
3
|
+
import { useEffect, useMemo, useState } from 'react'
|
|
4
4
|
|
|
5
5
|
import type { SearchState } from '@faststore/sdk'
|
|
6
|
+
import type { SearchSettings } from 'src/server/cms'
|
|
6
7
|
import {
|
|
7
8
|
formatSearchState,
|
|
8
9
|
parseSearchState,
|
|
@@ -20,6 +21,7 @@ import {
|
|
|
20
21
|
getStaticProps,
|
|
21
22
|
type SearchPageProps,
|
|
22
23
|
} from 'src/experimental/searchServerSideFunctions'
|
|
24
|
+
import { getStoreURL } from 'src/sdk/localization/useLocalizationConfig'
|
|
23
25
|
|
|
24
26
|
export interface SearchPageContextType {
|
|
25
27
|
title: string
|
|
@@ -49,13 +51,20 @@ const useSearchParams = ({
|
|
|
49
51
|
|
|
50
52
|
type StoreConfig = typeof storeConfig
|
|
51
53
|
|
|
52
|
-
function generateSEOData(
|
|
54
|
+
function generateSEOData(
|
|
55
|
+
storeConfig: StoreConfig,
|
|
56
|
+
searchTerm?: string,
|
|
57
|
+
pageSeoSettings?: SearchSettings['settings']['seo']
|
|
58
|
+
) {
|
|
53
59
|
const { search: searchSeo, ...seo } = storeConfig.seo
|
|
54
60
|
|
|
55
61
|
const isSSREnabled = storeConfig.experimental.enableSearchSSR
|
|
56
62
|
|
|
57
63
|
const title = searchTerm ?? seo.title ?? 'Search Results'
|
|
58
|
-
const titleTemplate =
|
|
64
|
+
const titleTemplate =
|
|
65
|
+
pageSeoSettings?.titleTemplate ??
|
|
66
|
+
searchSeo?.titleTemplate ??
|
|
67
|
+
seo.titleTemplate
|
|
59
68
|
const description = searchSeo?.descriptionTemplate
|
|
60
69
|
? searchSeo.descriptionTemplate
|
|
61
70
|
.replace(/%s/g, () => searchTerm ?? '')
|
|
@@ -79,7 +88,7 @@ function generateSEOData(storeConfig: StoreConfig, searchTerm?: string) {
|
|
|
79
88
|
}
|
|
80
89
|
|
|
81
90
|
const canonical = searchTerm
|
|
82
|
-
? `${
|
|
91
|
+
? `${getStoreURL()}/s?q=${searchTerm.replaceAll(' ', '+')}`
|
|
83
92
|
: undefined
|
|
84
93
|
|
|
85
94
|
return {
|
|
@@ -116,9 +125,20 @@ function Page({
|
|
|
116
125
|
return null
|
|
117
126
|
}
|
|
118
127
|
|
|
128
|
+
const [effectiveSearchTerm, setEffectiveSearchTerm] = useState<
|
|
129
|
+
string | undefined
|
|
130
|
+
>(() => searchTerm ?? undefined)
|
|
131
|
+
|
|
132
|
+
useEffect(() => {
|
|
133
|
+
if (!searchTerm && searchParams.term) {
|
|
134
|
+
setEffectiveSearchTerm(searchParams.term)
|
|
135
|
+
}
|
|
136
|
+
}, [searchParams.term, searchTerm])
|
|
137
|
+
|
|
119
138
|
const { noindex, nofollow, ...seoData } = generateSEOData(
|
|
120
139
|
storeConfig,
|
|
121
|
-
|
|
140
|
+
effectiveSearchTerm,
|
|
141
|
+
settings?.seo
|
|
122
142
|
)
|
|
123
143
|
|
|
124
144
|
return (
|
|
@@ -149,7 +169,7 @@ function Page({
|
|
|
149
169
|
searchContentType={searchContentType}
|
|
150
170
|
serverData={{
|
|
151
171
|
title: seoData.title,
|
|
152
|
-
searchTerm:
|
|
172
|
+
searchTerm: effectiveSearchTerm,
|
|
153
173
|
}}
|
|
154
174
|
globalSections={globalSections}
|
|
155
175
|
globalSettings={globalSettings}
|
package/src/proxy.ts
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
import storeConfig from 'discovery.config'
|
|
2
|
+
import { NextResponse, type NextRequest } from 'next/server'
|
|
3
|
+
import { getRequestHostname } from 'src/utils/getRequestHostname'
|
|
4
|
+
import {
|
|
5
|
+
getCustomPathsFromBindings,
|
|
6
|
+
getSubdomainBindings,
|
|
7
|
+
isValidLocale,
|
|
8
|
+
} from 'src/utils/localization/bindingPaths'
|
|
9
|
+
|
|
10
|
+
type RewriteRule = {
|
|
11
|
+
regex: RegExp
|
|
12
|
+
locale: string
|
|
13
|
+
hostname?: string
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
function generateRewriteRules(): RewriteRule[] {
|
|
17
|
+
if (!storeConfig.localization?.enabled) {
|
|
18
|
+
return []
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const customPaths = getCustomPathsFromBindings()
|
|
22
|
+
|
|
23
|
+
const rules: RewriteRule[] = customPaths.map((customPath) => {
|
|
24
|
+
const escapedPath = customPath.path.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
|
|
25
|
+
const regex = new RegExp(`^${escapedPath}(?:\\/(.*))?$`, 'i')
|
|
26
|
+
return {
|
|
27
|
+
regex,
|
|
28
|
+
locale: customPath.locale,
|
|
29
|
+
hostname: customPath.hostname,
|
|
30
|
+
}
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
return rules.sort((a, b) => {
|
|
34
|
+
const aLength = a.regex.source.length
|
|
35
|
+
const bLength = b.regex.source.length
|
|
36
|
+
return bLength - aLength
|
|
37
|
+
})
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const DATA_ROUTE_RE = /^\/_next\/data\/[^/]+\/([^/]+)\/(.+)$/
|
|
41
|
+
|
|
42
|
+
const rewriteRules = generateRewriteRules()
|
|
43
|
+
const subdomainBindings = getSubdomainBindings()
|
|
44
|
+
const shouldValidateHostname = process.env.NODE_ENV === 'production'
|
|
45
|
+
const validLocales = new Set(
|
|
46
|
+
Object.keys(storeConfig.localization?.locales || {})
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Rewrites the request to the subdomain locale.
|
|
51
|
+
* Without this, getStaticProps receives the wrong locale on subdomain domains
|
|
52
|
+
* because Next.js domain routing doesn't set the locale for server-side rendering.
|
|
53
|
+
*
|
|
54
|
+
* @param request - The request to rewrite.
|
|
55
|
+
* @param locale - The locale to rewrite to.
|
|
56
|
+
* @returns The rewritten response or null if the request is not a subdomain request.
|
|
57
|
+
*/
|
|
58
|
+
function rewriteSubdomainRequest(
|
|
59
|
+
request: NextRequest,
|
|
60
|
+
locale: string
|
|
61
|
+
): NextResponse | null {
|
|
62
|
+
const { pathname, search } = request.nextUrl
|
|
63
|
+
|
|
64
|
+
const dataMatch = pathname.match(DATA_ROUTE_RE)
|
|
65
|
+
|
|
66
|
+
if (dataMatch) {
|
|
67
|
+
const [, currentLocale] = dataMatch
|
|
68
|
+
|
|
69
|
+
if (currentLocale !== locale && validLocales.has(currentLocale)) {
|
|
70
|
+
const url = request.nextUrl.clone()
|
|
71
|
+
url.pathname = pathname.replace(`/${currentLocale}/`, `/${locale}/`)
|
|
72
|
+
url.search = search
|
|
73
|
+
|
|
74
|
+
return NextResponse.rewrite(url)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
return null
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const firstSegment = pathname.split('/')[1] ?? ''
|
|
81
|
+
|
|
82
|
+
if (!validLocales.has(firstSegment)) {
|
|
83
|
+
const rest = pathname.replace(/^\/+/, '')
|
|
84
|
+
const normalizedPath = rest ? `/${locale}/${rest}` : `/${locale}`
|
|
85
|
+
|
|
86
|
+
const url = request.nextUrl.clone()
|
|
87
|
+
url.pathname = normalizedPath
|
|
88
|
+
url.search = search
|
|
89
|
+
|
|
90
|
+
return NextResponse.rewrite(url)
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return null
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
export function proxy(request: NextRequest) {
|
|
97
|
+
if (!storeConfig.localization?.enabled) {
|
|
98
|
+
return NextResponse.next()
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
const { pathname, search } = request.nextUrl
|
|
102
|
+
|
|
103
|
+
// Read the hostname from the Host header rather than request.nextUrl.hostname.
|
|
104
|
+
// When the Next.js standalone server is started with a `hostname` (which the
|
|
105
|
+
// generated server.js always does, defaulting to "0.0.0.0" via the HOSTNAME
|
|
106
|
+
// env var), Next.js builds the internal request URL using that bind address
|
|
107
|
+
// instead of the client-facing host, see attachRequestMeta in
|
|
108
|
+
// next/dist/server/next-server.js. As a result, request.nextUrl.hostname
|
|
109
|
+
// returns the bind address (e.g. "0.0.0.0"), which never matches the
|
|
110
|
+
// hostname extracted from a binding URL (e.g. "brandless.fast.store").
|
|
111
|
+
const hostname = getRequestHostname(request.headers.get('host'))
|
|
112
|
+
|
|
113
|
+
const subdomainMatch = subdomainBindings.find((b) => b.hostname === hostname)
|
|
114
|
+
|
|
115
|
+
if (subdomainMatch && isValidLocale(subdomainMatch.locale)) {
|
|
116
|
+
const result = rewriteSubdomainRequest(request, subdomainMatch.locale)
|
|
117
|
+
|
|
118
|
+
if (result) {
|
|
119
|
+
return result
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
for (const rule of rewriteRules) {
|
|
124
|
+
if (shouldValidateHostname && rule.hostname && rule.hostname !== hostname) {
|
|
125
|
+
continue
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const match = pathname.match(rule.regex)
|
|
129
|
+
if (!match) continue
|
|
130
|
+
|
|
131
|
+
if (!isValidLocale(rule.locale)) {
|
|
132
|
+
console.warn(`Locale ${rule.locale} not found in configuration`)
|
|
133
|
+
continue
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
const rest = match[1]?.replace(/^\/+/, '') ?? ''
|
|
137
|
+
const normalizedPath = rest ? `/${rule.locale}/${rest}` : `/${rule.locale}`
|
|
138
|
+
|
|
139
|
+
const url = request.nextUrl.clone()
|
|
140
|
+
url.pathname = normalizedPath
|
|
141
|
+
url.search = search
|
|
142
|
+
|
|
143
|
+
return NextResponse.rewrite(url)
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
return NextResponse.next()
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export const config = {
|
|
150
|
+
matcher: [
|
|
151
|
+
'/((?!api|_next/static|_next/image|favicon.ico|.*\\.[^/]+$).*)',
|
|
152
|
+
'/_next/data/:path*',
|
|
153
|
+
],
|
|
154
|
+
}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import discoveryConfig from 'discovery.config'
|
|
2
1
|
import fetch from 'isomorphic-unfetch'
|
|
2
|
+
import { getStoreURL } from 'src/sdk/localization/useLocalizationConfig'
|
|
3
3
|
import { sanitizeHost } from 'src/utils/utilities'
|
|
4
4
|
|
|
5
|
-
const REFRESH_TOKEN_URL = `${discoveryConfig.storeUrl}/api/vtexid/refreshtoken/webstore`
|
|
6
|
-
|
|
7
5
|
export interface RefreshTokenResponse {
|
|
8
6
|
status?: string
|
|
9
7
|
refreshAfter?: string
|
|
@@ -30,9 +28,11 @@ async function fetchWithRetry(
|
|
|
30
28
|
export const refreshTokenRequest = async (): Promise<
|
|
31
29
|
RefreshTokenResponse | undefined
|
|
32
30
|
> => {
|
|
31
|
+
const storeOriginURL = new URL(getStoreURL()).origin
|
|
32
|
+
const REFRESH_TOKEN_URL = `${storeOriginURL}/api/vtexid/refreshtoken/webstore`
|
|
33
33
|
const headers: HeadersInit = {
|
|
34
34
|
'content-type': 'application/json',
|
|
35
|
-
Host: `${sanitizeHost(
|
|
35
|
+
Host: `${sanitizeHost(storeOriginURL)}`,
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
return await fetchWithRetry(REFRESH_TOKEN_URL, {
|
|
@@ -8,10 +8,13 @@ import type {
|
|
|
8
8
|
CartItemFragment,
|
|
9
9
|
IStoreCart,
|
|
10
10
|
} from '@generated/graphql'
|
|
11
|
+
import ReorderError from '../error/ReorderError/ReorderError'
|
|
11
12
|
import { request } from '../graphql/request'
|
|
12
13
|
import { sessionStore } from '../session'
|
|
14
|
+
import { useLink } from '../ui/useLink'
|
|
15
|
+
|
|
16
|
+
import storeConfig from '../../../discovery.config'
|
|
13
17
|
import { redirectToCheckout } from '../cart/redirectToCheckout'
|
|
14
|
-
import ReorderError from '../error/ReorderError/ReorderError'
|
|
15
18
|
|
|
16
19
|
type Order = ServerOrderDetailsQueryQuery['userOrder']
|
|
17
20
|
type AdditionalProperties =
|
|
@@ -33,6 +36,9 @@ const getItemId = (item: CartItemFragment) => {
|
|
|
33
36
|
export const useReorder = () => {
|
|
34
37
|
const [loading, setLoading] = useState(false)
|
|
35
38
|
const [error, setError] = useState<Error | null>(null)
|
|
39
|
+
const { resolveLink } = useLink()
|
|
40
|
+
const resolvedCheckoutUrl =
|
|
41
|
+
resolveLink(storeConfig.checkoutUrl) ?? storeConfig.checkoutUrl
|
|
36
42
|
|
|
37
43
|
const reorder = async (order: Order | null | undefined) => {
|
|
38
44
|
if (!order) {
|
|
@@ -131,7 +137,7 @@ export const useReorder = () => {
|
|
|
131
137
|
|
|
132
138
|
cartStore.set(updatedCart)
|
|
133
139
|
|
|
134
|
-
redirectToCheckout(validated.order.orderNumber)
|
|
140
|
+
redirectToCheckout(validated.order.orderNumber, resolvedCheckoutUrl)
|
|
135
141
|
} catch (err) {
|
|
136
142
|
setError(err instanceof Error ? err : new ReorderError('Unknown error'))
|
|
137
143
|
console.error('Error reordering:', err)
|
|
@@ -8,6 +8,7 @@ import { LOG_LABEL_STYLE } from 'src/constants'
|
|
|
8
8
|
import { getBaseDomain } from 'src/utils/getBaseDomain'
|
|
9
9
|
import { getCookie } from 'src/utils/getCookie'
|
|
10
10
|
import config from '../../../../../discovery.config'
|
|
11
|
+
import { getStoreURL } from 'src/sdk/localization/useLocalizationConfig'
|
|
11
12
|
|
|
12
13
|
const THIRTY_MINUTES_S = 30 * 60
|
|
13
14
|
const ONE_YEAR_S = 365 * 24 * 3600
|
|
@@ -25,8 +26,8 @@ const createOrRefreshCookie = (key: string, expiresSecond: number) => {
|
|
|
25
26
|
process.env.NODE_ENV === 'development'
|
|
26
27
|
? '.localhost'
|
|
27
28
|
: config.secureSubdomain
|
|
28
|
-
? getBaseDomain([
|
|
29
|
-
: `.${new URL(
|
|
29
|
+
? getBaseDomain([getStoreURL(), config.secureSubdomain])
|
|
30
|
+
: `.${new URL(getStoreURL()).hostname}`
|
|
30
31
|
|
|
31
32
|
return () => {
|
|
32
33
|
let currentValue = getCookie(key)
|
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
import storeConfig from '../../../discovery.config'
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* Redirects to checkout. Use `resolvedCheckoutUrl` (e.g. from useLink().resolveLink)
|
|
5
|
+
* when i18n is enabled so the URL has the correct locale/custom path.
|
|
6
|
+
*/
|
|
7
|
+
export const redirectToCheckout = (
|
|
8
|
+
orderFormId?: string,
|
|
9
|
+
resolvedCheckoutUrl?: string
|
|
10
|
+
) => {
|
|
11
|
+
const baseUrl = resolvedCheckoutUrl ?? storeConfig.checkoutUrl
|
|
4
12
|
const isDevEnv =
|
|
5
13
|
window.location.host.includes('.vtex.app') ||
|
|
6
14
|
window.location.host.includes('localhost')
|
|
15
|
+
const href =
|
|
16
|
+
isDevEnv && orderFormId
|
|
17
|
+
? `${baseUrl}${baseUrl.includes('?') ? '&' : '?'}orderFormId=${orderFormId}`
|
|
18
|
+
: baseUrl
|
|
7
19
|
|
|
8
|
-
|
|
9
|
-
window.location.href = `${storeConfig.checkoutUrl}`
|
|
10
|
-
} else if (orderFormId) {
|
|
11
|
-
window.location.href = `${storeConfig.checkoutUrl}?orderFormId=${orderFormId}`
|
|
12
|
-
} else {
|
|
13
|
-
window.location.href = `${storeConfig.checkoutUrl}`
|
|
14
|
-
}
|
|
20
|
+
window.location.href = href
|
|
15
21
|
}
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
+
import { useLink } from 'src/sdk/ui/useLink'
|
|
2
|
+
|
|
3
|
+
import storeConfig from '../../../discovery.config'
|
|
1
4
|
import { useCart } from './index'
|
|
2
5
|
import { redirectToCheckout } from './redirectToCheckout'
|
|
3
6
|
|
|
4
7
|
export const useCheckoutButton = () => {
|
|
5
8
|
const { isValidating, id } = useCart()
|
|
9
|
+
const { resolveLink } = useLink()
|
|
10
|
+
const resolvedCheckoutUrl =
|
|
11
|
+
resolveLink(storeConfig.checkoutUrl) ?? storeConfig.checkoutUrl
|
|
6
12
|
|
|
7
13
|
const onClick = (e: React.MouseEvent<HTMLButtonElement>) => {
|
|
8
14
|
e.preventDefault()
|
|
9
15
|
|
|
10
16
|
if (!isValidating) {
|
|
11
|
-
redirectToCheckout(id)
|
|
17
|
+
redirectToCheckout(id, resolvedCheckoutUrl)
|
|
12
18
|
}
|
|
13
19
|
}
|
|
14
20
|
|
|
@@ -221,7 +221,7 @@ export function useDeliveryPromise({
|
|
|
221
221
|
values: [
|
|
222
222
|
{
|
|
223
223
|
value: 'true',
|
|
224
|
-
label: deliveryPromiseSettings?.inStock?.label ?? '
|
|
224
|
+
label: deliveryPromiseSettings?.inStock?.label ?? '',
|
|
225
225
|
selected: selectedFacets.some(
|
|
226
226
|
({ key, value }) => key === IN_STOCK_FACET_KEY && value === 'true'
|
|
227
227
|
),
|
|
@@ -236,9 +236,7 @@ export function useDeliveryPromise({
|
|
|
236
236
|
() => [
|
|
237
237
|
{
|
|
238
238
|
value: ALL_DELIVERY_METHODS_FACET_VALUE,
|
|
239
|
-
label:
|
|
240
|
-
deliveryPromiseSettings?.deliveryMethods?.allDeliveryMethods ??
|
|
241
|
-
'All delivery methods',
|
|
239
|
+
label: deliveryPromiseSettings?.deliveryMethods?.allDeliveryMethods,
|
|
242
240
|
selected:
|
|
243
241
|
!selectedFacets.some(({ key }) => key === SHIPPING_FACET_KEY) ||
|
|
244
242
|
selectedFacets?.some(
|
|
@@ -250,9 +248,7 @@ export function useDeliveryPromise({
|
|
|
250
248
|
},
|
|
251
249
|
{
|
|
252
250
|
value: ALL_DELIVERY_OPTIONS_FACET_VALUE,
|
|
253
|
-
label:
|
|
254
|
-
deliveryPromiseSettings?.deliveryOptions?.allDeliveryOptions ??
|
|
255
|
-
'All delivery options',
|
|
251
|
+
label: deliveryPromiseSettings?.deliveryOptions?.allDeliveryOptions,
|
|
256
252
|
selected:
|
|
257
253
|
!selectedFacets.some(
|
|
258
254
|
({ key }) => key === DELIVERY_OPTIONS_FACET_KEY
|
|
@@ -468,12 +464,10 @@ export function useDeliveryPromise({
|
|
|
468
464
|
)
|
|
469
465
|
|
|
470
466
|
const labelsMap = {
|
|
471
|
-
[SHIPPING_FACET_KEY]:
|
|
472
|
-
deliveryPromiseSettings?.deliveryMethods?.title ?? 'Delivery',
|
|
467
|
+
[SHIPPING_FACET_KEY]: deliveryPromiseSettings?.deliveryMethods?.title,
|
|
473
468
|
[DELIVERY_OPTIONS_FACET_KEY]:
|
|
474
|
-
deliveryPromiseSettings?.deliveryOptions?.title
|
|
475
|
-
[IN_STOCK_FACET_KEY]:
|
|
476
|
-
deliveryPromiseSettings?.inStock?.title ?? 'Availability',
|
|
469
|
+
deliveryPromiseSettings?.deliveryOptions?.title,
|
|
470
|
+
[IN_STOCK_FACET_KEY]: deliveryPromiseSettings?.inStock?.title,
|
|
477
471
|
}
|
|
478
472
|
|
|
479
473
|
function getBadgeLabel(value: DeliveryType, isAvailable: boolean) {
|
|
@@ -483,19 +477,17 @@ export function useDeliveryPromise({
|
|
|
483
477
|
> = {
|
|
484
478
|
delivery: {
|
|
485
479
|
available:
|
|
486
|
-
deliveryPromiseSettings?.deliveryPromiseBadges?.delivery ??
|
|
487
|
-
'Available for shipping',
|
|
480
|
+
deliveryPromiseSettings?.deliveryPromiseBadges?.delivery ?? '',
|
|
488
481
|
unavailable:
|
|
489
482
|
deliveryPromiseSettings?.deliveryPromiseBadges?.deliveryUnavailable ??
|
|
490
|
-
'
|
|
483
|
+
'',
|
|
491
484
|
},
|
|
492
485
|
'pickup-in-point': {
|
|
493
486
|
available:
|
|
494
|
-
deliveryPromiseSettings?.deliveryPromiseBadges?.pickupInPoint ??
|
|
495
|
-
'Available for pickup',
|
|
487
|
+
deliveryPromiseSettings?.deliveryPromiseBadges?.pickupInPoint ?? '',
|
|
496
488
|
unavailable:
|
|
497
489
|
deliveryPromiseSettings?.deliveryPromiseBadges
|
|
498
|
-
?.pickupInPointUnavailable ?? '
|
|
490
|
+
?.pickupInPointUnavailable ?? '',
|
|
499
491
|
},
|
|
500
492
|
}
|
|
501
493
|
|