@evenicanpm/storefront-core 1.2.2 → 1.4.0
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/.storybook/main.ts +1 -1
- package/.storybook/preview.tsx +5 -4
- package/__mocks__/countries.ts +1 -1
- package/__mocks__/create-query.ts +3 -2
- package/__mocks__/get-product-by-id.ts +0 -1
- package/__mocks__/query-client.ts +1 -1
- package/package.json +10 -2
- package/src/api-manager/datasources/d365/d365-address.datasource.ts +15 -13
- package/src/api-manager/datasources/d365/d365-base.datasource.ts +1 -1
- package/src/api-manager/datasources/d365/d365-cart.datasource.ts +41 -42
- package/src/api-manager/datasources/d365/d365-categories.datasource.ts +4 -4
- package/src/api-manager/datasources/d365/d365-order.datasource.ts +10 -9
- package/src/api-manager/datasources/d365/d365-organization.datasource.ts +10 -10
- package/src/api-manager/datasources/d365/d365-product.datasource.ts +49 -36
- package/src/api-manager/datasources/d365/d365-session.datasource.ts +7 -9
- package/src/api-manager/datasources/d365/d365-user.datasource.ts +34 -43
- package/src/api-manager/datasources/d365/d365.datasource.ts +15 -17
- package/src/api-manager/datasources/d365/index.ts +2 -4
- package/src/api-manager/datasources/d365/test-context.ts +1 -1
- package/src/api-manager/datasources/d365/utils/create-search-criteria.ts +1 -1
- package/src/api-manager/datasources/d365/utils/decode-jwt.ts +1 -2
- package/src/api-manager/datasources/d365/utils/get-context-cookie.ts +3 -3
- package/src/api-manager/datasources/d365/utils/parse-object.ts +1 -1
- package/src/api-manager/datasources/d365/utils/product-images-utils.ts +29 -10
- package/src/api-manager/datasources/d365/utils/product-inventory-utils.ts +1 -1
- package/src/api-manager/datasources/e4/address/e4-address.datasource.ts +5 -5
- package/src/api-manager/datasources/e4/address/e4-address.remaps.ts +4 -4
- package/src/api-manager/datasources/e4/address/e4-address.translator.ts +9 -9
- package/src/api-manager/datasources/e4/cart/e4-cart.datasource.ts +37 -37
- package/src/api-manager/datasources/e4/cart/e4-cart.remaps.ts +10 -9
- package/src/api-manager/datasources/e4/cart/e4-cart.translator.ts +4 -4
- package/src/api-manager/datasources/e4/categories/e4-categories.datasource.ts +4 -4
- package/src/api-manager/datasources/e4/categories/e4-categories.translator.ts +24 -24
- package/src/api-manager/datasources/e4/e4.datasource.ts +7 -7
- package/src/api-manager/datasources/e4/graphqlRequestSdk.ts +8103 -41393
- package/src/api-manager/datasources/e4/order/e4-order.datasource.ts +7 -7
- package/src/api-manager/datasources/e4/order/e4-order.remaps.ts +8 -7
- package/src/api-manager/datasources/e4/organization/e4-organization.datasource.ts +4 -9
- package/src/api-manager/datasources/e4/product/e4-product.datasource.ts +12 -11
- package/src/api-manager/datasources/e4/product/e4-product.remaps.ts +4 -4
- package/src/api-manager/datasources/e4/product/e4-product.translator.ts +27 -43
- package/src/api-manager/datasources/e4/session/e4-session.datasource.ts +3 -5
- package/src/api-manager/datasources/e4/session/e4-session.translator.ts +2 -2
- package/src/api-manager/datasources/e4/user/e4-user.datasource.ts +10 -10
- package/src/api-manager/datasources/e4/user/e4-user.remaps.ts +6 -8
- package/src/api-manager/datasources/e4/user/e4-user.translator.ts +6 -4
- package/src/api-manager/datasources/e4/utils/unwrap-e4-variants.ts +6 -6
- package/src/api-manager/index.ts +8 -8
- package/src/api-manager/lib/category-helpers.ts +4 -3
- package/src/api-manager/lib/get-dynamics-context.ts +1 -1
- package/src/api-manager/lib/get-graphql-client.ts +4 -6
- package/src/api-manager/schemas/address.schema.ts +1 -1
- package/src/api-manager/schemas/cart.schema.ts +1 -1
- package/src/api-manager/schemas/d365.schema.ts +207 -206
- package/src/api-manager/schemas/order.schema.ts +1 -1
- package/src/api-manager/schemas/organization.schema.ts +1 -1
- package/src/api-manager/schemas/product.schema.ts +4 -4
- package/src/api-manager/schemas/session.schema.ts +1 -1
- package/src/api-manager/schemas/user.schema.ts +1 -1
- package/src/api-manager/services/address/mutations/create-address.ts +3 -3
- package/src/api-manager/services/address/mutations/delete-address.ts +2 -2
- package/src/api-manager/services/address/mutations/get-delivery-options.ts +4 -4
- package/src/api-manager/services/address/mutations/update-address.ts +3 -3
- package/src/api-manager/services/address/queries/get-countries.ts +6 -4
- package/src/api-manager/services/address/queries/get-states.ts +3 -3
- package/src/api-manager/services/cart/mutations/add-discount-code.ts +6 -6
- package/src/api-manager/services/cart/mutations/add-to-cart.ts +6 -6
- package/src/api-manager/services/cart/mutations/checkout.ts +2 -2
- package/src/api-manager/services/cart/mutations/delete-cart-line.ts +2 -2
- package/src/api-manager/services/cart/mutations/get-payment-accept-result.ts +4 -4
- package/src/api-manager/services/cart/mutations/remove-cart-line-delivery-mode.ts +3 -3
- package/src/api-manager/services/cart/mutations/remove-discount-code.ts +2 -2
- package/src/api-manager/services/cart/mutations/update-cart-line-delivery-mode.ts +2 -2
- package/src/api-manager/services/cart/mutations/update-cart-lines.ts +3 -3
- package/src/api-manager/services/cart/mutations/update-cart.ts +2 -2
- package/src/api-manager/services/cart/queries/get-cart-lines-inventory.ts +2 -2
- package/src/api-manager/services/cart/queries/get-cart.ts +5 -3
- package/src/api-manager/services/cart/queries/get-payment-accept-point.ts +3 -3
- package/src/api-manager/services/categories/queries/get-categories.ts +1 -1
- package/src/api-manager/services/create-extension-query.ts +1 -1
- package/src/api-manager/services/create-mutation.ts +2 -2
- package/src/api-manager/services/create-query.ts +6 -6
- package/src/api-manager/services/get-query-client.ts +2 -2
- package/src/api-manager/services/order/queries/get-order-details.ts +2 -2
- package/src/api-manager/services/order/queries/get-orders.ts +1 -1
- package/src/api-manager/services/organization/queries/get-channel-configuration.ts +1 -1
- package/src/api-manager/services/organization/queries/get-stores.ts +1 -1
- package/src/api-manager/services/product/mutations/search-products.ts +3 -4
- package/src/api-manager/services/product/queries/get-product-availability.ts +2 -2
- package/src/api-manager/services/product/queries/get-product-by-id.ts +1 -1
- package/src/api-manager/services/product/queries/get-product-by-ids.ts +2 -2
- package/src/api-manager/services/product/queries/get-product-list.ts +1 -1
- package/src/api-manager/services/product/queries/get-product-prices.ts +2 -2
- package/src/api-manager/services/product/queries/get-related-products.ts +2 -2
- package/src/api-manager/services/product/queries/search-products.ts +2 -2
- package/src/api-manager/services/product/server/product.server.ts +4 -4
- package/src/api-manager/services/session/mutations/session-init.ts +2 -2
- package/src/api-manager/services/session/mutations/session-logout.ts +1 -1
- package/src/api-manager/services/session/queries/get-session.ts +1 -1
- package/src/api-manager/services/user/mutations/add-to-wishlist.ts +3 -3
- package/src/api-manager/services/user/mutations/copy-cart-to-wishlist.ts +3 -3
- package/src/api-manager/services/user/mutations/create-wishlist.ts +4 -4
- package/src/api-manager/services/user/mutations/delete-wishlist.ts +3 -3
- package/src/api-manager/services/user/mutations/remove-from-wishlist.ts +3 -3
- package/src/api-manager/services/user/mutations/update-user.ts +2 -2
- package/src/api-manager/services/user/mutations/update-wishlist.ts +2 -2
- package/src/api-manager/services/user/queries/get-user-counts.ts +1 -1
- package/src/api-manager/services/user/queries/get-user.ts +1 -1
- package/src/api-manager/services/user/queries/get-wishlist-details.ts +1 -1
- package/src/api-manager/services/user/queries/get-wishlists.ts +1 -1
- package/src/api-manager/types/Datasource.ts +23 -28
- package/src/auth/auth-options.test.ts +6 -63
- package/src/auth/auth-options.ts +6 -7
- package/src/auth/msal.ts +4 -1
- package/src/auth/next-auth-cookie-manager.ts +7 -8
- package/src/auth/refresh-token.ts +5 -7
- package/src/auth/signout.ts +1 -1
- package/src/cms/blocks/block-manager.tsx +13 -13
- package/src/cms/blocks/components/brand-logos-scroller.tsx +4 -4
- package/src/cms/blocks/components/category-card.tsx +3 -3
- package/src/cms/blocks/components/category-carousel/index.tsx +8 -10
- package/src/cms/blocks/components/feature-pill.tsx +5 -4
- package/src/cms/blocks/components/featured-categories.tsx +5 -2
- package/src/cms/blocks/components/featured-products.tsx +2 -2
- package/src/cms/blocks/components/footer/data/index.ts +6 -3
- package/src/cms/blocks/components/footer/index.tsx +9 -13
- package/src/cms/blocks/components/footer/sections/footer-app-store.tsx +2 -2
- package/src/cms/blocks/components/footer/sections/footer-contact.tsx +3 -3
- package/src/cms/blocks/components/footer/sections/footer-links.tsx +5 -5
- package/src/cms/blocks/components/footer/sections/footer-logo.tsx +4 -4
- package/src/cms/blocks/components/footer/sections/footer-social-links.tsx +19 -11
- package/src/cms/blocks/components/footer/styles/index.ts +1 -1
- package/src/cms/blocks/components/footer.tsx +4 -4
- package/src/cms/blocks/components/hero-carousel/index.tsx +32 -29
- package/src/cms/blocks/components/hero.tsx +4 -5
- package/src/cms/blocks/components/image.tsx +4 -5
- package/src/cms/blocks/components/media-card.tsx +3 -3
- package/src/cms/blocks/components/product-carousel/index.tsx +8 -9
- package/src/cms/blocks/components/product-section-fullwidth/index.tsx +18 -22
- package/src/cms/blocks/components/rich-text.tsx +2 -2
- package/src/cms/blocks/components/seo/index.tsx +7 -3
- package/src/cms/blocks/components/services/index.tsx +5 -5
- package/src/cms/blocks/components/services/service-card.tsx +8 -10
- package/src/cms/blocks/components/shared/featured-product-card.tsx +6 -3
- package/src/cms/blocks/components/shared/product-category-item.tsx +5 -6
- package/src/cms/blocks/components/shared/product-grid.tsx +9 -5
- package/src/cms/blocks/components/shared/top-categories-card.tsx +10 -7
- package/src/cms/blocks/components/shared/top-rating-product-card.tsx +4 -4
- package/src/cms/blocks/icons/components/category.tsx +3 -3
- package/src/cms/blocks/icons/components/dotted-star.tsx +1 -1
- package/src/cms/blocks/icons/components/fallback-icon.tsx +1 -1
- package/src/cms/blocks/icons/components/gift-box.tsx +1 -1
- package/src/cms/blocks/icons/components/light.tsx +1 -1
- package/src/cms/blocks/icons/components/new-arrival.tsx +1 -1
- package/src/cms/blocks/icons/components/rank-badge.tsx +1 -1
- package/src/cms/blocks/icons/index.ts +3 -3
- package/src/cms/blocks/index.tsx +6 -6
- package/src/cms/blog.ts +2 -2
- package/src/cms/endpoints.ts +1 -1
- package/src/components-v2/BazaarCard.stories.tsx +1 -1
- package/src/components-v2/BazaarCard.tsx +1 -1
- package/src/components-v2/BazaarImage.tsx +2 -2
- package/src/components-v2/BazaarMenu.stories.tsx +1 -1
- package/src/components-v2/BazaarMenu.tsx +4 -4
- package/src/components-v2/BazaarSwitch.tsx +1 -1
- package/src/components-v2/BazaarTextField.tsx +5 -5
- package/src/components-v2/BorderShadowCard.stories.tsx +2 -2
- package/src/components-v2/CountryInput.stories.tsx +2 -2
- package/src/components-v2/DropZone.stories.tsx +1 -1
- package/src/components-v2/DropZone.tsx +8 -9
- package/src/components-v2/HoverBox.stories.tsx +1 -1
- package/src/components-v2/ImageWithFallback.tsx +3 -2
- package/src/components-v2/LazyImage.tsx +10 -2
- package/src/components-v2/Loading.tsx +1 -2
- package/src/components-v2/SearchInput.stories.tsx +1 -1
- package/src/components-v2/SearchInput.tsx +2 -2
- package/src/components-v2/SnackbarProvider.tsx +1 -1
- package/src/components-v2/T/index.tsx +1 -1
- package/src/components-v2/Typography.stories.tsx +2 -2
- package/src/components-v2/Typography.tsx +13 -13
- package/src/components-v2/WhiteButton.tsx +2 -2
- package/src/components-v2/accordion/accordion-header.tsx +6 -6
- package/src/components-v2/carousel/Carousel.stories.tsx +1 -1
- package/src/components-v2/carousel/carousel.tsx +4 -4
- package/src/components-v2/carousel/components/carousel-arrows.tsx +4 -4
- package/src/components-v2/carousel/components/carousel-dots.tsx +2 -2
- package/src/components-v2/carousel-cards/carousel-card-1/carousel-card-1.tsx +4 -4
- package/src/components-v2/categories/Categories.stories.tsx +6 -5
- package/src/components-v2/categories/category-list/category-list.tsx +4 -5
- package/src/components-v2/categories/category-list/styles.ts +2 -9
- package/src/components-v2/categories/category-list-item/category-menu-item.tsx +6 -6
- package/src/components-v2/categories/category-menu.tsx +18 -15
- package/src/components-v2/categories/mega-menu/banner.tsx +4 -4
- package/src/components-v2/categories/mega-menu/column-list.tsx +6 -6
- package/src/components-v2/categories/mega-menu/mega-menu-1.tsx +8 -8
- package/src/components-v2/categories/mega-menu/mega-menu-2.tsx +5 -4
- package/src/components-v2/categories/types.ts +1 -1
- package/src/components-v2/countries-input.tsx +2 -2
- package/src/components-v2/flex-box/Flex.stories.tsx +1 -1
- package/src/components-v2/flex-box/flex-between.tsx +1 -1
- package/src/components-v2/flex-box/flex-box.tsx +1 -1
- package/src/components-v2/flex-box/flex-row-center.tsx +1 -1
- package/src/components-v2/flex-box/index.ts +1 -1
- package/src/components-v2/header/__tests__/user.test.tsx +3 -3
- package/src/components-v2/header/components/categories-menu.tsx +6 -6
- package/src/components-v2/header/components/mobile-header.tsx +17 -18
- package/src/components-v2/header/components/user.tsx +29 -28
- package/src/components-v2/header/header.tsx +9 -10
- package/src/components-v2/header/sticky-header.tsx +3 -3
- package/src/components-v2/header/styles/index.ts +3 -2
- package/src/components-v2/mini-cart/__tests__/cart-item.test.tsx +18 -18
- package/src/components-v2/mini-cart/__tests__/mini-cart.test.tsx +7 -7
- package/src/components-v2/mini-cart/components/bottom-actions.tsx +4 -3
- package/src/components-v2/mini-cart/components/cart-item.tsx +16 -15
- package/src/components-v2/mini-cart/components/empty-view.tsx +2 -1
- package/src/components-v2/mini-cart/components/top-header.tsx +8 -7
- package/src/components-v2/mini-cart/mini-cart-trigger.tsx +4 -4
- package/src/components-v2/mini-cart/mini-cart.tsx +11 -12
- package/src/components-v2/mobile-navigation/MobileNavigationBar.stories.tsx +2 -2
- package/src/components-v2/mobile-navigation/mobile-navigation-bar.tsx +15 -15
- package/src/components-v2/mobile-navigation/styles/index.ts +2 -2
- package/src/components-v2/nav-link/nav-link-2.tsx +2 -2
- package/src/components-v2/nav-link/nav-link-3.tsx +4 -4
- package/src/components-v2/nav-link/nav-link.tsx +4 -4
- package/src/components-v2/navbar/categories.tsx +8 -6
- package/src/components-v2/navbar/category-based-menu/category-based-menu.tsx +17 -16
- package/src/components-v2/navbar/category-based-menu/styles.ts +3 -3
- package/src/components-v2/navbar/category-based-menu/types.ts +1 -1
- package/src/components-v2/navbar/mega-menu/mega-menu.tsx +11 -10
- package/src/components-v2/navbar/mega-menu/styles.ts +2 -2
- package/src/components-v2/navbar/mobile-menu/mobile-menu.test.tsx +3 -3
- package/src/components-v2/navbar/mobile-menu/mobile-menu.tsx +21 -13
- package/src/components-v2/navbar/nav-list/cms-nav.test.tsx +4 -4
- package/src/components-v2/navbar/nav-list/nav-item-child.tsx +13 -14
- package/src/components-v2/navbar/nav-list/nav-list.tsx +128 -90
- package/src/components-v2/navbar/navbar.tsx +4 -5
- package/src/components-v2/navbar/styles.ts +4 -4
- package/src/components-v2/navbar/utils/transform-nav.test.ts +3 -3
- package/src/components-v2/navbar/utils/transform-nav.ts +3 -3
- package/src/components-v2/no-records.tsx +3 -3
- package/src/components-v2/product-cards/discount-chip.tsx +1 -1
- package/src/components-v2/product-cards/favorite-button.tsx +3 -3
- package/src/components-v2/product-cards/product-card/ProductCard.stories.tsx +2 -2
- package/src/components-v2/product-cards/product-card/product-card.tsx +43 -45
- package/src/components-v2/product-cards/product-card/styles/index.ts +2 -2
- package/src/components-v2/product-cards/product-card-plp/ProductCardPlp.stories.tsx +2 -2
- package/src/components-v2/product-cards/product-card-plp/product-card.tsx +25 -24
- package/src/components-v2/product-cards/product-card-plp-list/ProductCardPlpList.stories.tsx +1 -1
- package/src/components-v2/product-cards/product-card-plp-list/components/tags.tsx +1 -1
- package/src/components-v2/product-cards/product-card-plp-list/product-card.tsx +22 -19
- package/src/components-v2/product-cards/product-card-search/ProductCardSearch.stories.tsx +2 -2
- package/src/components-v2/product-cards/product-card-search/product-card.tsx +20 -18
- package/src/components-v2/product-cards/product-price.tsx +2 -2
- package/src/components-v2/product-cards/product-rating.tsx +4 -4
- package/src/components-v2/product-cards/product-title.tsx +2 -2
- package/src/components-v2/product-cards/quantity-buttons.tsx +6 -6
- package/src/components-v2/product-dialog/ProductDialog.stories.tsx +2 -2
- package/src/components-v2/product-dialog/compound/product-dialog.tsx +16 -16
- package/src/components-v2/product-dialog/index.tsx +1 -1
- package/src/components-v2/product-dimensions/Dimensions.stories.tsx +3 -2
- package/src/components-v2/product-dimensions/compound/dimensions-group-error.tsx +3 -3
- package/src/components-v2/product-dimensions/compound/dimensions-group-label.tsx +1 -1
- package/src/components-v2/product-dimensions/compound/dimensions-group-list-chip.tsx +5 -4
- package/src/components-v2/product-dimensions/compound/dimensions-group-list.tsx +7 -2
- package/src/components-v2/product-dimensions/compound/dimensions-group.tsx +3 -4
- package/src/components-v2/product-dimensions/compound/dimensions.tsx +6 -2
- package/src/components-v2/product-dimensions/index.tsx +4 -4
- package/src/components-v2/product-dimensions/utils/has-selected-dimension.ts +1 -1
- package/src/components-v2/product-quantity-buttons/ProductQuantity.stories.tsx +2 -1
- package/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root.tsx +8 -8
- package/src/components-v2/product-quantity-buttons/index.tsx +5 -2
- package/src/components-v2/product-quantity-variants/ProductQuantity.stories.tsx +3 -2
- package/src/components-v2/product-quantity-variants/index.tsx +14 -15
- package/src/components-v2/products-view/ProductsGrid.stories.tsx +3 -2
- package/src/components-v2/products-view/ProductsList.stories.tsx +3 -4
- package/src/components-v2/products-view/compound/context.ts +4 -3
- package/src/components-v2/products-view/compound/products-grid-view.tsx +9 -8
- package/src/components-v2/products-view/compound/products-list-view.tsx +9 -8
- package/src/components-v2/products-view/compound/types.ts +2 -2
- package/src/components-v2/products-view/index.tsx +5 -5
- package/src/components-v2/progress/ProgressBar.stories.tsx +2 -2
- package/src/components-v2/progress/progress.tsx +4 -4
- package/src/components-v2/scrollbar/Scrollbar.stories.tsx +2 -1
- package/src/components-v2/scrollbar/scrollbar.tsx +4 -4
- package/src/components-v2/search-bar/SearchBarLarge.stories.tsx +2 -1
- package/src/components-v2/search-bar/compound/context.ts +2 -3
- package/src/components-v2/search-bar/compound/results-item-lg.tsx +3 -2
- package/src/components-v2/search-bar/compound/results-item-sm.tsx +10 -9
- package/src/components-v2/search-bar/compound/results-suspense.tsx +5 -6
- package/src/components-v2/search-bar/compound/results.tsx +11 -7
- package/src/components-v2/search-bar/compound/search-bar-root.tsx +10 -10
- package/src/components-v2/search-bar/compound/textfield-adornment-category.tsx +32 -33
- package/src/components-v2/search-bar/compound/textfield-adornment-search-icon.tsx +3 -2
- package/src/components-v2/search-bar/compound/textfield.tsx +5 -8
- package/src/components-v2/search-bar/hooks/use-search.ts +2 -3
- package/src/components-v2/search-bar/styles/index.ts +2 -2
- package/src/components-v2/search-bar/utils/findCategoryNameById.ts +1 -1
- package/src/components-v2/section/Section.stories.tsx +4 -4
- package/src/components-v2/section/compound/section-header.tsx +7 -7
- package/src/components-v2/section/compound/section.tsx +4 -3
- package/src/components-v2/side-nav/SideNav.stories.tsx +4 -4
- package/src/components-v2/side-nav/side-nav.tsx +3 -3
- package/src/components-v2/wishlist-dialogs/__tests__/create-new-list.test.tsx +5 -7
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/AddToWishlist.stories.tsx +2 -2
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/add-to-wishlist-button.tsx +2 -2
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-bottom-ui.tsx +3 -3
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-dialog.tsx +8 -9
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/add-to-wishlist-list.tsx +6 -7
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/context.ts +2 -1
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-header.tsx +8 -10
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/compound/wishlist-dialog-item.tsx +6 -6
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/hooks/use-add-to-wishlist.ts +6 -6
- package/src/components-v2/wishlist-dialogs/add-to-wishlist/index.tsx +11 -13
- package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-bottom-ui.tsx +3 -3
- package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-dialog.tsx +11 -9
- package/src/components-v2/wishlist-dialogs/create-wishlist/compound/create-wishlist-form.tsx +6 -4
- package/src/components-v2/wishlist-dialogs/create-wishlist/create-wishlist-button.tsx +2 -2
- package/src/components-v2/wishlist-dialogs/styles.ts +4 -4
- package/src/hooks/use-cart.ts +1 -1
- package/src/hooks/use-nextauth-session.ts +65 -0
- package/src/hooks/use-overflow-detect.ts +1 -1
- package/src/hooks/use-settings.ts +1 -1
- package/src/hooks/use-variants.ts +29 -31
- package/src/lib/build-detail-url.ts +1 -1
- package/src/lib/build-product-detail-url.ts +1 -1
- package/src/lib/cart-cookie-handler.ts +1 -1
- package/src/lib/category-helpers.ts +4 -4
- package/src/lib/create-graphql-client.ts +1 -2
- package/src/lib/get-palette-color.ts +36 -16
- package/src/lib/graphqlRequestSdk.ts +2 -3
- package/src/lib/hexToLuma.ts +4 -4
- package/src/lib/product-list-types.ts +1 -1
- package/src/lib/refiner-utils.ts +1 -1
- package/src/lib/store-hours-helper.ts +6 -6
- package/src/pages-v2/account/account-navigation.tsx +13 -13
- package/src/pages-v2/account/addresses/address-form.tsx +26 -23
- package/src/pages-v2/account/addresses/address-item.tsx +14 -15
- package/src/pages-v2/account/dashboard-header.tsx +9 -9
- package/src/pages-v2/account/orders/order-progress.tsx +14 -14
- package/src/pages-v2/account/orders/order-row.tsx +11 -10
- package/src/pages-v2/account/orders/order-summary.tsx +7 -6
- package/src/pages-v2/account/orders/ordered-products.tsx +19 -18
- package/src/pages-v2/account/profile/profile-button.test.tsx +3 -3
- package/src/pages-v2/account/profile/profile-button.tsx +5 -4
- package/src/pages-v2/account/profile/user-info.tsx +8 -10
- package/src/pages-v2/account/styles.ts +1 -1
- package/src/pages-v2/account/wishlist/create-new-list.tsx +11 -9
- package/src/pages-v2/account/wishlist/create-wishlist-button.tsx +2 -2
- package/src/pages-v2/account/wishlist/wishlist-item.tsx +15 -14
- package/src/pages-v2/blog/blog-card.tsx +58 -0
- package/src/pages-v2/blog/pagination.tsx +1 -2
- package/src/pages-v2/cart/__tests__/cart-item.test.tsx +8 -10
- package/src/pages-v2/cart/__tests__/checkout-form.test.tsx +8 -16
- package/src/pages-v2/cart/__tests__/countries.json +19407 -0
- package/src/pages-v2/cart/__tests__/estimate-shipping.test.tsx +11 -11
- package/src/pages-v2/cart/cart-item.tsx +110 -100
- package/src/pages-v2/cart/checkout-form.tsx +20 -22
- package/src/pages-v2/cart/coupon-entry.tsx +12 -10
- package/src/pages-v2/cart/estimate-shipping.tsx +11 -10
- package/src/pages-v2/checkout/checkout-alt-form/checkout-form.tsx +19 -18
- package/src/pages-v2/checkout/checkout-alt-form/checkout-step.tsx +7 -7
- package/src/pages-v2/checkout/checkout-alt-form/step-heading.tsx +4 -4
- package/src/pages-v2/checkout/checkout-alt-form/steps/address/address-card.tsx +4 -4
- package/src/pages-v2/checkout/checkout-alt-form/steps/address/delivery-address.tsx +33 -31
- package/src/pages-v2/checkout/checkout-alt-form/steps/address/new-address-form.tsx +19 -21
- package/src/pages-v2/checkout/checkout-alt-form/steps/address/styles.ts +1 -1
- package/src/pages-v2/checkout/checkout-alt-form/steps/customer-info/customer-information.tsx +16 -17
- package/src/pages-v2/checkout/checkout-alt-form/steps/payment/payment-details.tsx +25 -28
- package/src/pages-v2/checkout/checkout-alt-form/steps/payment/safe-card-preview-data.tsx +2 -2
- package/src/pages-v2/checkout/checkout-alt-form/steps/shipping/delivery-date.tsx +5 -5
- package/src/pages-v2/checkout/checkout-alt-form/steps/shipping/delivery-options.tsx +33 -34
- package/src/pages-v2/checkout/checkout-alt-summary/cart-item.tsx +2 -2
- package/src/pages-v2/checkout/checkout-alt-summary/checkout-alt-summary.tsx +9 -9
- package/src/pages-v2/checkout/checkout-alt-summary/list-item.tsx +2 -2
- package/src/pages-v2/confirmation/address.tsx +4 -4
- package/src/pages-v2/confirmation/confirmation-summary.tsx +11 -10
- package/src/pages-v2/confirmation/ordered-products.tsx +12 -11
- package/src/pages-v2/product-details/available-shops.tsx +6 -6
- package/src/pages-v2/product-details/bopis/find-in-store-button.tsx +3 -3
- package/src/pages-v2/product-details/bopis/find-in-store-modal.tsx +16 -17
- package/src/pages-v2/product-details/bopis/pickup-option-select.tsx +5 -5
- package/src/pages-v2/product-details/bopis/search-header.tsx +3 -2
- package/src/pages-v2/product-details/bopis/store-card/shop-card.tsx +15 -16
- package/src/pages-v2/product-details/bopis/store-card/utils/getDaysResources.ts +1 -1
- package/src/pages-v2/product-details/checkbox-label.tsx +3 -3
- package/src/pages-v2/product-details/currency.ts +1 -0
- package/src/pages-v2/product-details/frequently-bought.tsx +12 -12
- package/src/pages-v2/product-details/frequently-product-card.tsx +5 -5
- package/src/pages-v2/product-details/product-comment.tsx +4 -4
- package/src/pages-v2/product-details/product-description.tsx +3 -3
- package/src/pages-v2/product-details/product-filter-card.tsx +17 -14
- package/src/pages-v2/product-details/product-intro/compound/context.ts +10 -5
- package/src/pages-v2/product-details/product-intro/compound/product-info.tsx +19 -19
- package/src/pages-v2/product-details/product-intro/compound/product-intro-images.tsx +39 -33
- package/src/pages-v2/product-details/product-intro/compound/product-intro.tsx +7 -7
- package/src/pages-v2/product-details/product-intro/compound/thumbnail-with-skeleton.tsx +2 -2
- package/src/pages-v2/product-details/product-intro/utils.ts +3 -5
- package/src/pages-v2/product-details/product-review.tsx +9 -9
- package/src/pages-v2/product-details/product-tabs.tsx +11 -8
- package/src/pages-v2/product-details/related-products.tsx +12 -9
- package/src/pages-v2/product-list/breadcrumbs.tsx +3 -3
- package/src/pages-v2/product-list/checkbox-label.tsx +3 -3
- package/src/pages-v2/product-list/facet-group.tsx +8 -8
- package/src/pages-v2/product-list/facet.tsx +4 -3
- package/src/pages-v2/product-list/list-filter.tsx +6 -6
- package/src/pages-v2/product-list/pagination.tsx +2 -2
- package/src/pages-v2/product-list/product-list-context.tsx +22 -18
- package/src/pages-v2/product-list/product-list-state.ts +14 -14
- package/src/pages-v2/product-list/product-list-view.tsx +18 -17
- package/src/pages-v2/product-list/product-rating.tsx +6 -3
- package/src/pages-v2/product-list/quick-view-dialog-content.tsx +21 -23
- package/src/pages-v2/product-list/quick-view-dialog.tsx +7 -3
- package/src/pages-v2/product-list/range-filter.tsx +5 -6
- package/src/pages-v2/product-list/scrollbar.tsx +4 -4
- package/src/pages-v2/product-list/search-bar.tsx +12 -12
- package/src/pages-v2/product-list/selected-facets.tsx +4 -4
- package/src/pages-v2/product-list/side-nav.tsx +2 -2
- package/src/pages-v2/product-list/swatch.tsx +15 -11
- package/src/pages-v2/product-list/utils/generate-breadcrumbs.ts +1 -1
- package/src/pages-v2/product-list/utils/getCategoryFilterFromSlug.ts +33 -68
- package/src/pages-v2/product-list/utils/product-list-helper.ts +5 -5
- package/src/pages-v2/product-list/utils/product-list-types.ts +1 -1
- package/src/pages-v2/product-list/utils/search-for-category.ts +4 -4
- package/src/pages-v2/product-list/utils/sort-options.ts +1 -1
- package/src/pages-v2/quickorder/order-upload.tsx +92 -78
- package/src/pages-v2/quickorder/provider.tsx +13 -10
- package/src/pages-v2/quickorder/quick-order-header.tsx +1 -1
- package/src/pages-v2/quickorder/quick-order-row.tsx +9 -8
- package/src/pages-v2/quickorder/quick-order-table.tsx +3 -3
- package/src/pages-v2/quickorder/quick-order.tsx +48 -43
- package/src/providers/nav-provider/index.tsx +3 -3
- package/src/providers/nav-provider/utils/createLink.ts +1 -1
- package/src/providers/notifications/notification-context.tsx +3 -4
- package/src/providers/notifications/use-notification.ts +1 -1
- package/tsconfig.json +1 -1
- package/src/components-v2/sticky/Sticky.stories.tsx +0 -88
- package/src/components-v2/sticky/index.ts +0 -1
- package/src/components-v2/sticky/sticky.tsx +0 -62
- package/src/components-v2/sticky/styles.ts +0 -38
- package/src/components-v2/utils/constants.ts +0 -8
- package/src/theme/build-mui-theme.ts +0 -104
- package/src/theme/components.ts +0 -163
- package/src/theme/emotion-cache.tsx +0 -101
- package/src/theme/theme-colors.ts +0 -205
- package/src/theme/theme-options-sample.ts +0 -69
- package/src/theme/theme-options.ts +0 -172
- package/src/theme/theme-provider.tsx +0 -44
- package/src/theme/typography.ts +0 -22
- package/src/theme/utils.ts +0 -17
|
@@ -1,30 +1,21 @@
|
|
|
1
1
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
User,
|
|
7
|
-
UserCounts,
|
|
8
|
-
Wishlist,
|
|
9
|
-
WishlistCreateInput,
|
|
10
|
-
WishlistDetailInput,
|
|
11
|
-
WishlistLinesInput,
|
|
12
|
-
} from "@/schemas/user.schema";
|
|
2
|
+
|
|
3
|
+
import { D365DatasourceBase } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-base.datasource";
|
|
4
|
+
import { D365ProductDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-product.datasource";
|
|
5
|
+
import type { UserApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
|
|
13
6
|
import {
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
type CommerceProperty,
|
|
8
|
+
type Customer,
|
|
9
|
+
type ProductList,
|
|
10
|
+
type ProductListSearchCriteria,
|
|
16
11
|
ProductListType,
|
|
17
|
-
|
|
18
|
-
SimpleProduct,
|
|
19
|
-
ProductList,
|
|
12
|
+
type SimpleProduct,
|
|
20
13
|
} from "@msdyn365-commerce/retail-proxy";
|
|
21
14
|
import {
|
|
22
15
|
createCustomerAsync,
|
|
23
16
|
readAsync,
|
|
24
17
|
updateAsync,
|
|
25
18
|
} from "@msdyn365-commerce/retail-proxy/dist/DataActions/CustomersDataActions.g";
|
|
26
|
-
import jwt from "jsonwebtoken";
|
|
27
|
-
import { D365DatasourceBase } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-base.datasource";
|
|
28
19
|
import {
|
|
29
20
|
addProductListLinesAsync,
|
|
30
21
|
copyCartToProductListAsync,
|
|
@@ -33,10 +24,21 @@ import {
|
|
|
33
24
|
removeProductListLinesAsync,
|
|
34
25
|
searchAsync,
|
|
35
26
|
updateProductListLinesAsync,
|
|
27
|
+
readAsync as wishlistReadAsync,
|
|
36
28
|
} from "@msdyn365-commerce/retail-proxy/dist/DataActions/ProductListsDataActions.g";
|
|
37
|
-
import
|
|
29
|
+
import jwt from "jsonwebtoken";
|
|
38
30
|
import { uniq } from "lodash";
|
|
39
|
-
import {
|
|
31
|
+
import type {
|
|
32
|
+
CopyCartToWishlistInput,
|
|
33
|
+
ExtendedWishlist,
|
|
34
|
+
User,
|
|
35
|
+
UserCounts,
|
|
36
|
+
Wishlist,
|
|
37
|
+
WishlistCreateInput,
|
|
38
|
+
WishlistDetailInput,
|
|
39
|
+
WishlistLinesInput,
|
|
40
|
+
} from "@/schemas/user.schema";
|
|
41
|
+
|
|
40
42
|
class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
41
43
|
async updateUser(user: User): Promise<User> {
|
|
42
44
|
const context = this.context;
|
|
@@ -122,7 +124,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
122
124
|
);
|
|
123
125
|
return wishlistProductData;
|
|
124
126
|
} catch (error) {
|
|
125
|
-
throw new Error(
|
|
127
|
+
throw new Error(`Error getting wishlists: ${error}`);
|
|
126
128
|
}
|
|
127
129
|
}
|
|
128
130
|
|
|
@@ -134,7 +136,9 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
134
136
|
try {
|
|
135
137
|
wishlist = await wishlistReadAsync(context as any, input.Id);
|
|
136
138
|
} catch (error) {
|
|
137
|
-
throw new Error(
|
|
139
|
+
throw new Error(
|
|
140
|
+
`Error getting wishlist details: ${JSON.stringify(error)}`,
|
|
141
|
+
);
|
|
138
142
|
}
|
|
139
143
|
|
|
140
144
|
const extendedWishlist = { ...wishlist } as ExtendedWishlist;
|
|
@@ -152,7 +156,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
152
156
|
id: uniq(productIds),
|
|
153
157
|
});
|
|
154
158
|
} catch (error) {
|
|
155
|
-
throw new Error(
|
|
159
|
+
throw new Error(`Error getting wishlist products: ${error}`);
|
|
156
160
|
}
|
|
157
161
|
|
|
158
162
|
if (products) {
|
|
@@ -179,11 +183,11 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
179
183
|
try {
|
|
180
184
|
const wishlist = await createProductListAsync(
|
|
181
185
|
context as any,
|
|
182
|
-
productList
|
|
186
|
+
productList,
|
|
183
187
|
);
|
|
184
188
|
return wishlist;
|
|
185
189
|
} catch (error) {
|
|
186
|
-
throw new Error(
|
|
190
|
+
throw new Error(`Error creating wishlist: ${JSON.stringify(error)}`);
|
|
187
191
|
}
|
|
188
192
|
}
|
|
189
193
|
|
|
@@ -195,22 +199,10 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
195
199
|
try {
|
|
196
200
|
await deleteAsync(context as any, { Id: input.Id });
|
|
197
201
|
} catch (error) {
|
|
198
|
-
throw new Error(
|
|
202
|
+
throw new Error(`Error deleting wishlist: ${error}`);
|
|
199
203
|
}
|
|
200
204
|
}
|
|
201
205
|
|
|
202
|
-
// async updateWishlist(input: WishlistLinesInput): Promise<Wishlist> {
|
|
203
|
-
// const context = await getContextFromCookie();
|
|
204
|
-
|
|
205
|
-
// try {
|
|
206
|
-
// const wishlist = await updateAsync(context as any, input);
|
|
207
|
-
// return wishlist;
|
|
208
|
-
// } catch (error) {
|
|
209
|
-
// console.log('input', input);
|
|
210
|
-
// throw new Error("Error updating wishlist: " + error);
|
|
211
|
-
// }
|
|
212
|
-
// }
|
|
213
|
-
|
|
214
206
|
async updateWishlist(input: WishlistLinesInput): Promise<Wishlist> {
|
|
215
207
|
const context = this.context;
|
|
216
208
|
const id = input.Id;
|
|
@@ -225,7 +217,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
225
217
|
const wishlist = { Id: id, productListLines: updatedProductListLines };
|
|
226
218
|
return wishlist;
|
|
227
219
|
} catch (error) {
|
|
228
|
-
throw new Error(
|
|
220
|
+
throw new Error(`Error updating wishlist: ${error}`);
|
|
229
221
|
}
|
|
230
222
|
}
|
|
231
223
|
|
|
@@ -244,11 +236,10 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
244
236
|
const wishlist = { Id: id, productListLines: updatedProductListLines };
|
|
245
237
|
return wishlist;
|
|
246
238
|
} catch (error) {
|
|
247
|
-
throw new Error(
|
|
239
|
+
throw new Error(`Error adding to wishlist: ${error}`);
|
|
248
240
|
}
|
|
249
241
|
}
|
|
250
242
|
|
|
251
|
-
// TODO: void return
|
|
252
243
|
async removeProductsFromWishlist(input: WishlistLinesInput): Promise<void> {
|
|
253
244
|
const context = this.context;
|
|
254
245
|
const id = input.Id;
|
|
@@ -256,7 +247,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
256
247
|
try {
|
|
257
248
|
await removeProductListLinesAsync(context as any, id, productListLines);
|
|
258
249
|
} catch (error) {
|
|
259
|
-
throw new Error(
|
|
250
|
+
throw new Error(`Error removing from wishlist: ${error}`);
|
|
260
251
|
}
|
|
261
252
|
}
|
|
262
253
|
|
|
@@ -277,7 +268,7 @@ class D365UserDatasource extends D365DatasourceBase implements UserApi {
|
|
|
277
268
|
);
|
|
278
269
|
return wishlist;
|
|
279
270
|
} catch (error) {
|
|
280
|
-
throw new Error(
|
|
271
|
+
throw new Error(`Error copying cart to wishlist: ${error}`);
|
|
281
272
|
}
|
|
282
273
|
}
|
|
283
274
|
}
|
|
@@ -1,23 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AddressApi,
|
|
3
|
-
CategoryApi,
|
|
4
|
-
Datasource,
|
|
5
|
-
OrderApi,
|
|
6
|
-
OrganizationApi,
|
|
7
|
-
PrimaryDatasource,
|
|
8
|
-
ProductApi,
|
|
9
|
-
SessionApi,
|
|
10
|
-
UserApi,
|
|
11
|
-
} from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
|
|
12
|
-
import { D365ProductDatasource } from ".";
|
|
13
|
-
import { D365CartDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-cart.datasource";
|
|
14
1
|
import D365AddressDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-address.datasource";
|
|
2
|
+
import { D365CartDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-cart.datasource";
|
|
15
3
|
import D365CategoriesDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-categories.datasource";
|
|
16
|
-
import D365OrganizationDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-organization.datasource";
|
|
17
4
|
import D365OrderDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-order.datasource";
|
|
5
|
+
import D365OrganizationDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-organization.datasource";
|
|
18
6
|
import D365SessionDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-session.datasource";
|
|
19
7
|
import D365UserDatasource from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-user.datasource";
|
|
20
|
-
import {
|
|
8
|
+
import {
|
|
9
|
+
type AddressApi,
|
|
10
|
+
type CategoryApi,
|
|
11
|
+
Datasource,
|
|
12
|
+
type OrderApi,
|
|
13
|
+
type OrganizationApi,
|
|
14
|
+
type PrimaryDatasource,
|
|
15
|
+
type ProductApi,
|
|
16
|
+
type SessionApi,
|
|
17
|
+
type UserApi,
|
|
18
|
+
} from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
|
|
19
|
+
import type { ICallerContext } from "@msdyn365-commerce/retail-proxy";
|
|
20
|
+
import { D365ProductDatasource } from ".";
|
|
21
21
|
|
|
22
22
|
export class D365Datasource extends Datasource implements PrimaryDatasource {
|
|
23
23
|
user: UserApi;
|
|
@@ -41,5 +41,3 @@ export class D365Datasource extends Datasource implements PrimaryDatasource {
|
|
|
41
41
|
}
|
|
42
42
|
// Datasources
|
|
43
43
|
}
|
|
44
|
-
|
|
45
|
-
// export default d365Datasource;
|
|
@@ -1,4 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export { D365ProductDatasource, D365Datasource };
|
|
1
|
+
export { D365Datasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365.datasource";
|
|
2
|
+
export { D365ProductDatasource } from "@evenicanpm/storefront-core/src/api-manager/datasources/d365/d365-product.datasource";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProductDimensionAvailabilitySearchCriteria } from "@msdyn365-commerce/retail-proxy";
|
|
1
|
+
import type { ProductDimensionAvailabilitySearchCriteria } from "@msdyn365-commerce/retail-proxy";
|
|
2
2
|
/**
|
|
3
3
|
* Helper: Create search criteria for product dimension availability.
|
|
4
4
|
* @param dimensionTypeValue
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
"use server";
|
|
2
2
|
import { decode } from "next-auth/jwt";
|
|
3
|
-
import { getSecret } from "@evenicanpm/common-core/keyvault";
|
|
4
3
|
|
|
5
4
|
export async function decodeToken(token: string) {
|
|
6
|
-
const secret =
|
|
5
|
+
const secret = process.env.NEXTAUTH_SECRET; //this shouldn't be from key vault.
|
|
7
6
|
if (!secret) {
|
|
8
7
|
throw new Error("Environment variable NEXTAUTH_SECRET is not set.");
|
|
9
8
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use server";
|
|
2
|
-
import {
|
|
3
|
-
import { ICallerContext } from "@msdyn365-commerce/retail-proxy";
|
|
4
|
-
import { getLocale } from "next-intl/server";
|
|
2
|
+
import type { ICallerContext } from "@msdyn365-commerce/retail-proxy";
|
|
5
3
|
import { cookies } from "next/headers";
|
|
4
|
+
import { getLocale } from "next-intl/server";
|
|
5
|
+
import { manuallyRetrieveSessionCookie } from "@/auth/next-auth-cookie-manager";
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* Retrieves the D365 context from the "D365Context" cookie, enriches it with the current session token,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SimpleProduct } from "@msdyn365-commerce/retail-proxy";
|
|
1
|
+
import type { SimpleProduct } from "@msdyn365-commerce/retail-proxy";
|
|
2
2
|
|
|
3
3
|
const testImageUrl = (url: string) => {
|
|
4
4
|
return new Promise<[string, boolean]>((resolve) => {
|
|
@@ -28,16 +28,35 @@ export const validateAndSetMediaUrls = async (
|
|
|
28
28
|
productData: SimpleProduct,
|
|
29
29
|
baseUrl: string,
|
|
30
30
|
) => {
|
|
31
|
-
const product = productData;
|
|
32
|
-
|
|
31
|
+
const product = { ...productData };
|
|
32
|
+
|
|
33
|
+
let primaryImageUrl = product.PrimaryImageUrl;
|
|
34
|
+
|
|
33
35
|
if (!primaryImageUrl) {
|
|
34
|
-
|
|
36
|
+
primaryImageUrl = `Products/${product.ItemId}_000_001.png`;
|
|
35
37
|
}
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
38
|
+
|
|
39
|
+
let fullPrimaryUrl = `${baseUrl}${primaryImageUrl}`;
|
|
40
|
+
|
|
41
|
+
// Validate the primary image
|
|
42
|
+
const isPrimaryValid = (await testMedia([fullPrimaryUrl])).length > 0;
|
|
43
|
+
if (!isPrimaryValid) {
|
|
44
|
+
fullPrimaryUrl = `${baseUrl}Products/${product.ItemId}_000_001.png`;
|
|
40
45
|
}
|
|
41
|
-
|
|
42
|
-
|
|
46
|
+
|
|
47
|
+
product.PrimaryImageUrl = fullPrimaryUrl;
|
|
48
|
+
|
|
49
|
+
const candidateUrls: string[] = [];
|
|
50
|
+
for (let index = 2; index <= 5; index++) {
|
|
51
|
+
const candidateUrl = fullPrimaryUrl.replace(
|
|
52
|
+
/001(\.[a-z]+)$/i,
|
|
53
|
+
`${String(index).padStart(3, "0")}$1`,
|
|
54
|
+
);
|
|
55
|
+
candidateUrls.push(candidateUrl);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Validate which URLs exist
|
|
59
|
+
const validUrls = await testMedia(candidateUrls);
|
|
60
|
+
|
|
61
|
+
return [product.PrimaryImageUrl, ...validUrls];
|
|
43
62
|
};
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
+
import { addressMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
|
|
2
|
+
import * as addressTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.translator";
|
|
3
|
+
import type { Shipping } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
1
4
|
import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
|
|
2
|
-
import {
|
|
5
|
+
import type {
|
|
3
6
|
Address,
|
|
4
7
|
GetDeliveryOptionsInput,
|
|
5
8
|
GetStatesInput,
|
|
6
9
|
} from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
|
|
7
|
-
import {
|
|
10
|
+
import type {
|
|
8
11
|
CountryRegionInfo,
|
|
9
12
|
DeliveryOption,
|
|
10
13
|
StateProvinceInfo,
|
|
11
14
|
} from "@msdyn365-commerce/retail-proxy";
|
|
12
|
-
import { Shipping } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
13
|
-
import * as addressTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.translator";
|
|
14
|
-
import { addressMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
|
|
15
15
|
import { merge } from "object-mapper";
|
|
16
16
|
|
|
17
17
|
const address = {
|
|
@@ -7,8 +7,8 @@
|
|
|
7
7
|
* https://github.com/wankdanker/node-object-mapper
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
|
-
import { Address as E4Address } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
11
|
-
import { Address } from "@msdyn365-commerce/retail-proxy";
|
|
10
|
+
import type { Address as E4Address } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
11
|
+
import type { Address } from "@msdyn365-commerce/retail-proxy";
|
|
12
12
|
|
|
13
13
|
export const addressMap = {
|
|
14
14
|
"[].id": [
|
|
@@ -16,7 +16,7 @@ export const addressMap = {
|
|
|
16
16
|
{
|
|
17
17
|
key: "[].RecordId",
|
|
18
18
|
transform: (id: string) => {
|
|
19
|
-
if (id !== null) return parseInt(id);
|
|
19
|
+
if (id !== null) return Number.parseInt(id);
|
|
20
20
|
},
|
|
21
21
|
},
|
|
22
22
|
],
|
|
@@ -25,7 +25,7 @@ export const addressMap = {
|
|
|
25
25
|
"[].addressType.id": {
|
|
26
26
|
key: "[].AddressTypeValue",
|
|
27
27
|
transform: (id: string) => {
|
|
28
|
-
if (id !== null) return parseInt(id);
|
|
28
|
+
if (id !== null) return Number.parseInt(id);
|
|
29
29
|
},
|
|
30
30
|
},
|
|
31
31
|
"[].address1": "[].Street",
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
|
|
2
|
-
import {
|
|
3
|
-
AddressInput,
|
|
4
|
-
Country,
|
|
5
|
-
Shipping,
|
|
6
|
-
} from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
7
|
-
import { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
|
|
8
|
-
import { merge } from "object-mapper";
|
|
9
1
|
import {
|
|
10
2
|
addressReverseMap,
|
|
11
3
|
countriesMap,
|
|
12
4
|
countryMap,
|
|
13
5
|
deliveryOptionsMap,
|
|
14
6
|
} from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
|
|
7
|
+
import type {
|
|
8
|
+
AddressInput,
|
|
9
|
+
Country,
|
|
10
|
+
Shipping,
|
|
11
|
+
} from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
12
|
+
import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
|
|
13
|
+
import type { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
|
|
14
|
+
import { merge } from "object-mapper";
|
|
15
15
|
|
|
16
16
|
/**
|
|
17
17
|
* Transforms the Address schema to e4 API address
|
|
@@ -88,7 +88,7 @@ export const countriesTransformValidate = (countries: Country[]) => {
|
|
|
88
88
|
};
|
|
89
89
|
|
|
90
90
|
export const countryTransformValidate = (country: Country) => {
|
|
91
|
-
if (country?.state
|
|
91
|
+
if (country?.state?.length) {
|
|
92
92
|
return merge(country, countryMap);
|
|
93
93
|
}
|
|
94
94
|
return [];
|
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
|
|
2
|
-
import * as cartSchema from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
|
|
3
|
-
import { Cart } from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
|
|
4
|
-
import * as cartTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.translator";
|
|
5
1
|
import * as addressTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.translator";
|
|
6
|
-
|
|
7
|
-
import {
|
|
2
|
+
import * as cartTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.translator";
|
|
3
|
+
import type { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
4
|
+
import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
|
|
5
|
+
import type * as cartSchema from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
|
|
6
|
+
import type { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
|
|
7
|
+
import type { CartApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
|
|
8
|
+
import type {
|
|
8
9
|
CardPaymentAcceptPoint,
|
|
9
10
|
CardPaymentAcceptResult,
|
|
10
11
|
LineDeliverySpecification,
|
|
11
12
|
ProductWarehouseInventoryInformation,
|
|
12
13
|
} from "@msdyn365-commerce/retail-proxy";
|
|
13
|
-
import { CartApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
|
|
14
|
-
import { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
15
|
-
import { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
|
|
16
14
|
|
|
17
15
|
const cart: CartApi = {
|
|
18
16
|
//For this data source, initCart does the same thing as getCart
|
|
19
|
-
async initCart(): Promise<Cart> {
|
|
17
|
+
async initCart(): Promise<cartSchema.Cart> {
|
|
20
18
|
const e4Api = await getGraphqlClient();
|
|
21
19
|
|
|
22
20
|
const { data, errors } = await e4Api.e4CartReadMD();
|
|
@@ -31,7 +29,7 @@ const cart: CartApi = {
|
|
|
31
29
|
return transformedData;
|
|
32
30
|
},
|
|
33
31
|
|
|
34
|
-
async addToCart(input: cartSchema.AddToCartInput): Promise<Cart> {
|
|
32
|
+
async addToCart(input: cartSchema.AddToCartInput): Promise<cartSchema.Cart> {
|
|
35
33
|
const e4Api = await getGraphqlClient();
|
|
36
34
|
|
|
37
35
|
const { cartLine } = input;
|
|
@@ -54,7 +52,9 @@ const cart: CartApi = {
|
|
|
54
52
|
return transformedData;
|
|
55
53
|
},
|
|
56
54
|
|
|
57
|
-
async updateCart(
|
|
55
|
+
async updateCart(
|
|
56
|
+
input: cartSchema.UpdateCartInput,
|
|
57
|
+
): Promise<cartSchema.Cart> {
|
|
58
58
|
const e4Api = await getGraphqlClient();
|
|
59
59
|
|
|
60
60
|
const { cart } = input;
|
|
@@ -96,7 +96,9 @@ const cart: CartApi = {
|
|
|
96
96
|
return transformedData;
|
|
97
97
|
},
|
|
98
98
|
|
|
99
|
-
async updateCartLines(
|
|
99
|
+
async updateCartLines(
|
|
100
|
+
input: cartSchema.UpdateCartLineInput,
|
|
101
|
+
): Promise<cartSchema.Cart> {
|
|
100
102
|
const e4Api = await getGraphqlClient();
|
|
101
103
|
|
|
102
104
|
const { cartLine } = input;
|
|
@@ -125,7 +127,9 @@ const cart: CartApi = {
|
|
|
125
127
|
return transformedData;
|
|
126
128
|
},
|
|
127
129
|
|
|
128
|
-
async deleteCartLine(
|
|
130
|
+
async deleteCartLine(
|
|
131
|
+
input: cartSchema.DeleteCartLineInput,
|
|
132
|
+
): Promise<cartSchema.Cart> {
|
|
129
133
|
const e4Api = await getGraphqlClient();
|
|
130
134
|
|
|
131
135
|
const { cartLine } = input;
|
|
@@ -149,7 +153,7 @@ const cart: CartApi = {
|
|
|
149
153
|
return transformedData;
|
|
150
154
|
},
|
|
151
155
|
|
|
152
|
-
async getCart(): Promise<Cart> {
|
|
156
|
+
async getCart(): Promise<cartSchema.Cart> {
|
|
153
157
|
const e4Api = await getGraphqlClient();
|
|
154
158
|
|
|
155
159
|
const { data, errors } = await e4Api.e4CartReadMD();
|
|
@@ -164,21 +168,17 @@ const cart: CartApi = {
|
|
|
164
168
|
return transformedData;
|
|
165
169
|
},
|
|
166
170
|
|
|
167
|
-
async addDiscountCode(): Promise<Cart> {
|
|
168
|
-
|
|
169
|
-
throw new Error("Error adding discount code");
|
|
170
|
-
}
|
|
171
|
+
async addDiscountCode(): Promise<cartSchema.Cart> {
|
|
172
|
+
throw new Error("Error adding discount code");
|
|
171
173
|
},
|
|
172
174
|
|
|
173
|
-
async removeDiscountcode(): Promise<Cart> {
|
|
174
|
-
|
|
175
|
-
throw new Error("Error removing discount code");
|
|
176
|
-
}
|
|
175
|
+
async removeDiscountcode(): Promise<cartSchema.Cart> {
|
|
176
|
+
throw new Error("Error removing discount code");
|
|
177
177
|
},
|
|
178
178
|
|
|
179
179
|
async updateLineDeliveryMode(
|
|
180
180
|
input: cartSchema.UpdateCartLineDeliveryModeInput,
|
|
181
|
-
): Promise<Cart> {
|
|
181
|
+
): Promise<cartSchema.Cart> {
|
|
182
182
|
const e4Api = await getGraphqlClient();
|
|
183
183
|
|
|
184
184
|
const { data, errors } = await e4Api.e4ShippingMethodUpdateMD({
|
|
@@ -198,22 +198,16 @@ const cart: CartApi = {
|
|
|
198
198
|
);
|
|
199
199
|
},
|
|
200
200
|
|
|
201
|
-
async removeLineDeliveryMode(): Promise<Cart> {
|
|
202
|
-
|
|
203
|
-
throw new Error("Error updating cart line delivery mode");
|
|
204
|
-
}
|
|
201
|
+
async removeLineDeliveryMode(): Promise<cartSchema.Cart> {
|
|
202
|
+
throw new Error("Error updating cart line delivery mode");
|
|
205
203
|
},
|
|
206
204
|
|
|
207
205
|
async getCardAcceptPoint(): Promise<CardPaymentAcceptPoint> {
|
|
208
|
-
|
|
209
|
-
throw new Error("Error getCardAcceptPoint");
|
|
210
|
-
}
|
|
206
|
+
throw new Error("Error getCardAcceptPoint");
|
|
211
207
|
},
|
|
212
208
|
|
|
213
209
|
async retrieveCardPaymentAcceptResult(): Promise<CardPaymentAcceptResult> {
|
|
214
|
-
|
|
215
|
-
throw new Error("Error retrieveCardPaymentAcceptResult");
|
|
216
|
-
}
|
|
210
|
+
throw new Error("Error retrieveCardPaymentAcceptResult");
|
|
217
211
|
},
|
|
218
212
|
|
|
219
213
|
async checkout(): Promise<SalesOrder> {
|
|
@@ -224,9 +218,14 @@ const cart: CartApi = {
|
|
|
224
218
|
const chars =
|
|
225
219
|
"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
|
|
226
220
|
let token = "";
|
|
221
|
+
|
|
222
|
+
const randomValues = new Uint32Array(length);
|
|
223
|
+
crypto.getRandomValues(randomValues);
|
|
224
|
+
|
|
227
225
|
for (let i = 0; i < length; i++) {
|
|
228
|
-
token += chars[
|
|
226
|
+
token += chars[randomValues[i] % chars.length];
|
|
229
227
|
}
|
|
228
|
+
|
|
230
229
|
return token;
|
|
231
230
|
};
|
|
232
231
|
|
|
@@ -245,9 +244,10 @@ const cart: CartApi = {
|
|
|
245
244
|
SalesLines: [],
|
|
246
245
|
};
|
|
247
246
|
},
|
|
248
|
-
|
|
247
|
+
|
|
248
|
+
getCartLinesInventory: (
|
|
249
249
|
_input: cartSchema.InventorySearchCartLinesCriteriaInput,
|
|
250
|
-
): Promise<ProductWarehouseInventoryInformation> {
|
|
250
|
+
): Promise<ProductWarehouseInventoryInformation> => {
|
|
251
251
|
throw new Error("Function not implemented.");
|
|
252
252
|
},
|
|
253
253
|
};
|
|
@@ -7,18 +7,19 @@
|
|
|
7
7
|
* https://github.com/wankdanker/node-object-mapper
|
|
8
8
|
*
|
|
9
9
|
*/
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
} from "@msdyn365-commerce/retail-proxy";
|
|
14
|
-
import {
|
|
15
|
-
Product,
|
|
10
|
+
|
|
11
|
+
import { addressMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/address/e4-address.remaps";
|
|
12
|
+
import type {
|
|
16
13
|
CartLine,
|
|
17
14
|
Address as E4Address,
|
|
15
|
+
Product,
|
|
18
16
|
} from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
19
|
-
import { merge } from "object-mapper";
|
|
20
17
|
import { productMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/product/e4-product.remaps";
|
|
21
|
-
import {
|
|
18
|
+
import type {
|
|
19
|
+
Address,
|
|
20
|
+
Product as DynProduct,
|
|
21
|
+
} from "@msdyn365-commerce/retail-proxy";
|
|
22
|
+
import { merge } from "object-mapper";
|
|
22
23
|
|
|
23
24
|
/* CART REMAPS */
|
|
24
25
|
export const cartLineMap = {
|
|
@@ -41,7 +42,7 @@ export const cartLineMap = {
|
|
|
41
42
|
"[].product.id": {
|
|
42
43
|
key: "[].ProductId",
|
|
43
44
|
transform: (id: string) => {
|
|
44
|
-
if (id !== null) return parseInt(id);
|
|
45
|
+
if (id !== null) return Number.parseInt(id);
|
|
45
46
|
},
|
|
46
47
|
},
|
|
47
48
|
"[].product.code": "[].ItemId",
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
+
import { cartMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.remaps";
|
|
2
|
+
import type { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
1
3
|
import {
|
|
4
|
+
type Cart,
|
|
2
5
|
extendedCartSchema,
|
|
3
|
-
Cart,
|
|
4
6
|
} from "@evenicanpm/storefront-core/src/api-manager/schemas/cart.schema";
|
|
5
|
-
import { Cart as E4Cart } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
6
|
-
import { cartMap } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/cart/e4-cart.remaps";
|
|
7
7
|
import { merge } from "object-mapper";
|
|
8
8
|
|
|
9
9
|
/**
|
|
@@ -14,7 +14,7 @@ import { merge } from "object-mapper";
|
|
|
14
14
|
* @returns the transformed cart object
|
|
15
15
|
*/
|
|
16
16
|
export const cartTransformValidate = (cart: E4Cart): Cart => {
|
|
17
|
-
if (!
|
|
17
|
+
if (!cart?.id) throw new Error("Not a valid cart");
|
|
18
18
|
const transformedData = merge(cart, cartMap);
|
|
19
19
|
try {
|
|
20
20
|
extendedCartSchema.parse(transformedData);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
|
|
2
|
-
import { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
|
|
3
|
-
import { CategoryApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
|
|
4
|
-
import { Category as E4Category } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
5
1
|
import * as categoryTranslator from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/categories/e4-categories.translator";
|
|
2
|
+
import type { Category as E4Category } from "@evenicanpm/storefront-core/src/api-manager/datasources/e4/graphqlRequestSdk";
|
|
3
|
+
import getGraphqlClient from "@evenicanpm/storefront-core/src/api-manager/lib/get-graphql-client";
|
|
4
|
+
import type { CategoryApi } from "@evenicanpm/storefront-core/src/api-manager/types/Datasource";
|
|
5
|
+
import type { CategoryHierarchy } from "@evenicanpm/storefront-core/src/lib/category-helpers";
|
|
6
6
|
|
|
7
7
|
const categories: CategoryApi = {
|
|
8
8
|
async getCategories(): Promise<CategoryHierarchy[]> {
|