feat: refactor sidebar to nested draggable lists with long-press gesture arbitration

This commit is contained in:
Mohamed Boudra
2026-03-04 10:27:01 +07:00
parent bf1cded8a1
commit 3c066f5dd9
14 changed files with 830 additions and 327 deletions
@@ -0,0 +1,53 @@
import { describe, expect, it } from "vitest";
import { hasVisibleOrderChanged, mergeWithRemainder } from "./sidebar-reorder";
describe("hasVisibleOrderChanged", () => {
it("returns false when visible order is unchanged", () => {
expect(
hasVisibleOrderChanged({
currentOrder: ["a", "b", "c", "d"],
reorderedVisibleKeys: ["a", "b", "c"],
})
).toBe(false);
});
it("returns true when visible items are reordered", () => {
expect(
hasVisibleOrderChanged({
currentOrder: ["a", "b", "c", "d"],
reorderedVisibleKeys: ["b", "a", "c"],
})
).toBe(true);
});
it("returns true when a visible key is missing from current order", () => {
expect(
hasVisibleOrderChanged({
currentOrder: ["a", "b"],
reorderedVisibleKeys: ["a", "c"],
})
).toBe(true);
});
});
describe("mergeWithRemainder", () => {
it("appends non-visible stored keys after reordered visible keys", () => {
expect(
mergeWithRemainder({
currentOrder: ["a", "x", "b", "y"],
reorderedVisibleKeys: ["b", "a"],
})
).toEqual(["b", "a", "x", "y"]);
});
it("keeps unknown current keys when no visible keys are reordered", () => {
expect(
mergeWithRemainder({
currentOrder: ["stale", "hidden"],
reorderedVisibleKeys: [],
})
).toEqual(["stale", "hidden"]);
});
});