This is a complete datatable component for vuejs.
Examples : https://stackblitz.com/edit/vue3-bc-datatable-examples
npm install vue3-bc-datatable
Import component and derivatives as types :
import {
Datatable, // component
DatatableColumn, // type column
DatatableRow, // type row
DatatableSort, // type sorted values
} from 'vue3-bc-datatable';
Import the css too :
import 'vue3-bc-datatable/dist/style.css';
prop | type | default | description | ||
---|---|---|---|---|---|
Identification | |||||
identifier | string | "" | to identify while debuging | ||
title | sting | "" | A title above the table | ||
Data | |||||
columns | Partial<DatatableColumn>[] | [] | The columns of the table, configuration of features and design | ||
rows | Partial<DatatableRow>[] | [] | All the rows of the table (without filtering, sorting, pagination, ...) | ||
propId | string | "id" | the property of a row to use as id for the row, must be valid | ||
User experience | |||||
loading | boolean | false | display the loader section for user experience | ||
loadingMessage | string | "Loading in progress... | The message display if no data but loading | ||
noResultsMessage | string | "No results" | The message display if no data because of an interaction (filters) | ||
noDataMessage | string | "No data" | The message display if no data | ||
Manipulation | |||||
sorts | DatatableSort | undefined | The way to sort the rows to display | ||
multiSort | boolean | false | Enable the multi column sort | ||
filters | Function | DatatableFilter | undefined | The way to filter the rows to display | ||
expand | DatatableExpansion | undefined | The way to filter the rows to display | ||
select | DatatableSelection | undefined | To check (checkbox) the rows in the selection | ||
pagination | Not Implemented Yet !! | ||||
Design | |||||
hideHeader | boolean | false | To remove the thead from the table | ||
displayFooter | boolean | false | To dispaly the tfoot of the table | ||
displayFilters | boolean | false | To display the row with inputs in header or footer for filtering | ||
stick | DatatableSticky | undefined | to set sticky the header (thead) or footer (tfoot) | ||
density | 'default' | 'comfortable' | 'compact' | number | null | 'default' | for the cell height and padding | ||
dark | boolean | false | To set in a dark theme (see css variable to change colors) | ||
dividers | DatatableDividers | false | To display border between rows (for cols see options in columns) | ||
tableStyle | StyleProps | {} | vue props style to apply on table | ||
tableClass | ClassProps | string[] | vue props class to apply on table | ||
nested | boolean | false | Change a bit the design, used for the nested table | ||
event | data | description |
---|---|---|
displaying | DatatableRow[] | The rows displayed, after sort, filters, ... |
update:sorts | DatatableSort | The new way of sorting rows (after interaction with sort on columns) |
update:filters | DatatableFilter | The new way of filtering rows (after interaction with filter input on columns) |
update:select | DatatableSelection | The new selection of rows (after checking a selection checkbox) |
update:expand | DatatableExpansion | The new expansions (after collpasing or expanding an expansion) |
slot name | data | description | |
---|---|---|---|
Wrapper | |||
title | getThis | To customise the Title zone on top of the table wrapper | |
top | getThis | To customise the top zone (below title) of the table wrapper, useful to use a custom filters or any other features in the component | |
default | getThis | To replace the table component in the wrapper | |
pagination | getThis + ___ | To define your own pagination | |
bottom | getThis | To replace the table component in the wrapper | |
Table | |||
header | getThis | To customize thead content | |
progress | loading + dark + density | To replace the default progress-bar when loading | |
body | getThis | To customize tbody content | |
no-data | filters + loading + columns + displaying + message | To set a custom content in the tr for message when no rows displayed | |
footer | getThis | To customize tfoot content | |
Header/Footer (datatable-headers) | |||
header-tr | To set the content of the header tr | ||
header-<columnId> | To set the content of a specific cell (column) of the header tr (use th/td) | ||
header-tr-filters | To set the content of the filters tr | ||
header-<columnId>-filter | To set the content of a cell (column) of the header tr | ||
footer-tr | To set the content of the footer tr | ||
footer-<columnId> | To set the content of a specific cell (column) of the footer tr (use th/td) | ||
footer-tr-filters | To set the content of the filters tr | ||
footer-<columnId>-filter | To set the content of a cell (column) of the footer tr | ||
filters | To use a custom filters cell (use th/td) for every filters of the table | ||
Content | |||
row-<rowId> | Content of a specfif row | ||
rows | Content of all rows | ||
col-<columnId>-row-<rowId> | Content of a cell (specific column) for a specific row (use th/td) | ||
cols-<columnId> | Content of a cell (specific column) for all rows (use th/td) | ||
cell-<columnId>-row-<rowId> | Content of a cell (specific column) for a specific row | ||
cells-<columnId> | Content of a cell (specific column) for all rows | ||
Expansion | |||
row-<rowId>-expansion-<expansion> | Content of a specific expansion of a specific row | ||
rows-expansion-<expansion> | Content of a specific expansion of all rows | ||
rows-expansions | content of all expansions | ||
getThis is a computed with all the props, computed, functions useful and the dom ref to the table.
var | default | description |
---|---|---|
--bcdatatable-title-font-size | 1.8rem | Font size of title |
--bcdatatable-background-color-light | white | The main background-color in light mode |
--bcdatatable-background-color-light-active | #e1e1e1 | The active for interaction element in light mode |
--bcdatatable-background-color-light-hover | #cccccc | The hover for interaction element in light mode |
--bcdatatable-background-color-dark | #1e1e1e | The main background-color in dark mode |
--bcdatatable-background-color-dark-active | #313131 | The active for interaction element in dark mode |
--bcdatatable-background-color-dark-hover | #444444 | The hover for interaction element in dark mode |
--bcdatatable-text-color-light | black | Font color in light mode |
--bcdatatable-text-color-dark | white | Font color in dark mode |
--bcdatatable-text-font-size | 0.9rem | Font size of text content |
--bcdatatable-button-color-light | lightgray | Button color in light mode |
--bcdatatable-button-color-dark | gray | Button color in dark mode |
--bcdatatable-button-hover-color-light | gray | Button hover color in light mode |
--bcdatatable-button-hover-color-dark | lightgray | Button hover color in dark mode |
--bcdatatable-border-options | thin solid | The border style or rows/columns |
--bcdatatable-border-color-light | rgba(0, 0, 0, 0.12) | The border color in light mode |
--bcdatatable-border-color-dark | hsla(0, 0%, 100%, 0.12) | The border color in dark mode |
--bcdatatable-expansion-shadow-light | rgb(50 50 50 / 50%) | The shadow color of expansions in light mode |
--bcdatatable-expansion-shadow-dark | rgb(200 200 200 / 50%) | The shadow color of expansions in dark mode |
--bcdatatable-expansion-shadow-top | inset 0 4px 10px -8px | The shadow style for top of expansions |
--bcdatatable-expansion-shadow-bottom | inset 0 -4px 10px -8px | The shadow style for bottom of expansions |
- [ ] Pagination add a pagination feature
- [ ] Nested sort sort in nested table
- [ ] Nested filter filter in nested table
- [ ] Nested Slots custom slots for expansions
- [ ] Group rows by values for a column