table_reference.py 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. from typing import Optional
  2. from nicegui import ui
  3. from ..example import example
  4. def intro(menu: Optional[ui.element] = None) -> None:
  5. @example(ui.table, menu)
  6. def table_example():
  7. columns = [
  8. {'name': 'name', 'label': 'Name', 'field': 'name', 'required': True, 'align': 'left'},
  9. {'name': 'age', 'label': 'Age', 'field': 'age', 'sortable': True},
  10. ]
  11. rows = [
  12. {'name': 'Alice', 'age': 18},
  13. {'name': 'Bob', 'age': 21},
  14. {'name': 'Carol'},
  15. ]
  16. ui.table(columns=columns, rows=rows, row_key='name')
  17. def more() -> None:
  18. @example('''#### Table with expandable rows
  19. Scoped slots can be used to insert buttons that toggle the expand state of a table row.
  20. See the [Quasar documentation](https://quasar.dev/vue-components/table#expanding-rows) for more information.
  21. ''', None)
  22. def table_with_expandable_rows():
  23. columns = [
  24. {'name': 'name', 'label': 'Name', 'field': 'name'},
  25. {'name': 'age', 'label': 'Age', 'field': 'age'},
  26. ]
  27. rows = [
  28. {'name': 'Alice', 'age': 18},
  29. {'name': 'Bob', 'age': 21},
  30. {'name': 'Carol'},
  31. ]
  32. with ui.table(columns=columns, rows=rows, row_key='name').classes('w-72') as table:
  33. table.add_slot('header', r'''
  34. <q-tr :props="props">
  35. <q-th auto-width />
  36. <q-th v-for="col in props.cols" :key="col.name" :props="props">
  37. {{ col.label }}
  38. </q-th>
  39. </q-tr>
  40. ''')
  41. table.add_slot('body', r'''
  42. <q-tr :props="props">
  43. <q-td auto-width>
  44. <q-btn size="sm" color="accent" round dense
  45. @click="props.expand = !props.expand"
  46. :icon="props.expand ? 'remove' : 'add'" />
  47. </q-td>
  48. <q-td v-for="col in props.cols" :key="col.name" :props="props">
  49. {{ col.value }}
  50. </q-td>
  51. </q-tr>
  52. <q-tr v-show="props.expand" :props="props">
  53. <q-td colspan="100%">
  54. <div class="text-left">This is {{ props.row.name }}.</div>
  55. </q-td>
  56. </q-tr>
  57. ''')