Fix rx.link href prop and Var.to_string type (#1600)

* Fix rx.link href prop

* Update bool var types
This commit is contained in:
Nikhil Rao 2023-08-16 11:41:19 -07:00 committed by GitHub
parent 8ce3ee19cc
commit 00714c60ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 12 additions and 15 deletions

View File

@ -36,8 +36,8 @@ def DynamicRoute():
return rx.fragment( return rx.fragment(
rx.input(value=DynamicState.token, is_read_only=True, id="token"), rx.input(value=DynamicState.token, is_read_only=True, id="token"),
rx.input(value=DynamicState.page_id, is_read_only=True, id="page_id"), rx.input(value=DynamicState.page_id, is_read_only=True, id="page_id"),
rx.link("index", href="/", id="link_index"), # type: ignore rx.link("index", href="/", id="link_index"),
rx.link("page_X", href="/static/x", id="link_page_x"), # type: ignore rx.link("page_X", href="/static/x", id="link_page_x"),
rx.link( rx.link(
"next", href="/page/" + DynamicState.next_page, id="link_page_next" # type: ignore "next", href="/page/" + DynamicState.next_page, id="link_page_next" # type: ignore
), ),

View File

@ -1,6 +1,5 @@
"""A link component.""" """A link component."""
from typing import Optional
from reflex.components.component import Component from reflex.components.component import Component
from reflex.components.libs.chakra import ChakraComponent from reflex.components.libs.chakra import ChakraComponent
@ -33,12 +32,11 @@ class Link(ChakraComponent):
return {**super()._get_imports(), **NextLink.create()._get_imports()} return {**super()._get_imports(), **NextLink.create()._get_imports()}
@classmethod @classmethod
def create(cls, *children, href: Optional[Var] = None, **props) -> Component: def create(cls, *children, **props) -> Component:
"""Create a Link component. """Create a Link component.
Args: Args:
*children: The children of the component. *children: The children of the component.
href: The href attribute of the link.
**props: The props of the component. **props: The props of the component.
Raises: Raises:
@ -47,11 +45,10 @@ class Link(ChakraComponent):
Returns: Returns:
Component: The link component Component: The link component
""" """
if href and not len(children): if props["href"]:
raise ValueError("Link without a child will not display") if not len(children):
elif href is None and len(children): raise ValueError("Link without a child will not display")
else:
# Don't use a NextLink if there is no href. # Don't use a NextLink if there is no href.
props["as_"] = "" props["as_"] = ""
if href:
props["href"] = href
return super().create(*children, **props) return super().create(*children, **props)

View File

@ -166,7 +166,7 @@ class Var(ABC):
Returns: Returns:
The stringified var. The stringified var.
""" """
return self.operation(fn="JSON.stringify") return self.operation(fn="JSON.stringify", type_=str)
def __hash__(self) -> int: def __hash__(self) -> int:
"""Define a hash function for a var. """Define a hash function for a var.
@ -650,7 +650,7 @@ class Var(ABC):
Returns: Returns:
A var representing the logical and. A var representing the logical and.
""" """
return self.operation("&&", other) return self.operation("&&", other, type_=bool)
def __rand__(self, other: Var) -> Var: def __rand__(self, other: Var) -> Var:
"""Perform a logical and. """Perform a logical and.
@ -661,7 +661,7 @@ class Var(ABC):
Returns: Returns:
A var representing the logical and. A var representing the logical and.
""" """
return self.operation("&&", other, flip=True) return self.operation("&&", other, type_=bool, flip=True)
def __or__(self, other: Var) -> Var: def __or__(self, other: Var) -> Var:
"""Perform a logical or. """Perform a logical or.
@ -672,7 +672,7 @@ class Var(ABC):
Returns: Returns:
A var representing the logical or. A var representing the logical or.
""" """
return self.operation("||", other) return self.operation("||", other, type_=bool)
def __ror__(self, other: Var) -> Var: def __ror__(self, other: Var) -> Var:
"""Perform a logical or. """Perform a logical or.
@ -683,7 +683,7 @@ class Var(ABC):
Returns: Returns:
A var representing the logical or. A var representing the logical or.
""" """
return self.operation("||", other, flip=True) return self.operation("||", other, type_=bool, flip=True)
def foreach(self, fn: Callable) -> Var: def foreach(self, fn: Callable) -> Var:
"""Return a list of components. after doing a foreach on this var. """Return a list of components. after doing a foreach on this var.