fix drag&drop to reorganize combos
All checks were successful
Deploy Sokko G / deploy (push) Successful in 8s
All checks were successful
Deploy Sokko G / deploy (push) Successful in 8s
This commit is contained in:
parent
7b4cfb7dc2
commit
a6d35c6e6b
8 changed files with 724 additions and 282 deletions
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue