Files
directus/docs/reference/app/components/v-table.md
Nicola Krumschmidt 1961dc188b Port the app to Vue 3 (#5339)
* Fix linting errors

* Fix remaining catch all routes

* Fix directive registration regression

* Replace $router global with composition function

* Fix v-bind overwrite order in nested-draggable

* Migrate vuedraggable

* Fix building with empty translation files

* Add comment regarding array equality check

* Fix markdown-it plugins import

* Fix newly introduced wrong store usage

* Fix v-button-group model

* Fix v-fancy-select model

* Fix v-field-template model

* Fix v-input model

* Fix v-item-group model

* Fix v-menu model

* Fix v-select model

* Fix v-tabs model

* Fix v-tabs-items model

* Fix v-textarea model

* Fix v-checkbox model

* Fix v-dialog model

* Fix v-drawer model

* Fix v-form model

* Fix v-list model

* Fix v-table model

* Fix v-detail model

* Fix v-radio model

* Fix v-switch model

* Fix files-navigation model

* Fix replace-file model

* Fix bookmark-add model

* Fix bookmark-edit model

* Fix drawer-batch model

* Fix drawer-item model

* Fix file-lightbox model

* Fix image-editor model

* Fix notifications-preview model

* Fix users-invite model

* Lowercase editor component name

* Fix collections-filter model

* Fix filter-input model

* Fix filter-sidebar-detail model

* Fix folder-picker model

* Fix interface-checkboxes model

* Fix interface-code model

* Fix interface-icon model

* Fix interface-repeater model

* Fix refresh-sidebar-detail model

* Fix search-input model

* Fix interface/display component option v-model usage

* Replace calling listener through $attrs with $emit and add emits option

* Add comment regarding useCustomSelection emits

* Fix context menu activation

* Fix collectionsStore access

* Fix popperjs

* Hotfix useGroupable

* Fix notifications-preview old prop name

* Fix module bar tooltip translation

* Fix useSync type signature

* Fix update:layoutOptions emit name

* Fix usePermissions missing imports regression

* Revert changes to docs vuepress instance

* Fix module-relative-resolve vite plugin when serving

* Fix docs

* Fix refresh on first load

* Fix creating new collection

* Fix loading of collection route

* Fix v-dialog/v-menu appear transition

* Access props directly

* Fix v-table clickable

* Fix v-drawer cancelable

* Fix v-icon clickable

* Fix v-input clickable

* Fix v-list-group clickable

* Fix v-list-item clickable

* Fix v-overlay clickable

* Fix header-bar primary button

* Fix v-table item.* slot

* Fix vue warning regarding exposed variables starting with _ or $

* Fix usePermissions

* Add package-lock.json

* Fix v-form unset regression

* Fix vue shims

* Fix useCustomSelection emit

* Make extensions arrays shallow

* Move teleport targets out of the vue app

* Fix v-field-select model

* Fix v-slider model

* Fix v-pagination model

* Fix card model

* Fix v-select item-value prop usage

* Fix layout-sidebar-detail model

* Fix form-field model

* Fix form-field-menu model

* Fix form-field-interface model

* Fix v-form model

* Use kebab-case for modelValue

* Update package-lock.json

* Add missing dependency

* Replace $t with i18n composable

* Replace remaining usages of $t

* Replace $te with i18n composable

* Replace $n with i18n composable

* Disable global injection in vue-i18n

* Replace i18n.global.t usage where composable is already imported

* Replace remaining i18n.global.t usage with composable

* Replace remaining i18n.global usages with composable

* Fix uploadFile emitter regression

* Remove inheritAttrs: false from file-info-sidebar-detail

* Hotfix v-input

* Update .eslintrc.js

* Fix use-preview

* Fix eslint issues

* Remove unused imports

* Fix extension getter type

* Refactor layout structure and fix tabular layout

* Fix build

* Fix cards layout

* Hotfix vuedraggable

* Dev is true again

* Register export-sidebar-detail globally

* Deconstruct layout state

* Fix calendar layout

* Fix cards/calendar layouts

* Fix layout options when switching layout

* Replace marked usage with md util

* Use useLayout everywhere

* Fix type issue

* Fix codemirror dynamic imports

* Fix data-fns dynamic import

* Fix useLayout selection

* Fix v-avatar scoped styling

* Remove unused v-button-group component

* Remove v-deep from v-card-actions

* Replace v-deep in v-dialog

* Use correct pseudoclasses for vue3

* Fix v-deep in v-field-template

* Replace v-deep in v-list-item-content

* Replace v-deep in v-list-item

* v-deep in v-list

* v-deep in v-notice

* Replace breakpoint mixin

* Replace v-deep in v-button

* Enforce empty line before block

* v-deep in v-pagination

* No white lines on the inner brackets of a block please

* Replace v-deep in v-select

* Fix stylelint rule

* Replace v-deep in v-table

* Replace v-deep in v-tabs

* Replace v-deep in rich text input

* Replace v-deep

* Replace v-deep elsewhere

* Needs more stylelint tweaks, but v-deep is done

* Fix translations interface

* Fix date layout

* Fix npm install

* Fix router catch all routes

* Fix layout options

* Remove call to next in router guards

* Remove vue router in-component guards

* Refactor module route registration

* Fix collections module navigation

* Fix settings module navigation

* Fix router-passthrough in devtools

* Refactor docs export and docs route registration

* Import docs routes using exported function

* Remove moduleRelativeResolve vite hack

* Re-add dev scripts

* Fix deprecated hljs usage

* Use activateContextMenu without parens

* Re-add readme/license/editorconfig

* Fix groupable

* Fix initial docs navigation

* Move global app css to app component

* Fix collection navigation icon color

* Fix field setup style

* Fix divider icon style

* Fix optional v-input slots

* Use $slots direct property access

* Fix docs font style

* Fix docs v-deep

* Fix docs add missing styles

* Remove docs style margin

* Fix save options color

* Fix nested v-slotted usage

* Fix v-button exact prop

* Fix v-list-item exact prop

* Fix package-lock.json

* Improve useSync type

* Fix route type error

* Fix bookmark router links

* Add redirect to route with bookmark

* Fix files module folder route

* Fix users module role route

* Add redirect routes to files and roles sub-routes

* Fix users module role active state

* Replace routerPassthrough function with object

* Nest file routes

* Improve module bar hidden check

* Remove slash from module router link

* Fix files and folder navigation

* Revert users route nesting

* Fix buttons in list

* Don't make nav item mandatory in left sidebar

* Fix infinite loop in box open

* Fix interactivity in v-list items

* Fix docs menu jumps

* Fix right click positioning

* Fix missing translations

* Fix close/open alignment of color interface

* Fix code editor interfaces

* Fix relation access in cards layout

* Remove template ref from collection-or-item

* Revert jest-environment-jsdom package update

* Fix package-lock.json

* Resolve vue3 TODO comments

* Fix layout presets

* Remove reactivity fix

* Remove Todo3 comment

* Fix icon color override

* Add error message to useLayoutState

* Add composable to properly transition dialog routes

* Fix new collection transition

* Fix add new role transition

* Fix add new file transition

* Fix activity item transition

* Fix error type in useItems

* Fix collection error dialog transition

* Fix field detail transition

* Fix permissions detail transition

* Fix store getters types

* Update package-lock

* Fix preview icon color

* Fix reference to selections

* Fix linter warnings

Co-authored-by: rijkvanzanten <rijkvanzanten@me.com>
2021-06-08 15:59:55 -04:00

166 lines
7.9 KiB
Markdown

# Table
Used to display data like a list of objects in a table like view.
```html
<v-table
:headers="[
{
text: 'Name',
value: 'name'
},
{
text: 'Phone Number',
value: 'tel'
},
{
text: 'Contact',
value: 'person'
}
]"
:items="[
{
name: 'Amsterdam',
tel: '020-1122334',
person: 'Mariann Rumble'
},
{
name: 'New Haven',
tel: '(203) 687-9900',
person: 'Helenka Killely'
}
]"
/>
```
## Headers
| Property | Description | Default |
| ---------- | ------------------------------------------------------------ | ------- |
| `text`\* | Text displayed in the column | -- |
| `value`\* | Name of the object property that holds the value of the item | -- |
| `align` | Text alignment of value. One of `left`, `center`, `right` | `left` |
| `sortable` | If the column can be sorted on | `true` |
| `width` | Custom width of the column in px | -- |
## Custom element / component for header
You can override the displayed header name by using the dynamic `header.[name]` slot. `[name]` is the `value` property
in the header item for this column sent to `headers`.
```html
<v-table :headers="headers" :items="items">
<template #[`header.name`]="{ header }">
<v-button>{{ header.text }}</v-button>
</template>
</v-table>
```
In this slot, you have access to the `header` through the scoped slot binding.
## Custom element / component for cell value
You can override the columns in a row by using the dynamic `item.[name]` slot. `[name]` is the `value` property in the
header item for this column sent to `headers`.
```html
<v-table :headers="headers" :items="items">
<template #[`item.name`]="{ item }">
<v-button>{{ item.name }}</v-button>
</template>
</v-table>
```
In this slot, you have access to the `item` through the scoped slot binding.
## Resizable rows
Adding the `show-resize` prop allows the user to resize the columns at will. You can keep your headers updated by using
the `v-model` directive or listening to the `update:headers` event:
```html
<template>
<v-table v-model:headers="headers" :items="[]" show-resize>
</template>
<script>
import { defineComponent, ref } from 'vue';
import { HeaderRaw } from '@/components/v-table/types';
export default defineComponent({
setup() {
const headers = ref<HeaderRaw[]>([
{
text: 'Column 1',
value: 'col1',
width: 150
},
{
text: 'Column 1',
value: 'col1',
width: 300
}
]);
return { headers };
}
});
</script>
```
## Reference
#### Props
| Prop | Description | Default | Type |
| -------------------- | ------------------------------------------------------------------------------------------------- | --------------------------- | ------------- |
| `headers`\* | What columns to show in the table. Supports the `v-model` directive | | `HeaderRaw[]` |
| `items`\* | The individual items to render as rows | | `Item[]` |
| `disabled` | Disable edits to items in the form (drag/select) | `false` | `Boolean` |
| `fixed-header` | Make the header fixed | `false` | `Boolean` |
| `inline` | Display the table inline with other text | `false` | `Boolean` |
| `item-key` | Primary key of the item. Used for keys / selections | `'id'` | `String` |
| `loading-text` | What text to show when table is loading with no items | `i18n.global.t('loading')` | `String` |
| `loading` | Show progress indicator | `false` | `Boolean` |
| `manual-sort-key` | What field to use for manual sorting | `null` | `String` |
| `must-sort` | Requires the sort to be on a particular column | `false` | `Boolean` |
| `no-items-text` | What text to show when table doesn't contain any rows | `i18n.global.t('no_items')` | `String` |
| `row-height` | Height of the individual rows in px | `48` | `Number` |
| `selection-use-keys` | What field to use for selection | `false` | `Boolean` |
| `selection` | What items are selected. Can be used with `v-model` as well | `() => []` | `any` |
| `server-sort` | Handle sorting on the parent level. | `false` | `Boolean` |
| `show-manual-sort` | Show manual sort drag handles | `false` | `Boolean` |
| `show-resize` | Show resize handlers | `false` | `Boolean` |
| `show-select` | Show checkboxes | `false` | `Boolean` |
| `sort` | What column / order to sort by. Supports the `v-model` directive. `{ by: string, desc: boolean }` | `null` | `Sort` |
#### Events
| Event | Description | Value |
| ---------------- | --------------------------------------------------- | ------------------------------- |
| `update:sort` | `v-model` event for `sort` prop | `{ by: string, desc: boolean }` |
| `click:row` | When a row has been clicked | |
| `update:items` | When changes to the items where made | |
| `manual-sort` | When a user manually sorts the items | |
| `update:headers` | `v-model` event for `headers` prop or `HeaderRaw[]` | |
| `item-selected` | Emitted when an item is selected or deselected | `{ item: any, value: boolean }` |
| `select` | Emitted when selected items change | `any[]` |
#### Slots
| Slot | Description | Data |
| ------------------------ | ---------------------------- | ---- |
| `header.${header.value}` | A slot for each header | |
| `item.${header.value}` | A slot for each item | |
| `item-append` | Adds to the end of each item | |
| `footer` | Could be used for pagination | |
#### CSS Variables
| Variable | Default |
| ----------------------------- | -------------------------- |
| `--v-table-height` | `auto` |
| `--v-table-sticky-offset-top` | `0` |
| `--v-table-color` | `var(--foreground-normal)` |
| `--v-table-background-color` | `var(--background-page)` |