export const equivalentUnits = { 'kg': { 'kgs': 1, 'kilograms': 1, 'kilogram': 1, 'g': 1000, 'gram': 1000, 'grams': 1000, 'lb': 2.20462, 'lbs': 2.20462, 'pound': 2.20462, 'pounds': 2.20462, }, 'litres': { 'l': 1, 'liter': 1, 'litre': 1, 'ml': 1000, 'milliliters': 1000, 'milliliter': 1000, 'fl oz': 33.814, 'fluid ounce': 33.814, 'fluid ounces': 33.814, 'cup': 4.22675, 'cups': 4.22675, 'tbsp': 67.628, 'tablespoon': 67.628, 'tablespoons': 67.628, 'tsp': 202.884, 'teaspoon': 202.884, 'teaspoons': 202.884, 'pt': 2.11338, 'pint': 2.11338, 'pints': 2.11338, 'qt': 1.05669, 'quart': 1.05669, 'quarts': 1.05669, 'gal': 0.264172, 'gallon': 0.264172, 'gallons': 0.264172, 'oz': 35.1951, 'ounce': 35.1951, }, 'items': { 'item': 1, 'items': 1, 'pcs': 1, 'piece': 1, 'pieces': 1, 'florets': 8, // Broccoli 'head': 1, // Broccoli 'heads': 1, // Broccoli 'slice': 10, // Bread 'slices': 10, // Bread 'loaf': 1, // Bread 'loaves': 1, // Bread 'cloves': 8, // Garlic 'bulb': 1, // Garlic 'bulbs': 1, // Garlic 'stalk': 1, // Celery 'stalks': 1, // Celery 'bunch': 1, // Cilantro 'bunches': 1, // Cilantro 'sprig': 1, // Cilantro 'sprigs': 1, // Cilantro 'cans': 1, // Canned goods 'can': 1, // Canned goods 'pack': 1, // Packaged goods 'packs': 1, // Packaged goods 'package': 1, // Packaged goods 'packages': 1, // Packaged goods 'container': 1, // Packaged goods 'containers': 1, // Packaged goods }, } function getBaseUnit(unit) { for (const unitType in equivalentUnits) { if (unit in equivalentUnits[unitType]) { return unitType; } } return null; } export function getConversionFactor(unit) { if (unit in equivalentUnits) { return { unit, factor: 1 }; } const unitLower = unit.toLowerCase(); if (unitLower in equivalentUnits) { return { unit: unitLower, factor: 1 }; } const baseUnit = getBaseUnit(unit); if (baseUnit) { return { unit: baseUnit, factor: equivalentUnits[baseUnit][unit], }; } const baseUnitLower = getBaseUnit(unitLower); if (baseUnitLower) { return { unit: baseUnitLower, factor: equivalentUnits[baseUnitLower][unitLower], }; } return null; } export function calculateTotals(quantityList) { const totals = {}; for (const quantity of quantityList) { const baseUnit = getConversionFactor(quantity.unit) ?? { unit: quantity.unit, factor: 1 }; const factor = baseUnit.factor; const unit = baseUnit.unit; if (!totals[unit]) { totals[unit] = 0; } totals[unit] += quantity.quantity / factor; } return Object.keys(totals).map(unit => ({ unit, quantity: totals[unit] })); }