Skip to content

Commit d6d00ca

Browse files
authored
Merge pull request #5507 from nextcloud-libraries/fix/checkbox-attrs
fix(NcCheckboxRadioSwitch): Pass attrs to `input` if available
2 parents 7246aa3 + 395fc5f commit d6d00ca

2 files changed

Lines changed: 59 additions & 0 deletions

File tree

src/components/NcCheckboxRadioSwitch/NcCheckboxRadioSwitch.vue

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
This is a simple input checkbox, radio and switch design.
2929
Please have a look at proper usage and recommendations: https://material.io/components/checkboxes
3030

31+
Note: All attributes on the element are passed to the inner input element - except for the button type.
32+
3133
### Standard checkbox
3234
```vue
3335
<template>
@@ -274,6 +276,7 @@ export default {
274276
class="checkbox-radio-switch"
275277
:style="cssVars"
276278
:type="isButtonType ? 'button' : null"
279+
v-bind="isButtonType ? $attrs : {}"
277280
v-on="isButtonType ? listeners : null">
278281
<input v-if="!isButtonType"
279282
:id="id"
@@ -287,6 +290,7 @@ export default {
287290
:indeterminate.prop="hasIndeterminate ? indeterminate : null"
288291
:required="required"
289292
:name="name"
293+
v-bind="$attrs"
290294
v-on="listeners">
291295
<NcCheckboxContent :id="id"
292296
class="checkbox-radio-switch__content"
@@ -322,6 +326,9 @@ export default {
322326
NcCheckboxContent,
323327
},
324328
329+
// We need to pass attributes to the input element
330+
inheritAttrs: false,
331+
325332
props: {
326333
/**
327334
* Unique id attribute of the input
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/**
2+
* @copyright Copyright (c) 2024 Ferdinand Thiessen <[email protected]>
3+
*
4+
* @author Ferdinand Thiessen <[email protected]>
5+
*
6+
* @license AGPL-3.0-or-later
7+
*
8+
* This program is free software: you can redistribute it and/or modify
9+
* it under the terms of the GNU Affero General Public License as
10+
* published by the Free Software Foundation, either version 3 of the
11+
* License, or (at your option) any later version.
12+
*
13+
* This program is distributed in the hope that it will be useful,
14+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16+
* GNU Affero General Public License for more details.
17+
*
18+
* You should have received a copy of the GNU Affero General Public License
19+
* along with this program. If not, see <http://www.gnu.org/licenses/>.
20+
*
21+
*/
22+
23+
import { shallowMount } from '@vue/test-utils'
24+
import NcCheckboxRadioSwitch from '../../../../src/components/NcCheckboxRadioSwitch/NcCheckboxRadioSwitch.vue'
25+
26+
describe('NcCheckboxRadioSwitch', () => {
27+
it('sets text content', () => {
28+
const wrapper = shallowMount(NcCheckboxRadioSwitch, {
29+
slots: {
30+
default: 'Test',
31+
},
32+
})
33+
34+
expect(wrapper.text()).toContain('Test')
35+
})
36+
37+
it('forwards aria-invalid and aria-errormessage to input', () => {
38+
const wrapper = shallowMount(NcCheckboxRadioSwitch, {
39+
slots: {
40+
default: 'Test',
41+
},
42+
attrs: {
43+
'aria-invalid': 'true',
44+
'aria-errormessage': 'id-test',
45+
},
46+
})
47+
48+
const input = wrapper.find('input')
49+
expect(input.attributes('aria-invalid')).toBe('true')
50+
expect(input.attributes('aria-errormessage')).toBe('id-test')
51+
})
52+
})

0 commit comments

Comments
 (0)