feat: group onboarding items by category
All checks were successful
CI / ci (push) Successful in 1m17s
CI / e2e (push) Has been skipped
CI / deploy (push) Successful in 14s

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-13 15:19:02 +02:00
parent adbc13eb15
commit 03e0fe99fa

View File

@@ -22,6 +22,18 @@ export function OnboardingItemBrowser({
const hasItems = items && items.length > 0; const hasItems = items && items.length > 0;
// Group items by category
const grouped = hasItems
? items.reduce<Record<string, typeof items>>((acc, item) => {
const cat = item.category || "Other";
const label = cat.charAt(0).toUpperCase() + cat.slice(1);
if (!acc[label]) acc[label] = [];
acc[label].push(item);
return acc;
}, {})
: {};
const categories = Object.keys(grouped);
return ( return (
<div className="flex flex-col items-center min-h-screen px-8 py-16"> <div className="flex flex-col items-center min-h-screen px-8 py-16">
<div className="max-w-5xl w-full text-center"> <div className="max-w-5xl w-full text-center">
@@ -51,23 +63,30 @@ export function OnboardingItemBrowser({
</div> </div>
)} )}
{!isLoading && hasItems && ( {!isLoading &&
<div className="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-4 mb-8"> hasItems &&
{items.map((item) => ( categories.map((cat) => (
<SelectableItemCard <div key={cat} className="mb-8">
key={item.id} <h2 className="text-lg font-semibold text-gray-900 text-left mb-3">
brand={item.brand} {cat}
model={item.model} </h2>
imageUrl={item.imageUrl} <div className="grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 gap-4">
weightGrams={item.weightGrams} {grouped[cat].map((item) => (
priceCents={item.priceCents} <SelectableItemCard
ownerCount={item.ownerCount} key={item.id}
selected={selectedItemIds.has(item.id)} brand={item.brand}
onClick={() => onToggleItem(item.id)} model={item.model}
/> imageUrl={item.imageUrl}
))} weightGrams={item.weightGrams}
</div> priceCents={item.priceCents}
)} ownerCount={item.ownerCount}
selected={selectedItemIds.has(item.id)}
onClick={() => onToggleItem(item.id)}
/>
))}
</div>
</div>
))}
<div className="flex items-center justify-center gap-4"> <div className="flex items-center justify-center gap-4">
{hasItems && selectedItemIds.size > 0 && ( {hasItems && selectedItemIds.size > 0 && (