Skip to content

Commit 4feaabc

Browse files
committed
fix(button-toggle): fix button toggle with 0 value not checked (#11292)
1 parent 3ae4494 commit 4feaabc

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

src/lib/button-toggle/button-toggle.spec.ts

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -205,6 +205,7 @@ describe('MatButtonToggle without forms', () => {
205205
declarations: [
206206
ButtonTogglesInsideButtonToggleGroup,
207207
ButtonTogglesInsideButtonToggleGroupMultiple,
208+
FalsyButtonTogglesInsideButtonToggleGroupMultiple,
208209
ButtonToggleGroupWithInitialValue,
209210
StandaloneButtonToggle,
210211
ButtonToggleWithAriaLabel,
@@ -694,6 +695,22 @@ describe('MatButtonToggle without forms', () => {
694695
expect(fixture.componentInstance.toggleGroup.value).toBe('Seven');
695696
expect(fixture.componentInstance.toggles.toArray()[2].checked).toBe(true);
696697
});
698+
699+
it('should select falsy button toggle value in multiple selection', () => {
700+
const fixture = TestBed.createComponent(FalsyButtonTogglesInsideButtonToggleGroupMultiple);
701+
fixture.detectChanges();
702+
703+
expect(fixture.componentInstance.toggles.toArray()[0].checked).toBe(true);
704+
expect(fixture.componentInstance.toggles.toArray()[1].checked).toBe(false);
705+
expect(fixture.componentInstance.toggles.toArray()[2].checked).toBe(false);
706+
707+
fixture.componentInstance.value = [0, false];
708+
fixture.detectChanges();
709+
710+
expect(fixture.componentInstance.toggles.toArray()[0].checked).toBe(true);
711+
expect(fixture.componentInstance.toggles.toArray()[1].checked).toBe(false);
712+
expect(fixture.componentInstance.toggles.toArray()[2].checked).toBe(true);
713+
});
697714
});
698715

699716
@Component({
@@ -748,6 +765,21 @@ class ButtonTogglesInsideButtonToggleGroupMultiple {
748765
isVertical: boolean = false;
749766
}
750767

768+
@Component({
769+
template: `
770+
<mat-button-toggle-group multiple [value]="value">
771+
<mat-button-toggle [value]="0">Eggs</mat-button-toggle>
772+
<mat-button-toggle [value]="null">Flour</mat-button-toggle>
773+
<mat-button-toggle [value]="false">Sugar</mat-button-toggle>
774+
<mat-button-toggle>Sugar</mat-button-toggle>
775+
</mat-button-toggle-group>
776+
`
777+
})
778+
class FalsyButtonTogglesInsideButtonToggleGroupMultiple {
779+
value: ('' | number | null | undefined | boolean)[] = [0];
780+
@ViewChildren(MatButtonToggle) toggles: QueryList<MatButtonToggle>;
781+
}
782+
751783
@Component({
752784
template: `
753785
<mat-button-toggle>Yes</mat-button-toggle>

src/lib/button-toggle/button-toggle.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ export class MatButtonToggleGroup extends _MatButtonToggleGroupMixinBase impleme
264264
}
265265

266266
if (this.multiple && Array.isArray(this._rawValue)) {
267-
return !!this._rawValue.find(value => toggle.value != null && value === toggle.value);
267+
return this._rawValue.some(value => toggle.value != null && value === toggle.value);
268268
}
269269

270270
return toggle.value === this._rawValue;

0 commit comments

Comments
 (0)