94 lines
2.6 KiB
Python
94 lines
2.6 KiB
Python
import reflex as rx
|
|
|
|
from sandbox.states.queries import QueryAPI
|
|
from sandbox.components.drawer import render_drawer
|
|
|
|
|
|
def create_table_header(title: str):
|
|
return rx.table.column_header_cell(title)
|
|
|
|
|
|
def create_query_rows(data: dict[str, str]):
|
|
def fill_rows_with_data(data_):
|
|
return rx.table.cell(
|
|
f"{data_[1]}",
|
|
on_click=QueryAPI.display_selected_row(data),
|
|
cursor="pointer",
|
|
)
|
|
|
|
return rx.table.row(
|
|
rx.foreach(data, fill_rows_with_data),
|
|
_hover={"bg": rx.color(color="gray", shade=4)},
|
|
)
|
|
|
|
|
|
def create_pagination():
|
|
return rx.hstack(
|
|
rx.hstack(
|
|
rx.text("Entries per page", weight="bold"),
|
|
rx.select(
|
|
QueryAPI.limits, default_value="10", on_change=QueryAPI.delta_limit
|
|
),
|
|
align_items="center",
|
|
),
|
|
rx.hstack(
|
|
rx.text(
|
|
f"Page {QueryAPI.current_page}/{QueryAPI.total_pages}",
|
|
width="100px",
|
|
weight="bold",
|
|
),
|
|
rx.chakra.button_group(
|
|
rx.icon(
|
|
tag="chevron-left", on_click=QueryAPI.previous, cursor="pointer"
|
|
),
|
|
rx.icon(tag="chevron-right", on_click=QueryAPI.next, cursor="pointer"),
|
|
is_attached=True,
|
|
),
|
|
align_items="center",
|
|
spacing="1",
|
|
),
|
|
align_items="center",
|
|
spacing="4",
|
|
)
|
|
|
|
|
|
def render_output():
|
|
return rx.center(
|
|
rx.cond(
|
|
QueryAPI.get_data,
|
|
rx.vstack(
|
|
render_drawer(),
|
|
create_pagination(),
|
|
rx.table.root(
|
|
rx.table.header(
|
|
rx.table.row(
|
|
rx.foreach(QueryAPI.get_table_headers, create_table_header)
|
|
),
|
|
),
|
|
rx.table.body(
|
|
rx.foreach(QueryAPI.paginated_data, create_query_rows)
|
|
),
|
|
width="100%",
|
|
variant="surface",
|
|
size="1",
|
|
),
|
|
rx.text(
|
|
"* Click a row to edit its contents.",
|
|
weight="bold",
|
|
size="1",
|
|
),
|
|
width="100%",
|
|
overflow="auto",
|
|
padding="2em 2em",
|
|
),
|
|
rx.spacer(),
|
|
),
|
|
flex="60%",
|
|
bg=rx.color_mode_cond(
|
|
"#faf9fb",
|
|
"#1a181a",
|
|
),
|
|
border_radius="10px",
|
|
overflow="auto",
|
|
)
|