#!/usr/bin/env python3
from nicegui import ui, events
columns = [
{"name": "name", "label": "Name", "field": "name", "align": "left"},
{"name": "age", "label": "Age", "field": "age"},
]
rows = [
{"id": 0, "name": "Alice", "age": 18},
{"id": 1, "name": "Bob", "age": 21},
{"id": 2, "name": "Carol", "age": 20},
]
def rename(e: events.GenericEventArguments) -> None:
for row in rows:
if row["id"] == e.args["id"]:
row.update(e.args)
ui.notify(f"Table.rows is now: {table.rows}")
def delete(e: events.GenericEventArguments) -> None:
rows[:] = [row for row in rows if row["id"] != e.args["id"]]
ui.notify(f"Delete {e.args['id']}")
table.update()
def addrow() -> None:
newid = max(dx["id"] for dx in rows) + 1
rows.append({"id": newid, "name": "New guy", "age": 21})
ui.notify(f"Added new row with id {newid}")
table.update()
table = ui.table(columns=columns, rows=rows, row_key="name").classes("w-72")
table.add_slot(
"header",
r"""
{{ col.label }}
""",
)
table.add_slot(
"body",
r"""
$parent.$emit('delete', props.row)" >
{{ props.row.name }}
$parent.$emit('rename', props.row)" >
{{ props.row.age }}
$parent.$emit('rename', props.row)" >
""",
)
table.add_slot(
"bottom-row",
r"""
$parent.$emit('addrow')"/>
""",
)
table.on("rename", rename)
table.on("delete", delete)
table.on("addrow", addrow)
ui.run()