Browse Source

Fix interactions between foreach and cond (#521)

Thomas Brandého 2 years ago
parent
commit
d57d9c78cf
2 changed files with 9 additions and 2 deletions
  1. 6 0
      pynecone/components/layout/cond.py
  2. 3 2
      pynecone/components/tags/iter_tag.py

+ 6 - 0
pynecone/components/layout/cond.py

@@ -38,8 +38,14 @@ class Cond(Component):
         Returns:
         Returns:
             The conditional component.
             The conditional component.
         """
         """
+        from pynecone.components.layout.foreach import Foreach
+
         if comp2 is None:
         if comp2 is None:
             comp2 = Fragment.create()
             comp2 = Fragment.create()
+        if isinstance(comp1, Foreach):
+            comp1 = Fragment.create(comp1)
+        if isinstance(comp2, Foreach):
+            comp2 = Fragment.create(comp2)
         if isinstance(comp1, Cond):
         if isinstance(comp1, Cond):
             comp1.is_nested = True
             comp1.is_nested = True
         if isinstance(comp2, Cond):
         if isinstance(comp2, Cond):

+ 3 - 2
pynecone/components/tags/iter_tag.py

@@ -58,6 +58,7 @@ class IterTag(Tag):
             The rendered component.
             The rendered component.
         """
         """
         # Import here to avoid circular imports.
         # Import here to avoid circular imports.
+        from pynecone.components.layout.cond import Cond
         from pynecone.components.layout.foreach import Foreach
         from pynecone.components.layout.foreach import Foreach
         from pynecone.components.layout.fragment import Fragment
         from pynecone.components.layout.fragment import Fragment
 
 
@@ -73,8 +74,8 @@ class IterTag(Tag):
             assert len(args) == 2
             assert len(args) == 2
             component = render_fn(arg, index)
             component = render_fn(arg, index)
 
 
-        # Nested foreach components must be wrapped in fragments.
-        if isinstance(component, Foreach):
+        # Nested foreach components or cond must be wrapped in fragments.
+        if isinstance(component, (Foreach, Cond)):
             component = Fragment.create(component)
             component = Fragment.create(component)
 
 
         # Set the component key.
         # Set the component key.