@gitlab/ui 114.1.0 → 114.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (141) hide show
  1. package/dist/components/base/breadcrumb/breadcrumb.js +4 -16
  2. package/dist/index.css +1 -1
  3. package/dist/index.css.map +1 -1
  4. package/package.json +7 -26
  5. package/src/components/base/breadcrumb/breadcrumb.scss +18 -2
  6. package/src/components/base/breadcrumb/breadcrumb.vue +4 -17
  7. package/CHANGELOG.md +0 -13139
  8. package/src/vendor/bootstrap/LICENSE +0 -11
  9. package/src/vendor/bootstrap-vue/LICENSE +0 -11
  10. package/src/vendor/bootstrap-vue/package.json +0 -144
  11. package/src/vendor/bootstrap-vue/src/components/button/MODIFICATIONS.md +0 -16
  12. package/src/vendor/bootstrap-vue/src/components/button/README.md +0 -240
  13. package/src/vendor/bootstrap-vue/src/components/button/button-close.spec.js +0 -210
  14. package/src/vendor/bootstrap-vue/src/components/button/button.spec.js +0 -349
  15. package/src/vendor/bootstrap-vue/src/components/button/package.json +0 -105
  16. package/src/vendor/bootstrap-vue/src/components/dropdown/README.md +0 -730
  17. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-divider.spec.js +0 -58
  18. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-form.spec.js +0 -110
  19. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-group.spec.js +0 -94
  20. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-header.spec.js +0 -73
  21. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item-button.spec.js +0 -117
  22. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-item.spec.js +0 -147
  23. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown-text.spec.js +0 -59
  24. package/src/vendor/bootstrap-vue/src/components/dropdown/dropdown.spec.js +0 -1121
  25. package/src/vendor/bootstrap-vue/src/components/dropdown/package.json +0 -368
  26. package/src/vendor/bootstrap-vue/src/components/form/README.md +0 -365
  27. package/src/vendor/bootstrap-vue/src/components/form/form-invalid-feedback.spec.js +0 -170
  28. package/src/vendor/bootstrap-vue/src/components/form/form-text.spec.js +0 -93
  29. package/src/vendor/bootstrap-vue/src/components/form/form-valid-feedback.spec.js +0 -157
  30. package/src/vendor/bootstrap-vue/src/components/form/form.spec.js +0 -97
  31. package/src/vendor/bootstrap-vue/src/components/form/package.json +0 -112
  32. package/src/vendor/bootstrap-vue/src/components/form-checkbox/README.md +0 -691
  33. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox-group.spec.js +0 -525
  34. package/src/vendor/bootstrap-vue/src/components/form-checkbox/form-checkbox.spec.js +0 -922
  35. package/src/vendor/bootstrap-vue/src/components/form-checkbox/package.json +0 -172
  36. package/src/vendor/bootstrap-vue/src/components/form-group/README.md +0 -339
  37. package/src/vendor/bootstrap-vue/src/components/form-group/form-group.spec.js +0 -477
  38. package/src/vendor/bootstrap-vue/src/components/form-group/package.json +0 -183
  39. package/src/vendor/bootstrap-vue/src/components/form-radio/README.md +0 -437
  40. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio-group.spec.js +0 -357
  41. package/src/vendor/bootstrap-vue/src/components/form-radio/form-radio.spec.js +0 -587
  42. package/src/vendor/bootstrap-vue/src/components/form-radio/package.json +0 -162
  43. package/src/vendor/bootstrap-vue/src/components/form-select/README.md +0 -504
  44. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option-group.spec.js +0 -138
  45. package/src/vendor/bootstrap-vue/src/components/form-select/form-select-option.spec.js +0 -75
  46. package/src/vendor/bootstrap-vue/src/components/form-select/form-select.spec.js +0 -723
  47. package/src/vendor/bootstrap-vue/src/components/form-select/package.json +0 -132
  48. package/src/vendor/bootstrap-vue/src/components/form-textarea/README.md +0 -453
  49. package/src/vendor/bootstrap-vue/src/components/form-textarea/form-textarea.spec.js +0 -1000
  50. package/src/vendor/bootstrap-vue/src/components/form-textarea/package.json +0 -122
  51. package/src/vendor/bootstrap-vue/src/components/layout/README.md +0 -791
  52. package/src/vendor/bootstrap-vue/src/components/layout/col.spec.js +0 -192
  53. package/src/vendor/bootstrap-vue/src/components/layout/form-row.spec.js +0 -45
  54. package/src/vendor/bootstrap-vue/src/components/layout/package.json +0 -99
  55. package/src/vendor/bootstrap-vue/src/components/link/README.md +0 -76
  56. package/src/vendor/bootstrap-vue/src/components/link/link.spec.js +0 -434
  57. package/src/vendor/bootstrap-vue/src/components/link/package.json +0 -57
  58. package/src/vendor/bootstrap-vue/src/components/modal/MODIFICATIONS.md +0 -30
  59. package/src/vendor/bootstrap-vue/src/components/modal/README.md +0 -1067
  60. package/src/vendor/bootstrap-vue/src/components/modal/helpers/bv-modal-event.class.spec.js +0 -82
  61. package/src/vendor/bootstrap-vue/src/components/modal/modal.spec.js +0 -1418
  62. package/src/vendor/bootstrap-vue/src/components/modal/package.json +0 -544
  63. package/src/vendor/bootstrap-vue/src/components/nav/README.md +0 -362
  64. package/src/vendor/bootstrap-vue/src/components/nav/nav-item.spec.js +0 -127
  65. package/src/vendor/bootstrap-vue/src/components/nav/nav.spec.js +0 -177
  66. package/src/vendor/bootstrap-vue/src/components/nav/package.json +0 -73
  67. package/src/vendor/bootstrap-vue/src/components/popover/README.md +0 -919
  68. package/src/vendor/bootstrap-vue/src/components/popover/package.json +0 -261
  69. package/src/vendor/bootstrap-vue/src/components/popover/popover.spec.js +0 -198
  70. package/src/vendor/bootstrap-vue/src/components/table/README.md +0 -3157
  71. package/src/vendor/bootstrap-vue/src/components/table/helpers/default-sort-compare.spec.js +0 -112
  72. package/src/vendor/bootstrap-vue/src/components/table/helpers/normalize-fields.spec.js +0 -93
  73. package/src/vendor/bootstrap-vue/src/components/table/package.json +0 -1763
  74. package/src/vendor/bootstrap-vue/src/components/table/table-busy.spec.js +0 -150
  75. package/src/vendor/bootstrap-vue/src/components/table/table-caption.spec.js +0 -176
  76. package/src/vendor/bootstrap-vue/src/components/table/table-colgroup.spec.js +0 -81
  77. package/src/vendor/bootstrap-vue/src/components/table/table-filtering.spec.js +0 -409
  78. package/src/vendor/bootstrap-vue/src/components/table/table-item-formatter.spec.js +0 -56
  79. package/src/vendor/bootstrap-vue/src/components/table/table-lite.spec.js +0 -682
  80. package/src/vendor/bootstrap-vue/src/components/table/table-pagination.spec.js +0 -133
  81. package/src/vendor/bootstrap-vue/src/components/table/table-primarykey.spec.js +0 -83
  82. package/src/vendor/bootstrap-vue/src/components/table/table-provider.spec.js +0 -411
  83. package/src/vendor/bootstrap-vue/src/components/table/table-row-details.spec.js +0 -459
  84. package/src/vendor/bootstrap-vue/src/components/table/table-selectable.spec.js +0 -1182
  85. package/src/vendor/bootstrap-vue/src/components/table/table-simple.spec.js +0 -206
  86. package/src/vendor/bootstrap-vue/src/components/table/table-sorting.spec.js +0 -858
  87. package/src/vendor/bootstrap-vue/src/components/table/table-sticky-column.spec.js +0 -377
  88. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-bottom-row.spec.js +0 -94
  89. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-row-events.spec.js +0 -529
  90. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-top-row.spec.js +0 -88
  91. package/src/vendor/bootstrap-vue/src/components/table/table-tbody-transition.spec.js +0 -83
  92. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-custom.spec.js +0 -91
  93. package/src/vendor/bootstrap-vue/src/components/table/table-tfoot-events.spec.js +0 -137
  94. package/src/vendor/bootstrap-vue/src/components/table/table-thead-events.spec.js +0 -155
  95. package/src/vendor/bootstrap-vue/src/components/table/table-thead-top.spec.js +0 -96
  96. package/src/vendor/bootstrap-vue/src/components/table/table.spec.js +0 -692
  97. package/src/vendor/bootstrap-vue/src/components/tabs/README.md +0 -433
  98. package/src/vendor/bootstrap-vue/src/components/tabs/package.json +0 -205
  99. package/src/vendor/bootstrap-vue/src/components/tabs/tab.spec.js +0 -330
  100. package/src/vendor/bootstrap-vue/src/components/tabs/tabs.spec.js +0 -778
  101. package/src/vendor/bootstrap-vue/src/components/toast/README.md +0 -655
  102. package/src/vendor/bootstrap-vue/src/components/toast/helpers/bv-toast.spec.js +0 -117
  103. package/src/vendor/bootstrap-vue/src/components/toast/package.json +0 -184
  104. package/src/vendor/bootstrap-vue/src/components/toast/toast.spec.js +0 -294
  105. package/src/vendor/bootstrap-vue/src/components/toast/toaster.spec.js +0 -77
  106. package/src/vendor/bootstrap-vue/src/components/tooltip/README.md +0 -559
  107. package/src/vendor/bootstrap-vue/src/components/tooltip/package.json +0 -258
  108. package/src/vendor/bootstrap-vue/src/components/tooltip/tooltip.spec.js +0 -1240
  109. package/src/vendor/bootstrap-vue/src/components/transition/package.json +0 -5
  110. package/src/vendor/bootstrap-vue/src/components/transporter/package.json +0 -5
  111. package/src/vendor/bootstrap-vue/src/components/transporter/transporter.spec.js +0 -85
  112. package/src/vendor/bootstrap-vue/src/directives/modal/modal.spec.js +0 -191
  113. package/src/vendor/bootstrap-vue/src/directives/tooltip/README.md +0 -521
  114. package/src/vendor/bootstrap-vue/src/directives/tooltip/package.json +0 -131
  115. package/src/vendor/bootstrap-vue/src/directives/tooltip/tooltip.spec.js +0 -190
  116. package/src/vendor/bootstrap-vue/src/directives/visible/README.md +0 -244
  117. package/src/vendor/bootstrap-vue/src/directives/visible/package.json +0 -24
  118. package/src/vendor/bootstrap-vue/src/mixins/attrs.spec.js +0 -194
  119. package/src/vendor/bootstrap-vue/src/mixins/click-out.spec.js +0 -52
  120. package/src/vendor/bootstrap-vue/src/mixins/focus-in.spec.js +0 -53
  121. package/src/vendor/bootstrap-vue/src/mixins/listen-on-document.spec.js +0 -117
  122. package/src/vendor/bootstrap-vue/src/mixins/listen-on-root.spec.js +0 -77
  123. package/src/vendor/bootstrap-vue/src/mixins/listen-on-window.spec.js +0 -115
  124. package/src/vendor/bootstrap-vue/src/mixins/listeners.spec.js +0 -245
  125. package/src/vendor/bootstrap-vue/src/utils/bv-event.class.spec.js +0 -66
  126. package/src/vendor/bootstrap-vue/src/utils/clone-deep.spec.js +0 -70
  127. package/src/vendor/bootstrap-vue/src/utils/config.spec.js +0 -169
  128. package/src/vendor/bootstrap-vue/src/utils/css-escape.spec.js +0 -82
  129. package/src/vendor/bootstrap-vue/src/utils/dom.spec.js +0 -291
  130. package/src/vendor/bootstrap-vue/src/utils/events.spec.js +0 -41
  131. package/src/vendor/bootstrap-vue/src/utils/get.spec.js +0 -109
  132. package/src/vendor/bootstrap-vue/src/utils/inspect.spec.js +0 -251
  133. package/src/vendor/bootstrap-vue/src/utils/loose-equal.spec.js +0 -203
  134. package/src/vendor/bootstrap-vue/src/utils/normalize-slot.spec.js +0 -63
  135. package/src/vendor/bootstrap-vue/src/utils/number.spec.js +0 -72
  136. package/src/vendor/bootstrap-vue/src/utils/object.spec.js +0 -61
  137. package/src/vendor/bootstrap-vue/src/utils/props.spec.js +0 -112
  138. package/src/vendor/bootstrap-vue/src/utils/router.spec.js +0 -248
  139. package/src/vendor/bootstrap-vue/src/utils/string.spec.js +0 -65
  140. package/src/vendor/bootstrap-vue/src/utils/stringify-object-values.spec.js +0 -47
  141. package/src/vendor/bootstrap-vue/src/utils/warn.spec.js +0 -54
