clean up the code to pass tests

This commit is contained in:
Lendemor 2024-12-11 15:07:44 +01:00
parent 25cfde751a
commit bf347841b1

View File

@ -2196,6 +2196,35 @@ class StatefulComponent(BaseComponent):
]
return [var_name]
@staticmethod
def _get_deps_from_event_trigger(event: EventChain | EventSpec | Var) -> set[str]:
"""Get the dependencies accessed by event triggers.
Args:
event: The event trigger to extract deps from.
Returns:
The dependencies accessed by the event triggers.
"""
events: list = [event]
deps = set()
if isinstance(event, EventChain):
events.extend(event.events)
for ev in events:
if isinstance(ev, EventSpec):
for arg in ev.args:
deps.union(
{
str(dep)
for a in arg
if a._var_data is not None
for dep in a._var_data.deps
if a._var_data.deps is not None
}
)
return deps
@classmethod
def _get_memoized_event_triggers(
cls,
@ -2232,18 +2261,11 @@ class StatefulComponent(BaseComponent):
# Calculate Var dependencies accessed by the handler for useCallback dep array.
var_deps = ["addEvents", "Event"]
for ev in event.events:
if isinstance(ev, EventSpec):
for arg in ev.args:
var_deps.extend(
{
str(dep)
for a in arg
if a._var_data is not None
for dep in a._var_data.deps
if a._var_data.deps is not None
}
)
# Get deps from event trigger var data.
var_deps.extend(cls._get_deps_from_event_trigger(event))
# Get deps from hooks.
for arg in event_args:
var_data = arg._get_all_var_data()
if var_data is None: