diff --git a/src/util/products.ts b/src/util/products.ts index 2efa0f1f6a244f7..321ac9b4daed05f 100644 --- a/src/util/products.ts +++ b/src/util/products.ts @@ -3,12 +3,34 @@ import { getCollection } from "astro:content"; export const products = await getCollection("products"); export const productsByGroup = Object.entries( - Object.groupBy( - products.filter((product) => Boolean(product.data.product.group)), - (product) => product.data.product.group, - ), + products + .filter((product) => Boolean(product.data.product.group)) + .reduce( + (groups, product) => { + const primaryGroup = product.data.product.group; + const additionalGroups = product.data.product.additional_groups ?? []; + const allGroups = [primaryGroup, ...additionalGroups]; + + for (const group of allGroups) { + if (!groups[group]) { + groups[group] = []; + } + groups[group].push(product); + } + + return groups; + }, + {} as Record, + ), ); export const groups = [ - ...new Set(products.flatMap((product) => product.data.product.group ?? [])), + ...new Set( + products.flatMap((product) => + [ + product.data.product.group, + ...(product.data.product.additional_groups ?? []), + ].filter(Boolean), + ), + ), ].sort();