
* Update component docstrings * Remove transitions libs * Add span component * Add lock files
76 lines
2.0 KiB
Python
76 lines
2.0 KiB
Python
"""Create a list of components from an iterable."""
|
|
from __future__ import annotations
|
|
|
|
from typing import Optional
|
|
|
|
import pydantic
|
|
|
|
from pynecone.components.component import Component
|
|
from pynecone.components.layout.box import Box
|
|
from pynecone.components.tags import CondTag, Tag
|
|
from pynecone.var import Var
|
|
|
|
|
|
class Cond(Component):
|
|
"""Render one of two components based on a condition."""
|
|
|
|
# The cond to determine which component to render.
|
|
cond: Var[bool]
|
|
|
|
# The component to render if the cond is true.
|
|
comp1: Component
|
|
|
|
# The component to render if the cond is false.
|
|
comp2: Component
|
|
|
|
# Whether the cond is within another cond.
|
|
is_nested: bool = False
|
|
|
|
@pydantic.validator("cond")
|
|
def validate_cond(cls, cond: Var) -> Var:
|
|
"""Validate that the cond is a boolean.
|
|
|
|
Args:
|
|
cond: The cond to validate.
|
|
|
|
Returns:
|
|
The validated cond.
|
|
"""
|
|
assert issubclass(cond.type_, bool), "The var must be a boolean."
|
|
return cond
|
|
|
|
@classmethod
|
|
def create(
|
|
cls, cond: Var, comp1: Component, comp2: Optional[Component] = None
|
|
) -> Cond:
|
|
"""Create a conditional component.
|
|
|
|
Args:
|
|
cond: The cond to determine which component to render.
|
|
comp1: The component to render if the cond is true.
|
|
comp2: The component to render if the cond is false.
|
|
|
|
Returns:
|
|
The conditional component.
|
|
"""
|
|
if comp2 is None:
|
|
comp2 = Box.create()
|
|
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
|
|
|
|
def _render(self) -> Tag:
|
|
return CondTag(
|
|
cond=self.cond,
|
|
true_value=self.comp1.render(),
|
|
false_value=self.comp2.render(),
|
|
is_nested=self.is_nested,
|
|
)
|