Support nested foreach (#223)

This commit is contained in:
Nikhil Rao 2023-01-07 20:02:01 -08:00 committed by GitHub
parent 92fe881479
commit f583c4f942
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -57,16 +57,30 @@ class IterTag(Tag):
Returns:
The rendered component.
"""
# Import here to avoid circular imports.
from pynecone.components.layout.foreach import Foreach
from pynecone.components.layout.fragment import Fragment
# Get the render function arguments.
args = inspect.getfullargspec(render_fn).args
index = IterTag.get_index_var()
if len(args) == 1:
# If the render function doesn't take the index as an argument.
component = render_fn(arg)
else:
# If the render function takes the index as an argument.
assert len(args) == 2
component = render_fn(arg, index)
# Nested foreach components must be wrapped in fragments.
if isinstance(component, Foreach):
component = Fragment.create(component)
# Set the component key.
if component.key is None:
component.key = index
# component.key = utils.wrap(str(index), "{", check_first=False)
return component
def __str__(self) -> str: