Normalize inventory and alerts data structure in updateStateFromBridge function

This commit is contained in:
MayaTheShy
2026-03-21 17:42:49 -04:00
parent a16039e920
commit 0ce63bacd7

View File

@@ -285,11 +285,31 @@ function updateStateFromBridge(data) {
if (data.cache) {
// Normalize itemList: Lua sends { name, total }, frontend expects { name, count }
const rawItems = data.cache.itemList || [];
const normalizedItems = rawItems.map(item => ({
name: item.name,
const normalizedItems = Array.isArray(rawItems) ? rawItems.map(item => ({
name: item.name || '',
count: item.total !== undefined ? item.total : (item.count || 0),
displayName: item.displayName || item.name,
}));
displayName: item.displayName || item.name || '',
})) : [];
// Normalize furnaceStatus: Lua sends array of { name, type, input, fuel, output, active }
// Frontend expects object { furnaceName: { active, input, fuel, output } }
const rawFurnaces = data.cache.furnaceStatus || [];
let normalizedFurnaces = {};
if (Array.isArray(rawFurnaces)) {
rawFurnaces.forEach(f => {
if (f && f.name) {
normalizedFurnaces[f.name] = {
active: f.active || false,
type: f.type || 'minecraft:furnace',
input: f.input || null,
fuel: f.fuel || null,
output: f.output || null,
};
}
});
} else if (typeof rawFurnaces === 'object') {
normalizedFurnaces = rawFurnaces;
}
inventoryState = {
itemList: normalizedItems,
@@ -302,16 +322,49 @@ function updateStateFromBridge(data) {
dropperOk: data.cache.dropperOk || false,
barrelOk: data.cache.barrelOk || false,
furnaceCount: data.cache.furnaceCount || 0,
furnaceStatus: data.cache.furnaceStatus || {},
furnaceStatus: normalizedFurnaces,
};
}
if (data.activity !== undefined) activityState = data.activity;
if (data.alerts !== undefined) alertsState = data.alerts;
if (data.activity !== undefined) activityState = data.activity || {};
// Normalize alerts: Lua sends [{ label, current, min }] (only triggered ones)
// Frontend expects [{ item, triggered, current, threshold }]
if (data.alerts !== undefined) {
const rawAlerts = data.alerts || [];
alertsState = Array.isArray(rawAlerts) ? rawAlerts.map(a => ({
item: a.name || a.item || a.label || '',
triggered: true,
current: a.current || 0,
threshold: a.min || a.threshold || 0,
})) : [];
}
if (data.smeltingPaused !== undefined) smeltingPaused = data.smeltingPaused;
if (data.disabledRecipes !== undefined) disabledRecipes = data.disabledRecipes;
if (data.smeltable !== undefined) smeltableRecipes = data.smeltable;
if (data.craftable !== undefined) craftableRecipes = data.craftable;
if (data.disabledRecipes !== undefined) disabledRecipes = data.disabledRecipes || {};
if (data.smeltable !== undefined) smeltableRecipes = data.smeltable || {};
// Normalize craftable: Lua sends { output, count, grid } (grid = flat array of 9)
// Frontend expects { output, count, slots } (slots = object { slotIdx: itemName })
if (data.craftable !== undefined) {
const rawCraftable = data.craftable || [];
craftableRecipes = Array.isArray(rawCraftable) ? rawCraftable.map(recipe => {
const slots = {};
if (recipe.grid && Array.isArray(recipe.grid)) {
recipe.grid.forEach((item, idx) => {
if (item) slots[idx + 1] = item;
});
} else if (recipe.slots) {
Object.assign(slots, recipe.slots);
}
return {
output: recipe.output || '',
count: recipe.count || 1,
slots,
};
}) : [];
}
if (data.craftTurtleOk !== undefined) craftTurtleOk = data.craftTurtleOk;
lastUpdate = Date.now();