import type { Category, Partner } from '~/types/partners' import type { Listing } from 'common/marketplace-client' import Image from 'next/image' import Link from 'next/link' export default function TileGrid({ partners, hideCategories = false, }: { partners: Partner[] hideCategories?: boolean }) { const partnersByCategory: { [slug: string]: { category: Category; partners: Partner[] } } = {} partners.forEach((p) => // TODO: This will result in duplicate listings if a partner appears in multiple categories. Consider choosing just one. p.categories.forEach((category) => { if (!partnersByCategory[category.slug]) { partnersByCategory[category.slug] = { category, partners: [] } } partnersByCategory[category.slug].partners.push(p) }) ) const featuredPartners = partners .filter((p) => p.featured) .toSorted((a, b) => a.title.localeCompare(b.title)) return ( <> {featuredPartners.length > 0 ? ( ) : null} {Object.keys(partnersByCategory) .toSorted() .map((slug) => { const partners = partnersByCategory[slug].partners.toSorted((a, b) => a.title.localeCompare(b.title) ) return (
{!hideCategories &&

{partnersByCategory[slug].category.name}

}
{partners.map((p) => (
{p.title}

{p.title}

{p.description}

))}
) })} ) }