reflex/pynecone/components/datadisplay/datatable.py
2022-11-18 12:44:06 -08:00

56 lines
1.2 KiB
Python

"""Table components."""
from typing import Any, Dict, List, Union
from pynecone.components.component import Component
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"
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_custom_code(self) -> str:
return """
import "gridjs/dist/theme/mermaid.css";
"""
def _render(self) -> Tag:
if type(self.data).__name__ == "DataFrame":
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()