diff --git a/packages/calcite-components/src/components/segmented-control/segmented-control.e2e.ts b/packages/calcite-components/src/components/segmented-control/segmented-control.e2e.ts index b3a3bd56b70..546b7869f51 100644 --- a/packages/calcite-components/src/components/segmented-control/segmented-control.e2e.ts +++ b/packages/calcite-components/src/components/segmented-control/segmented-control.e2e.ts @@ -157,14 +157,14 @@ describe("calcite-segmented-control", () => { expect(selectedValue).toBe("3"); }); - it("allows items to be selected", async () => { - async function getSelectedItemValue(page: E2EPage): Promise { - return page.$eval( - "calcite-segmented-control", - (segmentedControl: HTMLCalciteSegmentedControlElement) => segmentedControl.selectedItem.value, - ); - } + async function getSelectedItemValue(page: E2EPage): Promise { + return page.$eval( + "calcite-segmented-control", + (segmentedControl: HTMLCalciteSegmentedControlElement) => segmentedControl.selectedItem.value, + ); + } + it("allows items to be selected", async () => { const page = await newE2EPage(); await page.setContent( ` @@ -193,6 +193,29 @@ describe("calcite-segmented-control", () => { expect(await getSelectedItemValue(page)).toBe("2"); }); + it("updates selection when cleared with undefined", async () => { + const page = await newE2EPage(); + await page.setContent( + ` + one + two + `, + ); + await page.waitForChanges(); + expect(await getSelectedItemValue(page)).toBe("1"); + + const [first, second] = await page.findAll("calcite-segmented-control-item"); + first.setProperty("checked", undefined); + second.setProperty("checked", true); + await page.waitForChanges(); + expect(await getSelectedItemValue(page)).toBe("2"); + + first.setProperty("checked", true); + second.setProperty("checked", undefined); + await page.waitForChanges(); + expect(await getSelectedItemValue(page)).toBe("1"); + }); + it("does not emit extraneous events (edge case from #3210)", async () => { const page = await newE2EPage(); await page.setContent( diff --git a/packages/calcite-components/src/components/segmented-control/segmented-control.tsx b/packages/calcite-components/src/components/segmented-control/segmented-control.tsx index 2444536da0f..1b7989e3e81 100644 --- a/packages/calcite-components/src/components/segmented-control/segmented-control.tsx +++ b/packages/calcite-components/src/components/segmented-control/segmented-control.tsx @@ -239,7 +239,10 @@ export class SegmentedControl @Listen("calciteInternalSegmentedControlItemChange") protected handleSelected(event: Event): void { event.preventDefault(); - this.selectItem(event.target as HTMLCalciteSegmentedControlItemElement); + const el = event.target as HTMLCalciteSegmentedControlItemElement; + if (el.checked) { + this.selectItem(el); + } event.stopPropagation(); }