@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,25 +1,25 @@
|
|
|
1
|
-
import { createContext, useContext, ReactNode, useState } from "react";
|
|
2
|
-
import Link from "next/link";
|
|
3
|
-
import Card from "@mui/material/Card";
|
|
4
|
-
import Rating from "@mui/material/Rating";
|
|
5
|
-
import styled from "@mui/material/styles/styled";
|
|
6
|
-
import IconButton from "@mui/material/IconButton";
|
|
7
|
-
import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
|
|
8
|
-
// GLOBAL CUSTOM COMPONENTS
|
|
9
|
-
import { H5 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
10
1
|
import ImageWithFallback from "@evenicanpm/storefront-core/src/components-v2/ImageWithFallback";
|
|
11
|
-
import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
|
|
12
|
-
import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
|
|
13
2
|
// LOCAL CUSTOM COMPONENTS
|
|
14
3
|
import DiscountChip from "@evenicanpm/storefront-core/src/components-v2/product-cards/discount-chip";
|
|
15
|
-
import ProductPrice from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-price";
|
|
16
|
-
import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
|
|
17
4
|
import FavoriteButton from "@evenicanpm/storefront-core/src/components-v2/product-cards/favorite-button";
|
|
18
5
|
import ProductTags from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-plp-list/components/tags";
|
|
19
|
-
|
|
20
|
-
import
|
|
6
|
+
import ProductPrice from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-price";
|
|
7
|
+
import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-cards/quantity-buttons";
|
|
8
|
+
import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
|
|
9
|
+
// GLOBAL CUSTOM COMPONENTS
|
|
10
|
+
import { H5 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
11
|
+
import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
|
|
21
12
|
import useCart from "@evenicanpm/storefront-core/src/hooks/use-cart";
|
|
22
13
|
import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
|
|
14
|
+
// LIBRARY AND HOOKS
|
|
15
|
+
import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
|
|
16
|
+
import RemoveRedEye from "@mui/icons-material/RemoveRedEye";
|
|
17
|
+
import Card from "@mui/material/Card";
|
|
18
|
+
import IconButton from "@mui/material/IconButton";
|
|
19
|
+
import Rating from "@mui/material/Rating";
|
|
20
|
+
import styled from "@mui/material/styles/styled";
|
|
21
|
+
import Link from "next/link";
|
|
22
|
+
import { createContext, type ReactNode, useContext, useState } from "react";
|
|
23
23
|
|
|
24
24
|
// STYLED COMPONENT
|
|
25
25
|
const Wrapper = styled(Card)({
|
|
@@ -201,11 +201,12 @@ ProductCardPlpList.Price = () => {
|
|
|
201
201
|
|
|
202
202
|
ProductCardPlpList.FavoriteButton = () => {
|
|
203
203
|
const ctx = useContext(ProductCardPlpListContext);
|
|
204
|
-
if (!ctx) return null;
|
|
205
204
|
|
|
206
|
-
const
|
|
205
|
+
const id = ctx?.product?.id;
|
|
207
206
|
const isFavorite = useFavorite(id);
|
|
208
207
|
|
|
208
|
+
if (!ctx) return null;
|
|
209
|
+
|
|
209
210
|
return (
|
|
210
211
|
<FavoriteButton
|
|
211
212
|
isFavorite={isFavorite}
|
|
@@ -220,12 +221,14 @@ ProductCardPlpList.FavoriteButton = () => {
|
|
|
220
221
|
// So hide them for now, implement based on client requirements.
|
|
221
222
|
ProductCardPlpList.QuantityButtons = () => {
|
|
222
223
|
const ctx = useContext(ProductCardPlpListContext);
|
|
223
|
-
if (!ctx) return null;
|
|
224
224
|
|
|
225
|
-
const
|
|
225
|
+
const id = ctx?.product?.id;
|
|
226
226
|
const { currentCartLine, handleCartAmountChange, loading } = useCart(id);
|
|
227
|
+
|
|
227
228
|
const [quantity, setQuantity] = useState(currentCartLine?.Quantity || 0);
|
|
228
229
|
|
|
230
|
+
if (!ctx) return null;
|
|
231
|
+
|
|
229
232
|
const handleIncrementQuantity = () => {
|
|
230
233
|
const qty = quantity + 1;
|
|
231
234
|
handleCartAmountChange(qty);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { Box } from "@mui/material";
|
|
1
2
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
3
|
import React from "react";
|
|
3
|
-
import ProductCardSearch from "./index";
|
|
4
4
|
import { data } from "../../../../__mocks__/products";
|
|
5
|
-
import
|
|
5
|
+
import ProductCardSearch from "./index";
|
|
6
6
|
|
|
7
7
|
const meta = {
|
|
8
8
|
title: "Product/ProductCards/ProductCardSearch",
|
|
@@ -1,32 +1,32 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import Link from "next/link";
|
|
5
|
-
import Box from "@mui/material/Box";
|
|
6
|
-
import Rating from "@mui/material/Rating";
|
|
7
|
-
// MUI ICON COMPONENTS
|
|
8
|
-
import { RemoveRedEye } from "@mui/icons-material";
|
|
3
|
+
import { FlexRowCenter } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
|
|
9
4
|
// GLOBAL CUSTOM COMPONENTS
|
|
10
5
|
import LazyImage from "@evenicanpm/storefront-core/src/components-v2/LazyImage";
|
|
11
|
-
import
|
|
6
|
+
import FavoriteButton from "@evenicanpm/storefront-core/src/components-v2/product-cards/favorite-button";
|
|
7
|
+
// STYLED COMPONENTS
|
|
8
|
+
import {
|
|
9
|
+
Card,
|
|
10
|
+
CardMedia,
|
|
11
|
+
QuickViewSmallButton,
|
|
12
|
+
} from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-search/styles/index";
|
|
13
|
+
import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
|
|
12
14
|
import {
|
|
13
15
|
H4,
|
|
14
16
|
Paragraph,
|
|
15
17
|
Small,
|
|
16
18
|
} from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
17
|
-
import ProductViewDialog from "@evenicanpm/storefront-core/src/components-v2/product-dialog";
|
|
18
19
|
import AddToWishlistDialog from "@evenicanpm/storefront-core/src/components-v2/wishlist-dialogs/add-to-wishlist";
|
|
19
|
-
import
|
|
20
|
+
import useFavorite from "@evenicanpm/storefront-core/src/hooks/use-favorite";
|
|
20
21
|
// LIBRARY AND HOOKS
|
|
21
22
|
import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
|
|
22
23
|
import { currency } from "@evenicanpm/storefront-core/src/lib/lib";
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
import
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
} from "@evenicanpm/storefront-core/src/components-v2/product-cards/product-card-search/styles/index";
|
|
24
|
+
// MUI ICON COMPONENTS
|
|
25
|
+
import { RemoveRedEye } from "@mui/icons-material";
|
|
26
|
+
import Box from "@mui/material/Box";
|
|
27
|
+
import Rating from "@mui/material/Rating";
|
|
28
|
+
import Link from "next/link";
|
|
29
|
+
import { createContext, type ReactNode, useContext, useState } from "react";
|
|
30
30
|
|
|
31
31
|
type Product = {
|
|
32
32
|
slug: string;
|
|
@@ -171,9 +171,11 @@ ProductCardSearch.QuickViewButton = () => {
|
|
|
171
171
|
|
|
172
172
|
ProductCardSearch.FavoriteButton = () => {
|
|
173
173
|
const ctx = useContext(ProductCardSearchContext);
|
|
174
|
+
|
|
175
|
+
const id = ctx?.product?.id;
|
|
176
|
+
const isFavorite = useFavorite(id ? Number(id) : undefined);
|
|
177
|
+
|
|
174
178
|
if (!ctx) return null;
|
|
175
|
-
const { id } = ctx.product;
|
|
176
|
-
const isFavorite = useFavorite(Number(id));
|
|
177
179
|
|
|
178
180
|
return (
|
|
179
181
|
<FavoriteButton
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import Box from "@mui/material/Box";
|
|
2
1
|
// GLOBAL CUSTOM COMPONENTS
|
|
3
2
|
import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
|
|
4
3
|
import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
@@ -7,12 +6,13 @@ import {
|
|
|
7
6
|
calculateDiscount,
|
|
8
7
|
currency,
|
|
9
8
|
} from "@evenicanpm/storefront-core/src/lib/lib";
|
|
9
|
+
import Box from "@mui/material/Box";
|
|
10
10
|
|
|
11
11
|
// ==============================================================
|
|
12
12
|
type Props = { price: number; discount: number };
|
|
13
13
|
// ==============================================================
|
|
14
14
|
|
|
15
|
-
export default function ProductPrice({ discount, price }: Props) {
|
|
15
|
+
export default function ProductPrice({ discount, price }: Readonly<Props>) {
|
|
16
16
|
return (
|
|
17
17
|
<FlexBox alignItems="center" gap={1} mt={0.5}>
|
|
18
18
|
<Paragraph fontWeight={600} color="primary.main">
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { BoxProps } from "@mui/material/Box";
|
|
1
|
+
import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
|
|
3
2
|
// GLOBAL CUSTOM COMPONENTS
|
|
4
3
|
import { Span } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
5
|
-
import
|
|
4
|
+
import type { BoxProps } from "@mui/material/Box";
|
|
5
|
+
import Rating from "@mui/material/Rating";
|
|
6
6
|
|
|
7
7
|
// ==============================================================
|
|
8
8
|
interface Props extends BoxProps {
|
|
@@ -15,7 +15,7 @@ export default function ProductRating({
|
|
|
15
15
|
showRating,
|
|
16
16
|
rating = 0,
|
|
17
17
|
...props
|
|
18
|
-
}: Props) {
|
|
18
|
+
}: Readonly<Props>) {
|
|
19
19
|
if (showRating) {
|
|
20
20
|
return (
|
|
21
21
|
<FlexBox gap={1} alignItems="center" {...props}>
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import Link from "next/link";
|
|
2
1
|
import { H3 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
2
|
+
import Link from "next/link";
|
|
3
3
|
|
|
4
4
|
// ==============================================================
|
|
5
5
|
type Props = { title: string; slug: string };
|
|
6
6
|
// ==============================================================
|
|
7
7
|
|
|
8
|
-
export default function ProductTitle({ title, slug }: Props) {
|
|
8
|
+
export default function ProductTitle({ title, slug }: Readonly<Props>) {
|
|
9
9
|
return (
|
|
10
10
|
<Link href={`/products/${slug}`}>
|
|
11
11
|
<H3
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { Fragment } from "react";
|
|
2
|
-
import Button from "@mui/material/Button";
|
|
3
|
-
// MUI ICON COMPONENTS
|
|
4
|
-
import Add from "@mui/icons-material/Add";
|
|
5
|
-
import Remove from "@mui/icons-material/Remove";
|
|
6
1
|
// GLOBAL CUSTOM COMPONENTS
|
|
7
2
|
import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
|
|
8
3
|
import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
4
|
+
// MUI ICON COMPONENTS
|
|
5
|
+
import Add from "@mui/icons-material/Add";
|
|
6
|
+
import Remove from "@mui/icons-material/Remove";
|
|
9
7
|
import { CircularProgress } from "@mui/material";
|
|
8
|
+
import Button from "@mui/material/Button";
|
|
9
|
+
import { Fragment } from "react";
|
|
10
10
|
|
|
11
11
|
// ==============================================================
|
|
12
12
|
interface Props {
|
|
@@ -17,7 +17,7 @@ interface Props {
|
|
|
17
17
|
}
|
|
18
18
|
// ==============================================================
|
|
19
19
|
|
|
20
|
-
export default function QuantityButtons(props: Props) {
|
|
20
|
+
export default function QuantityButtons(props: Readonly<Props>) {
|
|
21
21
|
const { quantity, handleDecrement, handleIncrement, isLineUpdating } =
|
|
22
22
|
props || {};
|
|
23
23
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from "@storybook/react";
|
|
2
|
-
import ProductDialog from "./index";
|
|
3
1
|
import { Button } from "@mui/material";
|
|
2
|
+
import type { Meta, StoryObj } from "@storybook/react";
|
|
4
3
|
import { useArgs } from "storybook/internal/preview-api";
|
|
5
4
|
import { data } from "../../../__mocks__/products";
|
|
5
|
+
import ProductDialog from "./index";
|
|
6
6
|
|
|
7
7
|
const meta = {
|
|
8
8
|
title: "Product/ProductDialog",
|
|
@@ -2,27 +2,27 @@
|
|
|
2
2
|
* @module ProductViewDialog
|
|
3
3
|
*/
|
|
4
4
|
"use client";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import Dialog from "@mui/material/Dialog";
|
|
8
|
-
import Divider from "@mui/material/Divider";
|
|
9
|
-
import IconButton from "@mui/material/IconButton";
|
|
10
|
-
import DialogContent from "@mui/material/DialogContent";
|
|
11
|
-
import Close from "@mui/icons-material/Close";
|
|
12
|
-
import { Carousel } from "@evenicanpm/storefront-core/src/components-v2/carousel";
|
|
5
|
+
import type { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
|
|
6
|
+
import getProductById from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-by-id";
|
|
13
7
|
import BazaarImage from "@evenicanpm/storefront-core/src/components-v2/BazaarImage";
|
|
8
|
+
import { Carousel } from "@evenicanpm/storefront-core/src/components-v2/carousel";
|
|
14
9
|
import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
|
|
10
|
+
import QuantityVariantsSelect from "@evenicanpm/storefront-core/src/components-v2/product-quantity-variants";
|
|
15
11
|
import {
|
|
16
|
-
H2,
|
|
17
|
-
Paragraph,
|
|
18
12
|
H1,
|
|
13
|
+
H2,
|
|
19
14
|
H6,
|
|
15
|
+
Paragraph,
|
|
20
16
|
} from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
21
17
|
import { currency } from "@evenicanpm/storefront-core/src/lib/lib";
|
|
22
|
-
import
|
|
23
|
-
import
|
|
24
|
-
import
|
|
25
|
-
import
|
|
18
|
+
import Close from "@mui/icons-material/Close";
|
|
19
|
+
import Dialog from "@mui/material/Dialog";
|
|
20
|
+
import DialogContent from "@mui/material/DialogContent";
|
|
21
|
+
import Divider from "@mui/material/Divider";
|
|
22
|
+
import Grid from "@mui/material/Grid2";
|
|
23
|
+
import IconButton from "@mui/material/IconButton";
|
|
24
|
+
import Rating from "@mui/material/Rating";
|
|
25
|
+
import { createContext, type ReactElement, useContext } from "react";
|
|
26
26
|
|
|
27
27
|
/**
|
|
28
28
|
* @category Props
|
|
@@ -87,7 +87,7 @@ export const useProductDialog = () => {
|
|
|
87
87
|
* </ProductViewDialog.Content>
|
|
88
88
|
* </ProductViewDialog>
|
|
89
89
|
*/
|
|
90
|
-
export default function ProductDialog(props: Props) {
|
|
90
|
+
export default function ProductDialog(props: Readonly<Props>) {
|
|
91
91
|
const { children, openDialog, handleCloseDialog } = props;
|
|
92
92
|
const { data: product } = getProductById.useSuspenseData({
|
|
93
93
|
id: Number(props.productId),
|
|
@@ -161,7 +161,7 @@ export const ProductDialogContentImages = () => {
|
|
|
161
161
|
>
|
|
162
162
|
{product?.Images?.map((item: string, index: number) => (
|
|
163
163
|
<BazaarImage
|
|
164
|
-
key={index}
|
|
164
|
+
key={item + index}
|
|
165
165
|
src={item}
|
|
166
166
|
alt="product"
|
|
167
167
|
sx={{
|
|
@@ -10,7 +10,7 @@ interface Props {
|
|
|
10
10
|
/**
|
|
11
11
|
* @category Composed Component
|
|
12
12
|
*/
|
|
13
|
-
export default function ProductDialog(props: Props) {
|
|
13
|
+
export default function ProductDialog(props: Readonly<Props>) {
|
|
14
14
|
return (
|
|
15
15
|
<ProductViewDialog {...props}>
|
|
16
16
|
<ProductViewDialog.Content>
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
4
|
+
import React from "react";
|
|
5
|
+
import useVariants from "../../hooks/use-variants";
|
|
4
6
|
import { data, product } from "./__mocks__/data";
|
|
5
7
|
import { Dimensions } from "./compound/dimensions";
|
|
6
|
-
import useVariants from "../../hooks/use-variants";
|
|
7
8
|
|
|
8
9
|
const meta = {
|
|
9
10
|
title: "Product/Dimensions",
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
*/
|
|
4
4
|
"use client";
|
|
5
5
|
import { DimensionsContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions";
|
|
6
|
+
import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
|
|
7
|
+
import { hasSelectedDimension } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/utils/has-selected-dimension";
|
|
6
8
|
import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
7
|
-
import { useTranslations } from "next-intl";
|
|
8
9
|
import { ProductDimensionType } from "@msdyn365-commerce/retail-proxy";
|
|
9
|
-
import {
|
|
10
|
+
import { useTranslations } from "next-intl";
|
|
10
11
|
import { useContext } from "react";
|
|
11
|
-
import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
|
|
12
12
|
|
|
13
13
|
/**
|
|
14
14
|
* An error that corresponds with a specific dimension group.
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
* @module ProductDimensions
|
|
3
3
|
*/
|
|
4
4
|
"use client";
|
|
5
|
+
import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
|
|
5
6
|
import { H6 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
6
7
|
import { ProductDimensionType } from "@msdyn365-commerce/retail-proxy";
|
|
7
8
|
import { useContext } from "react";
|
|
8
|
-
import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* @category Sub-Component
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module ProductDimensions
|
|
3
3
|
*/
|
|
4
|
-
|
|
5
|
-
import {
|
|
4
|
+
|
|
5
|
+
import { DimensionsContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions";
|
|
6
6
|
import {
|
|
7
|
-
ProductDimensionValueInventoryAvailability,
|
|
8
7
|
ProductDimensionType,
|
|
8
|
+
type ProductDimensionValueInventoryAvailability,
|
|
9
9
|
} from "@msdyn365-commerce/retail-proxy";
|
|
10
|
-
import {
|
|
10
|
+
import { Chip } from "@mui/material";
|
|
11
|
+
import React, { useContext } from "react";
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* @category Props
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
* @module ProductDimensions
|
|
3
3
|
*/
|
|
4
4
|
"use client";
|
|
5
|
+
import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
|
|
5
6
|
import { DimensionGroupListChip } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-list-chip";
|
|
6
7
|
import { useContext } from "react";
|
|
7
|
-
import { DimensionsGroupContext } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* @category Sub-Component
|
|
@@ -19,6 +19,11 @@ export const DimensionGroupList = () => {
|
|
|
19
19
|
const { dimensions } = context;
|
|
20
20
|
|
|
21
21
|
return dimensions.map((dimension, i) => {
|
|
22
|
-
return
|
|
22
|
+
return (
|
|
23
|
+
<DimensionGroupListChip
|
|
24
|
+
dimension={dimension}
|
|
25
|
+
key={`dimension-${i + 1}`}
|
|
26
|
+
/>
|
|
27
|
+
);
|
|
23
28
|
});
|
|
24
29
|
};
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
* @module ProductDimensions
|
|
3
3
|
*/
|
|
4
4
|
"use client";
|
|
5
|
-
import Box from "@mui/material/Box";
|
|
6
|
-
import { createContext } from "react";
|
|
7
|
-
import { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
|
|
8
|
-
import { PropsWithChildren } from "react";
|
|
9
5
|
import { DimensionGroupError } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-error";
|
|
10
6
|
import { DimensionGroupLabel } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-label";
|
|
11
7
|
import { DimensionGroupList } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group-list";
|
|
8
|
+
import type { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
|
|
9
|
+
import Box from "@mui/material/Box";
|
|
10
|
+
import { createContext, type PropsWithChildren } from "react";
|
|
12
11
|
|
|
13
12
|
/**
|
|
14
13
|
* @category Props
|
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
|
|
3
|
-
import React, { PropsWithChildren, ReactElement, createContext } from "react";
|
|
4
2
|
import { DimensionGroup } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions-group";
|
|
3
|
+
import type { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
|
|
4
|
+
import React, {
|
|
5
|
+
createContext,
|
|
6
|
+
type PropsWithChildren,
|
|
7
|
+
type ReactElement,
|
|
8
|
+
} from "react";
|
|
5
9
|
|
|
6
10
|
/**
|
|
7
11
|
* @category Context
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
|
|
3
2
|
import { Dimensions } from "@evenicanpm/storefront-core/src/components-v2/product-dimensions/compound/dimensions";
|
|
3
|
+
import type { ProductDimensionValueInventoryAvailability } from "@msdyn365-commerce/retail-proxy";
|
|
4
4
|
|
|
5
|
-
//
|
|
5
|
+
// When selecting a single dimension, loading spinner starts... not necessary, inefficient.
|
|
6
6
|
|
|
7
7
|
export type Props = {
|
|
8
8
|
dimensionGroups: ProductDimensionValueInventoryAvailability[][];
|
|
@@ -18,7 +18,7 @@ export default function ProductDimensions({
|
|
|
18
18
|
selectDimensions,
|
|
19
19
|
handleChangeVariant,
|
|
20
20
|
showDimensionError,
|
|
21
|
-
}: Props) {
|
|
21
|
+
}: Readonly<Props>) {
|
|
22
22
|
return (
|
|
23
23
|
<Dimensions
|
|
24
24
|
dimensionGroups={dimensionGroups}
|
|
@@ -27,7 +27,7 @@ export default function ProductDimensions({
|
|
|
27
27
|
showDimensionError={showDimensionError}
|
|
28
28
|
>
|
|
29
29
|
{dimensionGroups.map((group, i) => (
|
|
30
|
-
<Dimensions.Group dimensions={group} key={i}>
|
|
30
|
+
<Dimensions.Group dimensions={group} key={`dim-grp-${i + 1}`}>
|
|
31
31
|
<Dimensions.Group.Label />
|
|
32
32
|
<Dimensions.Group.List />
|
|
33
33
|
<Dimensions.Group.Error />
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
4
|
+
import React from "react";
|
|
4
5
|
import { QuantityButtons } from "./compound/quantity-buttons-root";
|
|
5
6
|
|
|
6
7
|
const meta = {
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @module ProductQuantityButtons
|
|
3
3
|
*/
|
|
4
|
-
|
|
4
|
+
|
|
5
5
|
import { FlexBox } from "@evenicanpm/storefront-core/src/components-v2/flex-box";
|
|
6
|
-
import Button from "@mui/material/Button";
|
|
7
|
-
import { CartLine } from "@msdyn365-commerce/retail-proxy";
|
|
8
|
-
import { useTranslations } from "next-intl";
|
|
9
|
-
import { MdAdd as Add } from "react-icons/md";
|
|
10
|
-
import { MdRemove as Remove } from "react-icons/md";
|
|
11
6
|
import { H3 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
12
|
-
import CircularProgress from "@mui/material/CircularProgress";
|
|
13
7
|
import useCart from "@evenicanpm/storefront-core/src/hooks/use-cart";
|
|
8
|
+
import type { CartLine } from "@msdyn365-commerce/retail-proxy";
|
|
9
|
+
import Button from "@mui/material/Button";
|
|
10
|
+
import CircularProgress from "@mui/material/CircularProgress";
|
|
11
|
+
import { useTranslations } from "next-intl";
|
|
12
|
+
import React, { createContext, type ReactNode, useContext } from "react";
|
|
13
|
+
import { MdAdd as Add, MdRemove as Remove } from "react-icons/md";
|
|
14
14
|
// TODO: Encapsulate the addToCart api calls inside this component
|
|
15
15
|
// so no need to pass in props.
|
|
16
16
|
|
|
@@ -84,7 +84,7 @@ export function QuantityButtons({
|
|
|
84
84
|
isOOS = false,
|
|
85
85
|
customAddToCart,
|
|
86
86
|
children,
|
|
87
|
-
}: QuantityButtonProps) {
|
|
87
|
+
}: Readonly<QuantityButtonProps>) {
|
|
88
88
|
const t = useTranslations("productDetail");
|
|
89
89
|
|
|
90
90
|
const { handleAddToCart, handleCartAmountChange, loading, currentCartLine } =
|
|
@@ -2,9 +2,12 @@
|
|
|
2
2
|
* @component
|
|
3
3
|
* @category Implementation component
|
|
4
4
|
*/
|
|
5
|
+
|
|
6
|
+
import {
|
|
7
|
+
type QuantityButtonProps,
|
|
8
|
+
QuantityButtons,
|
|
9
|
+
} from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root";
|
|
5
10
|
import React from "react";
|
|
6
|
-
import { QuantityButtons } from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root";
|
|
7
|
-
import { QuantityButtonProps } from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons/compound/quantity-buttons-root";
|
|
8
11
|
|
|
9
12
|
/**
|
|
10
13
|
* Pre-composed version of quantity buttons.
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
4
|
-
import
|
|
4
|
+
import React from "react";
|
|
5
5
|
import { product } from "../../../__mocks__/product-dimensions";
|
|
6
|
+
import QuantityButtons from "./index";
|
|
6
7
|
|
|
7
8
|
const meta = {
|
|
8
9
|
title: "Product/DimensionsQuantitySelector",
|
|
@@ -1,21 +1,19 @@
|
|
|
1
1
|
"use client";
|
|
2
|
-
import { useState } from "react";
|
|
3
|
-
import Box from "@mui/material/Box";
|
|
4
|
-
|
|
5
|
-
// GLOBAL CUSTOM COMPONENTS
|
|
6
|
-
import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons";
|
|
7
2
|
// API MANAGER
|
|
8
|
-
import { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
|
|
3
|
+
import type { ProductDetails } from "@evenicanpm/storefront-core/src/api-manager/schemas/product.schema";
|
|
9
4
|
import getProductAvailability from "@evenicanpm/storefront-core/src/api-manager/services/product/queries/get-product-availability";
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
// LOCAL COMPONENTS
|
|
6
|
+
import ProductDimensions from "@evenicanpm/storefront-core/src/components-v2/product-dimensions";
|
|
7
|
+
// GLOBAL CUSTOM COMPONENTS
|
|
8
|
+
import QuantityButtons from "@evenicanpm/storefront-core/src/components-v2/product-quantity-buttons";
|
|
13
9
|
import useCart, {
|
|
14
|
-
AddToCartBopisInput,
|
|
10
|
+
type AddToCartBopisInput,
|
|
15
11
|
} from "@evenicanpm/storefront-core/src/hooks/use-cart";
|
|
16
12
|
|
|
17
|
-
// LOCAL
|
|
18
|
-
import
|
|
13
|
+
// LOCAL HOOKS
|
|
14
|
+
import useVariants from "@evenicanpm/storefront-core/src/hooks/use-variants";
|
|
15
|
+
import Box from "@mui/material/Box";
|
|
16
|
+
import { useState } from "react";
|
|
19
17
|
|
|
20
18
|
interface Props {
|
|
21
19
|
product: ProductDetails;
|
|
@@ -29,7 +27,7 @@ interface Props {
|
|
|
29
27
|
* and the quantity selector component. These two components are usually
|
|
30
28
|
* used together so this is a pre-wired version for convenience.
|
|
31
29
|
*/
|
|
32
|
-
export default function QuantityVariantsSelect({ product }: Props) {
|
|
30
|
+
export default function QuantityVariantsSelect({ product }: Readonly<Props>) {
|
|
33
31
|
const [showDimensionError, setShowDimensionError] = useState(false);
|
|
34
32
|
|
|
35
33
|
const { DimensionValues, RecordId } = product;
|
|
@@ -41,7 +39,9 @@ export default function QuantityVariantsSelect({ product }: Props) {
|
|
|
41
39
|
allDimensionsSelected,
|
|
42
40
|
} = useVariants(product);
|
|
43
41
|
|
|
44
|
-
const
|
|
42
|
+
const productId = selectedVariant?.RecordId ?? RecordId;
|
|
43
|
+
|
|
44
|
+
const { handleAddToCart } = useCart(productId);
|
|
45
45
|
|
|
46
46
|
const searchCriteria = {
|
|
47
47
|
searchCriteria: {
|
|
@@ -61,7 +61,6 @@ export default function QuantityVariantsSelect({ product }: Props) {
|
|
|
61
61
|
const OOSCode = "OOS"; // Always means out of stock
|
|
62
62
|
|
|
63
63
|
const aggregateCode =
|
|
64
|
-
shippingInventoryData?.AggregatedProductInventoryAvailabilities &&
|
|
65
64
|
shippingInventoryData?.AggregatedProductInventoryAvailabilities?.[0]
|
|
66
65
|
?.TotalAvailableInventoryLevelCode;
|
|
67
66
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
// Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
4
|
-
import
|
|
4
|
+
import React from "react";
|
|
5
5
|
import { data, prices } from "../../../__mocks__/products";
|
|
6
|
+
import { ProductsGrid } from "./index";
|
|
6
7
|
|
|
7
8
|
const meta = {
|
|
8
9
|
title: "Product/ListGrid",
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
// Replace your-framework with the framework you are using, e.g. react-vite, nextjs, nextjs-vite, etc.
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import type { Meta, StoryObj } from "@storybook/react";
|
|
4
|
-
import
|
|
4
|
+
import React from "react";
|
|
5
5
|
import { data, prices } from "../../../__mocks__/products";
|
|
6
|
-
|
|
7
|
-
import { expect, mocked } from "storybook/test";
|
|
6
|
+
import { ProductsList } from "./index";
|
|
8
7
|
|
|
9
8
|
const meta = {
|
|
10
9
|
title: "Product/ListList",
|