@evenicanpm/storefront-core 1.0.2 → 1.0.3
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/package.json +1 -1
- package/src/api-manager/README.md +30 -22
- package/src/api-manager/datasources/e4/{e4-address.datasource.ts → address/e4-address.datasource.ts} +10 -10
- package/src/api-manager/datasources/e4/address/e4-address.remaps.ts +70 -0
- package/src/api-manager/datasources/e4/address/e4-address.translator.ts +98 -0
- package/src/api-manager/datasources/e4/{e4-cart.datasource.ts → cart/e4-cart.datasource.ts} +17 -16
- package/src/api-manager/datasources/e4/cart/e4-cart.remaps.ts +94 -0
- package/src/api-manager/datasources/e4/cart/e4-cart.translator.ts +23 -0
- package/src/api-manager/datasources/e4/categories/e4-categories.datasource.ts +38 -0
- package/src/api-manager/datasources/e4/categories/e4-categories.translator.ts +161 -0
- package/src/api-manager/datasources/e4/e4.datasource.ts +8 -39
- package/src/api-manager/datasources/e4/{e4-order.datasource.ts → order/e4-order.datasource.ts} +3 -3
- package/src/api-manager/datasources/e4/order/e4-order.remaps.ts +101 -0
- package/src/api-manager/datasources/e4/{e4-organization.datasource.ts → organization/e4-organization.datasource.ts} +1 -1
- package/src/api-manager/datasources/e4/{e4-product.datasource.ts → product/e4-product.datasource.ts} +13 -11
- package/src/api-manager/datasources/e4/product/e4-product.remaps.ts +88 -0
- package/src/api-manager/datasources/e4/{e4.translator.ts → product/e4-product.translator.ts} +9 -329
- package/src/api-manager/datasources/e4/{e4-session.datasource.ts → session/e4-session.datasource.ts} +3 -3
- package/src/api-manager/datasources/e4/session/e4-session.translator.ts +18 -0
- package/src/api-manager/datasources/e4/user/e4-user.datasource.ts +13 -6
- package/src/api-manager/datasources/e4/user/e4-user.remaps.ts +49 -0
- package/src/api-manager/datasources/e4/user/e4-user.translator.ts +23 -2
- package/src/api-manager/datasources/e4/utils/unwrap-e4-variants.ts +1 -1
- package/src/api-manager/index.ts +11 -6
- package/src/api-manager/schemas/user.schema.ts +3 -1
- package/src/api-manager/services/cart/mutations/add-to-cart.ts +1 -1
- package/src/api-manager/services/cart/mutations/checkout.ts +1 -2
- package/src/api-manager/services/product/server/product.server.ts +4 -1
- package/src/api-manager/types/Datasource.ts +1 -5
- package/src/cms/blocks/BlockManager.tsx +67 -0
- package/src/cms/blocks/Components/BrandLogosScroller.tsx +72 -0
- package/src/cms/blocks/Components/CategoryCard.tsx +47 -0
- package/src/cms/blocks/Components/CategoryCarousel/index.tsx +60 -0
- package/src/cms/blocks/Components/FeaturePill.tsx +99 -0
- package/src/cms/blocks/Components/FeaturedCategories.tsx +41 -0
- package/src/cms/blocks/Components/FeaturedProducts.tsx +41 -0
- package/src/cms/blocks/Components/Footer/data/index.ts +32 -0
- package/src/cms/blocks/Components/Footer/index.tsx +88 -0
- package/src/cms/blocks/Components/Footer/interfaces.ts +37 -0
- package/src/cms/blocks/Components/Footer/sections/FooterAppStore.tsx +45 -0
- package/src/cms/blocks/Components/Footer/sections/FooterContact.tsx +36 -0
- package/src/cms/blocks/Components/Footer/sections/FooterLinks.tsx +30 -0
- package/src/cms/blocks/Components/Footer/sections/FooterLogo.tsx +26 -0
- package/src/cms/blocks/Components/Footer/sections/FooterSocialLinks.tsx +70 -0
- package/src/cms/blocks/Components/Footer/styles/index.ts +39 -0
- package/src/cms/blocks/Components/Footer.tsx +77 -0
- package/src/cms/blocks/Components/Hero.tsx +73 -0
- package/src/cms/blocks/Components/HeroCarousel/index.tsx +42 -0
- package/src/cms/blocks/Components/Image.tsx +39 -0
- package/src/cms/blocks/Components/MediaCard.tsx +41 -0
- package/src/cms/blocks/Components/ProductCarousel/index.tsx +82 -0
- package/src/cms/blocks/Components/ProductSectionFullWidth/index.tsx +103 -0
- package/src/cms/blocks/Components/RichText.tsx +19 -0
- package/src/cms/blocks/Components/Seo/index.tsx +48 -0
- package/src/cms/blocks/Components/Services/index.tsx +21 -0
- package/src/cms/blocks/Components/Services/service-card.tsx +73 -0
- package/src/cms/blocks/Components/shared/featured-product-card.tsx +29 -0
- package/src/cms/blocks/Components/shared/product-category-item.tsx +49 -0
- package/src/cms/blocks/Components/shared/product-grid.tsx +48 -0
- package/src/cms/blocks/Components/shared/top-categories-card.tsx +66 -0
- package/src/cms/blocks/Components/shared/top-rating-product-card.tsx +66 -0
- package/src/cms/blocks/Icons/Components/Category.tsx +14 -0
- package/src/cms/blocks/Icons/Components/DottedStar.tsx +40 -0
- package/src/cms/blocks/Icons/Components/FallbackIcon.tsx +33 -0
- package/src/cms/blocks/Icons/Components/GiftBox.tsx +18 -0
- package/src/cms/blocks/Icons/Components/Light.tsx +13 -0
- package/src/cms/blocks/Icons/Components/NewArrival.tsx +18 -0
- package/src/cms/blocks/Icons/Components/RankBadge.tsx +39 -0
- package/src/cms/blocks/Icons/index.ts +32 -0
- package/src/cms/blocks/index.tsx +16 -0
- package/src/cms/blocks/interfaces.ts +240 -0
- package/src/components/Notifications/README.md +1 -1
- package/src/components/Notifications/notification-context.tsx +1 -1
- package/src/components/README.md +3 -8
- package/src/components/_components/MiniCartClient.tsx +1 -1
- package/src/components/_components/navbar/category-based-menu/components/categories.tsx +1 -1
- package/src/components/_components/navbar/mega-menu/mega-menu.tsx +1 -1
- package/src/components/_components/navbar/nav-list/nav-item-child.tsx +2 -2
- package/src/components/_components/product-cards/product-card-1/product-card-1-wrapper.tsx +1 -1
- package/src/components/_components/products-view/product-view-dialog.tsx +1 -1
- package/src/components/_components/settings/setting.tsx +1 -1
- package/src/components/_components/wishlist/add-to-wishlist-dialog.tsx +1 -1
- package/src/components/_components/wishlist/components/create-new-list.tsx +1 -1
- package/src/components/_components/wishlist/remove-from-wishlist-dialog.tsx +1 -1
- package/src/components/_components/wishlist-modal/add-to-wishlist-dialog.tsx +1 -1
- package/src/components/_components/wishlist-modal/remove-from-wishlist-dialog.tsx +1 -1
- package/src/components/countries-input.tsx +0 -1
- package/src/components-v2/BazaarCard.tsx +21 -0
- package/src/components-v2/BazaarImage.tsx +12 -0
- package/src/components-v2/BazaarMenu.tsx +47 -0
- package/src/components-v2/BazaarSwitch.tsx +37 -0
- package/src/components-v2/BazaarTextField.tsx +73 -0
- package/src/components-v2/BoxShadowCard.tsx +16 -0
- package/src/components-v2/DropZone.tsx +86 -0
- package/src/components-v2/HoverBox.tsx +22 -0
- package/src/components-v2/Image.tsx +5 -0
- package/src/components-v2/ImageWithFallback.tsx +51 -0
- package/src/components-v2/LazyImage.tsx +12 -0
- package/src/components-v2/Loading.tsx +36 -0
- package/src/components-v2/MiniCartClient.tsx +65 -0
- package/src/components-v2/README.md +4 -0
- package/src/components-v2/SearchInput.tsx +28 -0
- package/src/components-v2/SnackbarProvider.tsx +32 -0
- package/src/components-v2/T/index.tsx +15 -0
- package/src/components-v2/Typography.tsx +227 -0
- package/src/components-v2/WhiteButton.tsx +20 -0
- package/src/components-v2/accordion/accordion-header.tsx +43 -0
- package/src/components-v2/accordion/index.ts +1 -0
- package/src/components-v2/bazaar-types.ts +84 -0
- package/src/components-v2/carousel/carousel.tsx +72 -0
- package/src/components-v2/carousel/components/carousel-arrows.tsx +60 -0
- package/src/components-v2/carousel/components/carousel-dots.tsx +21 -0
- package/src/components-v2/carousel/index.ts +3 -0
- package/src/components-v2/carousel/styles/index.ts +93 -0
- package/src/components-v2/carousel-cards/carousel-card-1/carousel-card-1.tsx +64 -0
- package/src/components-v2/carousel-cards/carousel-card-1/index.ts +1 -0
- package/src/components-v2/carousel-cards/carousel-card-1/styles.ts +34 -0
- package/src/components-v2/carousel-cards/carousel-card-2/carousel-card-2.tsx +78 -0
- package/src/components-v2/carousel-cards/carousel-card-2/index.ts +1 -0
- package/src/components-v2/carousel-cards/carousel-card-2/styles.ts +26 -0
- package/src/components-v2/carousel-cards/carousel-card-3/carousel-card-3.tsx +37 -0
- package/src/components-v2/carousel-cards/carousel-card-3/index.ts +1 -0
- package/src/components-v2/carousel-cards/carousel-card-3/styles.ts +28 -0
- package/src/components-v2/carousel-cards/carousel-card-4/carousel-card-4.tsx +81 -0
- package/src/components-v2/carousel-cards/carousel-card-4/index.ts +1 -0
- package/src/components-v2/carousel-cards/carousel-card-4/styles.ts +27 -0
- package/src/components-v2/categories/category-list/category-list.tsx +59 -0
- package/src/components-v2/categories/category-list/index.ts +1 -0
- package/src/components-v2/categories/category-list/styles.ts +29 -0
- package/src/components-v2/categories/category-list/types.ts +4 -0
- package/src/components-v2/categories/category-list-item/category-menu-item.tsx +37 -0
- package/src/components-v2/categories/category-list-item/index.ts +1 -0
- package/src/components-v2/categories/category-list-item/styles.ts +35 -0
- package/src/components-v2/categories/category-menu.tsx +51 -0
- package/src/components-v2/categories/mega-menu/banner.tsx +60 -0
- package/src/components-v2/categories/mega-menu/column-list.tsx +70 -0
- package/src/components-v2/categories/mega-menu/mega-menu-1.tsx +37 -0
- package/src/components-v2/categories/mega-menu/mega-menu-2.tsx +37 -0
- package/src/components-v2/categories/mega-menu/styles.ts +25 -0
- package/src/components-v2/categories/types.ts +16 -0
- package/src/components-v2/category-cards/category-card-1/category-card-1.tsx +21 -0
- package/src/components-v2/category-cards/category-card-1/index.ts +1 -0
- package/src/components-v2/category-cards/category-card-1/styles.ts +37 -0
- package/src/components-v2/countdown/count-box.tsx +19 -0
- package/src/components-v2/countdown/count-down.tsx +24 -0
- package/src/components-v2/countdown/index.tsx +2 -0
- package/src/components-v2/countdown/useCountDown.ts +41 -0
- package/src/components-v2/countries-input.tsx +73 -0
- package/src/components-v2/data-table/index.ts +2 -0
- package/src/components-v2/data-table/table-header.tsx +91 -0
- package/src/components-v2/data-table/table-pagination.tsx +36 -0
- package/src/components-v2/flex-box/flex-between.tsx +14 -0
- package/src/components-v2/flex-box/flex-box.tsx +9 -0
- package/src/components-v2/flex-box/flex-row-center.tsx +9 -0
- package/src/components-v2/flex-box/index.ts +5 -0
- package/src/components-v2/footer/components/about-links.tsx +23 -0
- package/src/components-v2/footer/components/app-store.tsx +38 -0
- package/src/components-v2/footer/components/customer-care-links.tsx +21 -0
- package/src/components-v2/footer/components/logo.tsx +23 -0
- package/src/components-v2/footer/components/social-links.tsx +43 -0
- package/src/components-v2/footer/data/index.ts +54 -0
- package/src/components-v2/footer/footer-1.tsx +62 -0
- package/src/components-v2/footer/footer-2.tsx +57 -0
- package/src/components-v2/footer/footer-3.tsx +53 -0
- package/src/components-v2/footer/footer-4.tsx +71 -0
- package/src/components-v2/footer/index.ts +4 -0
- package/src/components-v2/footer/styles/index.ts +42 -0
- package/src/components-v2/header/components/categories-menu.tsx +23 -0
- package/src/components-v2/header/components/mobile-header.tsx +75 -0
- package/src/components-v2/header/components/user.test.tsx +200 -0
- package/src/components-v2/header/components/user.tsx +204 -0
- package/src/components-v2/header/header.tsx +63 -0
- package/src/components-v2/header/hooks/use-header.ts +13 -0
- package/src/components-v2/header/index.ts +1 -0
- package/src/components-v2/header/sticky-header.tsx +17 -0
- package/src/components-v2/header/styles/index.ts +24 -0
- package/src/components-v2/icons/cart-bag.tsx +13 -0
- package/src/components-v2/icons/category-outline.tsx +29 -0
- package/src/components-v2/icons/category.tsx +12 -0
- package/src/components-v2/icons/home.tsx +19 -0
- package/src/components-v2/icons/search.tsx +13 -0
- package/src/components-v2/icons/shopping-bag-outlined.tsx +13 -0
- package/src/components-v2/icons/up-down.tsx +21 -0
- package/src/components-v2/icons/user.tsx +13 -0
- package/src/components-v2/icons/user2.tsx +14 -0
- package/src/components-v2/mini-cart/__tests__/cart-item.test.tsx +174 -0
- package/src/components-v2/mini-cart/__tests__/mini-cart.test.tsx +121 -0
- package/src/components-v2/mini-cart/__tests__/test-cart-empty.json +84 -0
- package/src/components-v2/mini-cart/__tests__/test-cart-with-item.json +244 -0
- package/src/components-v2/mini-cart/components/bottom-actions.tsx +27 -0
- package/src/components-v2/mini-cart/components/cart-item.tsx +147 -0
- package/src/components-v2/mini-cart/components/empty-view.tsx +29 -0
- package/src/components-v2/mini-cart/components/top-header.tsx +37 -0
- package/src/components-v2/mini-cart/index.ts +1 -0
- package/src/components-v2/mini-cart/mini-cart.tsx +107 -0
- package/src/components-v2/mobile-navigation/index.ts +3 -0
- package/src/components-v2/mobile-navigation/mobile-navigation-bar.tsx +73 -0
- package/src/components-v2/mobile-navigation/styles/index.ts +63 -0
- package/src/components-v2/nav-link/index.ts +5 -0
- package/src/components-v2/nav-link/nav-link-2.tsx +32 -0
- package/src/components-v2/nav-link/nav-link-3.tsx +67 -0
- package/src/components-v2/nav-link/nav-link.tsx +53 -0
- package/src/components-v2/navbar/categories.tsx +27 -0
- package/src/components-v2/navbar/category-based-menu/category-based-menu.tsx +52 -0
- package/src/components-v2/navbar/category-based-menu/components/categories.tsx +44 -0
- package/src/components-v2/navbar/category-based-menu/components/category-item.tsx +31 -0
- package/src/components-v2/navbar/category-based-menu/components/child-categories.tsx +38 -0
- package/src/components-v2/navbar/category-based-menu/index.ts +1 -0
- package/src/components-v2/navbar/category-based-menu/styles.ts +81 -0
- package/src/components-v2/navbar/category-based-menu/types.ts +18 -0
- package/src/components-v2/navbar/index.ts +1 -0
- package/src/components-v2/navbar/mega-menu/category-list.tsx +29 -0
- package/src/components-v2/navbar/mega-menu/index.ts +1 -0
- package/src/components-v2/navbar/mega-menu/mega-menu.tsx +71 -0
- package/src/components-v2/navbar/mega-menu/styles.ts +43 -0
- package/src/components-v2/navbar/mobile-menu/index.ts +1 -0
- package/src/components-v2/navbar/mobile-menu/mobile-menu.tsx +70 -0
- package/src/components-v2/navbar/mobile-menu/render-levels.test.tsx +71 -0
- package/src/components-v2/navbar/mobile-menu/render-levels.tsx +62 -0
- package/src/components-v2/navbar/nav-list/cms-nav.test.tsx +84 -0
- package/src/components-v2/navbar/nav-list/index.ts +1 -0
- package/src/components-v2/navbar/nav-list/nav-item-child.tsx +66 -0
- package/src/components-v2/navbar/nav-list/nav-list.tsx +119 -0
- package/src/components-v2/navbar/navbar.tsx +43 -0
- package/src/components-v2/navbar/styles.ts +90 -0
- package/src/components-v2/navbar/utils/transform-nav.test.ts +209 -0
- package/src/components-v2/navbar/utils/transform-nav.ts +43 -0
- package/src/components-v2/newsletter/index.ts +1 -0
- package/src/components-v2/newsletter/newsletter.tsx +112 -0
- package/src/components-v2/newsletter/social-icons.tsx +35 -0
- package/src/components-v2/newsletter/styles.ts +65 -0
- package/src/components-v2/page-sidenav/grocery-side-nav/components/link-item.tsx +21 -0
- package/src/components-v2/page-sidenav/grocery-side-nav/components/list-item.tsx +27 -0
- package/src/components-v2/page-sidenav/grocery-side-nav/components/nav-accordion.tsx +36 -0
- package/src/components-v2/page-sidenav/grocery-side-nav/components/render-child.tsx +26 -0
- package/src/components-v2/page-sidenav/grocery-side-nav/grocery-side-nav.tsx +32 -0
- package/src/components-v2/page-sidenav/grocery-side-nav/index.ts +1 -0
- package/src/components-v2/page-sidenav/grocery-side-nav/styles/index.ts +11 -0
- package/src/components-v2/page-sidenav/health-beauty-side-nav/components/list-item.tsx +27 -0
- package/src/components-v2/page-sidenav/health-beauty-side-nav/components/nav-accordion.tsx +44 -0
- package/src/components-v2/page-sidenav/health-beauty-side-nav/components/render-child.tsx +20 -0
- package/src/components-v2/page-sidenav/health-beauty-side-nav/health-beauty-side-nav.tsx +43 -0
- package/src/components-v2/page-sidenav/health-beauty-side-nav/index.ts +1 -0
- package/src/components-v2/page-sidenav/health-beauty-side-nav/styles/index.ts +27 -0
- package/src/components-v2/page-sidenav/side-navbar/components/list-item.tsx +25 -0
- package/src/components-v2/page-sidenav/side-navbar/components/nav-accordion.tsx +46 -0
- package/src/components-v2/page-sidenav/side-navbar/components/render-child.tsx +20 -0
- package/src/components-v2/page-sidenav/side-navbar/index.ts +1 -0
- package/src/components-v2/page-sidenav/side-navbar/side-nav-bar.tsx +77 -0
- package/src/components-v2/page-sidenav/side-navbar/styles/index.ts +73 -0
- package/src/components-v2/page-sidenav/side-navbar-2/components/button-content.tsx +32 -0
- package/src/components-v2/page-sidenav/side-navbar-2/components/sidebar-accordion.tsx +66 -0
- package/src/components-v2/page-sidenav/side-navbar-2/index.ts +1 -0
- package/src/components-v2/page-sidenav/side-navbar-2/side-navbar-2.tsx +63 -0
- package/src/components-v2/page-sidenav/side-navbar-2/styles/index.ts +68 -0
- package/src/components-v2/product-cards/discount-chip.tsx +43 -0
- package/src/components-v2/product-cards/product-card-1/components/hover-actions.tsx +37 -0
- package/src/components-v2/product-cards/product-card-1/components/quantity-buttons.tsx +65 -0
- package/src/components-v2/product-cards/product-card-1/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-1/product-card-1-wrapper.tsx +304 -0
- package/src/components-v2/product-cards/product-card-1/product-card.tsx +107 -0
- package/src/components-v2/product-cards/product-card-1/styles/index.ts +46 -0
- package/src/components-v2/product-cards/product-card-10/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-10/product-card.tsx +128 -0
- package/src/components-v2/product-cards/product-card-10/styles/index.ts +38 -0
- package/src/components-v2/product-cards/product-card-11/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-11/product-card.tsx +66 -0
- package/src/components-v2/product-cards/product-card-11/styles/index.ts +16 -0
- package/src/components-v2/product-cards/product-card-12/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-12/product-card.tsx +42 -0
- package/src/components-v2/product-cards/product-card-12/styles/index.ts +16 -0
- package/src/components-v2/product-cards/product-card-13/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-13/product-card.tsx +48 -0
- package/src/components-v2/product-cards/product-card-13/styles/index.ts +25 -0
- package/src/components-v2/product-cards/product-card-14/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-14/product-card.tsx +125 -0
- package/src/components-v2/product-cards/product-card-14/styles/index.ts +40 -0
- package/src/components-v2/product-cards/product-card-15/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-15/product-card.tsx +121 -0
- package/src/components-v2/product-cards/product-card-15/styles/index.ts +57 -0
- package/src/components-v2/product-cards/product-card-16/components/quantity-buttons.tsx +54 -0
- package/src/components-v2/product-cards/product-card-16/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-16/product-card.tsx +116 -0
- package/src/components-v2/product-cards/product-card-16/styles/index.ts +18 -0
- package/src/components-v2/product-cards/product-card-2/components/favorite-button.tsx +29 -0
- package/src/components-v2/product-cards/product-card-2/components/product-price.tsx +26 -0
- package/src/components-v2/product-cards/product-card-2/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-2/product-card.tsx +70 -0
- package/src/components-v2/product-cards/product-card-3/components/hover-actions.tsx +83 -0
- package/src/components-v2/product-cards/product-card-3/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-3/product-card.tsx +110 -0
- package/src/components-v2/product-cards/product-card-3/styles/index.ts +89 -0
- package/src/components-v2/product-cards/product-card-4/components/hover-actions.tsx +50 -0
- package/src/components-v2/product-cards/product-card-4/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-4/product-card.tsx +128 -0
- package/src/components-v2/product-cards/product-card-4/styles/index.ts +66 -0
- package/src/components-v2/product-cards/product-card-5/components/button-actions.tsx +49 -0
- package/src/components-v2/product-cards/product-card-5/components/hover-actions.tsx +50 -0
- package/src/components-v2/product-cards/product-card-5/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-5/product-card.tsx +137 -0
- package/src/components-v2/product-cards/product-card-5/styles/index.ts +94 -0
- package/src/components-v2/product-cards/product-card-6/components/hover-actions.tsx +50 -0
- package/src/components-v2/product-cards/product-card-6/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-6/product-card.tsx +121 -0
- package/src/components-v2/product-cards/product-card-6/styles/index.ts +63 -0
- package/src/components-v2/product-cards/product-card-7/components/product-status.tsx +18 -0
- package/src/components-v2/product-cards/product-card-7/components/quantity-buttons.tsx +47 -0
- package/src/components-v2/product-cards/product-card-7/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-7/product-card.tsx +139 -0
- package/src/components-v2/product-cards/product-card-7/styles/index.ts +98 -0
- package/src/components-v2/product-cards/product-card-8/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-8/product-card.tsx +151 -0
- package/src/components-v2/product-cards/product-card-8/styles/index.ts +61 -0
- package/src/components-v2/product-cards/product-card-9/components/add-to-cart.tsx +63 -0
- package/src/components-v2/product-cards/product-card-9/components/favorite-button.tsx +27 -0
- package/src/components-v2/product-cards/product-card-9/components/tags.tsx +33 -0
- package/src/components-v2/product-cards/product-card-9/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-9/product-card.tsx +169 -0
- package/src/components-v2/product-cards/product-card-wishlist/components/hover-actions.tsx +37 -0
- package/src/components-v2/product-cards/product-card-wishlist/index.ts +1 -0
- package/src/components-v2/product-cards/product-card-wishlist/product-card.tsx +118 -0
- package/src/components-v2/product-cards/product-card-wishlist/styles/index.ts +53 -0
- package/src/components-v2/product-cards/product-price.tsx +26 -0
- package/src/components-v2/product-cards/product-rating.tsx +28 -0
- package/src/components-v2/product-cards/product-title.tsx +24 -0
- package/src/components-v2/product-cards/use-product.ts +35 -0
- package/src/components-v2/product-dimensions/components/dimensions-group-error.tsx +46 -0
- package/src/components-v2/product-dimensions/components/dimensions-group-label.tsx +27 -0
- package/src/components-v2/product-dimensions/components/dimensions-group-list-chip.tsx +78 -0
- package/src/components-v2/product-dimensions/components/dimensions-group-list.tsx +24 -0
- package/src/components-v2/product-dimensions/components/dimensions-group.tsx +55 -0
- package/src/components-v2/product-dimensions/components/dimensions.tsx +84 -0
- package/src/components-v2/product-dimensions/index.tsx +38 -0
- package/src/components-v2/product-dimensions/utils/has-selected-dimension.ts +20 -0
- package/src/components-v2/product-quantity-buttons/product-quantity-buttons.tsx +88 -0
- package/src/components-v2/products-view/product-view-dialog.tsx +218 -0
- package/src/components-v2/products-view/products-grid-view.tsx +52 -0
- package/src/components-v2/products-view/products-list-view.tsx +49 -0
- package/src/components-v2/progress/index.ts +1 -0
- package/src/components-v2/progress/progress.tsx +77 -0
- package/src/components-v2/scrollbar/index.ts +1 -0
- package/src/components-v2/scrollbar/scrollbar.tsx +27 -0
- package/src/components-v2/scrollbar/styles.ts +15 -0
- package/src/components-v2/search-box/__test__/search-input-category.test.tsx +110 -0
- package/src/components-v2/search-box/__test__/search-input.test.tsx +137 -0
- package/src/components-v2/search-box/__test__/search-results.json +165 -0
- package/src/components-v2/search-box/components/category-dropdown.tsx +61 -0
- package/src/components-v2/search-box/components/search-result.tsx +86 -0
- package/src/components-v2/search-box/hooks/use-search.ts +63 -0
- package/src/components-v2/search-box/index.ts +2 -0
- package/src/components-v2/search-box/search-input-category.test.tsx +110 -0
- package/src/components-v2/search-box/search-input-category.tsx +203 -0
- package/src/components-v2/search-box/search-input.test.tsx +41 -0
- package/src/components-v2/search-box/search-input.tsx +66 -0
- package/src/components-v2/search-box/styles/index.ts +47 -0
- package/src/components-v2/section-header/index.ts +2 -0
- package/src/components-v2/section-header/section-creator.tsx +29 -0
- package/src/components-v2/section-header/section-header.tsx +44 -0
- package/src/components-v2/service-cards/icon-component.tsx +18 -0
- package/src/components-v2/service-cards/service-card-1/index.ts +1 -0
- package/src/components-v2/service-cards/service-card-1/service-card-1.tsx +42 -0
- package/src/components-v2/service-cards/service-card-2/index.ts +1 -0
- package/src/components-v2/service-cards/service-card-2/service-card-2.tsx +37 -0
- package/src/components-v2/service-cards/service-card-3/index.ts +1 -0
- package/src/components-v2/service-cards/service-card-3/service-card-3.tsx +28 -0
- package/src/components-v2/service-cards/service-card-3/styles.ts +23 -0
- package/src/components-v2/settings/index.ts +1 -0
- package/src/components-v2/settings/setting.tsx +141 -0
- package/src/components-v2/settings/styles.ts +57 -0
- package/src/components-v2/shop-card/index.ts +1 -0
- package/src/components-v2/shop-card/shop-card.tsx +152 -0
- package/src/components-v2/shop-card/styles.ts +33 -0
- package/src/components-v2/side-nav/index.ts +1 -0
- package/src/components-v2/side-nav/side-nav.tsx +49 -0
- package/src/components-v2/site-logo.tsx +17 -0
- package/src/components-v2/sticky/Sticky.tsx +62 -0
- package/src/components-v2/sticky/index.ts +1 -0
- package/src/components-v2/sticky/styles.ts +38 -0
- package/src/components-v2/sticky-wrapper/index.ts +1 -0
- package/src/components-v2/sticky-wrapper/sticky-wrapper.tsx +21 -0
- package/src/components-v2/sticky-wrapper/styles.ts +25 -0
- package/src/components-v2/stories/story-content/index.ts +1 -0
- package/src/components-v2/stories/story-content/story-content.tsx +28 -0
- package/src/components-v2/stories/story-content/styles.ts +22 -0
- package/src/components-v2/stories/story-item/index.ts +1 -0
- package/src/components-v2/stories/story-item/story-item.tsx +24 -0
- package/src/components-v2/stories/story-item/styles.ts +11 -0
- package/src/components-v2/stories/story-viewer/index.ts +1 -0
- package/src/components-v2/stories/story-viewer/story-viewer.tsx +44 -0
- package/src/components-v2/stories/story-viewer/styles.ts +15 -0
- package/src/components-v2/subscribe-input/index.ts +1 -0
- package/src/components-v2/subscribe-input/styles.ts +14 -0
- package/src/components-v2/subscribe-input/subscribe-input.tsx +43 -0
- package/src/components-v2/topbar/index.ts +1 -0
- package/src/components-v2/topbar/styles.ts +55 -0
- package/src/components-v2/topbar/top-bar.tsx +115 -0
- package/src/components-v2/utils/constants.ts +8 -0
- package/src/components-v2/wishlist/add-to-wishlist-dialog.tsx +161 -0
- package/src/components-v2/wishlist/components/create-new-list.tsx +167 -0
- package/src/components-v2/wishlist/components/create-wishlist-button.tsx +40 -0
- package/src/components-v2/wishlist/components/dashboard-header.tsx +123 -0
- package/src/components-v2/wishlist/components/navigation.tsx +87 -0
- package/src/components-v2/wishlist/components/no-records.tsx +20 -0
- package/src/components-v2/wishlist/components/wishlist-modal-item.tsx +66 -0
- package/src/components-v2/wishlist/remove-from-wishlist-dialog.tsx +175 -0
- package/src/components-v2/wishlist/styles.ts +61 -0
- package/src/components-v2/wishlist-modal/TODO.md +10 -0
- package/src/components-v2/wishlist-modal/add-to-wishlist-button.tsx +69 -0
- package/src/components-v2/wishlist-modal/add-to-wishlist-dialog.tsx +161 -0
- package/src/components-v2/wishlist-modal/remove-from-wishlist-dialog.tsx +174 -0
- package/src/components-v2/wishlist-modal/wishlist-modal-item.tsx +65 -0
- package/src/pages/README.md +4 -0
- package/src/pages/product-details/product-intro/product-intro.tsx +3 -1
- package/src/pages/product-list/quick-view-dialog-content.tsx +4 -2
- package/src/pages-v2/README.md +4 -0
- package/src/pages-v2/account/addresses/address-form.tsx +289 -0
- package/src/pages-v2/account/addresses/address-item.tsx +104 -0
- package/src/pages-v2/account/dashboard-header.tsx +123 -0
- package/src/pages-v2/account/navigation.tsx +87 -0
- package/src/pages-v2/account/no-records.tsx +20 -0
- package/src/pages-v2/account/orders/icons/delivery.tsx +14 -0
- package/src/pages-v2/account/orders/icons/package-box.tsx +13 -0
- package/src/pages-v2/account/orders/icons/truck-filled.tsx +14 -0
- package/src/pages-v2/account/orders/order-progress.tsx +114 -0
- package/src/pages-v2/account/orders/order-row.tsx +64 -0
- package/src/pages-v2/account/orders/order-summary.tsx +87 -0
- package/src/pages-v2/account/orders/ordered-products.tsx +121 -0
- package/src/pages-v2/account/profile/profile-button.test.tsx +59 -0
- package/src/pages-v2/account/profile/profile-button.tsx +50 -0
- package/src/pages-v2/account/profile/user-info.tsx +62 -0
- package/src/pages-v2/account/styles.ts +32 -0
- package/src/pages-v2/account/table-row.tsx +19 -0
- package/src/pages-v2/account/wishlist/create-new-list.tsx +167 -0
- package/src/pages-v2/account/wishlist/create-wishlist-button.tsx +40 -0
- package/src/pages-v2/account/wishlist/wishlist-item.tsx +82 -0
- package/src/pages-v2/blog/pagination.tsx +38 -0
- package/src/pages-v2/cart/cart-item.tsx +312 -0
- package/src/pages-v2/cart/checkout-form.tsx +122 -0
- package/src/pages-v2/cart/coupon-entry.tsx +90 -0
- package/src/pages-v2/cart/estimate-shipping.tsx +183 -0
- package/src/pages-v2/cart/wrapper.tsx +30 -0
- package/src/pages-v2/checkout/checkout-alt-form/address-card.tsx +76 -0
- package/src/pages-v2/checkout/checkout-alt-form/checkout-form.tsx +131 -0
- package/src/pages-v2/checkout/checkout-alt-form/checkout-step.tsx +120 -0
- package/src/pages-v2/checkout/checkout-alt-form/customer-information.tsx +94 -0
- package/src/pages-v2/checkout/checkout-alt-form/delivery-address.tsx +174 -0
- package/src/pages-v2/checkout/checkout-alt-form/delivery-date.tsx +114 -0
- package/src/pages-v2/checkout/checkout-alt-form/delivery-options.tsx +190 -0
- package/src/pages-v2/checkout/checkout-alt-form/edit-address-form.tsx +130 -0
- package/src/pages-v2/checkout/checkout-alt-form/heading.tsx +50 -0
- package/src/pages-v2/checkout/checkout-alt-form/index.ts +1 -0
- package/src/pages-v2/checkout/checkout-alt-form/new-address-form.tsx +299 -0
- package/src/pages-v2/checkout/checkout-alt-form/node.tsx +9 -0
- package/src/pages-v2/checkout/checkout-alt-form/payment-details.tsx +347 -0
- package/src/pages-v2/checkout/checkout-alt-form/safe-card-preview-data.tsx +36 -0
- package/src/pages-v2/checkout/checkout-alt-form/types.ts +20 -0
- package/src/pages-v2/checkout/checkout-alt-summary/cart-item.tsx +42 -0
- package/src/pages-v2/checkout/checkout-alt-summary/checkout-alt-summary.tsx +42 -0
- package/src/pages-v2/checkout/checkout-alt-summary/index.ts +1 -0
- package/src/pages-v2/checkout/checkout-alt-summary/list-item.tsx +31 -0
- package/src/pages-v2/confirmation/address.tsx +25 -0
- package/src/pages-v2/confirmation/confirmation-summary.tsx +55 -0
- package/src/pages-v2/confirmation/ordered-products.tsx +115 -0
- package/src/pages-v2/product-details/available-shops.tsx +48 -0
- package/src/pages-v2/product-details/bopis/find-in-store-button.tsx +63 -0
- package/src/pages-v2/product-details/bopis/find-in-store-modal.tsx +257 -0
- package/src/pages-v2/product-details/bopis/pickup-option-select.tsx +127 -0
- package/src/pages-v2/product-details/bopis/search-header.tsx +69 -0
- package/src/pages-v2/product-details/checkbox-label.tsx +20 -0
- package/src/pages-v2/product-details/currency.ts +64 -0
- package/src/pages-v2/product-details/frequently-bought.tsx +97 -0
- package/src/pages-v2/product-details/frequently-product-card.tsx +63 -0
- package/src/pages-v2/product-details/product-comment.tsx +49 -0
- package/src/pages-v2/product-details/product-description.tsx +22 -0
- package/src/pages-v2/product-details/product-filter-card.tsx +265 -0
- package/src/pages-v2/product-details/product-intro/product-intro-images.tsx +90 -0
- package/src/pages-v2/product-details/product-intro/product-intro.tsx +256 -0
- package/src/pages-v2/product-details/product-review.tsx +131 -0
- package/src/pages-v2/product-details/product-tabs.tsx +51 -0
- package/src/pages-v2/product-details/related-products.tsx +42 -0
- package/src/pages-v2/product-details/types.ts +11 -0
- package/src/pages-v2/product-list/breadcrumbs.tsx +39 -0
- package/src/pages-v2/product-list/checkbox-label.tsx +20 -0
- package/src/pages-v2/product-list/facet-group.tsx +125 -0
- package/src/pages-v2/product-list/facet.tsx +36 -0
- package/src/pages-v2/product-list/list-filter.tsx +43 -0
- package/src/pages-v2/product-list/pagination.tsx +80 -0
- package/src/pages-v2/product-list/product-list-context.tsx +302 -0
- package/src/pages-v2/product-list/product-list-state.ts +187 -0
- package/src/pages-v2/product-list/product-rating.tsx +16 -0
- package/src/pages-v2/product-list/quick-view-dialog-content.tsx +207 -0
- package/src/pages-v2/product-list/quick-view-dialog.tsx +54 -0
- package/src/pages-v2/product-list/range-filter.tsx +125 -0
- package/src/pages-v2/product-list/scrollbar.tsx +38 -0
- package/src/pages-v2/product-list/search-bar.tsx +162 -0
- package/src/pages-v2/product-list/selected-facets.tsx +80 -0
- package/src/pages-v2/product-list/side-nav.tsx +49 -0
- package/src/pages-v2/product-list/swatch.tsx +80 -0
- package/src/pages-v2/product-list/types.ts +18 -0
- package/src/pages-v2/product-list/use-product-list.ts +12 -0
- package/src/pages-v2/product-list/useCategoryFilter.tsx +26 -0
- package/src/pages-v2/product-list/utils/facet-helpers.ts +5 -0
- package/src/pages-v2/product-list/utils/generate-breadcrumbs.ts +30 -0
- package/src/pages-v2/product-list/utils/getCategoryFilterFromSlug.ts +153 -0
- package/src/pages-v2/product-list/utils/product-list-helper.ts +111 -0
- package/src/pages-v2/product-list/utils/product-list-types.ts +41 -0
- package/src/pages-v2/product-list/utils/search-for-category.ts +76 -0
- package/src/pages-v2/product-list/utils/sort-options.ts +44 -0
- package/src/pages-v2/product-list/utils/use-previous-refiners.ts +14 -0
- package/src/pages-v2/quickorder/order-upload.tsx +150 -0
- package/src/pages-v2/quickorder/quick-order-form.tsx +346 -0
- package/src/pages-v2/quickorder/quick-order-row.tsx +144 -0
- package/src/providers/nav-provider/index.tsx +59 -0
- package/src/providers/nav-provider/utils/createLink.ts +15 -0
- package/src/providers/notifications/README.md +15 -0
- package/src/providers/notifications/notification-context.tsx +82 -0
- package/src/providers/notifications/use-notification.ts +12 -0
- package/tsconfig.json +3 -2
- package/typedoc.js +10 -0
- package/src/api-manager/api-manager.config.json +0 -12
- package/src/api-manager/datasources/e4/e4.remaps.ts +0 -355
- package/src/api-manager/datasources/e4/e4.translator.test.ts +0 -202
- /package/src/hooks/{use-cart.tsx → use-cart.ts} +0 -0
- /package/src/hooks/{use-variants.tsx → use-variants.ts} +0 -0
package/src/api-manager/datasources/e4/{e4.translator.ts → product/e4-product.translator.ts}
RENAMED
|
@@ -1,45 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
import { extendedCartSchema, Cart } from "@/api-manager/schemas/cart.schema";
|
|
1
|
+
import getGraphqlClient from "../../../lib/get-graphql-client";
|
|
3
2
|
import {
|
|
4
3
|
productSchema,
|
|
5
4
|
ProductDetails,
|
|
6
5
|
SearchByCriteriaInput,
|
|
7
6
|
ProductPrice,
|
|
8
7
|
} from "@/api-manager/schemas/product.schema";
|
|
9
|
-
import {
|
|
10
|
-
import { User } from "@/api-manager/schemas/user.schema";
|
|
11
|
-
import { Session } from "@/api-manager/schemas/session.schema";
|
|
12
|
-
import { merge } from "object-mapper";
|
|
13
|
-
import getGraphqlClient from "../../lib/get-graphql-client";
|
|
14
|
-
// Interfaces
|
|
15
|
-
import {
|
|
16
|
-
UserInput,
|
|
17
|
-
AddressInput,
|
|
18
|
-
Attribute,
|
|
19
|
-
Category as E4Category,
|
|
20
|
-
Country,
|
|
21
|
-
Shipping,
|
|
22
|
-
Cart as E4Cart,
|
|
23
|
-
Product,
|
|
24
|
-
Session as E4Session,
|
|
25
|
-
} from "./graphqlRequestSdk";
|
|
8
|
+
import { productPriceSchema } from "@/api-manager/schemas/d365.schema";
|
|
26
9
|
import {
|
|
27
|
-
Category,
|
|
28
10
|
ProductRefinerValue,
|
|
29
11
|
ProductSearchResult,
|
|
30
12
|
} from "@msdyn365-commerce/retail-proxy";
|
|
31
13
|
import {
|
|
32
|
-
|
|
14
|
+
Attribute,
|
|
15
|
+
Category as E4Category,
|
|
16
|
+
Product,
|
|
17
|
+
} from "../graphqlRequestSdk";
|
|
18
|
+
import { merge } from "object-mapper";
|
|
19
|
+
import {
|
|
33
20
|
productDetailsMap,
|
|
34
21
|
productMap,
|
|
35
22
|
productPricesMap,
|
|
36
|
-
|
|
37
|
-
countriesMap,
|
|
38
|
-
countryMap,
|
|
39
|
-
deliveryOptionsMap,
|
|
40
|
-
} from "./e4.remaps";
|
|
41
|
-
import { CategoryHierarchy } from "@/lib/category-helpers";
|
|
42
|
-
import { productPriceSchema } from "@/api-manager/schemas/d365.schema";
|
|
23
|
+
} from "./e4-product.remaps";
|
|
43
24
|
|
|
44
25
|
interface TransformedRefinerValue {
|
|
45
26
|
RefinerRecordId: number;
|
|
@@ -302,25 +283,6 @@ export const refinersTransformValidate = (
|
|
|
302
283
|
* required fields, create a custom schema with only frontend required fields
|
|
303
284
|
*/
|
|
304
285
|
|
|
305
|
-
/**
|
|
306
|
-
* Transforms the E4 AddToCart response to a Cart retail-proxy object
|
|
307
|
-
* Add parameters to transform model as needed
|
|
308
|
-
*
|
|
309
|
-
* @param data the E4 Cart object
|
|
310
|
-
* @returns the transformed cart object
|
|
311
|
-
*/
|
|
312
|
-
export const cartTransformValidate = (cart: E4Cart): Cart => {
|
|
313
|
-
if (!(cart && cart?.id)) throw new Error("Not a valid cart");
|
|
314
|
-
const transformedData = merge(cart, cartMap);
|
|
315
|
-
try {
|
|
316
|
-
extendedCartSchema.parse(transformedData);
|
|
317
|
-
} catch (e) {
|
|
318
|
-
console.warn("Cart data does not match retail-proxy schema", e);
|
|
319
|
-
}
|
|
320
|
-
|
|
321
|
-
return transformedData as Cart;
|
|
322
|
-
};
|
|
323
|
-
|
|
324
286
|
/**
|
|
325
287
|
* Transforms the E4 Product response to a Product retail-proxy object
|
|
326
288
|
* @param productData the E4 Product object
|
|
@@ -382,285 +344,3 @@ export const productWithCategoryTransformValidate = (
|
|
|
382
344
|
|
|
383
345
|
return productTransform;
|
|
384
346
|
};
|
|
385
|
-
|
|
386
|
-
export const userTransformInput = (user: User): UserInput => {
|
|
387
|
-
let formattedUser = {};
|
|
388
|
-
|
|
389
|
-
if (user.FirstName && user.LastName) {
|
|
390
|
-
formattedUser = {
|
|
391
|
-
firstName: user?.FirstName,
|
|
392
|
-
lastName: user?.LastName,
|
|
393
|
-
};
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
if (user?.DefaultShippingAddressId) {
|
|
397
|
-
const shippingInfo = {
|
|
398
|
-
defaultShippingAddressId: user?.DefaultShippingAddressId,
|
|
399
|
-
};
|
|
400
|
-
formattedUser = { ...formattedUser, ...shippingInfo };
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
return formattedUser;
|
|
404
|
-
};
|
|
405
|
-
|
|
406
|
-
/**
|
|
407
|
-
* Transforms the e4 API session data to Session schema.
|
|
408
|
-
*/
|
|
409
|
-
export const sessionTransformValidate = (data: E4Session): Session => {
|
|
410
|
-
const formattedSession: Session = {
|
|
411
|
-
Id: data?.id,
|
|
412
|
-
User: {
|
|
413
|
-
AccountNumber: data?.user?.accountId ?? "",
|
|
414
|
-
FirstName: data?.user?.firstName ?? "",
|
|
415
|
-
LastName: data?.user?.lastName ?? "",
|
|
416
|
-
Email: data?.user?.email ?? "",
|
|
417
|
-
// Add other required fields with defaults if needed
|
|
418
|
-
},
|
|
419
|
-
};
|
|
420
|
-
return formattedSession;
|
|
421
|
-
};
|
|
422
|
-
|
|
423
|
-
/**
|
|
424
|
-
* Transforms the Address schema to e4 API address
|
|
425
|
-
*/
|
|
426
|
-
export const addressTransform = async (address: Address) => {
|
|
427
|
-
const countryId = await getCountryId(address?.ThreeLetterISORegionName ?? "");
|
|
428
|
-
const stateId = await getStateId(address?.State ?? "", countryId ?? "");
|
|
429
|
-
|
|
430
|
-
const formattedAddress: AddressInput = merge(address, addressReverseMap);
|
|
431
|
-
formattedAddress.firstName = "";
|
|
432
|
-
formattedAddress.lastName = "";
|
|
433
|
-
formattedAddress.address2 = "";
|
|
434
|
-
formattedAddress.stateId = stateId;
|
|
435
|
-
formattedAddress.countryId = countryId;
|
|
436
|
-
formattedAddress.addressTypeId = 1; // We only create and update shipping addresses.
|
|
437
|
-
|
|
438
|
-
return formattedAddress;
|
|
439
|
-
};
|
|
440
|
-
|
|
441
|
-
export const countriesTransformValidate = (countries: Country[]) => {
|
|
442
|
-
if (Array.isArray(countries) && countries.length) {
|
|
443
|
-
return countries.map((country) => merge(country, countriesMap));
|
|
444
|
-
}
|
|
445
|
-
return [];
|
|
446
|
-
};
|
|
447
|
-
|
|
448
|
-
export const countryTransformValidate = (country: Country) => {
|
|
449
|
-
if (country?.state && country?.state.length) {
|
|
450
|
-
return merge(country, countryMap);
|
|
451
|
-
}
|
|
452
|
-
return [];
|
|
453
|
-
};
|
|
454
|
-
|
|
455
|
-
const countriesCache = new Map<string, Country[]>();
|
|
456
|
-
const countryCache = new Map<string, Country>();
|
|
457
|
-
|
|
458
|
-
/**
|
|
459
|
-
* For d365 country id and value are 'USA' but for e4 it is '80175021088166' and 'USA'.
|
|
460
|
-
* So use countryId, to map the codes back to ids before API calls.
|
|
461
|
-
*/
|
|
462
|
-
export const getCountryId = async (code: string) => {
|
|
463
|
-
const cacheKey = "countries";
|
|
464
|
-
let countries: Country[] = [];
|
|
465
|
-
|
|
466
|
-
if (countriesCache.has(cacheKey)) {
|
|
467
|
-
countries = countriesCache.get(cacheKey) ?? countries;
|
|
468
|
-
} else {
|
|
469
|
-
const e4Api = await getGraphqlClient();
|
|
470
|
-
const { data } = await e4Api.e4CountryList();
|
|
471
|
-
countriesCache.set(cacheKey, data?.countries as Country[]);
|
|
472
|
-
countries = data?.countries as Country[];
|
|
473
|
-
}
|
|
474
|
-
const country = countries.find(
|
|
475
|
-
(c: { isoAlpha3Code: string }) => c?.isoAlpha3Code === code,
|
|
476
|
-
);
|
|
477
|
-
|
|
478
|
-
return country?.id;
|
|
479
|
-
};
|
|
480
|
-
|
|
481
|
-
const getStateId = async (stateCode: string, countryId: string) => {
|
|
482
|
-
const cacheKey = `states-${countryId}`;
|
|
483
|
-
let country: Country = {
|
|
484
|
-
id: "",
|
|
485
|
-
isoAlpha2Code: "",
|
|
486
|
-
isoAlpha3Code: "",
|
|
487
|
-
name: "",
|
|
488
|
-
};
|
|
489
|
-
|
|
490
|
-
if (countryCache.has(cacheKey)) {
|
|
491
|
-
country = countryCache.get(cacheKey) ?? country;
|
|
492
|
-
} else {
|
|
493
|
-
const e4Api = await getGraphqlClient();
|
|
494
|
-
const { data } = await e4Api.e4Country({ id: countryId });
|
|
495
|
-
country = data?.country as Country;
|
|
496
|
-
countryCache.set(cacheKey, country);
|
|
497
|
-
}
|
|
498
|
-
|
|
499
|
-
const state = country?.state?.find((s) => s?.code === stateCode);
|
|
500
|
-
|
|
501
|
-
return state?.id;
|
|
502
|
-
};
|
|
503
|
-
|
|
504
|
-
export const deliveryOptionsTransformValidate = (options: Shipping[]) => {
|
|
505
|
-
if (Array.isArray(options) && options.length) {
|
|
506
|
-
return options.map((option) => merge(option, deliveryOptionsMap));
|
|
507
|
-
}
|
|
508
|
-
return [];
|
|
509
|
-
};
|
|
510
|
-
|
|
511
|
-
interface TransformedCategoryNode extends Category {
|
|
512
|
-
Slug: string;
|
|
513
|
-
Url: string;
|
|
514
|
-
NeutralizedName: string;
|
|
515
|
-
Children?: TransformedCategoryNode[];
|
|
516
|
-
ParentCategory?: number;
|
|
517
|
-
}
|
|
518
|
-
|
|
519
|
-
export const categoryTransformValidate = (
|
|
520
|
-
rawCategories: E4Category[],
|
|
521
|
-
rootParentId = 1,
|
|
522
|
-
urlPrefix = "e4",
|
|
523
|
-
): CategoryHierarchy[] => {
|
|
524
|
-
function generateSlug(name: string): string {
|
|
525
|
-
if (!name) return "";
|
|
526
|
-
return name
|
|
527
|
-
.toLowerCase()
|
|
528
|
-
.replace(/\s+/g, "-")
|
|
529
|
-
.replace(/[^\w-]+/g, "")
|
|
530
|
-
.replace(/--+/g, "-")
|
|
531
|
-
.replace(/^-+/, "")
|
|
532
|
-
.replace(/-+$/, "");
|
|
533
|
-
}
|
|
534
|
-
|
|
535
|
-
function createTransformedNode(
|
|
536
|
-
rawCategory: E4Category,
|
|
537
|
-
): TransformedCategoryNode | null {
|
|
538
|
-
let recordIdNum: number;
|
|
539
|
-
try {
|
|
540
|
-
recordIdNum = parseInt(String(rawCategory.id), 10);
|
|
541
|
-
if (isNaN(recordIdNum)) throw new Error("Invalid RecordId");
|
|
542
|
-
} catch (e) {
|
|
543
|
-
console.warn(`Skipping category due to invalid id:`, rawCategory);
|
|
544
|
-
return null;
|
|
545
|
-
}
|
|
546
|
-
|
|
547
|
-
const categoryName = rawCategory.name || "Unnamed Category";
|
|
548
|
-
const slug = generateSlug(categoryName);
|
|
549
|
-
let parentIdNum: number | undefined = undefined;
|
|
550
|
-
if (rawCategory.parentId != null) {
|
|
551
|
-
const parsedParentId = parseInt(String(rawCategory.parentId), 10);
|
|
552
|
-
if (!isNaN(parsedParentId)) parentIdNum = parsedParentId;
|
|
553
|
-
else
|
|
554
|
-
console.warn(
|
|
555
|
-
`Invalid parentId format for id ${recordIdNum}:`,
|
|
556
|
-
rawCategory.parentId,
|
|
557
|
-
);
|
|
558
|
-
}
|
|
559
|
-
|
|
560
|
-
const node: TransformedCategoryNode = {
|
|
561
|
-
RecordId: recordIdNum,
|
|
562
|
-
Name: categoryName,
|
|
563
|
-
ParentCategory: parentIdNum,
|
|
564
|
-
DisplayOrder: 0,
|
|
565
|
-
LocalizedDescription: categoryName,
|
|
566
|
-
Images: [
|
|
567
|
-
{
|
|
568
|
-
Uri: `Categories/${categoryName}.png`,
|
|
569
|
-
IsDefault: false,
|
|
570
|
-
IsSelfHosted: false,
|
|
571
|
-
Priority: 0,
|
|
572
|
-
IsAdditionalMedia: false,
|
|
573
|
-
MediaTypeValue: 0,
|
|
574
|
-
DisplayOrder: 0,
|
|
575
|
-
IsApplicableForChildEntities: false,
|
|
576
|
-
ExtensionProperties: [],
|
|
577
|
-
},
|
|
578
|
-
],
|
|
579
|
-
NameTranslations: [
|
|
580
|
-
{ Language: "en-us", Text: categoryName, ExtensionProperties: [] },
|
|
581
|
-
],
|
|
582
|
-
ExtensionProperties: [],
|
|
583
|
-
NeutralizedName: categoryName,
|
|
584
|
-
Slug: slug,
|
|
585
|
-
Url: "",
|
|
586
|
-
Children: [],
|
|
587
|
-
};
|
|
588
|
-
return node;
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
function calculateUrls(
|
|
592
|
-
categoryNode: TransformedCategoryNode,
|
|
593
|
-
basePath: string,
|
|
594
|
-
prefix: string,
|
|
595
|
-
): void {
|
|
596
|
-
const currentPath = basePath
|
|
597
|
-
? `${basePath}/${categoryNode.Slug}`
|
|
598
|
-
: `${prefix}/${categoryNode.Slug}`;
|
|
599
|
-
categoryNode.Url = `${currentPath}/${categoryNode.RecordId}`;
|
|
600
|
-
// Check if Children exists before iterating
|
|
601
|
-
if (categoryNode?.Children && categoryNode?.Children?.length > 0) {
|
|
602
|
-
categoryNode.Children.forEach((child: TransformedCategoryNode) =>
|
|
603
|
-
calculateUrls(child, currentPath, prefix),
|
|
604
|
-
);
|
|
605
|
-
}
|
|
606
|
-
}
|
|
607
|
-
|
|
608
|
-
function removeEmptyChildren(node: TransformedCategoryNode): void {
|
|
609
|
-
if (node.Children) {
|
|
610
|
-
if (node.Children.length === 0) {
|
|
611
|
-
delete node.Children;
|
|
612
|
-
} else {
|
|
613
|
-
node.Children.forEach(removeEmptyChildren);
|
|
614
|
-
}
|
|
615
|
-
}
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
if (!rawCategories || !Array.isArray(rawCategories)) {
|
|
619
|
-
console.error(
|
|
620
|
-
"Invalid input received by categoryTransformValidate: must be an array.",
|
|
621
|
-
rawCategories,
|
|
622
|
-
);
|
|
623
|
-
return [];
|
|
624
|
-
}
|
|
625
|
-
|
|
626
|
-
const categoryMap = new Map<number, TransformedCategoryNode>();
|
|
627
|
-
const rootNodes: TransformedCategoryNode[] = [];
|
|
628
|
-
|
|
629
|
-
rawCategories.forEach((rawCat: E4Category) => {
|
|
630
|
-
const transformedNode = createTransformedNode(rawCat);
|
|
631
|
-
if (transformedNode)
|
|
632
|
-
categoryMap.set(transformedNode.RecordId, transformedNode);
|
|
633
|
-
});
|
|
634
|
-
|
|
635
|
-
categoryMap.forEach((node: TransformedCategoryNode) => {
|
|
636
|
-
const parentId = node.ParentCategory;
|
|
637
|
-
if (parentId === rootParentId) rootNodes.push(node);
|
|
638
|
-
else if (parentId !== undefined && categoryMap.has(parentId)) {
|
|
639
|
-
const parentNode = categoryMap.get(parentId);
|
|
640
|
-
if (parentNode) {
|
|
641
|
-
if (!parentNode.Children) {
|
|
642
|
-
parentNode.Children = [];
|
|
643
|
-
}
|
|
644
|
-
parentNode.Children.push(node);
|
|
645
|
-
parentNode.Children.sort(
|
|
646
|
-
(a, b) =>
|
|
647
|
-
(a.DisplayOrder ?? 0) - (b.DisplayOrder ?? 0) ||
|
|
648
|
-
(a.Name ?? "").localeCompare(b.Name ?? ""),
|
|
649
|
-
);
|
|
650
|
-
}
|
|
651
|
-
}
|
|
652
|
-
});
|
|
653
|
-
|
|
654
|
-
rootNodes.forEach((rootNode: TransformedCategoryNode) =>
|
|
655
|
-
calculateUrls(rootNode, "", urlPrefix),
|
|
656
|
-
);
|
|
657
|
-
rootNodes.sort(
|
|
658
|
-
(a, b) =>
|
|
659
|
-
(a.DisplayOrder ?? 0) - (b.DisplayOrder ?? 0) ||
|
|
660
|
-
(a.Name ?? "").localeCompare(b.Name ?? ""),
|
|
661
|
-
);
|
|
662
|
-
|
|
663
|
-
rootNodes.forEach(removeEmptyChildren);
|
|
664
|
-
|
|
665
|
-
return rootNodes as CategoryHierarchy[];
|
|
666
|
-
};
|
package/src/api-manager/datasources/e4/{e4-session.datasource.ts → session/e4-session.datasource.ts}
RENAMED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import getGraphqlClient from "
|
|
1
|
+
import getGraphqlClient from "../../../lib/get-graphql-client";
|
|
2
2
|
import {
|
|
3
3
|
Session,
|
|
4
4
|
SessionInitInput,
|
|
5
5
|
} from "@/api-manager/schemas/session.schema";
|
|
6
|
-
import * as
|
|
6
|
+
import * as sessionTranslator from "./e4-session.translator";
|
|
7
7
|
|
|
8
8
|
const session = {
|
|
9
9
|
async sessionInit(input: SessionInitInput): Promise<Session> {
|
|
@@ -19,7 +19,7 @@ const session = {
|
|
|
19
19
|
throw new Error("Error adding user to e4 session");
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
return
|
|
22
|
+
return sessionTranslator.sessionTransformValidate(
|
|
23
23
|
data?.customerInitSession ?? { id: "" },
|
|
24
24
|
);
|
|
25
25
|
},
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Session } from "@/api-manager/schemas/session.schema";
|
|
2
|
+
import { Session as E4Session } from "../graphqlRequestSdk";
|
|
3
|
+
/**
|
|
4
|
+
* Transforms the e4 API session data to Session schema.
|
|
5
|
+
*/
|
|
6
|
+
export const sessionTransformValidate = (data: E4Session): Session => {
|
|
7
|
+
const formattedSession: Session = {
|
|
8
|
+
Id: data?.id,
|
|
9
|
+
User: {
|
|
10
|
+
AccountNumber: data?.user?.accountId ?? "",
|
|
11
|
+
FirstName: data?.user?.firstName ?? "",
|
|
12
|
+
LastName: data?.user?.lastName ?? "",
|
|
13
|
+
Email: data?.user?.email ?? "",
|
|
14
|
+
// Add other required fields with defaults if needed
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
return formattedSession;
|
|
18
|
+
};
|
|
@@ -7,9 +7,10 @@ import {
|
|
|
7
7
|
WishlistCreateInput,
|
|
8
8
|
WishlistDetailInput,
|
|
9
9
|
WishlistLinesInput,
|
|
10
|
+
ExtendedWishlist,
|
|
10
11
|
} from "@/api-manager/schemas/user.schema";
|
|
11
|
-
import * as
|
|
12
|
-
import { userMap } from "
|
|
12
|
+
import * as userTranslator from "./e4-user.translator";
|
|
13
|
+
import { userMap } from "./e4-user.remaps";
|
|
13
14
|
import { merge } from "object-mapper";
|
|
14
15
|
import { UserApi } from "@/api-manager/types/Datasource";
|
|
15
16
|
import { translateWishList } from "./e4-user.translator";
|
|
@@ -18,7 +19,7 @@ const user: UserApi = {
|
|
|
18
19
|
async updateUser(user: User): Promise<User> {
|
|
19
20
|
const e4Api = await getGraphqlClient(true);
|
|
20
21
|
|
|
21
|
-
const userInput =
|
|
22
|
+
const userInput = userTranslator.userTransformInput(user);
|
|
22
23
|
|
|
23
24
|
const { data, errors } = await e4Api.e4UserUpdateMD({
|
|
24
25
|
user: userInput,
|
|
@@ -66,7 +67,9 @@ const user: UserApi = {
|
|
|
66
67
|
return translateWishList(data);
|
|
67
68
|
},
|
|
68
69
|
|
|
69
|
-
async getWishlistDetails(
|
|
70
|
+
async getWishlistDetails(
|
|
71
|
+
input: WishlistDetailInput,
|
|
72
|
+
): Promise<ExtendedWishlist> {
|
|
70
73
|
const e4Api = await getGraphqlClient(true);
|
|
71
74
|
|
|
72
75
|
const { data, errors } = await e4Api.e4WishListReadMD({ id: input.Id });
|
|
@@ -109,29 +112,33 @@ const user: UserApi = {
|
|
|
109
112
|
throw new Error("No wishlist found");
|
|
110
113
|
}
|
|
111
114
|
|
|
112
|
-
return wishList as Wishlist;
|
|
115
|
+
return wishList as unknown as Wishlist;
|
|
113
116
|
},
|
|
114
117
|
async deleteWishlist(input: WishlistDetailInput): Promise<void> {
|
|
115
118
|
const e4Api = await getGraphqlClient(true);
|
|
116
119
|
|
|
117
|
-
const {
|
|
120
|
+
const { errors } = await e4Api.deleteWishList({ id: input.Id });
|
|
118
121
|
|
|
119
122
|
if (errors) {
|
|
120
123
|
throw new Error("Error creating wishlist");
|
|
121
124
|
}
|
|
122
125
|
},
|
|
126
|
+
// @ts-ignore
|
|
123
127
|
async updateWishlist(input: WishlistLinesInput): Promise<Wishlist> {
|
|
124
128
|
throw new Error("updateWishlist not implemented");
|
|
125
129
|
},
|
|
126
130
|
|
|
131
|
+
// @ts-ignore
|
|
127
132
|
async addProductsToWishlist(input: WishlistLinesInput): Promise<Wishlist> {
|
|
128
133
|
throw new Error("addProductsToWishlist not implemented");
|
|
129
134
|
},
|
|
130
135
|
|
|
136
|
+
// @ts-ignore
|
|
131
137
|
async removeProductsFromWishlist(input: WishlistLinesInput): Promise<void> {
|
|
132
138
|
throw new Error("removeProductsFromWishlist not implemented");
|
|
133
139
|
},
|
|
134
140
|
|
|
141
|
+
// @ts-ignore
|
|
135
142
|
async copyCartToWishlist(input: CopyCartToWishlistInput): Promise<Wishlist> {
|
|
136
143
|
throw new Error("copyCartToWishlist not implemented");
|
|
137
144
|
},
|
|
@@ -1,3 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Maps E4 API responses to the D365 data structure.
|
|
3
|
+
*
|
|
4
|
+
* This file uses the `object-mapper` library to transform
|
|
5
|
+
* API responses into a format compatible with D365.
|
|
6
|
+
*
|
|
7
|
+
* https://github.com/wankdanker/node-object-mapper
|
|
8
|
+
*
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { Address } from "@msdyn365-commerce/retail-proxy";
|
|
12
|
+
import { merge } from "object-mapper";
|
|
13
|
+
import { Address as E4Address, Me } from "../graphqlRequestSdk";
|
|
14
|
+
import { addressMap } from "../address/e4-address.remaps";
|
|
15
|
+
|
|
16
|
+
export const userMap = {
|
|
17
|
+
id: {
|
|
18
|
+
key: "RecordId",
|
|
19
|
+
transform: (id: string) => {
|
|
20
|
+
return Number(id);
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
code: {
|
|
24
|
+
// we don't need AccountNumber in e4 storefront,
|
|
25
|
+
// if we need it bring account data and map accountId here.
|
|
26
|
+
key: "AccountNumber",
|
|
27
|
+
transform: () => {
|
|
28
|
+
return "";
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
firstName: "FirstName",
|
|
32
|
+
lastName: "LastName",
|
|
33
|
+
email: "Email",
|
|
34
|
+
defaultShippingAddressId: "DefaultShippingAddressId",
|
|
35
|
+
addresses: {
|
|
36
|
+
key: "Addresses",
|
|
37
|
+
transform: (addresses: E4Address[], source: Me) => {
|
|
38
|
+
if (!(addresses && addresses?.length)) return [];
|
|
39
|
+
const mapped = merge(addresses || [], addressMap) as Address[];
|
|
40
|
+
return mapped.map((address: Address) => ({
|
|
41
|
+
...address,
|
|
42
|
+
IsPrimary:
|
|
43
|
+
address?.IsPrimary ||
|
|
44
|
+
address?.Id === source?.defaultShippingAddressId,
|
|
45
|
+
}));
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
|
|
1
50
|
export const wishListMap = {
|
|
2
51
|
"[].id": "[].Id",
|
|
3
52
|
"[].name": "[].Name",
|
|
@@ -1,10 +1,31 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { User } from "@/api-manager/schemas/user.schema";
|
|
2
|
+
import { E4WishListListSmQuery, UserInput } from "../graphqlRequestSdk";
|
|
2
3
|
import { merge } from "object-mapper";
|
|
3
4
|
import { wishListMap } from "./e4-user.remaps";
|
|
4
5
|
import { Wishlist } from "@/api-manager/schemas/user.schema";
|
|
5
6
|
|
|
7
|
+
export const userTransformInput = (user: User): UserInput => {
|
|
8
|
+
let formattedUser = {};
|
|
9
|
+
|
|
10
|
+
if (user.FirstName && user.LastName) {
|
|
11
|
+
formattedUser = {
|
|
12
|
+
firstName: user?.FirstName,
|
|
13
|
+
lastName: user?.LastName,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
if (user?.DefaultShippingAddressId) {
|
|
18
|
+
const shippingInfo = {
|
|
19
|
+
defaultShippingAddressId: user?.DefaultShippingAddressId,
|
|
20
|
+
};
|
|
21
|
+
formattedUser = { ...formattedUser, ...shippingInfo };
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return formattedUser;
|
|
25
|
+
};
|
|
26
|
+
|
|
6
27
|
export const translateWishList = (data: E4WishListListSmQuery) => {
|
|
7
|
-
const e4WishList = data
|
|
28
|
+
const e4WishList = data?.wishlistList?.nodes || [];
|
|
8
29
|
const translatedData = merge(e4WishList, wishListMap) as Wishlist[];
|
|
9
30
|
return translatedData;
|
|
10
31
|
};
|
package/src/api-manager/index.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
// @ts-ignore - this will be picked up by webpack
|
|
2
|
+
import rawConfig from "@api-manager-config";
|
|
1
3
|
import { Datasource, DatasourceApis } from "./types/Datasource";
|
|
2
4
|
import E4Datasource from "./datasources/e4/e4.datasource";
|
|
3
5
|
import { D365Datasource } from "./datasources/d365/index";
|
|
4
|
-
import rawConfig from "./api-manager.config.json";
|
|
5
6
|
import { z } from "zod";
|
|
6
7
|
import { getContextFromCookie } from "./datasources/d365/utils/get-context-cookie";
|
|
7
8
|
|
|
@@ -30,6 +31,7 @@ const CORE_DATASOURCES = [
|
|
|
30
31
|
"address",
|
|
31
32
|
"organization",
|
|
32
33
|
];
|
|
34
|
+
|
|
33
35
|
/**
|
|
34
36
|
* Loads up all specified apis/datasources based on parsed config
|
|
35
37
|
* and returns the ApiManager object. Also handles "project" overrides
|
|
@@ -38,6 +40,9 @@ const CORE_DATASOURCES = [
|
|
|
38
40
|
* that from api-manager.
|
|
39
41
|
*
|
|
40
42
|
* In this way, we have two levels of configuration of the api-manager.
|
|
43
|
+
* 1. actual JSON config
|
|
44
|
+
* 2. overrides from storefront
|
|
45
|
+
*
|
|
41
46
|
* @returns ApiManager object.
|
|
42
47
|
*/
|
|
43
48
|
async function createApiManager() {
|
|
@@ -84,7 +89,7 @@ async function createApiManager() {
|
|
|
84
89
|
|
|
85
90
|
const getDatasource = (entityName: EntityNames) => {
|
|
86
91
|
// Project-Level Overrides
|
|
87
|
-
let projectOverrides = {};
|
|
92
|
+
let projectOverrides: { [key: string]: any } = {};
|
|
88
93
|
if (storefrontOverrides?.[OVERRIDES_FILE]?.["default"]?.[entityName]) {
|
|
89
94
|
projectOverrides =
|
|
90
95
|
storefrontOverrides[OVERRIDES_FILE]["default"][entityName];
|
|
@@ -94,7 +99,7 @@ async function createApiManager() {
|
|
|
94
99
|
const override = config?.overrides?.[entityName];
|
|
95
100
|
|
|
96
101
|
// Build the base entity from api-manager config settings
|
|
97
|
-
let baseEntity = {};
|
|
102
|
+
let baseEntity: { [key: string]: any } = {};
|
|
98
103
|
if (override) {
|
|
99
104
|
baseEntity =
|
|
100
105
|
secondaryDatasources.find((ds) => ds.name === override) ??
|
|
@@ -111,18 +116,18 @@ async function createApiManager() {
|
|
|
111
116
|
return baseEntity;
|
|
112
117
|
};
|
|
113
118
|
|
|
114
|
-
const datasources = {};
|
|
119
|
+
const datasources: { [key: string]: any } = {};
|
|
115
120
|
|
|
116
121
|
CORE_DATASOURCES.forEach((entityName) => {
|
|
117
122
|
const datasource = getDatasource(entityName as EntityNames);
|
|
118
|
-
datasources[entityName] = datasource[entityName];
|
|
123
|
+
datasources[entityName] = datasource[entityName as keyof Datasource];
|
|
119
124
|
});
|
|
120
125
|
|
|
121
126
|
storefrontOverrides[OVERRIDES_FILE]?.default &&
|
|
122
127
|
Object.keys(storefrontOverrides[OVERRIDES_FILE]["default"]).forEach(
|
|
123
128
|
(key) => {
|
|
124
129
|
if (!CORE_DATASOURCES.includes(key)) {
|
|
125
|
-
datasources[key] =
|
|
130
|
+
datasources[key as keyof Datasource] =
|
|
126
131
|
storefrontOverrides[OVERRIDES_FILE]["default"][key];
|
|
127
132
|
}
|
|
128
133
|
},
|
|
@@ -26,7 +26,9 @@ export const extendedProductListLineSchema = productListLineSchema.extend({
|
|
|
26
26
|
|
|
27
27
|
export const extendedWishlistSchema = productListSchema
|
|
28
28
|
.omit({ ProductListLines: true })
|
|
29
|
-
.extend({
|
|
29
|
+
.extend({
|
|
30
|
+
ProductListLines: extendedProductListLineSchema.array().optional(),
|
|
31
|
+
});
|
|
30
32
|
|
|
31
33
|
const wishlistBaseInput = z.object({
|
|
32
34
|
Id: z.string(),
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AddToCartInput, Cart } from "@/api-manager/schemas/cart.schema";
|
|
2
|
-
import { useNotification } from "
|
|
2
|
+
import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
|
|
3
3
|
import { useTranslations } from "next-intl";
|
|
4
4
|
import { useCreateMutation } from "../../create-mutation";
|
|
5
5
|
import getCart from "../queries/get-cart";
|
|
@@ -2,7 +2,6 @@ import { Cart, CheckoutInput } from "@/api-manager/schemas/cart.schema";
|
|
|
2
2
|
import { createApiPath } from "../../create-query";
|
|
3
3
|
import { useCreateMutation } from "../../create-mutation";
|
|
4
4
|
import { deleteCartCookie } from "@/api-manager/lib/cart-cookie-handler";
|
|
5
|
-
import getCart from "../queries/get-cart";
|
|
6
5
|
import { useQueryClient } from "@tanstack/react-query";
|
|
7
6
|
|
|
8
7
|
const apiPath = createApiPath("cart", "checkout");
|
|
@@ -10,7 +9,7 @@ const apiPath = createApiPath("cart", "checkout");
|
|
|
10
9
|
const useCheckout = () => {
|
|
11
10
|
const queryClient = useQueryClient();
|
|
12
11
|
return useCreateMutation<CheckoutInput, Cart>(apiPath, {
|
|
13
|
-
onSuccess: async (_data
|
|
12
|
+
onSuccess: async (_data) => {
|
|
14
13
|
// Delete old cart cookie
|
|
15
14
|
await deleteCartCookie();
|
|
16
15
|
|
|
@@ -9,5 +9,8 @@ export const searchProductsServer = async (
|
|
|
9
9
|
input: searchProductsInput,
|
|
10
10
|
): Promise<ProductSearchResult[]> => {
|
|
11
11
|
const apiManager = await createApiManager();
|
|
12
|
-
|
|
12
|
+
let searchProducts = apiManager.product.searchProducts
|
|
13
|
+
? apiManager.product.searchProducts(input)
|
|
14
|
+
: Promise.reject("product.searchProducts() is not defined");
|
|
15
|
+
return parseObject(searchProducts);
|
|
13
16
|
};
|