diff --git a/src/components/v-table/readme.md b/src/components/v-table/readme.md index 90cfe4cf85..76182e8055 100644 --- a/src/components/v-table/readme.md +++ b/src/components/v-table/readme.md @@ -126,6 +126,7 @@ export default defineComponent({ | `loadingText` | What text to show when table is loading with no items | `Loading...` | | `server-sort` | Handle sorting on the parent level. | `false` | | `row-height` | Height of the individual rows in px | `48` | +| `must-sort` | Requires the sort to be on a particular column | `false` | ## Events | Event | Description | Value | diff --git a/src/components/v-table/table-header/table-header.vue b/src/components/v-table/table-header/table-header.vue index d6f292d656..21e506e32b 100644 --- a/src/components/v-table/table-header/table-header.vue +++ b/src/components/v-table/table-header/table-header.vue @@ -79,6 +79,10 @@ export default defineComponent({ type: Boolean, default: false, }, + mustSort: { + type: Boolean, + default: false, + }, }, setup(props, { emit }) { const dragging = ref(false); @@ -124,33 +128,35 @@ export default defineComponent({ return classes; } - /** - * If current sort is not this field, use this field in ascending order - * If current sort is field, reverse sort order to descending - * If current sort is field and sort is desc, set sort field to null (default) - */ function changeSort(header: Header) { if (header.sortable === false) return; if (dragging.value === true) return; if (header.value === props.sort.by) { + if (props.mustSort) { + return emit('update:sort', { + by: props.sort.by, + desc: !props.sort.desc, + }); + } + if (props.sort.desc === false) { - emit('update:sort', { + return emit('update:sort', { by: props.sort.by, desc: true, }); - } else { - emit('update:sort', { - by: null, - desc: false, - }); } - } else { - emit('update:sort', { - by: header.value, + + return emit('update:sort', { + by: null, desc: false, }); } + + return emit('update:sort', { + by: header.value, + desc: false, + }); } function toggleSelectAll() { @@ -286,6 +292,8 @@ export default defineComponent({ width: 5px; height: 100%; cursor: ew-resize; + opacity: 0; + transition: opacity var(--fast) var(--transition); &::after { position: relative; @@ -301,5 +309,9 @@ export default defineComponent({ background-color: var(--input-action-color-hover); } } + + th:hover .resize-handle { + opacity: 1; + } } diff --git a/src/components/v-table/v-table.vue b/src/components/v-table/v-table.vue index 1b9ac5dee9..3d03ab162a 100644 --- a/src/components/v-table/v-table.vue +++ b/src/components/v-table/v-table.vue @@ -15,6 +15,7 @@ :all-items-selected="allItemsSelected" :fixed="fixedHeader" :show-manual-sort="showManualSort" + :must-sort="mustSort" @toggle-select-all="onToggleSelectAll" >