Preserve thread selection during background updates
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
import assert from "node:assert/strict";
|
||||
import test from "node:test";
|
||||
import { resolveSidebarSelectionAfterRefresh } from "../src/lib/sidebar-selection.ts";
|
||||
|
||||
const workspaceItems = [
|
||||
{ type: "chat", id: "completed-chat" },
|
||||
{ type: "chat", id: "selected-chat" },
|
||||
{ type: "search", id: "selected-search" },
|
||||
];
|
||||
|
||||
test("a collection refresh preserves the current thread selection", () => {
|
||||
assert.deepEqual(
|
||||
resolveSidebarSelectionAfterRefresh({ kind: "chat", id: "selected-chat" }, workspaceItems),
|
||||
{ kind: "chat", id: "selected-chat" }
|
||||
);
|
||||
});
|
||||
|
||||
test("an initial route selection cannot override a current thread selection", () => {
|
||||
assert.deepEqual(
|
||||
resolveSidebarSelectionAfterRefresh(
|
||||
{ kind: "search", id: "selected-search" },
|
||||
workspaceItems,
|
||||
{ initialSelection: { kind: "chat", id: "completed-chat" }, selectFallback: true }
|
||||
),
|
||||
{ kind: "search", id: "selected-search" }
|
||||
);
|
||||
});
|
||||
|
||||
test("a collection refresh preserves an intentionally empty selection", () => {
|
||||
assert.equal(resolveSidebarSelectionAfterRefresh(null, workspaceItems), null);
|
||||
});
|
||||
|
||||
test("initial load can select the URL thread or fall back to the first item", () => {
|
||||
assert.deepEqual(
|
||||
resolveSidebarSelectionAfterRefresh(null, workspaceItems, {
|
||||
initialSelection: { kind: "search", id: "selected-search" },
|
||||
selectFallback: true,
|
||||
}),
|
||||
{ kind: "search", id: "selected-search" }
|
||||
);
|
||||
assert.deepEqual(resolveSidebarSelectionAfterRefresh(null, workspaceItems, { selectFallback: true }), {
|
||||
kind: "chat",
|
||||
id: "completed-chat",
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user