diff --git a/pynecone/components/layout/cond.py b/pynecone/components/layout/cond.py
index b6f24de15..266dac5bb 100644
--- a/pynecone/components/layout/cond.py
+++ b/pynecone/components/layout/cond.py
@@ -22,13 +22,10 @@ class Cond(Component):
# The component to render if the cond is false.
comp2: Component
- # Whether the cond is within another cond.
- is_nested: bool = False
-
@classmethod
def create(
cls, cond: Var, comp1: Component, comp2: Optional[Component] = None
- ) -> Cond:
+ ) -> Component:
"""Create a conditional component.
Args:
@@ -39,31 +36,23 @@ class Cond(Component):
Returns:
The conditional component.
"""
- from pynecone.components.layout.foreach import Foreach
-
- if comp2 is None:
- comp2 = Fragment.create()
- if isinstance(comp1, Foreach):
- comp1 = Fragment.create(comp1)
- if isinstance(comp2, Foreach):
- comp2 = Fragment.create(comp2)
- if isinstance(comp1, Cond):
- comp1.is_nested = True
- if isinstance(comp2, Cond):
- comp2.is_nested = True
- return cls(
- cond=cond,
- comp1=comp1,
- comp2=comp2,
- children=[comp1, comp2],
- ) # type: ignore
+ # Wrap everything in fragments.
+ comp1 = Fragment.create(comp1)
+ comp2 = Fragment.create(comp2) if comp2 else Fragment.create()
+ return Fragment.create(
+ cls(
+ cond=cond,
+ comp1=comp1,
+ comp2=comp2,
+ children=[comp1, comp2],
+ )
+ )
def _render(self) -> Tag:
return CondTag(
cond=self.cond,
true_value=self.comp1.render(),
false_value=self.comp2.render(),
- is_nested=self.is_nested,
)
diff --git a/pynecone/components/tags/cond_tag.py b/pynecone/components/tags/cond_tag.py
index d11f9a780..909f01a65 100644
--- a/pynecone/components/tags/cond_tag.py
+++ b/pynecone/components/tags/cond_tag.py
@@ -19,9 +19,6 @@ class CondTag(Tag):
# The code to render if the condition is false.
false_value: str
- # Whether the cond tag is nested.
- is_nested: bool = False
-
def __str__(self) -> str:
"""Render the tag as a React string.
@@ -33,5 +30,4 @@ class CondTag(Tag):
cond=self.cond.full_name,
true_value=self.true_value,
false_value=self.false_value,
- is_nested=self.is_nested,
)
diff --git a/pynecone/utils.py b/pynecone/utils.py
index a1240b961..f6e33a215 100644
--- a/pynecone/utils.py
+++ b/pynecone/utils.py
@@ -1107,7 +1107,6 @@ def format_cond(
cond: str,
true_value: str,
false_value: str = '""',
- is_nested: bool = False,
is_prop=False,
) -> str:
"""Format a conditional expression.
@@ -1116,7 +1115,6 @@ def format_cond(
cond: The cond.
true_value: The value to return if the cond is true.
false_value: The value to return if the cond is false.
- is_nested: Whether the cond is nested.
is_prop: Whether the cond is a prop
Returns:
@@ -1125,17 +1123,15 @@ def format_cond(
# Import here to avoid circular imports.
from pynecone.var import Var
+ # Format prop conds.
if is_prop:
prop1 = Var.create(true_value, is_string=type(true_value) == str)
prop2 = Var.create(false_value, is_string=type(false_value) == str)
assert prop1 is not None and prop2 is not None, "Invalid prop values"
- expr = f"{cond} ? {prop1} : {prop2}".replace("{", "").replace("}", "")
- else:
- expr = f"{cond} ? {true_value} : {false_value}"
+ return f"{cond} ? {prop1} : {prop2}".replace("{", "").replace("}", "")
- if not is_nested:
- expr = wrap(expr, "{")
- return expr
+ # Format component conds.
+ return wrap(f"{cond} ? {true_value} : {false_value}", "{")
def get_event_handler_parts(handler: EventHandler) -> Tuple[str, str]:
diff --git a/pyproject.toml b/pyproject.toml
index 1d9b524bb..d3dd219a8 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,6 +1,6 @@
[tool.poetry]
name = "pynecone"
-version = "0.1.18"
+version = "0.1.19"
description = "Web apps in pure Python."
license = "Apache-2.0"
authors = [
diff --git a/tests/components/layout/test_cond.py b/tests/components/layout/test_cond.py
index 23a94c734..6bc0fa230 100644
--- a/tests/components/layout/test_cond.py
+++ b/tests/components/layout/test_cond.py
@@ -28,7 +28,7 @@ def cond_state(request):
indirect=True,
)
def test_validate_cond(cond_state: pc.Var):
- """Test if cond can be a pc.Val with any values.
+ """Test if cond can be a pc.Var with any values.
Args:
cond_state: A fixture.
@@ -40,9 +40,9 @@ def test_validate_cond(cond_state: pc.Var):
)
assert str(cond_component) == (
- "{cond_state.value ? "
- "{`cond is True`} : "
- "{`cond is False`}}"
+ "{cond_state.value ? "
+ "{`cond is True`} : "
+ "{`cond is False`}}"
)
@@ -78,9 +78,11 @@ def test_cond_no_else():
"""Test if cond can be used without else."""
# Components should support the use of cond without else
comp = cond(True, Text.create("hello"))
+ assert isinstance(comp, Fragment)
+ comp = comp.children[0]
assert isinstance(comp, Cond)
assert comp.cond == True # noqa
- assert comp.comp1 == Text.create("hello")
+ assert comp.comp1 == Fragment.create(Text.create("hello"))
assert comp.comp2 == Fragment.create()
# Props do not support the use of cond without else