
* Update component docstrings * Remove transitions libs * Add span component * Add lock files
58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
"""Table components."""
|
|
|
|
from typing import Any, List
|
|
|
|
from pynecone import utils
|
|
from pynecone.components.component import Component, ImportDict
|
|
from pynecone.components.tags import Tag
|
|
from pynecone.var import Var
|
|
|
|
|
|
class Gridjs(Component):
|
|
"""A component that wraps a nivo bar component."""
|
|
|
|
library = "gridjs-react"
|
|
|
|
|
|
class DataTable(Gridjs):
|
|
"""A data table component."""
|
|
|
|
tag = "Grid"
|
|
|
|
# The dataframe to use.
|
|
df: Var[Any]
|
|
|
|
# The data to display. EIther a list of lists or a pandas dataframe.
|
|
data: Any
|
|
|
|
# The columns to display.
|
|
columns: Var[List]
|
|
|
|
# Enable a search bar.
|
|
search: Var[bool]
|
|
|
|
# Enable sorting on columns.
|
|
sort: Var[bool]
|
|
|
|
# Enable resizable columns.
|
|
resizable: Var[bool]
|
|
|
|
# Enable pagination.
|
|
pagination: Var[bool]
|
|
|
|
def _get_imports(self) -> ImportDict:
|
|
return utils.merge_imports(
|
|
super()._get_imports(), {"": {"gridjs/dist/theme/mermaid.css"}}
|
|
)
|
|
|
|
def _render(self) -> Tag:
|
|
if utils.is_dataframe(type(self.data)):
|
|
self.columns = Var.create(list(self.data.columns.values.tolist())) # type: ignore
|
|
self.data = Var.create(list(self.data.values.tolist())) # type: ignore
|
|
|
|
if isinstance(self.df, Var):
|
|
self.columns = self.df["columns"]
|
|
self.data = self.df["data"]
|
|
|
|
return super()._render()
|