From b5ca77f2171fc68c50df094a3bc64b14a68176c2 Mon Sep 17 00:00:00 2001 From: Yuan Gao Date: Fri, 11 May 2018 10:53:26 -0700 Subject: [PATCH] fix(button-toggle): fix button toggle with 0 value not checked --- src/lib/button-toggle/button-toggle.spec.ts | 32 +++++++++++++++++++++ src/lib/button-toggle/button-toggle.ts | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/lib/button-toggle/button-toggle.spec.ts b/src/lib/button-toggle/button-toggle.spec.ts index c1c00fe08a02..1bb11660d71a 100644 --- a/src/lib/button-toggle/button-toggle.spec.ts +++ b/src/lib/button-toggle/button-toggle.spec.ts @@ -205,6 +205,7 @@ describe('MatButtonToggle without forms', () => { declarations: [ ButtonTogglesInsideButtonToggleGroup, ButtonTogglesInsideButtonToggleGroupMultiple, + FalsyButtonTogglesInsideButtonToggleGroupMultiple, ButtonToggleGroupWithInitialValue, StandaloneButtonToggle, ButtonToggleWithAriaLabel, @@ -694,6 +695,22 @@ describe('MatButtonToggle without forms', () => { expect(fixture.componentInstance.toggleGroup.value).toBe('Seven'); expect(fixture.componentInstance.toggles.toArray()[2].checked).toBe(true); }); + + it('should select falsy button toggle value in multiple selection', () => { + const fixture = TestBed.createComponent(FalsyButtonTogglesInsideButtonToggleGroupMultiple); + fixture.detectChanges(); + + expect(fixture.componentInstance.toggles.toArray()[0].checked).toBe(true); + expect(fixture.componentInstance.toggles.toArray()[1].checked).toBe(false); + expect(fixture.componentInstance.toggles.toArray()[2].checked).toBe(false); + + fixture.componentInstance.value = [0, false]; + fixture.detectChanges(); + + expect(fixture.componentInstance.toggles.toArray()[0].checked).toBe(true); + expect(fixture.componentInstance.toggles.toArray()[1].checked).toBe(false); + expect(fixture.componentInstance.toggles.toArray()[2].checked).toBe(true); + }); }); @Component({ @@ -748,6 +765,21 @@ class ButtonTogglesInsideButtonToggleGroupMultiple { isVertical: boolean = false; } +@Component({ + template: ` + + Eggs + Flour + Sugar + Sugar + + ` +}) +class FalsyButtonTogglesInsideButtonToggleGroupMultiple { + value: ('' | number | null | undefined | boolean)[] = [0]; + @ViewChildren(MatButtonToggle) toggles: QueryList; +} + @Component({ template: ` Yes diff --git a/src/lib/button-toggle/button-toggle.ts b/src/lib/button-toggle/button-toggle.ts index f9f68b0d2d74..db15195cb4e7 100644 --- a/src/lib/button-toggle/button-toggle.ts +++ b/src/lib/button-toggle/button-toggle.ts @@ -264,7 +264,7 @@ export class MatButtonToggleGroup extends _MatButtonToggleGroupMixinBase impleme } if (this.multiple && Array.isArray(this._rawValue)) { - return !!this._rawValue.find(value => toggle.value != null && value === toggle.value); + return this._rawValue.some(value => toggle.value != null && value === toggle.value); } return toggle.value === this._rawValue;