Skip to content

Commit d573fb6

Browse files
authoredDec 13, 2024··
fix(Table): v-model causing first column missing (#2890)
1 parent 1d08d31 commit d573fb6

File tree

1 file changed

+26
-11
lines changed

1 file changed

+26
-11
lines changed
 

‎src/runtime/components/data/Table.vue

+26-11
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
:class="[ui.th.base, ui.th.padding, ui.th.color, ui.th.font, ui.th.size, column.key === 'select' && ui.checkbox.padding, column.class]"
1919
:aria-sort="getAriaSort(column)"
2020
>
21-
<slot v-if="!singleSelect && modelValue && (column.key === 'select' || shouldRenderColumnInFirstPlace(index, 'select'))" name="select-header" :indeterminate="indeterminate" :checked="isAllRowChecked" :change="onChange">
21+
<slot v-if="!singleSelect && modelValue && column.key === 'select'" name="select-header" :indeterminate="indeterminate" :checked="isAllRowChecked" :change="onChange">
2222
<UCheckbox
2323
:model-value="isAllRowChecked"
2424
:indeterminate="indeterminate"
@@ -93,7 +93,7 @@
9393
/>
9494
</td>
9595
<td v-for="(column, subIndex) in columns" :key="subIndex" :class="[ui.td.base, ui.td.padding, ui.td.color, ui.td.font, ui.td.size, column?.rowClass, row[column.key]?.class, column.key === 'select' && ui.checkbox.padding]">
96-
<slot v-if="modelValue && (column.key === 'select' || shouldRenderColumnInFirstPlace(subIndex, 'select')) " name="select-data" :checked="isSelected(row)" :change="(ev: boolean) => onChangeCheckbox(ev, row)">
96+
<slot v-if="modelValue && column.key === 'select' " name="select-data" :checked="isSelected(row)" :change="(ev: boolean) => onChangeCheckbox(ev, row)">
9797
<UCheckbox
9898
:model-value="isSelected(row)"
9999
v-bind="ui.default.checkbox"
@@ -274,7 +274,30 @@ export default defineComponent({
274274
setup(props, { emit, attrs: $attrs }) {
275275
const { ui, attrs } = useUI('table', toRef(props, 'ui'), config, toRef(props, 'class'))
276276
277-
const columns = computed(() => props.columns ?? Object.keys(props.rows[0] ?? {}).map(key => ({ key, label: upperFirst(key), sortable: false, class: undefined, sort: defaultSort }) as TableColumn))
277+
const columns = computed(() => {
278+
const defaultColumns = props.columns ?? (
279+
Object.keys(props.rows[0]).map(key => ({
280+
key,
281+
label: upperFirst(key),
282+
sortable: false,
283+
class: undefined,
284+
sort: defaultSort
285+
}))
286+
) as TableColumn[]
287+
288+
const hasColumnSelect = defaultColumns.find(v => v.key === 'select')
289+
290+
if (hasColumnSelect || !props.modelValue) {
291+
return defaultColumns
292+
}
293+
294+
return [{
295+
key: 'select',
296+
sortable: false,
297+
class: undefined,
298+
sort: defaultSort
299+
}, ...defaultColumns]
300+
})
278301
279302
const sort = useVModel(props, 'sort', emit, { passive: true, defaultValue: defu({}, props.sort, { column: null, direction: 'asc' }) })
280303
const expand = useVModel(props, 'expand', emit, {
@@ -435,13 +458,6 @@ export default defineComponent({
435458
return expand.value?.openedRows ? expand.value.openedRows.some(openedRow => compare(openedRow, row)) : false
436459
}
437460
438-
function shouldRenderColumnInFirstPlace(index: number, key: string) {
439-
if (!props.columns) {
440-
return index === 0
441-
}
442-
return index === 0 && !props.columns.find(col => col.key === key)
443-
}
444-
445461
function toggleOpened(row: TableRow) {
446462
expand.value = {
447463
openedRows: isExpanded(row) ? expand.value.openedRows.filter(v => !compare(v, row)) : props.multipleExpand ? [...expand.value.openedRows, row] : [row],
@@ -502,7 +518,6 @@ export default defineComponent({
502518
toggleOpened,
503519
getAriaSort,
504520
isExpanded,
505-
shouldRenderColumnInFirstPlace,
506521
retriggerSlot
507522
}
508523
}

0 commit comments

Comments
 (0)
Please sign in to comment.