Skip to content

Commit 79d6e11

Browse files
committed
feat: CDataTable: add noItemsView prop #67
1 parent f130496 commit 79d6e11

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

src/components/index.d.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -575,6 +575,9 @@ export declare class CDataTable extends Vue {
575575
footer: boolean
576576
loading: boolean
577577
clickableRows: boolean
578+
noItemsView: {
579+
noItems?: string, noResults?: string
580+
}
578581
}
579582

580583
export declare class CTabs extends Vue {

src/components/table/CDataTable.vue

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,7 @@
145145
<slot name="no-items-view">
146146
<div class="text-center my-5">
147147
<h2>
148-
{{ passedItems.length ? 'No filtering results ' : 'No items' }}
148+
{{ noItemsText }}
149149
<CIcon
150150
width="30"
151151
:content="$options.icons.cilBan"
@@ -263,7 +263,8 @@ export default {
263263
},
264264
footer: Boolean,
265265
loading: Boolean,
266-
clickableRows: Boolean
266+
clickableRows: Boolean,
267+
noItemsView: Object
267268
},
268269
data () {
269270
return {
@@ -439,6 +440,13 @@ export default {
439440
label: this.itemsPerPageSelect.label || 'Items per page:',
440441
values: this.itemsPerPageSelect.values || [5, 10, 20, 50]
441442
}
443+
},
444+
noItemsText () {
445+
const customValues = this.noItemsView || {}
446+
if (this.passedItems.length) {
447+
return customValues.noResults || 'No filtering results'
448+
}
449+
return customValues.noItems || 'No items'
442450
}
443451
},
444452
methods: {

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

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ function createCustomWrapper () {
4646
footer: true,
4747
sorterValue: { column: 'username', asc: false },
4848
columnFilterValue: { registered: '2', 'non_existing': 'smh' },
49-
pagination: true
49+
pagination: true,
50+
noItemsView: { noResults: 'no results text', noItems: 'no items text'}
5051
},
5152
slots: {
5253
details: '<div class="details">Details slot</div>'
@@ -194,4 +195,15 @@ describe(ComponentName, () => {
194195
expect(localWrapper.vm.paginationSelect.label).toBe('new label')
195196
expect(localWrapper.vm.paginationSelect.values[1]).toBe(25)
196197
})
198+
it('Properly sets no items view from prop', () => {
199+
const localWrapper = createCustomWrapper()
200+
localWrapper.setProps({
201+
tableFilterValue: '12322'
202+
})
203+
expect(localWrapper.text()).toContain('no results text')
204+
localWrapper.setProps({
205+
items: []
206+
})
207+
expect(localWrapper.text()).toContain('no items text')
208+
})
197209
})

0 commit comments

Comments
 (0)