Skip to content

Commit 18451bc

Browse files
Remove HighLevelNavigationMenu component and update demo to use granular API
- Removed HighLevelNavigationMenu class as requested - Updated demo to use ui.navigation_menu.root(), ui.navigation_menu.list(), etc. - Removed unused imports (foreach, button) - Fixed linting issues Co-Authored-By: Carlos Cutillas <[email protected]>
1 parent 43173c6 commit 18451bc

File tree

2 files changed

+12
-94
lines changed

2 files changed

+12
-94
lines changed

demo/demo/demo.py

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,18 @@ def index() -> rx.Component:
5858
on_value_change=lambda value: rx.toast.success(f"Value: {value}"),
5959
on_open_change=lambda value: rx.toast.success(f"Open: {value}"),
6060
),
61-
ui.navigation_menu(
62-
items=[
63-
("Home", lambda: rx.toast.success("Home clicked")),
64-
("About", lambda: rx.toast.success("About clicked")),
65-
("Contact", lambda: rx.toast.success("Contact clicked")),
66-
],
61+
ui.navigation_menu.root(
62+
ui.navigation_menu.list(
63+
ui.navigation_menu.item(
64+
ui.navigation_menu.trigger("Home", on_click=lambda: rx.toast.success("Home clicked")),
65+
),
66+
ui.navigation_menu.item(
67+
ui.navigation_menu.trigger("About", on_click=lambda: rx.toast.success("About clicked")),
68+
),
69+
ui.navigation_menu.item(
70+
ui.navigation_menu.trigger("Contact", on_click=lambda: rx.toast.success("Contact clicked")),
71+
),
72+
),
6773
),
6874
ui.theme_switcher(class_name="absolute top-4 right-4"),
6975
class_name=ui.cn(

reflex_ui/components/base/navigation_menu.py

Lines changed: 0 additions & 88 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,11 @@
33
from typing import Literal
44

55
from reflex.components.component import Component, ComponentNamespace
6-
from reflex.components.core.foreach import foreach
76
from reflex.event import EventHandler, passthrough_event_spec
87
from reflex.utils.imports import ImportVar
98
from reflex.vars.base import Var
109

11-
from reflex_ui.components.base.button import button
1210
from reflex_ui.components.base_ui import PACKAGE_NAME, BaseUIComponent
13-
from reflex_ui.utils.twmerge import cn
1411

1512
LiteralNavigationMenuOrientation = Literal["horizontal", "vertical"]
1613
LiteralSide = Literal["top", "right", "bottom", "left"]
@@ -305,90 +302,6 @@ def create(cls, *children, **props) -> BaseUIComponent:
305302
return super().create(*children, **props)
306303

307304

308-
class HighLevelNavigationMenu(NavigationMenuRoot):
309-
"""High level wrapper for the NavigationMenu component."""
310-
311-
# The list of items to display in the navigation menu - can be strings or tuples of (label, on_click_handler)
312-
items: Var[list[str | tuple[str, EventHandler]]]
313-
314-
# Props for different component parts
315-
_item_props = {"value"}
316-
_trigger_props = {"disabled"}
317-
_content_props = {}
318-
_link_props = {"active"}
319-
_positioner_props = {
320-
"align",
321-
"align_offset",
322-
"side",
323-
"arrow_padding",
324-
"collision_padding",
325-
"sticky",
326-
"position_method",
327-
"track_anchor",
328-
"side_offset",
329-
"collision_avoidance",
330-
}
331-
_portal_props = {"container"}
332-
333-
@classmethod
334-
def create(cls, *children, **props) -> BaseUIComponent:
335-
"""Create a navigation menu component.
336-
337-
Args:
338-
*children: Additional children to include in the navigation menu.
339-
**props: Additional properties to apply to the navigation menu component.
340-
341-
Returns:
342-
The navigation menu component.
343-
"""
344-
# Extract props for different parts
345-
item_props = {k: props.pop(k) for k in cls._item_props & props.keys()}
346-
trigger_props = {k: props.pop(k) for k in cls._trigger_props & props.keys()}
347-
content_props = {k: props.pop(k) for k in cls._content_props & props.keys()}
348-
link_props = {k: props.pop(k) for k in cls._link_props & props.keys()}
349-
positioner_props = {
350-
k: props.pop(k) for k in cls._positioner_props & props.keys()
351-
}
352-
portal_props = {k: props.pop(k) for k in cls._portal_props & props.keys()}
353-
354-
items = props.pop("items", [])
355-
356-
def create_navigation_menu_item(item: str | tuple[str, EventHandler], index: int = 0) -> BaseUIComponent:
357-
if isinstance(item, tuple):
358-
label, on_click_handler = item
359-
return button(
360-
label,
361-
variant="ghost",
362-
class_name=ClassNames.TRIGGER,
363-
disabled=props.get("disabled", False),
364-
on_click=on_click_handler,
365-
key=f"nav-item-{index}",
366-
)
367-
return button(
368-
item,
369-
variant="ghost",
370-
class_name=ClassNames.TRIGGER,
371-
disabled=props.get("disabled", False),
372-
key=f"nav-item-{index}",
373-
)
374-
375-
if isinstance(items, Var):
376-
items_children = foreach(items, lambda item, index: create_navigation_menu_item(item, index))
377-
else:
378-
items_children = [create_navigation_menu_item(item, i) for i, item in enumerate(items)]
379-
380-
from reflex.components.tags import nav, div
381-
382-
return nav(
383-
div(
384-
*items_children,
385-
class_name=ClassNames.LIST,
386-
),
387-
class_name=ClassNames.ROOT,
388-
**props,
389-
)
390-
391-
392305
class NavigationMenu(ComponentNamespace):
393306
"""Namespace for NavigationMenu components."""
394307

@@ -405,7 +318,6 @@ class NavigationMenu(ComponentNamespace):
405318
viewport = staticmethod(NavigationMenuViewport.create)
406319
arrow = staticmethod(NavigationMenuArrow.create)
407320
backdrop = staticmethod(NavigationMenuBackdrop.create)
408-
__call__ = staticmethod(HighLevelNavigationMenu.create)
409321

410322

411323
navigation_menu = NavigationMenu()

0 commit comments

Comments
 (0)