fix: preserve drawer on dialog escape

This commit is contained in:
wxs
2026-07-17 13:27:41 +08:00
parent b973e1099d
commit 0f1edcd181
2 changed files with 23 additions and 1 deletions
+1 -1
View File
@@ -112,7 +112,7 @@ export function createFavoritesDrawer(
};
const onDocumentKeydown = (event: KeyboardEvent) => {
if (event.key !== "Escape" || !isOpen) {
if (event.key !== "Escape" || !isOpen || event.defaultPrevented) {
return;
}
if (document.querySelector("[data-sces-favorite-folder-dialog]")) {
+22
View File
@@ -484,6 +484,28 @@ describe("favorites-drawer", () => {
expect(document.activeElement).toBe(restoredSearch);
});
test("keeps a remounted drawer open after an earlier dialog handles Escape", async () => {
const first = createHarness();
first.controller.render(createState());
readTab().click();
const dialogResult = promptForFavoriteFolderName(document, {
title: "新建收藏夹"
});
first.controller.dispose();
const remounted = createHarness();
remounted.controller.render(createState());
readTab().click();
document.dispatchEvent(
new KeyboardEvent("keydown", { cancelable: true, key: "Escape" })
);
await expect(dialogResult).resolves.toBeNull();
expect(readDrawer().hidden).toBe(false);
expect(readTab().getAttribute("aria-expanded")).toBe("true");
});
test("calls create, rename, and delete handlers with the matching folder id", async () => {
const onCreateFolder = vi.fn(async () => {});
const onRenameFolder = vi.fn(async (_folderId: string) => {});