Add manual toolbox module ordering
All checks were successful
Deploy Sokko G / deploy (push) Successful in 7s
All checks were successful
Deploy Sokko G / deploy (push) Successful in 7s
This commit is contained in:
parent
7140012a98
commit
e043d31fa8
10 changed files with 321 additions and 128 deletions
|
|
@ -552,6 +552,15 @@ export function validateLibraryData(payload) {
|
|||
moduleIds.add(module.id);
|
||||
assert.equal(typeof payload.modules[module.id], "object", `library.modules.${module.id} must be an object`);
|
||||
});
|
||||
assert.deepEqual(payload.toolbox.moduleOrder?.one, [...moduleIds], "library.toolbox.moduleOrder.one must match toolbox modules");
|
||||
assert.ok(Array.isArray(payload.toolbox.moduleOrder?.two), "library.toolbox.moduleOrder.two must be an array");
|
||||
assert.equal(payload.toolbox.moduleOrder.two.length, 2, "library.toolbox.moduleOrder.two must contain 2 columns");
|
||||
payload.toolbox.moduleOrder.two.forEach((column, index) => {
|
||||
assert.ok(Array.isArray(column), `library.toolbox.moduleOrder.two[${index}] must be an array`);
|
||||
});
|
||||
const twoColumnIds = payload.toolbox.moduleOrder.two.flat();
|
||||
assert.deepEqual(new Set(twoColumnIds), moduleIds, "library.toolbox.moduleOrder.two must contain every module exactly once");
|
||||
assert.equal(twoColumnIds.length, moduleIds.size, "library.toolbox.moduleOrder.two must not contain duplicate modules");
|
||||
|
||||
["notepad", "checklist", "images", "links", "counters", "combos", "calculator", "table", "timer", "taskPlanner", "equipmentPlanner", "imageAnnotation"].forEach((type) => {
|
||||
assert.ok(payload.toolbox.modules.some((module) => module.type === type), `library must include a ${type} example`);
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import assert from "node:assert/strict";
|
|||
import { evaluateTableCell } from "../website/src/features/toolboxes/modules/tableFormulaEngine.js";
|
||||
import { exportModuleText, importModuleText, parseColonImportLines } from "../website/src/features/toolboxes/modules/textImport.js";
|
||||
import { getTimePatternRecurrenceMs, getTimePatternTargetMs } from "../website/src/features/toolboxes/modules/timerUtils.js";
|
||||
import { compactModuleDataForStorage, createToolboxExportPayload, normalizeCalculatorData, normalizeChecklistData, normalizeCombosData, normalizeCountersData, normalizeEquipmentPlannerData, normalizeImageAnnotationData, normalizeLinksData, normalizeNotepadData, normalizeTableData, normalizeTaskPlannerData, normalizeTimerData, normalizeUrl, summarizeEquipmentPlannerData } from "../website/src/features/toolboxes/storage/toolboxStorage.js";
|
||||
import { compactModuleDataForStorage, createToolboxExportPayload, normalizeCalculatorData, normalizeChecklistData, normalizeCombosData, normalizeCountersData, normalizeEquipmentPlannerData, normalizeImageAnnotationData, normalizeLinksData, normalizeModuleOrder, normalizeNotepadData, normalizeTableData, normalizeTaskPlannerData, normalizeTimerData, normalizeToolbox, normalizeUrl, summarizeEquipmentPlannerData } from "../website/src/features/toolboxes/storage/toolboxStorage.js";
|
||||
import { applyGroupedReorderOperation, completeGroupOrder, getBoundaryItemId, getGroupedEntries, moveGroupOrder, moveGroupOrderToEnd, moveGroupOrderToStart, moveItem, moveItemGroup } from "../website/src/hooks/useGroupedReorder.js";
|
||||
|
||||
function createTextImportContext() {
|
||||
|
|
@ -470,6 +470,48 @@ test("equipment planner export remaps nested ids and socket links", () => {
|
|||
assert.equal(exported.equipments[0].socketLinks[0].toSocketItemId, exported.equipments[0].socketItems[1].id);
|
||||
});
|
||||
|
||||
test("toolbox module order normalizes one and two column layouts", () => {
|
||||
const modules = [{ id: "a" }, { id: "b" }, { id: "c" }, { id: "d" }];
|
||||
|
||||
assert.deepEqual(normalizeModuleOrder(null, modules), {
|
||||
one: ["a", "b", "c", "d"],
|
||||
two: [["a", "b"], ["c", "d"]]
|
||||
});
|
||||
assert.deepEqual(normalizeModuleOrder({
|
||||
one: ["c", "x", "c"],
|
||||
two: [["d", "d", "x"], ["b"]]
|
||||
}, modules), {
|
||||
one: ["c", "a", "b", "d"],
|
||||
two: [["d", "a"], ["b", "c"]]
|
||||
});
|
||||
assert.deepEqual(normalizeModuleOrder({
|
||||
one: ["a", "b", "c", "d"],
|
||||
two: [["a", "b", "c", "d"], []]
|
||||
}, modules).two, [["a", "b", "c", "d"], []]);
|
||||
});
|
||||
|
||||
test("toolbox export remaps module order ids", () => {
|
||||
const payload = createToolboxExportPayload(
|
||||
{
|
||||
id: "toolbox1",
|
||||
name: "Order",
|
||||
modules: [{ id: "module1", type: "notepad" }, { id: "module2", type: "links" }, { id: "module3", type: "counters" }],
|
||||
moduleOrder: {
|
||||
one: ["module3", "module1", "module2"],
|
||||
two: [["module2"], ["module3", "module1"]]
|
||||
}
|
||||
},
|
||||
{}
|
||||
);
|
||||
|
||||
assert.deepEqual(payload.toolbox.modules.map((module) => module.id), ["m1", "m2", "m3"]);
|
||||
assert.deepEqual(payload.toolbox.moduleOrder, {
|
||||
one: ["m3", "m1", "m2"],
|
||||
two: [["m2"], ["m3", "m1"]]
|
||||
});
|
||||
assert.deepEqual(normalizeToolbox(payload.toolbox).moduleOrder, payload.toolbox.moduleOrder);
|
||||
});
|
||||
|
||||
test("grouped reorder helpers group flat items and complete group order", () => {
|
||||
const items = [
|
||||
{ id: "a", category: "" },
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue