Skip to content

Commit

Permalink
make all triggers disable recurisve memoization
Browse files Browse the repository at this point in the history
  • Loading branch information
adhami3310 committed Jan 30, 2025
1 parent 2c3257d commit 08081e1
Show file tree
Hide file tree
Showing 13 changed files with 43 additions and 5 deletions.
6 changes: 3 additions & 3 deletions reflex/components/component.py
Original file line number Diff line number Diff line change
Expand Up @@ -1944,7 +1944,7 @@ def create(cls, component: Component) -> StatefulComponent | None:

if not should_memoize:
# Determine if any Vars have associated data.
for prop_var in component._get_vars():
for prop_var in component._get_vars(include_children=True):
if prop_var._get_all_var_data():
should_memoize = True
break
Expand Down Expand Up @@ -2327,8 +2327,8 @@ def create(cls, *children, **props) -> Component:
"""
comp = super().create(*children, **props)
if comp._get_all_hooks():
comp._memoization_mode = cls._memoization_mode.copy(
update={"disposition": MemoizationDisposition.ALWAYS}
comp._memoization_mode = dataclasses.replace(
comp._memoization_mode, disposition=MemoizationDisposition.ALWAYS
)
return comp

Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/primitives/accordion.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from reflex.components.lucide.icon import Icon
from reflex.components.radix.primitives.base import RadixPrimitiveComponent
from reflex.components.radix.themes.base import LiteralAccentColor, LiteralRadius
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler
from reflex.style import Style
from reflex.vars import get_uuid_string_var
Expand Down Expand Up @@ -342,6 +343,8 @@ class AccordionTrigger(AccordionComponent):

alias = "RadixAccordionTrigger"

_memoization_mode = MemoizationMode(recursive=False)

@classmethod
def create(cls, *children, **props) -> Component:
"""Create the Accordion trigger component.
Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/primitives/drawer.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from reflex.components.radix.primitives.base import RadixPrimitiveComponent
from reflex.components.radix.themes.base import Theme
from reflex.components.radix.themes.layout.flex import Flex
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -85,6 +86,8 @@ class DrawerTrigger(DrawerComponent):
# Defaults to true, if the first child acts as the trigger.
as_child: Var[bool] = Var.create(True)

_memoization_mode = MemoizationMode(recursive=False)

@classmethod
def create(cls, *children: Any, **props: Any) -> Component:
"""Create a new DrawerTrigger instance.
Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/themes/components/alert_dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from reflex.components.component import ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.components.el import elements
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -33,6 +34,8 @@ class AlertDialogTrigger(RadixThemesTriggerComponent):

tag = "AlertDialog.Trigger"

_memoization_mode = MemoizationMode(recursive=False)


class AlertDialogContent(elements.Div, RadixThemesComponent):
"""Contains the content of the dialog. This component is based on the div element."""
Expand Down
5 changes: 5 additions & 0 deletions reflex/components/radix/themes/components/context_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from reflex.components.component import ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -55,6 +56,8 @@ class ContextMenuTrigger(RadixThemesComponent):

_invalid_children: List[str] = ["ContextMenuContent"]

_memoization_mode = MemoizationMode(recursive=False)


class ContextMenuContent(RadixThemesComponent):
"""The component that pops out when the context menu is open."""
Expand Down Expand Up @@ -153,6 +156,8 @@ class ContextMenuSubTrigger(RadixThemesComponent):

_valid_parents: List[str] = ["ContextMenuContent", "ContextMenuSub"]

_memoization_mode = MemoizationMode(recursive=False)


class ContextMenuSubContent(RadixThemesComponent):
"""The component that pops out when a submenu is open."""
Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/themes/components/dialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from reflex.components.component import ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.components.el import elements
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
from reflex.vars.base import Var

Expand All @@ -31,6 +32,8 @@ class DialogTrigger(RadixThemesTriggerComponent):

tag = "Dialog.Trigger"

_memoization_mode = MemoizationMode(recursive=False)


class DialogTitle(RadixThemesComponent):
"""Title component to display inside a Dialog modal."""
Expand Down
5 changes: 5 additions & 0 deletions reflex/components/radix/themes/components/dropdown_menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@

from reflex.components.component import ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -60,6 +61,8 @@ class DropdownMenuTrigger(RadixThemesTriggerComponent):

_invalid_children: List[str] = ["DropdownMenuContent"]

_memoization_mode = MemoizationMode(recursive=False)


class DropdownMenuContent(RadixThemesComponent):
"""The Dropdown Menu Content component that pops out when the dropdown menu is open."""
Expand Down Expand Up @@ -143,6 +146,8 @@ class DropdownMenuSubTrigger(RadixThemesTriggerComponent):

_valid_parents: List[str] = ["DropdownMenuContent", "DropdownMenuSub"]

_memoization_mode = MemoizationMode(recursive=False)


class DropdownMenuSub(RadixThemesComponent):
"""Contains all the parts of a submenu."""
Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/themes/components/hover_card.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from reflex.components.component import ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.components.el import elements
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -37,6 +38,8 @@ class HoverCardTrigger(RadixThemesTriggerComponent):

tag = "HoverCard.Trigger"

_memoization_mode = MemoizationMode(recursive=False)


class HoverCardContent(elements.Div, RadixThemesComponent):
"""Contains the content of the open hover card."""
Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/themes/components/popover.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from reflex.components.component import ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.components.el import elements
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -34,6 +35,8 @@ class PopoverTrigger(RadixThemesTriggerComponent):

tag = "Popover.Trigger"

_memoization_mode = MemoizationMode(recursive=False)


class PopoverContent(elements.Div, RadixThemesComponent):
"""Contains content to be rendered in the open popover."""
Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/themes/components/select.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import reflex as rx
from reflex.components.component import Component, ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.constants.compiler import MemoizationMode
from reflex.event import no_args_event_spec, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -69,6 +70,8 @@ class SelectTrigger(RadixThemesComponent):

_valid_parents: List[str] = ["SelectRoot"]

_memoization_mode = MemoizationMode(recursive=False)


class SelectContent(RadixThemesComponent):
"""The component that pops out when the select is open."""
Expand Down
3 changes: 3 additions & 0 deletions reflex/components/radix/themes/components/tabs.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from reflex.components.component import Component, ComponentNamespace
from reflex.components.core.breakpoints import Responsive
from reflex.components.core.colors import color
from reflex.constants.compiler import MemoizationMode
from reflex.event import EventHandler, passthrough_event_spec
from reflex.vars.base import Var

Expand Down Expand Up @@ -95,6 +96,8 @@ class TabsTrigger(RadixThemesComponent):

_valid_parents: List[str] = ["TabsList"]

_memoization_mode = MemoizationMode(recursive=False)

@classmethod
def create(cls, *children, **props) -> Component:
"""Create a TabsTrigger component.
Expand Down
5 changes: 3 additions & 2 deletions reflex/constants/compiler.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
"""Compiler variables."""

import dataclasses
import enum
from enum import Enum
from types import SimpleNamespace

from reflex.base import Base
from reflex.constants import Dirs
from reflex.utils.imports import ImportVar

Expand Down Expand Up @@ -151,7 +151,8 @@ class MemoizationDisposition(enum.Enum):
NEVER = "never"


class MemoizationMode(Base):
@dataclasses.dataclass(frozen=True)
class MemoizationMode:
"""The mode for memoizing a Component."""

# The conditions under which the component should be memoized.
Expand Down
3 changes: 3 additions & 0 deletions reflex/experimental/layout.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
from reflex.components.radix.themes.layout.box import Box
from reflex.components.radix.themes.layout.container import Container
from reflex.components.radix.themes.layout.stack import HStack
from reflex.constants.compiler import MemoizationMode
from reflex.event import run_script
from reflex.experimental import hooks
from reflex.state import ComponentState
Expand Down Expand Up @@ -146,6 +147,8 @@ def create(cls, *children, **props):
class SidebarTrigger(Fragment):
"""A component that renders the sidebar trigger."""

_memoization_mode = MemoizationMode(recursive=False)

@classmethod
def create(cls, sidebar: Component, **props):
"""Create the sidebar trigger component.
Expand Down

0 comments on commit 08081e1

Please sign in to comment.