Skip to content

Commit b4c00d2

Browse files
Fix Gallery preview_close event not firing on ESC key (#12577)
* Fix Gallery preview_close event not firing on ESC key (#12553) The on_keydown handler was setting selected_index to null when ESC was pressed, but it wasn't dispatching the preview_close event. The close button (X) correctly dispatches this event, so ESC key should have the same behavior. Changes: - Add dispatch("preview_close") in on_keydown when Escape is pressed - Add test case for ESC key triggering preview_close event * add changeset --------- Co-authored-by: gradio-pr-bot <[email protected]>
1 parent b4c69af commit b4c00d2

File tree

3 files changed

+44
-0
lines changed

3 files changed

+44
-0
lines changed

.changeset/every-groups-say.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
"@gradio/gallery": patch
3+
"gradio": patch
4+
---
5+
6+
fix:Fix Gallery preview_close event not firing on ESC key

js/gallery/Gallery.test.ts

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,4 +104,41 @@ describe("Gallery", () => {
104104
});
105105
assert.equal(change_event.callCount, 0);
106106
});
107+
108+
test("triggers preview_close event when pressing Escape key", async () => {
109+
const { listen, getByTestId } = await render(Gallery, {
110+
show_label: true,
111+
label: "Gallery",
112+
loading_status: loading_status,
113+
preview: true,
114+
buttons: ["share", "download", "fullscreen"],
115+
value: [
116+
{
117+
image: {
118+
path: "https://raw.githubusercontent.com/gradio-app/gradio/main/gradio/demo/gallery_component/files/cheetah.jpg",
119+
url: "https://raw.githubusercontent.com/gradio-app/gradio/main/gradio/demo/gallery_component/files/cheetah.jpg"
120+
},
121+
caption: null
122+
}
123+
]
124+
});
125+
126+
const preview_close_event = listen("preview_close");
127+
128+
// Find the preview container and dispatch Escape key event
129+
const preview = document.querySelector(".preview");
130+
if (preview) {
131+
const escapeEvent = new KeyboardEvent("keydown", {
132+
code: "Escape",
133+
key: "Escape",
134+
bubbles: true
135+
});
136+
preview.dispatchEvent(escapeEvent);
137+
}
138+
139+
assert.isTrue(
140+
preview_close_event.callCount >= 1,
141+
"preview_close event should be triggered when pressing Escape"
142+
);
143+
});
107144
});

js/gallery/shared/Gallery.svelte

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,7 @@
164164
case "Escape":
165165
e.preventDefault();
166166
selected_index = null;
167+
dispatch("preview_close");
167168
break;
168169
case "ArrowLeft":
169170
e.preventDefault();

0 commit comments

Comments
 (0)