@@ -1,1182 +0,0 @@
1
- import { mount } from '@vue/test-utils'
2
- import { waitNT } from '../../../tests/utils'
3
- import { BTable } from './table'
4
-
5
- const testItems = [{ a: 1 }, { a: 2 }, { a: 3 }, { a: 4 }]
6
- const testFields = [{ key: 'a', sortable: true }]
7
-
8
- describe('table > row select', () => {
9
- it('should not emit row-selected event default', async () => {
10
- const wrapper = mount(BTable, {
11
- propsData: {
12
- fields: testFields,
13
- items: testItems
14
- }
15
- })
16
-
17
- expect(wrapper).toBeDefined()
18
- await waitNT(wrapper.vm)
19
-
20
- expect(wrapper.emitted('row-selected')).toBeUndefined()
21
-
22
- wrapper.destroy()
23
- })
24
-
25
- it('should not have aria-selected/tabindex attribute when not selectable and no row-clicked listener', async () => {
26
- const wrapper = mount(BTable, {
27
- propsData: {
28
- fields: testFields,
29
- items: testItems
30
- }
31
- })
32
-
33
- expect(wrapper).toBeDefined()
34
- await waitNT(wrapper.vm)
35
-
36
- expect(wrapper.attributes('role')).toBe('table')
37
- expect(wrapper.attributes('aria-multiselectable')).toBeUndefined()
38
- expect(wrapper.classes()).not.toContain('b-table-selectable')
39
- expect(wrapper.classes()).not.toContain('b-table-selectable-no-click')
40
- expect(wrapper.classes()).not.toContain('b-table-selecting')
41
- expect(wrapper.classes()).not.toContain('b-table-select-single')
42
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
43
- expect(wrapper.classes()).not.toContain('b-table-select-range')
44
-
45
- const $rows = wrapper.findAll('tbody > tr')
46
- expect($rows.length).toBe(4)
47
- // Doesn't have aria-selected attribute on all TRs
48
- expect($rows.wrappers.every(r => !r.find('tr[aria-selected]').exists())).toBe(true)
49
- // Doesn't have tabindex attribute on all TRs
50
- expect($rows.wrappers.every(r => !r.find('tr[tabindex]').exists())).toBe(true)
51
-
52
- wrapper.destroy()
53
- })
54
-
55
- it('should apply user role if provided, grid role if multiselectable or table role otherwise', async () => {
56
- let wrapper = mount(BTable, {
57
- propsData: {
58
- fields: testFields,
59
- items: testItems
60
- }
61
- })
62
-
63
- expect(wrapper).toBeDefined()
64
- await waitNT(wrapper.vm)
65
-
66
- expect(wrapper.attributes('role')).toBe('table')
67
- wrapper.destroy()
68
-
69
- wrapper = mount(BTable, {
70
- propsData: {
71
- fields: testFields,
72
- items: testItems,
73
- role: 'foobar'
74
- }
75
- })
76
-
77
- await waitNT(wrapper.vm)
78
-
79
- expect(wrapper.attributes('role')).toBe('foobar')
80
- wrapper.destroy()
81
-
82
- wrapper = mount(BTable, {
83
- propsData: {
84
- fields: testFields,
85
- items: testItems,
86
- selectable: true
87
- }
88
- })
89
-
90
- await waitNT(wrapper.vm)
91
-
92
- expect(wrapper.attributes('role')).toBe('grid')
93
- wrapper.destroy()
94
- })
95
-
96
- it('should have tabindex but not aria-selected when not selectable and has row-clicked listener', async () => {
97
- const wrapper = mount(BTable, {
98
- propsData: {
99
- fields: testFields,
100
- items: testItems
101
- },
102
- listeners: {
103
- 'row-clicked': () => {}
104
- }
105
- })
106
-
107
- expect(wrapper).toBeDefined()
108
- await waitNT(wrapper.vm)
109
-
110
- expect(wrapper.attributes('role')).toBe('table')
111
- expect(wrapper.attributes('aria-multiselectable')).toBeUndefined()
112
- expect(wrapper.classes()).not.toContain('b-table-selectable')
113
- expect(wrapper.classes()).not.toContain('b-table-selectable-no-click')
114
- expect(wrapper.classes()).not.toContain('b-table-selecting')
115
- expect(wrapper.classes()).not.toContain('b-table-select-single')
116
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
117
- expect(wrapper.classes()).not.toContain('b-table-select-range')
118
-
119
- const $rows = wrapper.findAll('tbody > tr')
120
- expect($rows.length).toBe(4)
121
- // Doesn't have aria-selected attribute on all TRs
122
- expect($rows.wrappers.every(r => !r.find('tr[aria-selected]').exists())).toBe(true)
123
- // Does have tabindex attribute on all TRs
124
- expect($rows.wrappers.every(r => r.find('tr[tabindex]').exists())).toBe(true)
125
-
126
- wrapper.destroy()
127
- })
128
-
129
- it('has class b-table-selectable-no-click when prop no-select-on-click set', async () => {
130
- const wrapper = mount(BTable, {
131
- propsData: {
132
- fields: testFields,
133
- items: testItems,
134
- selectable: true,
135
- selectMode: 'single',
136
- noSelectOnClick: true
137
- }
138
- })
139
-
140
- expect(wrapper).toBeDefined()
141
- await waitNT(wrapper.vm)
142
-
143
- expect(wrapper.attributes('role')).toBe('grid')
144
- expect(wrapper.attributes('aria-multiselectable')).toBe('false')
145
- expect(wrapper.classes()).toContain('b-table-selectable')
146
- expect(wrapper.classes()).toContain('b-table-select-single')
147
- expect(wrapper.classes()).toContain('b-table-selectable-no-click')
148
- expect(wrapper.classes()).not.toContain('b-table-selecting')
149
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
150
- expect(wrapper.classes()).not.toContain('b-table-select-range')
151
- expect(wrapper.emitted('row-selected')).toBeUndefined()
152
-
153
- wrapper.destroy()
154
- })
155
-
156
- it('select mode single works', async () => {
157
- const wrapper = mount(BTable, {
158
- propsData: {
159
- fields: testFields,
160
- items: testItems,
161
- selectable: true,
162
- selectMode: 'single'
163
- }
164
- })
165
-
166
- expect(wrapper).toBeDefined()
167
- await waitNT(wrapper.vm)
168
-
169
- expect(wrapper.attributes('role')).toBe('grid')
170
- expect(wrapper.attributes('aria-multiselectable')).toBe('false')
171
- expect(wrapper.classes()).toContain('b-table-selectable')
172
- expect(wrapper.classes()).toContain('b-table-select-single')
173
- expect(wrapper.classes()).not.toContain('b-table-selectable-no-click')
174
- expect(wrapper.classes()).not.toContain('b-table-selecting')
175
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
176
- expect(wrapper.classes()).not.toContain('b-table-select-range')
177
- expect(wrapper.emitted('row-selected')).toBeUndefined()
178
-
179
- let $rows = wrapper.findAll('tbody > tr')
180
- expect($rows.length).toBe(4)
181
- expect($rows.wrappers.every(r => r.find('[aria-selected="false"]').exists())).toBe(true)
182
- expect($rows.wrappers.every(r => r.find('[aria-selected="false"]').exists())).toBe(true)
183
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
184
-
185
- // Click first row
186
- await wrapper
187
- .findAll('tbody > tr')
188
- .at(0)
189
- .trigger('click')
190
-
191
- expect(wrapper.emitted('row-selected')).toBeDefined()
192
- expect(wrapper.emitted('row-selected').length).toBe(1)
193
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
194
-
195
- $rows = wrapper.findAll('tbody > tr')
196
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
197
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
198
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
199
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
200
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
201
- expect(wrapper.classes()).toContain('b-table-selectable')
202
- expect(wrapper.classes()).toContain('b-table-select-single')
203
- expect(wrapper.classes()).toContain('b-table-selecting')
204
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
205
- expect(wrapper.classes()).not.toContain('b-table-select-range')
206
-
207
- // Click third row to select it
208
- await wrapper
209
- .findAll('tbody > tr')
210
- .at(2)
211
- .trigger('click')
212
-
213
- expect(wrapper.emitted('row-selected').length).toBe(2)
214
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[2]])
215
-
216
- $rows = wrapper.findAll('tbody > tr')
217
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
218
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
219
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
220
- expect($rows.at(2).attributes('aria-selected')).toBe('true')
221
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
222
- expect(wrapper.classes()).toContain('b-table-selectable')
223
- expect(wrapper.classes()).toContain('b-table-select-single')
224
- expect(wrapper.classes()).toContain('b-table-selecting')
225
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
226
- expect(wrapper.classes()).not.toContain('b-table-select-range')
227
-
228
- // Click third row again to clear selection
229
- await wrapper
230
- .findAll('tbody > tr')
231
- .at(2)
232
- .trigger('click')
233
-
234
- expect(wrapper.emitted('row-selected').length).toBe(3)
235
- expect(wrapper.emitted('row-selected')[2][0]).toEqual([])
236
-
237
- $rows = wrapper.findAll('tbody > tr')
238
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
239
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
240
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
241
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
242
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
243
- expect(wrapper.classes()).toContain('b-table-selectable')
244
- expect(wrapper.classes()).toContain('b-table-select-single')
245
- expect(wrapper.classes()).not.toContain('b-table-selecting')
246
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
247
- expect(wrapper.classes()).not.toContain('b-table-select-range')
248
-
249
- wrapper.destroy()
250
- })
251
-
252
- it('select mode multi works', async () => {
253
- const wrapper = mount(BTable, {
254
- propsData: {
255
- fields: testFields,
256
- items: testItems,
257
- selectable: true,
258
- selectMode: 'multi'
259
- }
260
- })
261
-
262
- expect(wrapper).toBeDefined()
263
- await waitNT(wrapper.vm)
264
-
265
- expect(wrapper.attributes('role')).toBe('grid')
266
- expect(wrapper.attributes('aria-multiselectable')).toBe('true')
267
- expect(wrapper.classes()).toContain('b-table-selectable')
268
- expect(wrapper.classes()).toContain('b-table-select-multi')
269
- expect(wrapper.classes()).not.toContain('b-table-select-single')
270
- expect(wrapper.classes()).not.toContain('b-table-select-range')
271
- expect(wrapper.classes()).not.toContain('b-table-selecting')
272
- expect(wrapper.emitted('row-selected')).toBeUndefined()
273
-
274
- // Click first row
275
- await wrapper
276
- .findAll('tbody > tr')
277
- .at(0)
278
- .trigger('click')
279
- expect(wrapper.emitted('row-selected')).toBeDefined()
280
- expect(wrapper.emitted('row-selected').length).toBe(1)
281
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
282
-
283
- let $rows = wrapper.findAll('tbody > tr')
284
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
285
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
286
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
287
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
288
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
289
- expect(wrapper.classes()).toContain('b-table-selectable')
290
- expect(wrapper.classes()).toContain('b-table-selecting')
291
- expect(wrapper.classes()).toContain('b-table-select-multi')
292
- expect(wrapper.classes()).not.toContain('b-table-select-single')
293
- expect(wrapper.classes()).not.toContain('b-table-select-range')
294
-
295
- // Click third row
296
- await wrapper
297
- .findAll('tbody > tr')
298
- .at(2)
299
- .trigger('click')
300
-
301
- expect(wrapper.emitted('row-selected').length).toBe(2)
302
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[0], testItems[2]])
303
-
304
- $rows = wrapper.findAll('tbody > tr')
305
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
306
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
307
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
308
- expect($rows.at(2).attributes('aria-selected')).toBe('true')
309
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
310
- expect(wrapper.classes()).toContain('b-table-selectable')
311
- expect(wrapper.classes()).toContain('b-table-selecting')
312
- expect(wrapper.classes()).toContain('b-table-select-multi')
313
- expect(wrapper.classes()).not.toContain('b-table-select-single')
314
- expect(wrapper.classes()).not.toContain('b-table-select-range')
315
-
316
- // Click third row again
317
- await wrapper
318
- .findAll('tbody > tr')
319
- .at(2)
320
- .trigger('click')
321
-
322
- expect(wrapper.emitted('row-selected').length).toBe(3)
323
- expect(wrapper.emitted('row-selected')[2][0]).toEqual([testItems[0]])
324
-
325
- $rows = wrapper.findAll('tbody > tr')
326
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
327
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
328
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
329
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
330
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
331
- expect(wrapper.classes()).toContain('b-table-selectable')
332
- expect(wrapper.classes()).toContain('b-table-selecting')
333
- expect(wrapper.classes()).toContain('b-table-select-multi')
334
- expect(wrapper.classes()).not.toContain('b-table-select-single')
335
- expect(wrapper.classes()).not.toContain('b-table-select-range')
336
-
337
- // Click first row again
338
- await wrapper
339
- .findAll('tbody > tr')
340
- .at(0)
341
- .trigger('click')
342
-
343
- expect(wrapper.emitted('row-selected').length).toBe(4)
344
- expect(wrapper.emitted('row-selected')[3][0]).toEqual([])
345
-
346
- $rows = wrapper.findAll('tbody > tr')
347
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
348
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
349
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
350
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
351
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
352
- expect(wrapper.classes()).toContain('b-table-selectable')
353
- expect(wrapper.classes()).toContain('b-table-select-multi')
354
- expect(wrapper.classes()).not.toContain('b-table-selecting')
355
- expect(wrapper.classes()).not.toContain('b-table-select-single')
356
- expect(wrapper.classes()).not.toContain('b-table-select-range')
357
-
358
- wrapper.destroy()
359
- })
360
-
361
- it('select mode range works', async () => {
362
- const wrapper = mount(BTable, {
363
- propsData: {
364
- fields: testFields,
365
- items: testItems,
366
- selectable: true,
367
- selectMode: 'range'
368
- }
369
- })
370
-
371
- expect(wrapper).toBeDefined()
372
- await waitNT(wrapper.vm)
373
-
374
- expect(wrapper.attributes('role')).toBe('grid')
375
- expect(wrapper.attributes('aria-multiselectable')).toBe('true')
376
- expect(wrapper.classes()).toContain('b-table-selectable')
377
- expect(wrapper.classes()).toContain('b-table-select-range')
378
- expect(wrapper.classes()).not.toContain('b-table-selecting')
379
- expect(wrapper.classes()).not.toContain('b-table-select-single')
380
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
381
- expect(wrapper.emitted('row-selected')).toBeUndefined()
382
-
383
- let $rows = wrapper.findAll('tbody > tr')
384
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
385
- expect($rows.wrappers.every(r => r.find('[aria-selected="false"]').exists())).toBe(true)
386
-
387
- // Click first row
388
- await wrapper
389
- .findAll('tbody > tr')
390
- .at(0)
391
- .trigger('click')
392
-
393
- expect(wrapper.emitted('row-selected')).toBeDefined()
394
- expect(wrapper.emitted('row-selected').length).toBe(1)
395
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
396
-
397
- $rows = wrapper.findAll('tbody > tr')
398
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
399
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
400
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
401
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
402
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
403
- expect(wrapper.classes()).toContain('b-table-selectable')
404
- expect(wrapper.classes()).toContain('b-table-select-range')
405
- expect(wrapper.classes()).toContain('b-table-selecting')
406
- expect(wrapper.classes()).not.toContain('b-table-select-single')
407
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
408
-
409
- // Shift-Click third row
410
- await wrapper
411
- .findAll('tbody > tr')
412
- .at(2)
413
- .trigger('click', { shiftKey: true })
414
-
415
- expect(wrapper.emitted('row-selected').length).toBe(2)
416
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([
417
- testItems[0],
418
- testItems[1],
419
- testItems[2]
420
- ])
421
-
422
- $rows = wrapper.findAll('tbody > tr')
423
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
424
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
425
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
426
- expect($rows.at(2).attributes('aria-selected')).toBe('true')
427
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
428
- expect(wrapper.classes()).toContain('b-table-selectable')
429
- expect(wrapper.classes()).toContain('b-table-select-range')
430
- expect(wrapper.classes()).toContain('b-table-selecting')
431
- expect(wrapper.classes()).not.toContain('b-table-select-single')
432
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
433
-
434
- // Click third row again
435
- await wrapper
436
- .findAll('tbody > tr')
437
- .at(2)
438
- .trigger('click')
439
-
440
- expect(wrapper.emitted('row-selected').length).toBe(3)
441
- expect(wrapper.emitted('row-selected')[2][0]).toEqual([testItems[2]])
442
-
443
- $rows = wrapper.findAll('tbody > tr')
444
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
445
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
446
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
447
- expect($rows.at(2).attributes('aria-selected')).toBe('true')
448
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
449
- expect(wrapper.classes()).toContain('b-table-selectable')
450
- expect(wrapper.classes()).toContain('b-table-select-range')
451
- expect(wrapper.classes()).toContain('b-table-selecting')
452
- expect(wrapper.classes()).not.toContain('b-table-select-single')
453
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
454
-
455
- // Click fourth row
456
- await wrapper
457
- .findAll('tbody > tr')
458
- .at(3)
459
- .trigger('click')
460
-
461
- expect(wrapper.emitted('row-selected').length).toBe(4)
462
- expect(wrapper.emitted('row-selected')[3][0]).toEqual([testItems[3]])
463
-
464
- $rows = wrapper.findAll('tbody > tr')
465
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
466
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
467
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
468
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
469
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
470
- expect(wrapper.classes()).toContain('b-table-selectable')
471
- expect(wrapper.classes()).toContain('b-table-select-range')
472
- expect(wrapper.classes()).toContain('b-table-selecting')
473
- expect(wrapper.classes()).not.toContain('b-table-select-single')
474
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
475
-
476
- // Click fourth row again
477
- await wrapper
478
- .findAll('tbody > tr')
479
- .at(3)
480
- .trigger('click')
481
-
482
- // No change to selected rows
483
- expect(wrapper.emitted('row-selected').length).toBe(4)
484
-
485
- $rows = wrapper.findAll('tbody > tr')
486
- expect($rows.wrappers.every(r => r.find('[tabindex="0"]').exists())).toBe(true)
487
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
488
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
489
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
490
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
491
- expect(wrapper.classes()).toContain('b-table-selectable')
492
- expect(wrapper.classes()).toContain('b-table-select-range')
493
- expect(wrapper.classes()).toContain('b-table-selecting')
494
- expect(wrapper.classes()).not.toContain('b-table-select-single')
495
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
496
-
497
- // Ctrl-Click second row
498
- await wrapper
499
- .findAll('tbody > tr')
500
- .at(1)
501
- .trigger('click', { ctrlKey: true })
502
-
503
- expect(wrapper.emitted('row-selected').length).toBe(5)
504
- expect(wrapper.emitted('row-selected')[4][0]).toEqual([testItems[1], testItems[3]])
505
-
506
- $rows = wrapper.findAll('tbody > tr')
507
- expect($rows.wrappers.every(w => w.element.matches('[tabindex="0"]'))).toBe(true)
508
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
509
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
510
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
511
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
512
- expect(wrapper.classes()).toContain('b-table-selectable')
513
- expect(wrapper.classes()).toContain('b-table-select-range')
514
- expect(wrapper.classes()).toContain('b-table-selecting')
515
- expect(wrapper.classes()).not.toContain('b-table-select-single')
516
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
517
-
518
- // Ctrl-Click second row
519
- await wrapper
520
- .findAll('tbody > tr')
521
- .at(1)
522
- .trigger('click', { ctrlKey: true })
523
-
524
- expect(wrapper.emitted('row-selected').length).toBe(6)
525
- expect(wrapper.emitted('row-selected')[5][0]).toEqual([testItems[3]])
526
-
527
- $rows = wrapper.findAll('tbody > tr')
528
- expect($rows.wrappers.every(w => w.element.matches('[tabindex="0"]'))).toBe(true)
529
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
530
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
531
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
532
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
533
- expect(wrapper.classes()).toContain('b-table-selectable')
534
- expect(wrapper.classes()).toContain('b-table-select-range')
535
- expect(wrapper.classes()).toContain('b-table-selecting')
536
- expect(wrapper.classes()).not.toContain('b-table-select-single')
537
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
538
-
539
- // Ctrl-Click fourth row
540
- await wrapper
541
- .findAll('tbody > tr')
542
- .at(3)
543
- .trigger('click', { ctrlKey: true })
544
-
545
- expect(wrapper.emitted('row-selected').length).toBe(7)
546
- expect(wrapper.emitted('row-selected')[6][0]).toEqual([])
547
-
548
- $rows = wrapper.findAll('tbody > tr')
549
- expect($rows.wrappers.every(w => w.element.matches('[tabindex="0"]'))).toBe(true)
550
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
551
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
552
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
553
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
554
- expect(wrapper.classes()).toContain('b-table-selectable')
555
- expect(wrapper.classes()).toContain('b-table-select-range')
556
- expect(wrapper.classes()).not.toContain('b-table-selecting')
557
- expect(wrapper.classes()).not.toContain('b-table-select-single')
558
- expect(wrapper.classes()).not.toContain('b-table-select-multi')
559
-
560
- wrapper.destroy()
561
- })
562
-
563
- it('range selection works after deselection (issue #6397)', async () => {
564
- const wrapper = mount(BTable, {
565
- propsData: {
566
- fields: testFields,
567
- items: testItems,
568
- selectable: true,
569
- selectMode: 'range'
570
- }
571
- })
572
-
573
- expect(wrapper).toBeDefined()
574
- await waitNT(wrapper.vm)
575
-
576
- const $rows = wrapper.findAll('tbody > tr')
577
- // Click second row
578
- await $rows.at(1).trigger('click')
579
- // Ctrl-click first row
580
- await $rows.at(0).trigger('click', { ctrlKey: true })
581
- // Ctrl-click second row
582
- await $rows.at(1).trigger('click', { ctrlKey: true })
583
- // Shift-click third row
584
- await $rows.at(2).trigger('click', { shiftKey: true })
585
-
586
- expect(wrapper.findAll('tbody .b-table-row-selected')).toHaveLength(3)
587
- wrapper.destroy()
588
- })
589
-
590
- it('sort change clears selection', async () => {
591
- const wrapper = mount(BTable, {
592
- propsData: {
593
- fields: testFields,
594
- items: testItems,
595
- selectable: true,
596
- selectMode: 'single'
597
- }
598
- })
599
-
600
- expect(wrapper).toBeDefined()
601
- await waitNT(wrapper.vm)
602
-
603
- expect(wrapper.emitted('row-selected')).toBeUndefined()
604
-
605
- // Click first row
606
- await wrapper
607
- .findAll('tbody > tr')
608
- .at(0)
609
-
610
- .trigger('click')
611
- expect(wrapper.emitted('row-selected')).toBeDefined()
612
- expect(wrapper.emitted('row-selected').length).toBe(1)
613
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
614
-
615
- let $rows = wrapper.findAll('tbody > tr')
616
- expect($rows.wrappers.every(w => w.element.matches('[tabindex="0"]'))).toBe(true)
617
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
618
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
619
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
620
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
621
-
622
- // Click row header
623
- await wrapper
624
- .findAll('thead > tr > th')
625
- .at(0)
626
- .trigger('click')
627
-
628
- expect(wrapper.emitted('sort-changed')).toBeDefined()
629
- expect(wrapper.emitted('sort-changed').length).toBe(1)
630
- expect(wrapper.emitted('row-selected').length).toBe(2)
631
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([])
632
-
633
- $rows = wrapper.findAll('tbody > tr')
634
- expect($rows.wrappers.every(w => w.element.matches('[tabindex="0"]'))).toBe(true)
635
- expect($rows.wrappers.every(w => w.element.matches('[aria-selected="false"]'))).toBe(true)
636
-
637
- wrapper.destroy()
638
- })
639
-
640
- it('filter change clears selection', async () => {
641
- const wrapper = mount(BTable, {
642
- propsData: {
643
- fields: testFields,
644
- items: testItems,
645
- selectable: true,
646
- selectMode: 'single'
647
- }
648
- })
649
-
650
- expect(wrapper).toBeDefined()
651
- await waitNT(wrapper.vm)
652
-
653
- expect(wrapper.emitted('row-selected')).toBeUndefined()
654
-
655
- let $rows = wrapper.findAll('tbody > tr')
656
- expect($rows.wrappers.every(w => w.element.matches('[tabindex="0"]'))).toBe(true)
657
- expect($rows.wrappers.every(w => w.element.matches('[aria-selected="false"]'))).toBe(true)
658
-
659
- // Click first row
660
- await wrapper
661
- .findAll('tbody > tr')
662
- .at(0)
663
- .trigger('click')
664
-
665
- expect(wrapper.emitted('row-selected')).toBeDefined()
666
- expect(wrapper.emitted('row-selected').length).toBe(1)
667
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
668
-
669
- $rows = wrapper.findAll('tbody > tr')
670
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
671
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
672
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
673
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
674
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
675
-
676
- // Change filter
677
- await wrapper.setProps({ filter: '2' })
678
-
679
- expect(wrapper.emitted('row-selected').length).toBe(2)
680
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([])
681
-
682
- $rows = wrapper.findAll('tbody > tr')
683
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
684
- expect($rows.wrappers.every(w => w.attributes('aria-selected') === 'false')).toBe(true)
685
-
686
- wrapper.destroy()
687
- })
688
-
689
- it('pagination change clears selection', async () => {
690
- const wrapper = mount(BTable, {
691
- propsData: {
692
- fields: testFields,
693
- items: testItems,
694
- selectable: true,
695
- selectMode: 'single',
696
- perPage: 3,
697
- currentPage: 1
698
- }
699
- })
700
-
701
- expect(wrapper).toBeDefined()
702
- await waitNT(wrapper.vm)
703
-
704
- expect(wrapper.emitted('row-selected')).toBeUndefined()
705
-
706
- let $rows = wrapper.findAll('tbody > tr')
707
- expect($rows.length).toBe(3)
708
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
709
- expect($rows.wrappers.every(w => w.attributes('aria-selected') === 'false')).toBe(true)
710
-
711
- // Click first row
712
- await wrapper
713
- .findAll('tbody > tr')
714
- .at(0)
715
- .trigger('click')
716
-
717
- expect(wrapper.emitted('row-selected')).toBeDefined()
718
- expect(wrapper.emitted('row-selected').length).toBe(1)
719
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
720
-
721
- $rows = wrapper.findAll('tbody > tr')
722
- expect($rows.length).toBe(3)
723
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
724
- // We only have 3 rows max per page
725
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
726
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
727
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
728
-
729
- // Change page
730
- await wrapper.setProps({ currentPage: 2 })
731
-
732
- expect(wrapper.emitted('row-selected').length).toBe(2)
733
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([])
734
-
735
- $rows = wrapper.findAll('tbody > tr')
736
- expect($rows.length).toBe(1)
737
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
738
- expect($rows.wrappers.every(w => w.attributes('aria-selected') === 'false')).toBe(true)
739
-
740
- wrapper.destroy()
741
- })
742
-
743
- it('change in select mode clears selection', async () => {
744
- const wrapper = mount(BTable, {
745
- propsData: {
746
- fields: testFields,
747
- items: testItems,
748
- selectable: true,
749
- selectMode: 'single'
750
- }
751
- })
752
-
753
- expect(wrapper).toBeDefined()
754
- await waitNT(wrapper.vm)
755
-
756
- expect(wrapper.emitted('row-selected')).toBeUndefined()
757
-
758
- // Click first row
759
- await wrapper
760
- .findAll('tbody > tr')
761
- .at(0)
762
-
763
- .trigger('click')
764
- expect(wrapper.emitted('row-selected')).toBeDefined()
765
- expect(wrapper.emitted('row-selected').length).toBe(1)
766
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
767
-
768
- let $rows = wrapper.findAll('tbody > tr')
769
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
770
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
771
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
772
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
773
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
774
-
775
- // Change mode
776
- await wrapper.setProps({ selectMode: 'range' })
777
-
778
- expect(wrapper.emitted('row-selected')).toBeDefined()
779
- expect(wrapper.emitted('row-selected').length).toBe(2)
780
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([])
781
-
782
- $rows = wrapper.findAll('tbody > tr')
783
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
784
- expect($rows.wrappers.every(w => w.attributes('aria-selected') === 'false')).toBe(true)
785
-
786
- wrapper.destroy()
787
- })
788
-
789
- it('disabling selectable clears selection', async () => {
790
- const wrapper = mount(BTable, {
791
- propsData: {
792
- fields: testFields,
793
- items: testItems,
794
- selectable: true,
795
- selectMode: 'single'
796
- }
797
- })
798
-
799
- expect(wrapper).toBeDefined()
800
- await waitNT(wrapper.vm)
801
-
802
- expect(wrapper.emitted('row-selected')).toBeUndefined()
803
-
804
- // Click first row
805
- await wrapper
806
- .findAll('tbody > tr')
807
- .at(0)
808
- .trigger('click')
809
-
810
- expect(wrapper.emitted('row-selected')).toBeDefined()
811
- expect(wrapper.emitted('row-selected').length).toBe(1)
812
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
813
-
814
- let $rows = wrapper.findAll('tbody > tr')
815
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
816
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
817
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
818
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
819
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
820
- expect(wrapper.classes()).toContain('b-table-selectable')
821
- expect(wrapper.classes()).not.toContain('b-table-selecting-range')
822
-
823
- // Disabled selectable
824
- await wrapper.setProps({ selectable: false })
825
-
826
- // Does not emit a row-selected event
827
- expect(wrapper.emitted('row-selected').length).toBe(1)
828
-
829
- $rows = wrapper.findAll('tbody > tr')
830
- // Should remove tabindex and aria-selected attributes
831
- expect($rows.wrappers.every(w => w.attributes('tabindex') === undefined)).toBe(true)
832
- expect($rows.wrappers.every(w => w.attributes('aria-selected') === undefined)).toBe(true)
833
- expect(wrapper.classes()).not.toContain('b-table-selectable')
834
- expect(wrapper.classes()).not.toContain('b-table-selecting-range')
835
-
836
- wrapper.destroy()
837
- })
838
-
839
- it('method `selectAllRows()` in single mode selects only first row', async () => {
840
- const wrapper = mount(BTable, {
841
- propsData: {
842
- fields: testFields,
843
- items: testItems,
844
- selectable: true,
845
- selectMode: 'single'
846
- }
847
- })
848
-
849
- expect(wrapper).toBeDefined()
850
- await waitNT(wrapper.vm)
851
- expect(wrapper.emitted('row-selected')).toBeUndefined()
852
-
853
- // Execute `selectAllRows()` method
854
- wrapper.vm.selectAllRows()
855
- await waitNT(wrapper.vm)
856
-
857
- expect(wrapper.emitted('row-selected')).toBeDefined()
858
- expect(wrapper.emitted('row-selected').length).toBe(1)
859
- expect(wrapper.emitted('row-selected')[0][0].length).toBe(1)
860
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[0]])
861
- const $rows = wrapper.findAll('tbody > tr')
862
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
863
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
864
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
865
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
866
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
867
-
868
- wrapper.destroy()
869
- })
870
-
871
- it('method `selectAllRows()` in multi mode selects all rows', async () => {
872
- const wrapper = mount(BTable, {
873
- propsData: {
874
- fields: testFields,
875
- items: testItems,
876
- selectable: true,
877
- selectMode: 'multi'
878
- }
879
- })
880
-
881
- expect(wrapper).toBeDefined()
882
- await waitNT(wrapper.vm)
883
- expect(wrapper.emitted('row-selected')).toBeUndefined()
884
-
885
- // Execute `selectAllRows()` method
886
- wrapper.vm.selectAllRows()
887
- await waitNT(wrapper.vm)
888
-
889
- expect(wrapper.emitted('row-selected')).toBeDefined()
890
- expect(wrapper.emitted('row-selected').length).toBe(1)
891
- expect(wrapper.emitted('row-selected')[0][0].length).toBe(4)
892
- expect(wrapper.emitted('row-selected')[0][0]).toEqual(testItems)
893
- const $rows = wrapper.findAll('tbody > tr')
894
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
895
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
896
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
897
- expect($rows.at(2).attributes('aria-selected')).toBe('true')
898
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
899
-
900
- wrapper.destroy()
901
- })
902
-
903
- it('method `selectAllRows()` in range mode selects all rows', async () => {
904
- const wrapper = mount(BTable, {
905
- propsData: {
906
- fields: testFields,
907
- items: testItems,
908
- selectable: true,
909
- selectMode: 'range'
910
- }
911
- })
912
-
913
- expect(wrapper).toBeDefined()
914
- await waitNT(wrapper.vm)
915
-
916
- expect(wrapper.emitted('row-selected')).toBeUndefined()
917
-
918
- // Execute `selectAllRows()` method
919
- wrapper.vm.selectAllRows()
920
- await waitNT(wrapper.vm)
921
-
922
- expect(wrapper.emitted('row-selected')).toBeDefined()
923
- expect(wrapper.emitted('row-selected').length).toBe(1)
924
- expect(wrapper.emitted('row-selected')[0][0].length).toBe(4)
925
- expect(wrapper.emitted('row-selected')[0][0]).toEqual(testItems)
926
-
927
- const $rows = wrapper.findAll('tbody > tr')
928
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
929
- expect($rows.at(0).attributes('aria-selected')).toBe('true')
930
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
931
- expect($rows.at(2).attributes('aria-selected')).toBe('true')
932
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
933
-
934
- wrapper.destroy()
935
- })
936
-
937
- it('method `selectRow()` and `unselectRow()` in single mode works', async () => {
938
- const wrapper = mount(BTable, {
939
- propsData: {
940
- fields: testFields,
941
- items: testItems,
942
- selectable: true,
943
- selectMode: 'single'
944
- }
945
- })
946
-
947
- expect(wrapper).toBeDefined()
948
- await waitNT(wrapper.vm)
949
-
950
- expect(wrapper.emitted('row-selected')).toBeUndefined()
951
-
952
- // Execute `selectRow()` method (second row)
953
- wrapper.vm.selectRow(1)
954
- await waitNT(wrapper.vm)
955
-
956
- expect(wrapper.emitted('row-selected')).toBeDefined()
957
- expect(wrapper.emitted('row-selected').length).toBe(1)
958
- expect(wrapper.emitted('row-selected')[0][0].length).toBe(1)
959
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[1]])
960
-
961
- let $rows = wrapper.findAll('tbody > tr')
962
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
963
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
964
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
965
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
966
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
967
-
968
- // Execute `selectRow()` method (fourth row)
969
- wrapper.vm.selectRow(3)
970
- await waitNT(wrapper.vm)
971
-
972
- expect(wrapper.emitted('row-selected')).toBeDefined()
973
- expect(wrapper.emitted('row-selected').length).toBe(2)
974
- expect(wrapper.emitted('row-selected')[1][0].length).toBe(1)
975
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[3]])
976
-
977
- $rows = wrapper.findAll('tbody > tr')
978
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
979
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
980
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
981
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
982
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
983
-
984
- // Execute `unselectRow()` method on non-selected row (should not change anything)
985
- wrapper.vm.unselectRow(0)
986
- await waitNT(wrapper.vm)
987
-
988
- expect(wrapper.emitted('row-selected')).toBeDefined()
989
- expect(wrapper.emitted('row-selected').length).toBe(2)
990
- expect(wrapper.emitted('row-selected')[1][0].length).toBe(1)
991
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[3]])
992
-
993
- $rows = wrapper.findAll('tbody > tr')
994
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
995
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
996
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
997
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
998
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
999
-
1000
- // Execute `unselectRow()` method on selected row
1001
- wrapper.vm.unselectRow(3)
1002
- await waitNT(wrapper.vm)
1003
-
1004
- expect(wrapper.emitted('row-selected')).toBeDefined()
1005
- expect(wrapper.emitted('row-selected').length).toBe(3)
1006
- expect(wrapper.emitted('row-selected')[2][0].length).toBe(0)
1007
- expect(wrapper.emitted('row-selected')[2][0]).toEqual([])
1008
-
1009
- $rows = wrapper.findAll('tbody > tr')
1010
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1011
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1012
- expect($rows.at(1).attributes('aria-selected')).toBe('false')
1013
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1014
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
1015
-
1016
- wrapper.destroy()
1017
- })
1018
-
1019
- it('method `selectRow()` and `unselectRow()` in multi mode works', async () => {
1020
- const wrapper = mount(BTable, {
1021
- propsData: {
1022
- fields: testFields,
1023
- items: testItems,
1024
- selectable: true,
1025
- selectMode: 'multi'
1026
- }
1027
- })
1028
-
1029
- expect(wrapper).toBeDefined()
1030
- await waitNT(wrapper.vm)
1031
-
1032
- expect(wrapper.emitted('row-selected')).toBeUndefined()
1033
-
1034
- // Execute `selectRow()` method (second row)
1035
- wrapper.vm.selectRow(1)
1036
- await waitNT(wrapper.vm)
1037
-
1038
- expect(wrapper.emitted('row-selected')).toBeDefined()
1039
- expect(wrapper.emitted('row-selected').length).toBe(1)
1040
- expect(wrapper.emitted('row-selected')[0][0].length).toBe(1)
1041
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[1]])
1042
-
1043
- let $rows = wrapper.findAll('tbody > tr')
1044
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1045
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1046
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1047
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1048
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
1049
-
1050
- // Execute `selectRow()` method (fourth row)
1051
- wrapper.vm.selectRow(3)
1052
- await waitNT(wrapper.vm)
1053
-
1054
- expect(wrapper.emitted('row-selected')).toBeDefined()
1055
- expect(wrapper.emitted('row-selected').length).toBe(2)
1056
- expect(wrapper.emitted('row-selected')[1][0].length).toBe(2)
1057
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[1], testItems[3]])
1058
-
1059
- $rows = wrapper.findAll('tbody > tr')
1060
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1061
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1062
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1063
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1064
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
1065
-
1066
- // Execute `unselectRow()` method on non-selected row (should not change anything)
1067
- wrapper.vm.unselectRow(0)
1068
- await waitNT(wrapper.vm)
1069
-
1070
- expect(wrapper.emitted('row-selected')).toBeDefined()
1071
- expect(wrapper.emitted('row-selected').length).toBe(2)
1072
- expect(wrapper.emitted('row-selected')[1][0].length).toBe(2)
1073
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[1], testItems[3]])
1074
-
1075
- $rows = wrapper.findAll('tbody > tr')
1076
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1077
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1078
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1079
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1080
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
1081
-
1082
- // Execute `unselectRow()` method on selected row
1083
- wrapper.vm.unselectRow(3)
1084
- await waitNT(wrapper.vm)
1085
-
1086
- expect(wrapper.emitted('row-selected')).toBeDefined()
1087
- expect(wrapper.emitted('row-selected').length).toBe(3)
1088
- expect(wrapper.emitted('row-selected')[2][0].length).toBe(1)
1089
- expect(wrapper.emitted('row-selected')[2][0]).toEqual([testItems[1]])
1090
-
1091
- $rows = wrapper.findAll('tbody > tr')
1092
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1093
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1094
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1095
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1096
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
1097
-
1098
- wrapper.destroy()
1099
- })
1100
-
1101
- it('method `selectRow()` and `unselectRow()` in range mode works', async () => {
1102
- const wrapper = mount(BTable, {
1103
- propsData: {
1104
- fields: testFields,
1105
- items: testItems,
1106
- selectable: true,
1107
- selectMode: 'range'
1108
- }
1109
- })
1110
-
1111
- expect(wrapper).toBeDefined()
1112
- await waitNT(wrapper.vm)
1113
-
1114
- expect(wrapper.emitted('row-selected')).toBeUndefined()
1115
-
1116
- // Execute `selectRow()` method (second row)
1117
- wrapper.vm.selectRow(1)
1118
- await waitNT(wrapper.vm)
1119
-
1120
- expect(wrapper.emitted('row-selected')).toBeDefined()
1121
- expect(wrapper.emitted('row-selected').length).toBe(1)
1122
- expect(wrapper.emitted('row-selected')[0][0].length).toBe(1)
1123
- expect(wrapper.emitted('row-selected')[0][0]).toEqual([testItems[1]])
1124
-
1125
- let $rows = wrapper.findAll('tbody > tr')
1126
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1127
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1128
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1129
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1130
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
1131
-
1132
- // Execute `selectRow()` method (fourth row)
1133
- wrapper.vm.selectRow(3)
1134
- await waitNT(wrapper.vm)
1135
-
1136
- expect(wrapper.emitted('row-selected')).toBeDefined()
1137
- expect(wrapper.emitted('row-selected').length).toBe(2)
1138
- expect(wrapper.emitted('row-selected')[1][0].length).toBe(2)
1139
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[1], testItems[3]])
1140
-
1141
- $rows = wrapper.findAll('tbody > tr')
1142
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1143
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1144
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1145
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1146
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
1147
-
1148
- // Execute `unselectRow()` method on non-selected row (should not change anything)
1149
- wrapper.vm.unselectRow(0)
1150
- await waitNT(wrapper.vm)
1151
-
1152
- expect(wrapper.emitted('row-selected')).toBeDefined()
1153
- expect(wrapper.emitted('row-selected').length).toBe(2)
1154
- expect(wrapper.emitted('row-selected')[1][0].length).toBe(2)
1155
- expect(wrapper.emitted('row-selected')[1][0]).toEqual([testItems[1], testItems[3]])
1156
-
1157
- $rows = wrapper.findAll('tbody > tr')
1158
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1159
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1160
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1161
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1162
- expect($rows.at(3).attributes('aria-selected')).toBe('true')
1163
-
1164
- // Execute `unselectRow()` method on selected row
1165
- wrapper.vm.unselectRow(3)
1166
- await waitNT(wrapper.vm)
1167
-
1168
- expect(wrapper.emitted('row-selected')).toBeDefined()
1169
- expect(wrapper.emitted('row-selected').length).toBe(3)
1170
- expect(wrapper.emitted('row-selected')[2][0].length).toBe(1)
1171
- expect(wrapper.emitted('row-selected')[2][0]).toEqual([testItems[1]])
1172
-
1173
- $rows = wrapper.findAll('tbody > tr')
1174
- expect($rows.wrappers.every(w => w.attributes('tabindex') === '0')).toBe(true)
1175
- expect($rows.at(0).attributes('aria-selected')).toBe('false')
1176
- expect($rows.at(1).attributes('aria-selected')).toBe('true')
1177
- expect($rows.at(2).attributes('aria-selected')).toBe('false')
1178
- expect($rows.at(3).attributes('aria-selected')).toBe('false')
1179
-
1180
- wrapper.destroy()
1181
- })
1182
- })