diff --git a/src/govuk/components/checkboxes/checkboxes.yaml b/src/govuk/components/checkboxes/checkboxes.yaml index 442fd5e4d2..9c648f93df 100644 --- a/src/govuk/components/checkboxes/checkboxes.yaml +++ b/src/govuk/components/checkboxes/checkboxes.yaml @@ -899,3 +899,17 @@ examples: text: British - value: irish text: Irish + +- name: item checked overrides values + hidden: true + data: + name: colors + items: + - value: red + text: Red + - value: green + text: Green + checked: false + - value: blue + text: Blue + values: [red, green] diff --git a/src/govuk/components/checkboxes/template.njk b/src/govuk/components/checkboxes/template.njk index 665e7e8fa6..898ebd03d8 100644 --- a/src/govuk/components/checkboxes/template.njk +++ b/src/govuk/components/checkboxes/template.njk @@ -63,7 +63,7 @@ {%- if item.divider %}
{{ item.divider }}
{%- else %} - {% set isChecked = item.checked or (params.values and item.value in params.values) %} + {% set isChecked = item.checked | default(params.values and item.value in params.values) %} {% set hasHint = true if item.hint.text or item.hint.html %} {% set itemHintId = id + "-item-hint" if hasHint else "" %} {% set itemDescribedBy = describedBy if not hasFieldset else "" %} diff --git a/src/govuk/components/checkboxes/template.test.js b/src/govuk/components/checkboxes/template.test.js index d0e3624c34..6dff7904a6 100644 --- a/src/govuk/components/checkboxes/template.test.js +++ b/src/govuk/components/checkboxes/template.test.js @@ -194,6 +194,13 @@ describe('Checkboxes', () => { expect($other.attr('checked')).toEqual('checked') }) + it('allows item.checked to override values', () => { + const $ = render('checkboxes', examples['item checked overrides value']) + + const $green = $('.govuk-checkboxes').find('input[value="green"]') + expect($green.attr('checked')).toBeUndefined() + }) + describe('when they include attributes', () => { it('it renders the attributes', () => { const $ = render('checkboxes', examples['items with attributes']) diff --git a/src/govuk/components/radios/radios.yaml b/src/govuk/components/radios/radios.yaml index b1a6ae2f31..af3856023b 100644 --- a/src/govuk/components/radios/radios.yaml +++ b/src/govuk/components/radios/radios.yaml @@ -879,3 +879,17 @@ examples: - value: no text: No checked: true + +- name: item checked overrides value + hidden: true + data: + name: colors + items: + - value: red + text: Red + - value: green + text: Green + checked: false + - value: blue + text: Blue + value: green diff --git a/src/govuk/components/radios/template.njk b/src/govuk/components/radios/template.njk index 17dbb63ec7..a7f677915e 100644 --- a/src/govuk/components/radios/template.njk +++ b/src/govuk/components/radios/template.njk @@ -56,7 +56,7 @@ {%- if item.divider %}
{{ item.divider }}
{%- else %} - {% set isChecked = item.checked or (params.value and item.value == params.value) %} + {% set isChecked = item.checked | default(params.value and item.value == params.value) %} {% set hasHint = true if item.hint.text or item.hint.html %} {% set itemHintId = id + '-item-hint' %}
diff --git a/src/govuk/components/radios/template.test.js b/src/govuk/components/radios/template.test.js index 752366002f..da40b456d1 100644 --- a/src/govuk/components/radios/template.test.js +++ b/src/govuk/components/radios/template.test.js @@ -137,6 +137,13 @@ describe('Radios', () => { expect($lastInput.attr('checked')).toEqual('checked') }) + it('allows item.checked to override value', () => { + const $ = render('radios', examples['item checked overrides value']) + + const $green = $('.govuk-radios').find('input[value="green"]') + expect($green.attr('checked')).toBeUndefined() + }) + describe('when they include attributes', () => { it('it renders the attributes', () => { const $ = render('radios', examples['items with attributes']) diff --git a/src/govuk/components/select/select.yaml b/src/govuk/components/select/select.yaml index c7650fac96..60bf9570f5 100644 --- a/src/govuk/components/select/select.yaml +++ b/src/govuk/components/select/select.yaml @@ -304,3 +304,17 @@ examples: - value: 2 text: GOV.UK frontend option 2 + + - name: item selected overrides value + hidden: true + data: + name: colors + items: + - value: red + text: Red + - value: green + text: Green + selected: false + - value: blue + text: Blue + value: green diff --git a/src/govuk/components/select/template.njk b/src/govuk/components/select/template.njk index 4183af7374..eea2a4dbbb 100644 --- a/src/govuk/components/select/template.njk +++ b/src/govuk/components/select/template.njk @@ -42,7 +42,7 @@ {% for item in params.items %} {% if item %} {% endif %} diff --git a/src/govuk/components/select/template.test.js b/src/govuk/components/select/template.test.js index 420e1cd046..64659a3678 100644 --- a/src/govuk/components/select/template.test.js +++ b/src/govuk/components/select/template.test.js @@ -69,6 +69,13 @@ describe('Select', () => { expect($selectedItem.attr('selected')).toBeTruthy() }) + it('allows item.selected to override value', () => { + const $ = render('select', examples['item selected overrides value']) + + const $selectedItem = $('option[value="green"]') + expect($selectedItem.attr('selected')).toBeUndefined() + }) + it('renders item with disabled', () => { const $ = render('select', examples.default)