fix drag&drop to reorganize combos
All checks were successful
Deploy Sokko G / deploy (push) Successful in 8s

This commit is contained in:
Shinuwa 2026-07-31 16:47:21 +02:00
parent 7b4cfb7dc2
commit a6d35c6e6b
8 changed files with 724 additions and 282 deletions

View file

@ -377,6 +377,7 @@ function normalizeComboSteps(inputs) {
function normalizeCombo(combo) {
const name = String(combo?.name || "").trim().slice(0, 80);
const category = String(combo?.category || "").trim().slice(0, 80);
const device = COMBO_DEVICES.has(combo?.device) ? combo.device : "";
const inputs = normalizeComboSteps(combo?.inputs);
if (!name && !inputs.length) return null;
@ -385,27 +386,32 @@ function normalizeCombo(combo) {
name: name || "Combo",
inputs
};
if (category) normalized.category = category;
if (device) normalized.device = device;
return normalized;
}
function normalizeComboCategory(category) {
const title = String(category?.title || "").trim().slice(0, 80);
const combos = (Array.isArray(category?.combos) ? category.combos : []).map(normalizeCombo).filter(Boolean);
if (!combos.length) return null;
return {
id: category?.id || uid("section"),
title: title || "Catégorie",
collapsed: category?.collapsed === true,
combos
};
function normalizeComboCategoryOrder(value, combos) {
const categories = combos.map((combo) => combo.category).filter(Boolean);
const orderedCategories = (Array.isArray(value) ? value : [])
.map((category) => String(category || "").trim().slice(0, 80))
.filter((category, index, order) => category && categories.includes(category) && order.indexOf(category) === index);
return [
...orderedCategories,
...categories.filter((category) => !orderedCategories.includes(category))
];
}
export function normalizeCombosData(data) {
const combos = (Array.isArray(data?.combos) ? data.combos : []).map(normalizeCombo).filter(Boolean);
const categoryOrder = normalizeComboCategoryOrder(data?.categoryOrder, combos);
return {
device: COMBO_DEVICES.has(data?.device) ? data.device : "playstation",
combos: (Array.isArray(data?.combos) ? data.combos : []).map(normalizeCombo).filter(Boolean),
categories: (Array.isArray(data?.categories) ? data.categories : []).map(normalizeComboCategory).filter(Boolean)
combos,
collapsedCategories: (Array.isArray(data?.collapsedCategories) ? data.collapsedCategories : [])
.map((category) => String(category || "").trim().slice(0, 80))
.filter((category, index, categories) => category && categoryOrder.includes(category) && categories.indexOf(category) === index),
categoryOrder
};
}
@ -759,31 +765,16 @@ export function compactModuleDataForStorage(type, value) {
name: combo.name,
inputs: combo.inputs
};
if (combo.category) compactCombo.category = combo.category;
if (combo.device) compactCombo.device = combo.device;
return compactCombo;
}),
categories: normalized.categories.map((category) => {
const compactCategory = {
id: category.id,
title: category.title,
combos: category.combos.map((combo) => {
const compactCombo = {
id: combo.id,
name: combo.name,
inputs: combo.inputs
};
if (combo.device) compactCombo.device = combo.device;
return compactCombo;
})
};
if (category.collapsed) compactCategory.collapsed = true;
return compactCategory;
})
};
if (normalized.device !== "playstation") compact.device = normalized.device;
if (normalized.collapsedCategories.length) compact.collapsedCategories = normalized.collapsedCategories;
if (normalized.categoryOrder.length) compact.categoryOrder = normalized.categoryOrder;
if (!compact.combos.length) delete compact.combos;
if (!compact.categories.length) delete compact.categories;
return compact.combos || compact.categories ? compact : null;
return compact.combos ? compact : null;
}
if (type === "calculator") {
const normalized = normalizeCalculatorData(value);
@ -929,13 +920,8 @@ function remapModuleDataForExport(type, data, nextId) {
const remapped = {};
if (compact.device) remapped.device = compact.device;
if (compact.combos) remapped.combos = compact.combos.map((combo) => ({ ...combo, id: nextId("combo") }));
if (compact.categories) {
remapped.categories = compact.categories.map((category) => ({
...category,
id: nextId("section"),
combos: category.combos.map((combo) => ({ ...combo, id: nextId("combo") }))
}));
}
if (compact.collapsedCategories) remapped.collapsedCategories = compact.collapsedCategories;
if (compact.categoryOrder) remapped.categoryOrder = compact.categoryOrder;
return remapped;
}