mirror of
https://github.com/directus/directus.git
synced 2026-01-31 02:17:58 -05:00
* 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>
166 lines
7.9 KiB
Markdown
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)` |
|