From 7bdb923691bbda4b163b7507ced11ee831565812 Mon Sep 17 00:00:00 2001 From: Everton Date: Tue, 28 Nov 2023 21:44:28 -0300 Subject: [PATCH 1/4] feat(Table): expand row --- .../examples/TableExampleExpandable.vue | 47 ++++++++++++ docs/content/4.data/1.table.md | 14 ++++ src/runtime/components/data/Table.vue | 71 +++++++++++++++---- 3 files changed, 120 insertions(+), 12 deletions(-) create mode 100644 docs/components/content/examples/TableExampleExpandable.vue diff --git a/docs/components/content/examples/TableExampleExpandable.vue b/docs/components/content/examples/TableExampleExpandable.vue new file mode 100644 index 0000000000..52337e4697 --- /dev/null +++ b/docs/components/content/examples/TableExampleExpandable.vue @@ -0,0 +1,47 @@ + + + diff --git a/docs/content/4.data/1.table.md b/docs/content/4.data/1.table.md index f210f4baec..c5a36ea4a1 100644 --- a/docs/content/4.data/1.table.md +++ b/docs/content/4.data/1.table.md @@ -244,6 +244,20 @@ componentProps: --- :: +### Expandable + +You can use the `expand` slot to display extra information about a row. You will have access to the `row` property in the slot scope. + +::component-example{class="grid"} +--- +padding: false +component: 'table-example-expandable' +componentProps: + class: 'flex-1' +--- +:: + + ### Loading Use the `loading` prop to display a loading state. diff --git a/src/runtime/components/data/Table.vue b/src/runtime/components/data/Table.vue index be65e7df9a..fb5b324891 100644 --- a/src/runtime/components/data/Table.vue +++ b/src/runtime/components/data/Table.vue @@ -7,6 +7,10 @@ + + Expand + + @@ -160,6 +195,8 @@ export default defineComponent({ const sort = ref(defu({}, props.sort, { column: null, direction: 'asc' })) + const openedRows = ref([]) + const defaultSort = { column: sort.value.column, direction: null } const rows = computed(() => { @@ -271,6 +308,14 @@ export default defineComponent({ return get(row, rowKey, defaultValue) } + function toggleOpened (index: number) { + if (openedRows.value.includes(index)) { + openedRows.value = openedRows.value.filter((i) => i !== index) + } else { + openedRows.value.push(index) + } + } + return { // eslint-disable-next-line vue/no-dupe-keys ui, @@ -287,11 +332,13 @@ export default defineComponent({ emptyState, // eslint-disable-next-line vue/no-dupe-keys loadingState, + openedRows, isSelected, onSort, onSelect, onChange, - getRowData + getRowData, + toggleOpened } } }) From 6eb0003715a34e8eac4ab2d5049471676fee069c Mon Sep 17 00:00:00 2001 From: Everton Date: Tue, 28 Nov 2023 22:29:41 -0300 Subject: [PATCH 2/4] refactor: update toggle button --- src/runtime/components/data/Table.vue | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/runtime/components/data/Table.vue b/src/runtime/components/data/Table.vue index fb5b324891..19dd5c6788 100644 --- a/src/runtime/components/data/Table.vue +++ b/src/runtime/components/data/Table.vue @@ -64,19 +64,13 @@ :class="[ui.td.base, ui.td.padding, ui.td.color, ui.td.font, ui.td.size]" > - + /> From d977a97427bfb4a2ffc8839ddfa58481fc713eed Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Tue, 23 Jul 2024 15:16:41 +0200 Subject: [PATCH 3/4] up --- docs/content/2.components/table.md | 1 - 1 file changed, 1 deletion(-) diff --git a/docs/content/2.components/table.md b/docs/content/2.components/table.md index ea1a598e28..80d33946a5 100644 --- a/docs/content/2.components/table.md +++ b/docs/content/2.components/table.md @@ -314,7 +314,6 @@ componentProps: --- :: - ### Loading Use the `loading` prop to indicate that data is currently loading with an indeterminate [Progress](/components/progress#indeterminate) bar. From 8c118a0e800b93ff67a4cedd25832b036513c0aa Mon Sep 17 00:00:00 2001 From: Benjamin Canac Date: Tue, 23 Jul 2024 15:34:49 +0200 Subject: [PATCH 4/4] up --- .../content/examples/TableExampleExpandable.vue | 4 +++- docs/content/2.components/table.md | 2 +- src/runtime/components/data/Table.vue | 11 ++++++----- src/runtime/ui.config/data/table.ts | 10 ++++++++++ 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/docs/components/content/examples/TableExampleExpandable.vue b/docs/components/content/examples/TableExampleExpandable.vue index 52337e4697..90f1adf239 100644 --- a/docs/components/content/examples/TableExampleExpandable.vue +++ b/docs/components/content/examples/TableExampleExpandable.vue @@ -41,7 +41,9 @@ const people = [{ diff --git a/docs/content/2.components/table.md b/docs/content/2.components/table.md index 80d33946a5..fa9776d98e 100644 --- a/docs/content/2.components/table.md +++ b/docs/content/2.components/table.md @@ -301,7 +301,7 @@ componentProps: --- :: -### Expandable +### Expandable :u-badge{label="New" class="align-middle ml-2 !rounded-full" variant="subtle"} You can use the `expand` slot to display extra information about a row. You will have access to the `row` property in the slot scope. diff --git a/src/runtime/components/data/Table.vue b/src/runtime/components/data/Table.vue index 4aaf7e9aee..6be9c4a7ab 100644 --- a/src/runtime/components/data/Table.vue +++ b/src/runtime/components/data/Table.vue @@ -81,11 +81,8 @@ :class="[ui.td.base, ui.td.padding, ui.td.color, ui.td.font, ui.td.size]" > @@ -203,6 +200,10 @@ export default defineComponent({ type: String, default: () => config.default.sortDescIcon }, + expandButton: { + type: Object as PropType