#!/usr/bin/env python3
from nicegui import events, ui
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 add_row() -> None:
new_id = max((dx['id'] for dx in rows), default=-1) + 1
rows.append({'id': new_id, 'name': 'New guy', 'age': 21})
ui.notify(f'Added new row with ID {new_id}')
table.update()
def rename(e: events.GenericEventArguments) -> None:
for row in rows:
if row['id'] == e.args['id']:
row.update(e.args)
ui.notify(f'Updated rows to: {table.rows}')
table.update()
def delete(e: events.GenericEventArguments) -> None:
rows[:] = [row for row in rows if row['id'] != e.args['id']]
ui.notify(f'Deleted row with ID {e.args["id"]}')
table.update()
table = ui.table(columns=columns, rows=rows, row_key='name').classes('w-60')
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)"
>
''')
with table.add_slot('bottom-row'):
with table.cell().props('colspan=3'):
ui.button('Add row', icon='add', color='accent', on_click=add_row).classes('w-full')
table.on('rename', rename)
table.on('delete', delete)
ui.run()