Compare commits

...

1 Commits

Author SHA1 Message Date
Masen Furer
732459c9d2
If a Var is Optional, iterate over it as if it is not
This is potentially dangerous because it will cause frontend exception if the
value actually is null.
2024-12-10 09:48:59 -08:00
2 changed files with 10 additions and 6 deletions

View File

@ -129,7 +129,7 @@ class Foreach(Component):
iterable_state=str(tag.iterable),
arg_name=tag.arg_var_name,
arg_index=tag.get_index_var_arg(),
iterable_type=tag.iterable._var_type.mro()[0].__name__,
iterable_type=tag.get_iterable_var_type().__name__,
)

View File

@ -7,6 +7,7 @@ import inspect
from typing import TYPE_CHECKING, Any, Callable, Iterable, Tuple, Type, Union, get_args
from reflex.components.tags.tag import Tag
from reflex.utils.types import is_optional
from reflex.vars import LiteralArrayVar, Var, get_unique_variable_name
if TYPE_CHECKING:
@ -38,15 +39,18 @@ class IterTag(Tag):
The type of the iterable var.
"""
iterable = self.iterable
var_type = iterable._var_type
if is_optional(var_type):
var_type = get_args(var_type)[0]
try:
if iterable._var_type.mro()[0] is dict:
if var_type.mro()[0] is dict:
# Arg is a tuple of (key, value).
return Tuple[get_args(iterable._var_type)] # type: ignore
elif iterable._var_type.mro()[0] is tuple:
return Tuple[get_args(var_type)] # type: ignore
elif var_type.mro()[0] is tuple:
# Arg is a union of any possible values in the tuple.
return Union[get_args(iterable._var_type)] # type: ignore
return Union[get_args(var_type)] # type: ignore
else:
return get_args(iterable._var_type)[0]
return get_args(var_type)[0]
except Exception:
return Any