Files
astroplate/src/lib/utils/similarItems.ts
T
2023-12-03 15:28:12 +06:00

38 lines
940 B
TypeScript

// similar products
const similarItems = (currentItem: any, allItems: any[]) => {
let categories: string[] = [];
let tags: string[] = [];
// set categories
if (currentItem.data.categories.length > 0) {
categories = currentItem.data.categories;
}
// set tags
if (currentItem.data.tags.length > 0) {
tags = currentItem.data.tags;
}
// filter by categories
const filterByCategories = allItems.filter((item: any) =>
categories.find((category) => item.data.categories.includes(category)),
);
// filter by tags
const filterByTags = allItems.filter((item: any) =>
tags.find((tag) => item.data.tags.includes(tag)),
);
// merged after filter
const mergedItems = [...new Set([...filterByCategories, ...filterByTags])];
// filter by slug
const filterBySlug = mergedItems.filter(
(product) => product.slug !== currentItem.slug,
);
return filterBySlug;
};
export default similarItems;