From 9fe233f81bf09d42367fe01a998b18fe2130f8b0 Mon Sep 17 00:00:00 2001 From: Hauke Sommerfeld Date: Mon, 20 Jan 2025 23:21:43 +0100 Subject: [PATCH 1/4] Stop propagation of combobox keyboard events This commit adds a missing `stopPropagation` call in the combobox's keyboard event handling in order to prevent those events from bubbling to other elements. --- .../src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt index 06ed8d94c..d49985e81 100644 --- a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt +++ b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt @@ -569,6 +569,7 @@ class Combobox(tag: Tag, id: String?) : Tag by tag, Op keydownsIf { if (shortcutOf(this) in (itemActivationKeys + Keys.Enter)) { preventDefault() + stopPropagation() true } else false }.map { event -> From b307b42e6900428116b57fc5e66eb8513b97bd09 Mon Sep 17 00:00:00 2001 From: Hauke Sommerfeld Date: Thu, 30 Jan 2025 17:38:15 +0100 Subject: [PATCH 2/4] Use stopImmediatePropagation() --- .../jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt index d49985e81..cfe46df86 100644 --- a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt +++ b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt @@ -569,7 +569,7 @@ class Combobox(tag: Tag, id: String?) : Tag by tag, Op keydownsIf { if (shortcutOf(this) in (itemActivationKeys + Keys.Enter)) { preventDefault() - stopPropagation() + stopImmediatePropagation() true } else false }.map { event -> From 6cda383c3f3c11e22a88f5ee983e4fb5349796aa Mon Sep 17 00:00:00 2001 From: Hauke Sommerfeld Date: Fri, 31 Jan 2025 18:27:28 +0100 Subject: [PATCH 3/4] Use stopPropagation once again --- .../kotlin/dev/fritz2/headless/components/Combobox.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt index cfe46df86..fc1b2c8c7 100644 --- a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt +++ b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt @@ -569,7 +569,9 @@ class Combobox(tag: Tag, id: String?) : Tag by tag, Op keydownsIf { if (shortcutOf(this) in (itemActivationKeys + Keys.Enter)) { preventDefault() - stopImmediatePropagation() + // Using stopImmediatePropagation() would prevent the event from being handled in all + // relevant places + stopPropagation() true } else false }.map { event -> @@ -600,6 +602,8 @@ class Combobox(tag: Tag, id: String?) : Tag by tag, Op internalState.queryResults.flatMapLatest { result -> selectShortcuts.mapNotNull { shortcut -> val active = activeIndexStore.current + println("Active: $active") + println("Shortcut: $shortcut") if (result is ItemList && active != null && shortcut == Keys.Enter) { result.items.getOrNull(active)?.value } else null From 67825d8be0ca662f6357c205d14b281840293dbe Mon Sep 17 00:00:00 2001 From: Hauke Sommerfeld Date: Fri, 31 Jan 2025 20:04:42 +0100 Subject: [PATCH 4/4] Remove debug calls --- .../jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt index fc1b2c8c7..b064228c2 100644 --- a/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt +++ b/headless/src/jsMain/kotlin/dev/fritz2/headless/components/Combobox.kt @@ -602,8 +602,6 @@ class Combobox(tag: Tag, id: String?) : Tag by tag, Op internalState.queryResults.flatMapLatest { result -> selectShortcuts.mapNotNull { shortcut -> val active = activeIndexStore.current - println("Active: $active") - println("Shortcut: $shortcut") if (result is ItemList && active != null && shortcut == Keys.Enter) { result.items.getOrNull(active)?.value } else null