/** * Group deck card rows for the deck detail view. * @param {Array|undefined} cards * @param {'type'|'cmc'|'color'|'rarity'|string} groupBy */ export function groupDeckCards(cards, groupBy) { if (!cards) { return {}; } return cards.reduce((groups, card) => { let key; switch (groupBy) { case 'type': key = card.card_type ? card.card_type.split(' — ')[0] : 'Unknown'; break; case 'cmc': key = `${card.cmc || 0} Mana`; break; case 'color': try { const colors = card.colors ? JSON.parse(card.colors) : []; key = colors.length === 0 ? 'Colorless' : colors.join(''); } catch { key = 'Colorless'; } break; case 'rarity': key = card.rarity || 'Unknown'; break; default: key = 'All Cards'; } if (!groups[key]) { groups[key] = []; } groups[key].push(card); return groups; }, {}); }