Browse Source

remove default auto-close prop from `ui.menu` (fixes #2894)

Falko Schindler 1 year ago
parent
commit
2a46e2455f
2 changed files with 15 additions and 6 deletions
  1. 5 6
      nicegui/elements/menu.py
  2. 10 0
      website/documentation/content/menu_documentation.py

+ 5 - 6
nicegui/elements/menu.py

@@ -17,10 +17,12 @@ class Menu(ValueElement):
         Creates a menu based on Quasar's `QMenu <https://quasar.dev/vue-components/menu>`_ component.
         The menu should be placed inside the element where it should be shown.
 
+        Advanced tip:
+        Use the `auto-close` prop to automatically close the menu on any click event directly without a server round-trip.
+
         :param value: whether the menu is already opened (default: `False`)
         """
         super().__init__(tag='q-menu', value=value, on_value_change=None)
-        self._props['auto-close'] = True
 
     def open(self) -> None:
         """Open the menu."""
@@ -65,11 +67,8 @@ class MenuItem(Item):
         self._props['clickable'] = True
 
         self.menu = self._find_menu()
-        if self.menu:
-            if auto_close:
-                self.on_click(self.menu.close)
-            else:
-                self.menu.props(remove='auto-close')
+        if self.menu and auto_close:
+            self.on_click(self.menu.close)
 
     def _find_menu(self) -> Optional[Union[Menu, ContextMenu]]:
         element: Element = self

+ 10 - 0
website/documentation/content/menu_documentation.py

@@ -17,4 +17,14 @@ def main_demo() -> None:
                 ui.menu_item('Close', menu.close)
 
 
+@doc.demo('Client-side auto-close', '''
+    Use the `auto-close` prop to automatically close the menu on any click event directly without a server round-trip.
+''')
+def auto_close():
+    with ui.button(icon='menu'):
+        with ui.menu().props('auto-close'):
+            toggle = ui.toggle(['fastfood', 'cake', 'icecream'], value='fastfood')
+    ui.icon('', size='md').bind_name_from(toggle, 'value')
+
+
 doc.reference(ui.menu)