Skip to content

Commit a2e290f

Browse files
authored
Merge pull request #2791 from bigcommerce/miguel/additional-products
fix: order of `additionalProducts` in carousel
2 parents 7fd9b69 + bd30ed3 commit a2e290f

File tree

3 files changed

+21
-6
lines changed

3 files changed

+21
-6
lines changed

.changeset/heavy-hotels-lie.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"@bigcommerce/catalyst-makeswift": patch
3+
---
4+
5+
Fix sort order of `additionalProducts` prop in `ProductsCarousel` Makeswift component.

core/lib/makeswift/utils/use-bc-product-to-vibes-product/use-bc-product-to-vibes-product.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ export const BcProductSchema = z.object({
3232

3333
export type BcProductSchema = z.infer<typeof BcProductSchema>;
3434

35+
export type { Product };
36+
3537
export function useBcProductToVibesProduct(): (product: BcProductSchema) => Product {
3638
const format = useFormatter();
3739

core/lib/makeswift/utils/use-products.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { z } from 'zod';
55

66
import {
77
BcProductSchema,
8+
Product,
89
useBcProductToVibesProduct,
910
} from './use-bc-product-to-vibes-product/use-bc-product-to-vibes-product';
1011

@@ -23,7 +24,10 @@ interface Props {
2324
additionalProductIds: string[];
2425
}
2526

26-
export function useProducts({ collection, collectionLimit = 20, additionalProductIds }: Props) {
27+
export function useProducts({ collection, collectionLimit = 20, additionalProductIds }: Props): {
28+
products: Product[] | null;
29+
isLoading: boolean;
30+
} {
2731
const bcProductToVibesProduct = useBcProductToVibesProduct();
2832
const locale = useLocale();
2933

@@ -43,13 +47,17 @@ export function useProducts({ collection, collectionLimit = 20, additionalProduc
4347
additionalProductIds.length ? additionalProductsUrl : null,
4448
fetcher,
4549
);
50+
const additionalProducts = useMemo(
51+
() =>
52+
additionalProductIds
53+
.map((id) => additionalData?.products.find((product) => product.entityId.toString() === id))
54+
.filter((product) => product != null),
55+
[additionalData, additionalProductIds],
56+
);
4657

4758
const combinedProducts = useMemo(
48-
() => [
49-
...(collectionData?.products.slice(0, collectionLimit) ?? []),
50-
...(additionalData?.products ?? []),
51-
],
52-
[collectionData, additionalData, collectionLimit],
59+
() => [...(collectionData?.products.slice(0, collectionLimit) ?? []), ...additionalProducts],
60+
[collectionData, additionalProducts, collectionLimit],
5361
);
5462

5563
const isLoading = isCollectionLoading || isAdditionalLoading;

0 commit comments

Comments
 (0)