feat: add coffee image display in subscription items and optimize status rendering

This commit is contained in:
seaznCode 2026-02-20 21:50:34 +01:00
parent 7526e5c2e5
commit ea12c2ec0b

View File

@ -91,6 +91,16 @@ export default function ProfileSubscriptionsPage() {
})
}, [subscriptions])
const coffeeImageById = React.useMemo(() => {
const map: Record<string, string> = {}
coffees.forEach((coffee) => {
if (coffee.image) {
map[String(coffee.id)] = coffee.image
}
})
return map
}, [coffees])
if (!hasHydrated || !isAuthReady || !user) {
return (
<div className="min-h-screen flex items-center justify-center">
@ -271,9 +281,11 @@ export default function ProfileSubscriptionsPage() {
}`}
>
<div className="flex items-start justify-between gap-2">
<p className="text-sm font-semibold text-gray-900 truncate">
{subscription.name || `Subscription #${subscription.id}`}
</p>
<div className="min-w-0">
<p className="text-sm font-semibold text-gray-900 truncate">
{subscription.name || `Subscription #${subscription.id}`}
</p>
</div>
<span
className={`inline-flex items-center rounded-full px-2 py-0.5 text-[10px] font-medium ${statusBadgeClass(subscriptionStatus)}`}
>
@ -397,13 +409,29 @@ export default function ProfileSubscriptionsPage() {
</div>
) : (
<div className="mt-4 grid grid-cols-1 md:grid-cols-2 gap-3">
{includedItems.map((item, index) => (
<div key={`${item.coffeeId || 'coffee'}-${index}`} className="rounded-md bg-white/80 border border-gray-200 p-3">
<p className="text-sm font-semibold text-gray-900">{item.coffeeName || `Coffee #${item.coffeeId || index + 1}`}</p>
<p className="text-xs text-gray-600 mt-1">Coffee ID: {item.coffeeId || '—'}</p>
<p className="text-xs text-gray-600">Packs included: {Number(item.quantity) || 0}</p>
</div>
))}
{includedItems.map((item, index) => {
const imageUrl = item.coffeeId ? coffeeImageById[String(item.coffeeId)] : ''
return (
<div key={`${item.coffeeId || 'coffee'}-${index}`} className="rounded-md bg-white/80 border border-gray-200 p-3">
<div className="flex items-start justify-between gap-3">
<div className="min-w-0">
<p className="text-sm font-semibold text-gray-900">{item.coffeeName || `Coffee #${item.coffeeId || index + 1}`}</p>
<p className="text-xs text-gray-600 mt-1">Coffee ID: {item.coffeeId || '—'}</p>
<p className="text-xs text-gray-600">Packs included: {Number(item.quantity) || 0}</p>
</div>
{imageUrl ? (
<img
src={imageUrl}
alt={item.coffeeName || `Coffee #${item.coffeeId || index + 1}`}
className="h-14 w-14 rounded-md object-cover border border-gray-200 shrink-0"
/>
) : (
<div className="h-14 w-14 rounded-md bg-gray-100 border border-gray-200 shrink-0" />
)}
</div>
</div>
)
})}
</div>
)}