58 lines
1.6 KiB
Python
58 lines
1.6 KiB
Python
"""A link component."""
|
|
|
|
from typing import Optional
|
|
|
|
from pynecone.components.component import Component
|
|
from pynecone.components.libs.chakra import ChakraComponent
|
|
from pynecone.components.navigation.nextlink import NextLink
|
|
from pynecone.utils import imports
|
|
from pynecone.vars import BaseVar, Var
|
|
|
|
|
|
class Link(ChakraComponent):
|
|
"""Link to another page."""
|
|
|
|
tag = "Link"
|
|
|
|
# The rel.
|
|
rel: Var[str]
|
|
|
|
# The page to link to.
|
|
href: Var[str]
|
|
|
|
# The text to display.
|
|
text: Var[str]
|
|
|
|
# What the link renders to.
|
|
as_: Var[str] = BaseVar.create("{NextLink}", is_local=False) # type: ignore
|
|
|
|
# If true, the link will open in new tab.
|
|
is_external: Var[bool]
|
|
|
|
def _get_imports(self) -> imports.ImportDict:
|
|
return {**super()._get_imports(), **NextLink.create()._get_imports()}
|
|
|
|
@classmethod
|
|
def create(cls, *children, href: Optional[Var] = None, **props) -> Component:
|
|
"""Create a Link component.
|
|
|
|
Args:
|
|
*children: The children of the component.
|
|
href: The href attribute of the link.
|
|
**props: The props of the component.
|
|
|
|
Raises:
|
|
ValueError: in case of missing children
|
|
|
|
Returns:
|
|
Component: The link component
|
|
"""
|
|
if href and not len(children):
|
|
raise ValueError("Link without a child will not display")
|
|
elif href is None and len(children):
|
|
# Don't use a NextLink if there is no href.
|
|
props["as_"] = "Link"
|
|
if href:
|
|
props["href"] = href
|
|
return super().create(*children, **props)
|