From 182b4769e4dfa7dd80426d18360537f448aa6aaa Mon Sep 17 00:00:00 2001 From: cmgdragon Date: Fri, 26 Apr 2024 12:14:52 +0200 Subject: [PATCH] feat(VDataTable): enhance data-table color prop --- .../VDataTable/VDataTableFooter.tsx | 6 +++-- .../VDataTable/VDataTableHeaders.tsx | 24 +++++++++++-------- .../components/VDataTable/VDataTableRow.tsx | 3 +++ .../components/VDataTable/VDataTableRows.tsx | 2 ++ 4 files changed, 23 insertions(+), 12 deletions(-) diff --git a/packages/vuetify/src/components/VDataTable/VDataTableFooter.tsx b/packages/vuetify/src/components/VDataTable/VDataTableFooter.tsx index 799c7a4f492..42b57f5250a 100644 --- a/packages/vuetify/src/components/VDataTable/VDataTableFooter.tsx +++ b/packages/vuetify/src/components/VDataTable/VDataTableFooter.tsx @@ -12,12 +12,13 @@ import { useLocale } from '@/composables/locale' // Utilities import { computed } from 'vue' -import { genericComponent, propsFactory, useRender } from '@/util' +import { genericComponent, omit, propsFactory, useRender } from '@/util' // Types import type { PropType } from 'vue' export const makeVDataTableFooterProps = propsFactory({ + color: String, prevIcon: { type: IconValue, default: '$prev', @@ -110,6 +111,7 @@ export const VDataTableFooter = genericComponent<{ prepend: never }>()({ setItemsPerPage(Number(v)) } density="compact" @@ -137,7 +139,7 @@ export const VDataTableFooter = genericComponent<{ prepend: never }>()({ showFirstLastPage totalVisible={ props.showCurrentPage ? 1 : 0 } variant="plain" - { ...paginationProps } + { ...omit(paginationProps, ['color']) } > diff --git a/packages/vuetify/src/components/VDataTable/VDataTableHeaders.tsx b/packages/vuetify/src/components/VDataTable/VDataTableHeaders.tsx index 81c7a7d2d52..843ad3a2d36 100644 --- a/packages/vuetify/src/components/VDataTable/VDataTableHeaders.tsx +++ b/packages/vuetify/src/components/VDataTable/VDataTableHeaders.tsx @@ -204,6 +204,7 @@ export const VDataTableHeaders = genericComponent()({ if (column.key === 'data-table-select') { return slots['header.data-table-select']?.(columnSlotProps) ?? (showSelectAll.value && ( ()({ return columns.value.filter(column => column?.sortable && !props.disableSort) }) - const appendIcon = computed(() => { - const showSelectColumn = columns.value.find(column => column.key === 'data-table-select') - - if (showSelectColumn == null) return - - return allSelected.value ? '$checkboxOn' : someSelected.value ? '$checkboxIndeterminate' : '$checkboxOff' - }) - return ( ()({
()({ multiple={ props.multiSort } variant="underlined" onClick:clear={ () => sortBy.value = [] } - appendIcon={ appendIcon.value } onClick:append={ () => selectAll(!allSelected.value) } > {{ + append: () => ( + + ), chip: props => ( toggleSort(props.item.raw) : undefined } @@ -329,7 +331,9 @@ export const VDataTableHeaders = genericComponent()({ name="v-data-table-progress" absolute active - color={ typeof props.loading === 'boolean' ? undefined : props.loading } + color={ typeof props.loading === 'boolean' || props.loading === 'true' + ? props.color + : props.loading } indeterminate v-slots={{ default: slots.loader }} /> diff --git a/packages/vuetify/src/components/VDataTable/VDataTableRow.tsx b/packages/vuetify/src/components/VDataTable/VDataTableRow.tsx index 93b6f01e12a..8e2ce79e20b 100644 --- a/packages/vuetify/src/components/VDataTable/VDataTableRow.tsx +++ b/packages/vuetify/src/components/VDataTable/VDataTableRow.tsx @@ -37,6 +37,7 @@ export type VDataTableRowSlots = { } export const makeVDataTableRowProps = propsFactory({ + color: String, index: Number, item: Object as PropType, cellProps: [Object, Function] as PropType>, @@ -163,12 +164,14 @@ export const VDataTableRow = genericComponent( return slots['item.data-table-select']?.({ ...slotProps, props: { + color: props.color, disabled: !item.selectable, modelValue: isSelected([item]), onClick: withModifiers(() => toggleSelect(item), ['stop']), }, }) ?? ( = VDataTableGroupHeaderRowSlots & VDataTableR } export const makeVDataTableRowsProps = propsFactory({ + color: String, loading: [Boolean, String], loadingText: { type: String, @@ -162,6 +163,7 @@ export const VDataTableRows = genericComponent( } : undefined, index, item, + color: props.color, cellProps: props.cellProps, collapseIcon: props.collapseIcon, expandIcon: props.expandIcon,