export function toTitleWords(value) { if (!value) return ''; return value .toString() .split('-') .map((part) => (part ? part[0].toUpperCase() + part.slice(1) : part)) .join(' '); } export function formatStatusLabel(status, lentTo = '') { if (!status) return ''; if (status === 'lent-to') { const name = lentTo?.trim(); return name ? `Lent To ${name}` : 'Lent To'; } return toTitleWords(status); } export function formatFilterLabel(value) { if (!value) return ''; if (value === 'all') return 'All'; return toTitleWords(value); } export function normalizeQuantity(value, fallback = 1) { const parsed = Number.parseInt(`${value ?? ''}`, 10); if (Number.isFinite(parsed) && parsed > 0) return parsed; return fallback; } export function extractLegacyQuantityFromName(rawName = '') { const name = `${rawName || ''}`.trim(); if (!name) { return { matched: false, name: '', quantity: 1 }; } let matched = name.match(/^(\d+)\s*[xX×]\s*(.+)$/); if (matched) { const quantity = normalizeQuantity(matched[1], 1); const cleanName = (matched[2] || '').trim() || name; return { matched: true, name: cleanName, quantity }; } matched = name.match(/^(.+?)\s+(\d+)\s*[xX×]$/); if (matched) { const quantity = normalizeQuantity(matched[2], 1); const cleanName = (matched[1] || '').trim() || name; return { matched: true, name: cleanName, quantity }; } return { matched: false, name, quantity: 1 }; } export function normalizeNameAndQuantity(rawName = '', rawQuantity = null) { const explicitQuantity = normalizeQuantity(rawQuantity, 0); const legacy = extractLegacyQuantityFromName(rawName); if (legacy.matched && explicitQuantity <= 1) { return { name: legacy.name, quantity: normalizeQuantity(legacy.quantity, 1), }; } const quantity = explicitQuantity > 0 ? explicitQuantity : legacy.quantity; const cleanName = `${rawName || ''}`.trim() || legacy.name; return { name: cleanName, quantity: normalizeQuantity(quantity, 1), }; } export function formatItemLabel(name = '', quantity = 1) { const cleanName = `${name || ''}`.trim(); const normalizedQuantity = normalizeQuantity(quantity, 1); if (!cleanName) { return normalizedQuantity > 1 ? `${normalizedQuantity}x item` : 'item'; } return normalizedQuantity > 1 ? `${normalizedQuantity}x ${cleanName}` : cleanName; }