From e1665ac94762bfe3de4ec938c3b00cacd2373776 Mon Sep 17 00:00:00 2001 From: Ashley Ryan Date: Thu, 21 Apr 2022 13:44:27 -0400 Subject: [PATCH] fix(radio-group): treat cds-radio-panel like cds fixes #42 Signed-off-by: Ashley Ryan --- .../src/radio/radio-group.element.spec.ts | 52 +++++++++++++++++++ .../core/src/radio/radio-group.element.ts | 2 +- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/projects/core/src/radio/radio-group.element.spec.ts b/projects/core/src/radio/radio-group.element.spec.ts index 87632cef5..8ad5a6832 100644 --- a/projects/core/src/radio/radio-group.element.spec.ts +++ b/projects/core/src/radio/radio-group.element.spec.ts @@ -8,6 +8,7 @@ import { html } from 'lit'; import { createTestElement, removeTestElement, componentIsStable } from '@cds/core/test'; import { CdsRadioGroup } from '@cds/core/radio'; import '@cds/core/radio/register.js'; +import '@cds/core/selection-panels/radio/register.js'; describe('cds-radio-group', () => { let component: CdsRadioGroup; @@ -78,9 +79,60 @@ describe('cds-radio-group', () => { component = element.querySelector('cds-radio-group'); + await componentIsStable(component); const radio1 = component.querySelectorAll('cds-radio')[0]; const radio2 = component.querySelectorAll('cds-radio')[1]; expect(radio1.inputControl.name).toBe(radio2.inputControl.name); expect(radio1.inputControl.name).toEqual('my-radio'); }); + + it('should sync radio-panel controls within a group', async () => { + element = await createTestElement(html` + + + + + + + + + + + message text + + `); + + component = element.querySelector('cds-radio-group'); + + await componentIsStable(component); + const radio1 = component.querySelectorAll('cds-radio-panel')[0]; + const radio2 = component.querySelectorAll('cds-radio-panel')[1]; + expect(radio1.inputControl.hasAttribute('checked')).toBe(true); + expect(radio2.inputControl.hasAttribute('checked')).toBe(false); + }); + + it('should allow manually setting the radio-panel input name', async () => { + element = await createTestElement(html` + + + + + + + + + + + message text + + `); + + component = element.querySelector('cds-radio-group'); + + await componentIsStable(component); + const radio1 = component.querySelectorAll('cds-radio-panel')[0]; + const radio2 = component.querySelectorAll('cds-radio-panel')[1]; + expect(radio1.inputControl.name).toBe(radio2.inputControl.name); + expect(radio1.inputControl.name).toEqual('my-radio'); + }); }); diff --git a/projects/core/src/radio/radio-group.element.ts b/projects/core/src/radio/radio-group.element.ts index ec2a9884e..e2367cf79 100644 --- a/projects/core/src/radio/radio-group.element.ts +++ b/projects/core/src/radio/radio-group.element.ts @@ -35,7 +35,7 @@ import { CdsRadio } from './radio.element.js'; * @slot - For projecting cds-radio controls */ export class CdsRadioGroup extends CdsInternalControlGroup { - @querySlotAll('cds-radio, cds-radio') protected controls: NodeListOf; + @querySlotAll('cds-radio, cds-radio-panel') protected controls: NodeListOf; @id() protected radioName: string;