Full UI 180 & Overall improvements
This commit is contained in:
@@ -21,3 +21,63 @@ export function formatFilterLabel(value) {
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user