Ver código fonte

fix click handler for context menu items (fixes #1827)

Falko Schindler 1 ano atrás
pai
commit
07a547439c

+ 8 - 0
nicegui/elements/context_menu.py

@@ -13,3 +13,11 @@ class ContextMenu(Element):
         super().__init__('q-menu')
         self._props['context-menu'] = True
         self._props['touch-position'] = True
+
+    def open(self) -> None:
+        """Open the context menu."""
+        self.run_method('show')
+
+    def close(self) -> None:
+        """Close the context menu."""
+        self.run_method('hide')

+ 2 - 1
nicegui/elements/menu.py

@@ -4,6 +4,7 @@ from typing_extensions import Self
 
 from .. import globals  # pylint: disable=redefined-builtin
 from ..events import ClickEventArguments, handle_event
+from .context_menu import ContextMenu
 from .mixins.text_element import TextElement
 from .mixins.value_element import ValueElement
 
@@ -65,6 +66,6 @@ class MenuItem(TextElement):
         def handle_click(_) -> None:
             handle_event(on_click, ClickEventArguments(sender=self, client=self.client))
             if auto_close:
-                assert isinstance(self.menu, Menu)
+                assert isinstance(self.menu, (Menu, ContextMenu))
                 self.menu.close()
         self.on('click', handle_click, [])

+ 5 - 2
tests/test_context_menu.py

@@ -6,9 +6,12 @@ from .screen import Screen
 def test_context_menu(screen: Screen):
     with ui.label('Right-click me'):
         with ui.context_menu():
-            ui.menu_item('Item 1')
+            ui.menu_item('Item 1', on_click=lambda: ui.label('Item 1 clicked'))
             ui.menu_item('Item 2')
 
     screen.open('/')
     screen.context_click('Right-click me')
-    screen.should_contain('Item 1')
+    screen.click('Item 1')
+    screen.should_contain('Item 1 clicked')
+    screen.wait(0.5)
+    screen.should_not_contain('Item 2')