Skip to content

Commit 6a27fb5

Browse files
committed
feat: CDataTable: add header prop and itemsPerPageSelect options
1 parent f2fa024 commit 6a27fb5

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

src/components/index.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -563,7 +563,9 @@ export declare class CDataTable extends Vue {
563563
border: boolean
564564
outlined: boolean
565565
optionsRow: boolean | string
566+
header: boolean
566567
footer: boolean
568+
itemsPerPageSelect: boolean | { label?: string, values?: number[] }
567569
sorter: boolean | object
568570
columnFilter: boolean | object
569571
tableFilter: boolean | object

src/components/table/CDataTable.vue

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
:class="{ 'offset-sm-6': !tableFilter }"
2323
>
2424
<div class="form-inline justify-content-sm-end">
25-
<label class="mr-2">Items per page:</label>
25+
<label class="mr-2">{{paginationSelect.label}}</label>
2626
<select
2727
class="form-control"
2828
@change="paginationChange"
@@ -31,7 +31,7 @@
3131
{{perPageItems}}
3232
</option>
3333
<option
34-
v-for="(number, key) in [5,10,20,50]"
34+
v-for="(number, key) in paginationSelect.values"
3535
:val="number"
3636
:key="key"
3737
>
@@ -47,7 +47,7 @@
4747
<div :class="`position-relative ${responsive ? 'table-responsive' : '' }`">
4848
<table :class="tableClasses">
4949
<thead>
50-
<tr>
50+
<tr v-if="header">
5151
<template v-for="(name, index) in columnNames">
5252
<th
5353
@click="changeSort(rawColumnNames[index], index)"
@@ -245,7 +245,7 @@ export default {
245245
hover: Boolean,
246246
border: Boolean,
247247
outlined: Boolean,
248-
itemsPerPageSelect: Boolean,
248+
itemsPerPageSelect: [Boolean, Object],
249249
sorter: [Boolean, Object],
250250
tableFilter: [Boolean, Object],
251251
columnFilter: [Boolean, Object],
@@ -255,6 +255,10 @@ export default {
255255
},
256256
tableFilterValue: String,
257257
columnFilterValue: Object,
258+
header: {
259+
type: Boolean,
260+
default: true
261+
},
258262
footer: Boolean,
259263
loading: Boolean,
260264
clickableRows: Boolean
@@ -412,6 +416,12 @@ export default {
412416
label: this.tableFilter.label || 'Filter:',
413417
placeholder: this.tableFilter.placeholder || 'type string...'
414418
}
419+
},
420+
paginationSelect () {
421+
return {
422+
label: this.itemsPerPageSelect.label || 'Items per page:',
423+
values: this.itemsPerPageSelect.values || [5, 10, 20, 50]
424+
}
415425
}
416426
},
417427
methods: {

src/components/table/tests/CDataTable.spec.js

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -173,4 +173,16 @@ describe(ComponentName, () => {
173173
click(2)
174174
expect(localWrapper.vm.sorterState.asc).toBe(false)
175175
})
176+
it('Properly sets itemsPerPageSelect options', () => {
177+
const localWrapper = createCustomWrapper()
178+
179+
localWrapper.setProps({
180+
itemsPerPageSelect: {
181+
label: 'new label',
182+
values: [10, 25, 50]
183+
}
184+
})
185+
expect(localWrapper.vm.paginationSelect.label).toBe('new label')
186+
expect(localWrapper.vm.paginationSelect.values[1]).toBe(25)
187+
})
176188
})

0 commit comments

Comments
 (0)