From 3c32073ee902235bfbffe6111532e31eb286b71a Mon Sep 17 00:00:00 2001 From: iap Date: Sun, 12 Oct 2025 21:46:41 -0400 Subject: [PATCH 1/2] small fix for list selection/click interaction --- frontend/code/components/listItems.ts | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/frontend/code/components/listItems.ts b/frontend/code/components/listItems.ts index ec0c19c5..7245a6d5 100644 --- a/frontend/code/components/listItems.ts +++ b/frontend/code/components/listItems.ts @@ -50,17 +50,17 @@ export abstract class SelectableListItemComponent< } } + onPress(event: PointerEvent | KeyboardEvent): void { + if (this.listView !== null) { + this.listView.onItemPress(this, event); + } + } + set isSelectable(isSelectable: boolean) { if (isSelectable) { this.element.classList.add("rio-selectable-item"); - this.pressToSelectButton.onPress = ( - event: PointerEvent | KeyboardEvent - ) => { - if (this.listView !== null) { - this.listView.onItemPress(this, event); - } - }; + this.pressToSelectButton.onPress = this.onPress; } else { this.element.classList.remove("rio-selectable-item"); this.pressToSelectButton.onPress = null; @@ -168,14 +168,17 @@ export class CustomListItemComponent extends SelectableListItemComponent Date: Mon, 13 Oct 2025 01:03:40 -0400 Subject: [PATCH 2/2] resolve conflict --- frontend/code/components/listItems.ts | 8 +++-- tests/test_frontend/test_list.py | 43 +++++++++++++++++++++++++++ 2 files changed, 49 insertions(+), 2 deletions(-) create mode 100644 tests/test_frontend/test_list.py diff --git a/frontend/code/components/listItems.ts b/frontend/code/components/listItems.ts index 7245a6d5..40190540 100644 --- a/frontend/code/components/listItems.ts +++ b/frontend/code/components/listItems.ts @@ -19,6 +19,7 @@ export abstract class SelectableListItemComponent< > extends ComponentBase { protected pressToSelectButton: PressableElement; protected listView: ListViewComponent | null = null; + private _isSelectable: boolean = false; constructor( id: ComponentId, @@ -55,8 +56,11 @@ export abstract class SelectableListItemComponent< this.listView.onItemPress(this, event); } } - + get isSelectable(): boolean { + return this._isSelectable; + } set isSelectable(isSelectable: boolean) { + this._isSelectable = isSelectable; if (isSelectable) { this.element.classList.add("rio-selectable-item"); @@ -175,7 +179,7 @@ export class CustomListItemComponent extends SelectableListItemComponent None: + pressed = [] + + def on_press(): + pressed.append(1) + + async with rio.testing.BrowserClient( + lambda: rio.ListView( + rio.SimpleListItem("Item", key="item0", on_press=on_press), + selection_mode="single", + ) + ) as test_client: + await asyncio.sleep(0.5) + + await test_client.click(10, 1) + await asyncio.sleep(0.5) + + list_view = test_client.get_component(rio.ListView) + item = test_client.get_component(rio.SimpleListItem) + assert len(pressed) == 1 + assert list_view.selected_items == [item.key] + + list_view.selection_mode = "none" + list_view.selected_items = [] + item.on_press = None + await test_client.wait_for_refresh() + + await test_client.click(10, 1) + assert len(pressed) == 1 + assert list_view.selected_items == [] + + list_view.selection_mode = "single" + item.on_press = on_press + await test_client.wait_for_refresh() + + await test_client.click(10, 1) + assert len(pressed) == 2 + assert list_view.selected_items == [item.key]