diff --git a/.eslintrc.js b/.eslintrc.js index 62d8936e..d810f6fd 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,6 +20,7 @@ module.exports = { rules: { 'vue/multi-word-component-names': 'off', + 'vue/no-deprecated-slot-attribute': 'off', }, overrides: [ diff --git a/components/src/widgets/complexTable/widget.spec.js b/components/src/widgets/complexTable/widget.spec.js index 075e7e30..62db04d2 100644 --- a/components/src/widgets/complexTable/widget.spec.js +++ b/components/src/widgets/complexTable/widget.spec.js @@ -87,6 +87,50 @@ describe('ComplexTable widget', () => { expect(result).toEqual(false); }); }); + + describe('#filterableHeaders', () => { + it('returns the subarray of filterable headers', () => { + const wrapper = mount(ComplexTable, { + propsData: { + totalItems: 35, + items: ['hh'], + headers: [ + {value: 'name', text: 'Name', filterable: true}, + {value: 'lastName', text: 'Lastname', filterable: true}, + {value: 'age', text: 'Age'}, + ], + }, + }) + + result = wrapper.vm.filterableHeaders; + + expect(result).toEqual([{"filterable": true, "text": "Name", "value": "name"}, {"filterable": true, "text": "Lastname", "value": "lastName"}]); + }); + }); + + describe('#cleanFiltersApplied', () => { + it('returns a list of filters applied with value', () => { + const wrapper = mount(ComplexTable, { + propsData: { + totalItems: 35, + items: ['hh'], + headers: [ + {value: 'name', text: 'Name', filterable: true}, + {value: 'lastName', text: 'Lastname', filterable: true}, + {value: 'age', text: 'Age'}, + ], + }, + }) + + wrapper.get('ui-button').trigger('click') + const filterableItems = wrapper.findAll('.filter-item ui-textfield') + filterableItems[0].trigger('input', { detail: ['my name'] }) + + result = wrapper.vm.cleanFiltersApplied; + + expect(result).toEqual({ name: 'my name' }); + }); + }); }); describe('methods', () => { @@ -124,6 +168,34 @@ describe('ComplexTable widget', () => { }); }); + describe('#applyFilters', () => { + it('emits filtersApplied event', () => { + const wrapper = mount(ComplexTable, { + propsData: { + totalItems: 35, + items: ['hh'], + headers: [ + {value: 'name', text: 'Name', filterable: true}, + {value: 'lastName', text: 'Lastname', filterable: true}, + {value: 'age', text: 'Age'}, + ], + }, + }) + + wrapper.get('ui-button').trigger('click') + const filterableItems = wrapper.findAll('.filter-item ui-textfield') + filterableItems[0].trigger('input', { detail: ['my name'] }) + + result = wrapper.vm.applyFilters(); + + expect(wrapper.emitted('filtersApplied')).toEqual([[ + { + name: 'my name', + } + ]]) + }); + }); + describe('#prepareItems', () => { it('returns the first 10 items', () => { const itemsList = ['1','2','3','4','5','6','7','8','9','10','11','12']; diff --git a/components/src/widgets/complexTable/widget.vue b/components/src/widgets/complexTable/widget.vue index 438ef093..67f44a16 100644 --- a/components/src/widgets/complexTable/widget.vue +++ b/components/src/widgets/complexTable/widget.vue @@ -1,4 +1,46 @@