@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,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type {
|
|
2
2
|
Category,
|
|
3
3
|
TextValueTranslation,
|
|
4
4
|
} from "@msdyn365-commerce/retail-proxy";
|
|
@@ -67,7 +67,7 @@ const mapCategoryToHierarchy = (
|
|
|
67
67
|
return categoryHierarchy;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
return
|
|
70
|
+
return globalThis.structuredClone(rootCategory.Children) ?? [];
|
|
71
71
|
};
|
|
72
72
|
|
|
73
73
|
const generateUrl = (
|
|
@@ -86,7 +86,7 @@ const generateUrl = (
|
|
|
86
86
|
);
|
|
87
87
|
}
|
|
88
88
|
categoryNames.unshift(currentCategory.RecordId.toString());
|
|
89
|
-
return categoryNames.reverse().join("/");
|
|
89
|
+
return categoryNames.slice().reverse().join("/");
|
|
90
90
|
};
|
|
91
91
|
|
|
92
92
|
const getFriendlyName = (
|
|
@@ -99,7 +99,7 @@ const getFriendlyName = (
|
|
|
99
99
|
(item) => item?.Language?.toLowerCase() === locale?.toLowerCase(),
|
|
100
100
|
);
|
|
101
101
|
}
|
|
102
|
-
return nameTranslation
|
|
102
|
+
return nameTranslation?.Text;
|
|
103
103
|
};
|
|
104
104
|
|
|
105
105
|
const normalizeCategoryName = (string_: string) =>
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { GraphQLClient } from "graphql-request";
|
|
2
|
-
|
|
3
1
|
// Note: We are keeping two separate versions of the graphqlRequestSdk
|
|
4
2
|
// currently. We need one in the api-manager client packages to get types
|
|
5
3
|
// and one here to isntantiate because graphql-request library must be same
|
|
6
4
|
// for this file and the sdk
|
|
7
5
|
import { getSdk } from "@evenicanpm/storefront-core/src/lib/graphqlRequestSdk";
|
|
6
|
+
import { GraphQLClient } from "graphql-request";
|
|
8
7
|
|
|
9
8
|
// typescript can't infer type without reference
|
|
10
9
|
export type E4Sdk = ReturnType<typeof getSdk>;
|
|
@@ -1,8 +1,38 @@
|
|
|
1
|
-
import { Theme } from "@mui/material";
|
|
1
|
+
import type { Theme } from "@mui/material";
|
|
2
2
|
|
|
3
3
|
// Define a union type for possible color values
|
|
4
4
|
type ColorValue = string | number | (() => string);
|
|
5
5
|
|
|
6
|
+
// Helper to resolve possible function values
|
|
7
|
+
const resolveColorValue = (value: ColorValue): string => {
|
|
8
|
+
return typeof value === "function" ? value() : String(value);
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
// Helper to get main color if available
|
|
12
|
+
const getMainColor = (colorObj: Record<string, ColorValue>): string => {
|
|
13
|
+
if ("main" in colorObj) {
|
|
14
|
+
const mainValue = colorObj.main;
|
|
15
|
+
return resolveColorValue(mainValue);
|
|
16
|
+
}
|
|
17
|
+
return "";
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
// Helper to get shade color if available
|
|
21
|
+
const getShadeColor = (
|
|
22
|
+
colorObj: Record<string, ColorValue>,
|
|
23
|
+
shade: number | string,
|
|
24
|
+
): string | undefined => {
|
|
25
|
+
const shadeKey = shade.toString();
|
|
26
|
+
|
|
27
|
+
// Try to access the shade
|
|
28
|
+
if (shadeKey in colorObj) {
|
|
29
|
+
const value = colorObj[shadeKey];
|
|
30
|
+
return resolveColorValue(value);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return undefined;
|
|
34
|
+
};
|
|
35
|
+
|
|
6
36
|
// Type-safe color getter function
|
|
7
37
|
const getPaletteColor = (
|
|
8
38
|
theme: Theme,
|
|
@@ -21,30 +51,20 @@ const getPaletteColor = (
|
|
|
21
51
|
|
|
22
52
|
// If shade is specified, try to get it
|
|
23
53
|
if (shade !== undefined) {
|
|
24
|
-
const
|
|
54
|
+
const shadeColor = getShadeColor(colorObj, shade);
|
|
25
55
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const value = colorObj[shadeKey];
|
|
29
|
-
// Handle possible function values
|
|
30
|
-
return typeof value === "function" ? value() : String(value);
|
|
56
|
+
if (shadeColor) {
|
|
57
|
+
return shadeColor;
|
|
31
58
|
}
|
|
32
59
|
|
|
33
60
|
// Check if this is a PaletteColor with main/dark/light properties
|
|
34
|
-
|
|
35
|
-
const mainValue = colorObj.main;
|
|
36
|
-
return typeof mainValue === "function" ? mainValue() : String(mainValue);
|
|
37
|
-
}
|
|
61
|
+
return getMainColor(colorObj);
|
|
38
62
|
}
|
|
39
63
|
|
|
40
64
|
// If no shade specified but color has 'main' property
|
|
41
|
-
|
|
42
|
-
const mainValue = colorObj.main;
|
|
43
|
-
return typeof mainValue === "function" ? mainValue() : String(mainValue);
|
|
44
|
-
}
|
|
65
|
+
return getMainColor(colorObj);
|
|
45
66
|
|
|
46
67
|
// Last resort fallback
|
|
47
|
-
return "";
|
|
48
68
|
};
|
|
49
69
|
|
|
50
70
|
export default getPaletteColor;
|
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { DocumentNode } from "graphql";
|
|
1
|
+
import { type DocumentNode, type GraphQLError, print } from "graphql";
|
|
2
|
+
import type { GraphQLClient, RequestOptions } from "graphql-request";
|
|
4
3
|
export type Maybe<T> = T | null;
|
|
5
4
|
export type InputMaybe<T> = Maybe<T>;
|
|
6
5
|
export type Exact<T extends { [key: string]: unknown }> = {
|
package/src/lib/hexToLuma.ts
CHANGED
|
@@ -5,10 +5,10 @@ function sRGBtoLin(colorChannel: number): number {
|
|
|
5
5
|
if (colorChannel <= 0.04045) {
|
|
6
6
|
return colorChannel / 12.92;
|
|
7
7
|
} else {
|
|
8
|
-
return
|
|
8
|
+
return ((colorChannel + 0.055) / 1.055) ** 2.4;
|
|
9
9
|
}
|
|
10
10
|
}
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
function YtoLstar(Y: number): number {
|
|
13
13
|
// Send this function a luminance value between 0.0 and 1.0,
|
|
14
14
|
// and it returns L* which is "perceptual lightness"
|
|
@@ -16,7 +16,7 @@ function YtoLstar(Y: number): number {
|
|
|
16
16
|
if (Y <= 216 / 24389) {
|
|
17
17
|
return Y * (24389 / 27);
|
|
18
18
|
} else {
|
|
19
|
-
return
|
|
19
|
+
return Y ** (1 / 3) * 116 - 16;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
@@ -30,7 +30,7 @@ export const hexToLuma = (hex: string): number => {
|
|
|
30
30
|
throw new Error("not a valid hex color code");
|
|
31
31
|
}
|
|
32
32
|
|
|
33
|
-
const number = Number.parseInt(hex
|
|
33
|
+
const number = Number.parseInt(hex.startsWith("#") ? hex.slice(1) : hex, 16);
|
|
34
34
|
const red = number >> 16;
|
|
35
35
|
const green = (number >> 8) & 255;
|
|
36
36
|
const blue = number & 255;
|
package/src/lib/refiner-utils.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
|
|
1
|
+
import type { ProductRefinerValue } from "@msdyn365-commerce/retail-proxy";
|
|
2
2
|
|
|
3
3
|
const convertRefinerToParameter = (refiner: ProductRefinerValue) =>
|
|
4
4
|
`${refiner.RefinerRecordId}|${refiner.DataTypeValue}|${refiner.LeftValueBoundString}|${refiner.RightValueBoundString}|${refiner.RefinerSourceValue}`;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { RegularStoreHours } from "@msdyn365-commerce/retail-proxy";
|
|
1
|
+
import type { RegularStoreHours } from "@msdyn365-commerce/retail-proxy";
|
|
2
2
|
import get from "lodash/get";
|
|
3
3
|
|
|
4
4
|
export interface IStoreSelectorLocationLineItemResources {
|
|
@@ -46,7 +46,7 @@ export const secondsToTime = (
|
|
|
46
46
|
let hours = Math.floor(seconds / (60 * 60));
|
|
47
47
|
const ampm = hours >= 12 ? "pm" : "am";
|
|
48
48
|
hours %= 12;
|
|
49
|
-
hours = hours
|
|
49
|
+
hours = hours || 12;
|
|
50
50
|
const divisorForMinutes = seconds % (60 * 60);
|
|
51
51
|
const minutes =
|
|
52
52
|
Math.floor(divisorForMinutes / 60) < 10
|
|
@@ -107,13 +107,13 @@ const buildHoursDisplayInfo = (
|
|
|
107
107
|
hoursInfo: string,
|
|
108
108
|
resources: IStoreSelectorLocationLineItemResources,
|
|
109
109
|
): IHoursDisplayInfo => {
|
|
110
|
+
const isSameDay = startDay === endDay;
|
|
111
|
+
|
|
110
112
|
return {
|
|
111
113
|
startDayShort: getShortTimeString(startDay, resources),
|
|
112
114
|
startDayFull: getFullTimeString(startDay, resources),
|
|
113
|
-
endDayShort:
|
|
114
|
-
|
|
115
|
-
endDayFull:
|
|
116
|
-
startDay !== endDay ? getFullTimeString(endDay, resources) : undefined,
|
|
115
|
+
endDayShort: isSameDay ? undefined : getShortTimeString(endDay, resources),
|
|
116
|
+
endDayFull: isSameDay ? undefined : getFullTimeString(endDay, resources),
|
|
117
117
|
timeRange: hoursInfo,
|
|
118
118
|
};
|
|
119
119
|
};
|
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
import
|
|
5
|
-
import
|
|
6
|
-
// ICON COMPONENTS
|
|
7
|
-
import {
|
|
8
|
-
MdOutlineShoppingBag as ShoppingBagOutlined,
|
|
9
|
-
MdFavoriteBorder as FavoriteBorder,
|
|
10
|
-
MdPerson as Person,
|
|
11
|
-
MdPlace as Place,
|
|
12
|
-
} from "react-icons/md";
|
|
3
|
+
// API
|
|
4
|
+
import getUser from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user";
|
|
5
|
+
import getUserCounts from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user-counts";
|
|
13
6
|
// GLOBAL CUSTOM COMPONENTS
|
|
14
7
|
import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
|
|
15
8
|
import {
|
|
16
9
|
Paragraph,
|
|
17
10
|
Span,
|
|
18
11
|
} from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
19
|
-
// API
|
|
20
|
-
import getUser from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user";
|
|
21
|
-
import getUserCounts from "@evenicanpm/storefront-core/src/api-manager/services/user/queries/get-user-counts";
|
|
22
12
|
// STYLED COMPONENTS
|
|
23
13
|
import {
|
|
24
14
|
MainContainer,
|
|
25
15
|
StyledNavLink,
|
|
26
16
|
} from "@evenicanpm/storefront-core/src/pages-v2/account/styles";
|
|
17
|
+
import { usePathname } from "next/navigation";
|
|
18
|
+
import { useTranslations } from "next-intl";
|
|
19
|
+
import { createContext, Fragment, type ReactNode } from "react";
|
|
20
|
+
// ICON COMPONENTS
|
|
21
|
+
import {
|
|
22
|
+
MdFavoriteBorder as FavoriteBorder,
|
|
23
|
+
MdPerson as Person,
|
|
24
|
+
MdPlace as Place,
|
|
25
|
+
MdOutlineShoppingBag as ShoppingBagOutlined,
|
|
26
|
+
} from "react-icons/md";
|
|
27
27
|
|
|
28
28
|
/**
|
|
29
29
|
*
|
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
// API and Interfaces
|
|
4
|
+
import type { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
|
|
5
|
+
import useCreateAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/create-address";
|
|
6
|
+
import useUpdateAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/update-address";
|
|
7
|
+
import getCountries from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-countries";
|
|
8
|
+
import getStates from "@evenicanpm/storefront-core/src/api-manager/services/address/queries/get-states";
|
|
9
|
+
import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
|
|
10
|
+
import type { CountryRegionInfo } from "@msdyn365-commerce/retail-proxy";
|
|
4
11
|
import {
|
|
5
12
|
Box,
|
|
6
13
|
Button,
|
|
7
14
|
FormControl,
|
|
8
15
|
InputLabel,
|
|
9
|
-
TextField,
|
|
10
16
|
MenuItem,
|
|
11
|
-
Select,
|
|
12
17
|
OutlinedInput,
|
|
18
|
+
Select,
|
|
19
|
+
TextField,
|
|
13
20
|
} from "@mui/material";
|
|
14
21
|
import Grid from "@mui/material/Grid2";
|
|
15
|
-
import _ from "lodash";
|
|
16
|
-
import { useLocale, useTranslations } from "next-intl";
|
|
17
|
-
import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
|
|
18
|
-
import { useRouter } from "next/navigation";
|
|
19
22
|
// Forms
|
|
20
23
|
import { useFormik } from "formik";
|
|
21
|
-
import { z } from "zod";
|
|
22
24
|
import { withZodSchema } from "formik-validator-zod";
|
|
23
|
-
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import
|
|
27
|
-
import
|
|
28
|
-
|
|
29
|
-
import useUpdateAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/update-address";
|
|
25
|
+
import _ from "lodash";
|
|
26
|
+
import { useRouter } from "next/navigation";
|
|
27
|
+
import { useLocale, useTranslations } from "next-intl";
|
|
28
|
+
import React, { createContext, useContext } from "react";
|
|
29
|
+
import { z } from "zod";
|
|
30
|
+
|
|
30
31
|
interface FormContextValue {
|
|
31
32
|
formik: ReturnType<typeof useFormik<any>>;
|
|
32
33
|
countries: CountryRegionInfo[] | undefined;
|
|
@@ -42,7 +43,8 @@ interface RootProps {
|
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
const AddressForm = ({ address, children }: RootProps) => {
|
|
45
|
-
const
|
|
46
|
+
const tn = useTranslations("Account.Addresses");
|
|
47
|
+
const t = useTranslations("Address");
|
|
46
48
|
const { setNotification } = useNotification();
|
|
47
49
|
const router = useRouter();
|
|
48
50
|
const locale = useLocale();
|
|
@@ -117,6 +119,7 @@ const AddressForm = ({ address, children }: RootProps) => {
|
|
|
117
119
|
message: tn("addressFailed"),
|
|
118
120
|
severity: "error",
|
|
119
121
|
});
|
|
122
|
+
console.log(error);
|
|
120
123
|
}
|
|
121
124
|
};
|
|
122
125
|
|
|
@@ -152,9 +155,9 @@ AddressForm.Fields = ({ children }: { children?: React.ReactNode }) => {
|
|
|
152
155
|
|
|
153
156
|
AddressForm.Field = ({ name, label, required }: FieldProps) => {
|
|
154
157
|
const ctx = useContext(FormContext);
|
|
158
|
+
const t = useTranslations("Address");
|
|
155
159
|
if (!ctx) return null;
|
|
156
160
|
const { formik } = ctx;
|
|
157
|
-
const t = useTranslations("Address");
|
|
158
161
|
|
|
159
162
|
return (
|
|
160
163
|
<Grid size={{ sm: 6, xs: 12 }}>
|
|
@@ -179,9 +182,9 @@ AddressForm.Field = ({ name, label, required }: FieldProps) => {
|
|
|
179
182
|
|
|
180
183
|
AddressForm.Country = () => {
|
|
181
184
|
const ctx = useContext(FormContext);
|
|
185
|
+
const t = useTranslations("Address");
|
|
182
186
|
if (!ctx) return null;
|
|
183
187
|
const { formik, countries, setSelectedCountry } = ctx;
|
|
184
|
-
const t = useTranslations("Address");
|
|
185
188
|
|
|
186
189
|
return (
|
|
187
190
|
<Grid size={{ sm: 6, xs: 12 }}>
|
|
@@ -209,8 +212,8 @@ AddressForm.Country = () => {
|
|
|
209
212
|
}}
|
|
210
213
|
>
|
|
211
214
|
<MenuItem value="">Select Country</MenuItem>
|
|
212
|
-
{countries?.map(({ ShortName, CountryRegionId }
|
|
213
|
-
<MenuItem key={
|
|
215
|
+
{countries?.map(({ ShortName, CountryRegionId }) => (
|
|
216
|
+
<MenuItem key={CountryRegionId} value={CountryRegionId}>
|
|
214
217
|
{ShortName}
|
|
215
218
|
</MenuItem>
|
|
216
219
|
))}
|
|
@@ -229,9 +232,9 @@ AddressForm.Country = () => {
|
|
|
229
232
|
|
|
230
233
|
AddressForm.State = () => {
|
|
231
234
|
const ctx = useContext(FormContext);
|
|
235
|
+
const t = useTranslations("Address");
|
|
232
236
|
if (!ctx) return null;
|
|
233
237
|
const { formik, states } = ctx;
|
|
234
|
-
const t = useTranslations("Address");
|
|
235
238
|
|
|
236
239
|
return (
|
|
237
240
|
<Grid size={{ sm: 6, xs: 12 }}>
|
|
@@ -252,8 +255,8 @@ AddressForm.State = () => {
|
|
|
252
255
|
onBlur={formik.handleBlur}
|
|
253
256
|
>
|
|
254
257
|
<MenuItem value="">Select a state</MenuItem>
|
|
255
|
-
{states?.map(({ StateId, StateName }
|
|
256
|
-
<MenuItem key={
|
|
258
|
+
{states?.map(({ StateId, StateName }) => (
|
|
259
|
+
<MenuItem key={StateId} value={StateId}>
|
|
257
260
|
{StateName}
|
|
258
261
|
</MenuItem>
|
|
259
262
|
))}
|
|
@@ -1,22 +1,21 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import IconButton from "@mui/material/IconButton";
|
|
5
|
-
import { Button, Box, Chip } from "@mui/material";
|
|
6
|
-
import { SxProps } from "@mui/material/styles";
|
|
7
|
-
import { useTranslations } from "next-intl";
|
|
8
|
-
import { useRouter } from "next/navigation";
|
|
9
|
-
import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
|
|
10
|
-
// ICONS
|
|
11
|
-
import { MdEdit as Edit } from "react-icons/md";
|
|
12
|
-
import { MdDelete as Delete } from "react-icons/md";
|
|
13
|
-
// Custom Components
|
|
14
|
-
import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
15
|
-
import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
|
|
3
|
+
import type { Address } from "@evenicanpm/storefront-core/src/api-manager/schemas/address.schema";
|
|
16
4
|
// API
|
|
17
5
|
import useDeleteAddress from "@evenicanpm/storefront-core/src/api-manager/services/address/mutations/delete-address";
|
|
18
6
|
import useUpdateUser from "@evenicanpm/storefront-core/src/api-manager/services/user/mutations/update-user";
|
|
19
|
-
|
|
7
|
+
// Custom Components
|
|
8
|
+
import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
9
|
+
import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
|
|
10
|
+
import { useNotification } from "@evenicanpm/storefront-core/src/providers/notifications/use-notification";
|
|
11
|
+
import { Box, Button, Chip } from "@mui/material";
|
|
12
|
+
import IconButton from "@mui/material/IconButton";
|
|
13
|
+
import type { SxProps } from "@mui/material/styles";
|
|
14
|
+
import { useRouter } from "next/navigation";
|
|
15
|
+
import { useTranslations } from "next-intl";
|
|
16
|
+
import { createContext, type ReactNode, useContext } from "react";
|
|
17
|
+
// ICONS
|
|
18
|
+
import { MdDelete as Delete, MdEdit as Edit } from "react-icons/md";
|
|
20
19
|
|
|
21
20
|
interface AddressContextValue {
|
|
22
21
|
address: Address;
|
|
@@ -115,9 +114,9 @@ AddressListItem.Actions = ({ children }: { children: ReactNode }) => {
|
|
|
115
114
|
|
|
116
115
|
AddressListItem.Primary = () => {
|
|
117
116
|
const ctx = useContext(AddressContext);
|
|
117
|
+
const t = useTranslations("Account.Addresses");
|
|
118
118
|
if (!ctx) return null;
|
|
119
119
|
const { address, setPrimaryAddress } = ctx;
|
|
120
|
-
const t = useTranslations("Account.Addresses");
|
|
121
120
|
const rid = address.RecordId?.toString();
|
|
122
121
|
const addrId = address.Id ?? rid ?? "";
|
|
123
122
|
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import
|
|
4
|
-
|
|
3
|
+
import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
|
|
4
|
+
// GLOBAL CUSTOM COMPONENTS
|
|
5
|
+
import SideNav from "@evenicanpm/storefront-core/src/components-v2/side-nav/index";
|
|
6
|
+
import { H2 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
7
|
+
import Navigation from "@evenicanpm/storefront-core/src/pages-v2/account/account-navigation";
|
|
5
8
|
import {
|
|
6
9
|
Box,
|
|
7
10
|
Button,
|
|
8
11
|
IconButton,
|
|
9
|
-
Theme,
|
|
10
12
|
styled,
|
|
13
|
+
type Theme,
|
|
11
14
|
useMediaQuery,
|
|
12
15
|
} from "@mui/material";
|
|
16
|
+
import Link from "next/link";
|
|
13
17
|
import { useTranslations } from "next-intl";
|
|
18
|
+
import React, { createContext, type ReactNode, useContext } from "react";
|
|
19
|
+
import type { IconType } from "react-icons";
|
|
14
20
|
import { MdMenu as Menu } from "react-icons/md";
|
|
15
|
-
// GLOBAL CUSTOM COMPONENTS
|
|
16
|
-
import SideNav from "@evenicanpm/storefront-core/src/components-v2/side-nav/index";
|
|
17
|
-
import { H2 } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
18
|
-
import FlexBox from "@evenicanpm/storefront-core/src/components-v2/flex-box/flex-box";
|
|
19
|
-
import { IconType } from "react-icons";
|
|
20
|
-
import Navigation from "@evenicanpm/storefront-core/src/pages-v2/account/account-navigation";
|
|
21
21
|
|
|
22
22
|
const StyledBox = styled("div")(({ theme }) => ({
|
|
23
23
|
display: "flex",
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
import { Fragment, createContext, useContext } from "react";
|
|
2
|
-
import { useTranslations } from "next-intl";
|
|
3
|
-
import Box from "@mui/material/Box";
|
|
4
|
-
import Card from "@mui/material/Card";
|
|
5
|
-
import Avatar from "@mui/material/Avatar";
|
|
6
|
-
import styled from "@mui/material/styles/styled";
|
|
7
|
-
import { MdDone as Done } from "react-icons/md";
|
|
8
|
-
// CUSTOM ICON COMPONENTS
|
|
9
|
-
import Delivery from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/delivery";
|
|
10
|
-
import PackageBox from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/package-box";
|
|
11
|
-
import TruckFilled from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/truck-filled";
|
|
12
|
-
// GLOBAL CUSTOM COMPONENTS
|
|
13
|
-
import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
14
1
|
import {
|
|
15
2
|
FlexBetween,
|
|
16
3
|
FlexBox,
|
|
17
4
|
} from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
|
|
5
|
+
// GLOBAL CUSTOM COMPONENTS
|
|
6
|
+
import { Paragraph } from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
7
|
+
// CUSTOM ICON COMPONENTS
|
|
8
|
+
import Delivery from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/delivery";
|
|
9
|
+
import PackageBox from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/package-box";
|
|
10
|
+
import TruckFilled from "@evenicanpm/storefront-core/src/pages-v2/account/orders/icons/truck-filled";
|
|
11
|
+
import Avatar from "@mui/material/Avatar";
|
|
12
|
+
import Box from "@mui/material/Box";
|
|
13
|
+
import Card from "@mui/material/Card";
|
|
14
|
+
import styled from "@mui/material/styles/styled";
|
|
15
|
+
import { useTranslations } from "next-intl";
|
|
16
|
+
import { createContext, Fragment, useContext } from "react";
|
|
17
|
+
import { MdDone as Done } from "react-icons/md";
|
|
18
18
|
|
|
19
19
|
// STYLED COMPONENTS
|
|
20
20
|
const StyledFlexbox = styled(FlexBetween)(({ theme }) => ({
|
|
@@ -85,7 +85,7 @@ OrderProgress.Steps = () => {
|
|
|
85
85
|
return (
|
|
86
86
|
<StyledFlexbox>
|
|
87
87
|
{stepIcons.map((Icon, index) => (
|
|
88
|
-
<Fragment key={index}>
|
|
88
|
+
<Fragment key={`step-${index + 1}`}>
|
|
89
89
|
<Box position="relative">
|
|
90
90
|
<Avatar
|
|
91
91
|
alt="step"
|
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import
|
|
2
|
-
import Box from "@mui/material/Box";
|
|
3
|
-
import Chip from "@mui/material/Chip";
|
|
4
|
-
import IconButton from "@mui/material/IconButton";
|
|
5
|
-
import { MdEast as East } from "react-icons/md";
|
|
6
|
-
import { ChipProps } from "@mui/material";
|
|
7
|
-
import { format } from "date-fns";
|
|
1
|
+
import type { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
|
|
8
2
|
import {
|
|
9
3
|
H6,
|
|
10
4
|
Paragraph,
|
|
11
5
|
} from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
12
|
-
import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
|
|
13
6
|
import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
|
|
14
|
-
import
|
|
15
|
-
import
|
|
7
|
+
import TableRow from "@evenicanpm/storefront-core/src/pages-v2/account/table-row";
|
|
8
|
+
import type { ChipProps } from "@mui/material";
|
|
9
|
+
import Box from "@mui/material/Box";
|
|
10
|
+
import Chip from "@mui/material/Chip";
|
|
11
|
+
import IconButton from "@mui/material/IconButton";
|
|
12
|
+
import { format } from "date-fns";
|
|
13
|
+
import Link from "next/link";
|
|
14
|
+
import type React from "react";
|
|
15
|
+
import { createContext, useContext } from "react";
|
|
16
|
+
import { MdEast as East } from "react-icons/md";
|
|
16
17
|
|
|
17
18
|
type Props = { order: SalesOrder };
|
|
18
19
|
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
import
|
|
2
|
-
import Card from "@mui/material/Card";
|
|
3
|
-
import Divider from "@mui/material/Divider";
|
|
4
|
-
import { useTranslations } from "next-intl";
|
|
1
|
+
import type { SalesOrder } from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
|
|
5
2
|
import { FlexBetween } from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
|
|
6
3
|
import {
|
|
7
4
|
H5,
|
|
@@ -9,8 +6,12 @@ import {
|
|
|
9
6
|
Paragraph,
|
|
10
7
|
} from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
11
8
|
import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
|
|
12
|
-
import
|
|
13
|
-
import
|
|
9
|
+
import Card from "@mui/material/Card";
|
|
10
|
+
import Divider from "@mui/material/Divider";
|
|
11
|
+
import Grid from "@mui/material/Grid2";
|
|
12
|
+
import { useTranslations } from "next-intl";
|
|
13
|
+
import type React from "react";
|
|
14
|
+
import { createContext, useContext } from "react";
|
|
14
15
|
|
|
15
16
|
type Props = { order: SalesOrder };
|
|
16
17
|
|
|
@@ -1,27 +1,28 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import type {
|
|
2
|
+
SalesLine,
|
|
3
|
+
SalesOrder,
|
|
4
|
+
} from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
|
|
5
|
+
import {
|
|
6
|
+
FlexBetween,
|
|
7
|
+
FlexBox,
|
|
8
|
+
} from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
|
|
8
9
|
import {
|
|
9
10
|
H6,
|
|
10
11
|
Paragraph,
|
|
11
12
|
Span,
|
|
12
13
|
} from "@evenicanpm/storefront-core/src/components-v2/Typography";
|
|
13
|
-
import
|
|
14
|
-
FlexBetween,
|
|
15
|
-
FlexBox,
|
|
16
|
-
} from "@evenicanpm/storefront-core/src/components-v2/flex-box/index";
|
|
14
|
+
import buildDetailUrl from "@evenicanpm/storefront-core/src/lib/build-detail-url";
|
|
17
15
|
import useCurrencyFormatter from "@evenicanpm/storefront-core/src/lib/currency-formatter";
|
|
18
|
-
import {
|
|
19
|
-
SalesLine,
|
|
20
|
-
SalesOrder,
|
|
21
|
-
} from "@evenicanpm/storefront-core/src/api-manager/schemas/order.schema";
|
|
22
16
|
import { ProductDimensionType } from "@msdyn365-commerce/retail-proxy";
|
|
23
|
-
import
|
|
24
|
-
import
|
|
17
|
+
import Avatar from "@mui/material/Avatar";
|
|
18
|
+
import Box from "@mui/material/Box";
|
|
19
|
+
import Button from "@mui/material/Button";
|
|
20
|
+
import Card from "@mui/material/Card";
|
|
21
|
+
import Grid from "@mui/material/Grid2";
|
|
22
|
+
import Link from "next/link";
|
|
23
|
+
import { useTranslations } from "next-intl";
|
|
24
|
+
import type React from "react";
|
|
25
|
+
import { createContext } from "react";
|
|
25
26
|
|
|
26
27
|
type Props = { order: SalesOrder };
|
|
27
28
|
|
|
@@ -140,7 +141,7 @@ OrderedProducts.Dimensions = ({ item }: { item: SalesLine }) => {
|
|
|
140
141
|
return (
|
|
141
142
|
<Grid size={{ xs: 8, sm: 4 }}>
|
|
142
143
|
{item.Product.Dimensions.map((dim, i) => (
|
|
143
|
-
<Paragraph key={i} paddingLeft={"15px"}>
|
|
144
|
+
<Paragraph key={`product-dim-${i + 1}`} paddingLeft={"15px"}>
|
|
144
145
|
<Span>{ProductDimensionType[dim.DimensionTypeValue || 0]}:</Span>
|
|
145
146
|
<Span sx={{ ml: 1 }}>{dim.DimensionValue?.Value}</Span>
|
|
146
147
|
</Paragraph>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { render, screen, fireEvent, waitFor } from "@testing-library/react";
|
|
2
|
-
import { vi } from "vitest";
|
|
3
1
|
import ProfileButton from "@evenicanpm/storefront-core/src/pages-v2/account/profile/profile-button";
|
|
4
|
-
import {
|
|
2
|
+
import { fireEvent, render, screen, waitFor } from "@testing-library/react";
|
|
3
|
+
import { vi } from "vitest";
|
|
4
|
+
import { getMsalInstance, getRequestConfig, initializeMsal } from "@/auth/msal";
|
|
5
5
|
|
|
6
6
|
vi.mock("@/auth/msal", () => ({
|
|
7
7
|
initializeMsal: vi.fn(),
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
4
|
-
import { useEffect, useState } from "react";
|
|
5
|
-
import { Button } from "@mui/material";
|
|
3
|
+
import type { RedirectRequest } from "@azure/msal-browser";
|
|
6
4
|
import T from "@evenicanpm/storefront-core/src/components-v2/T/index";
|
|
7
|
-
import {
|
|
5
|
+
import { Button } from "@mui/material";
|
|
6
|
+
import { useEffect, useState } from "react";
|
|
7
|
+
import { getMsalInstance, getRequestConfig, initializeMsal } from "@/auth/msal";
|
|
8
|
+
|
|
8
9
|
interface Props {
|
|
9
10
|
type: string;
|
|
10
11
|
path: string;
|