52 lines
1.8 KiB
JavaScript
52 lines
1.8 KiB
JavaScript
export function unitAskFor(displayUnit) {
|
|
if (displayUnit === "unit") return "¿Cuántas unidades querés?";
|
|
if (displayUnit === "g") return "¿Cuántos gramos querés?";
|
|
return "¿Cuántos kilos querés?";
|
|
}
|
|
|
|
export function unitDisplay(unit) {
|
|
if (unit === "unit") return "unidades";
|
|
if (unit === "g") return "gramos";
|
|
return "kilos";
|
|
}
|
|
|
|
export function inferDefaultUnit({ name, categories }) {
|
|
const n = String(name || "").toLowerCase();
|
|
const cats = Array.isArray(categories) ? categories : [];
|
|
const hay = (re) =>
|
|
cats.some((c) => re.test(String(c?.name || "")) || re.test(String(c?.slug || ""))) || re.test(n);
|
|
if (
|
|
hay(/\b(vino|vinos|bebida|bebidas|cerveza|cervezas|gaseosa|gaseosas|whisky|ron|gin|vodka|fernet)\b/i)
|
|
) {
|
|
return "unit";
|
|
}
|
|
return "kg";
|
|
}
|
|
|
|
export function normalizeUnit(unit) {
|
|
if (!unit) return null;
|
|
const u = String(unit).toLowerCase();
|
|
if (u === "kg" || u === "kilo" || u === "kilos") return "kg";
|
|
if (u === "g" || u === "gramo" || u === "gramos") return "g";
|
|
if (u === "unidad" || u === "unidades" || u === "unit") return "unit";
|
|
return null;
|
|
}
|
|
|
|
export function resolveQuantity({ quantity, unit, displayUnit }) {
|
|
if (quantity == null || !Number.isFinite(Number(quantity)) || Number(quantity) <= 0) return null;
|
|
const q = Number(quantity);
|
|
const u = normalizeUnit(unit) || (displayUnit === "unit" ? "unit" : displayUnit === "g" ? "g" : "kg");
|
|
if (u === "unit") {
|
|
return { quantity: Math.round(q), unit: "unit", display_quantity: Math.round(q), display_unit: "unit" };
|
|
}
|
|
if (u === "g") return { quantity: Math.round(q), unit: "g", display_quantity: Math.round(q), display_unit: "g" };
|
|
// kg -> gramos enteros
|
|
return {
|
|
quantity: Math.round(q * 1000),
|
|
unit: "g",
|
|
display_unit: "kg",
|
|
display_quantity: q,
|
|
};
|
|
}
|
|
|