Skip to content

Commit 1564ad1

Browse files
fix(button-group): reset button group on selectionMode prop runtime changes (#13542)
* fix(button-group): reset button group on selectionMode prop runtime changes
1 parent d11f262 commit 1564ad1

File tree

2 files changed

+38
-2
lines changed

2 files changed

+38
-2
lines changed

projects/igniteui-angular/src/lib/buttonGroup/buttonGroup.component.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,25 @@ export class IgxButtonGroupComponent extends DisplayDensityBase implements After
140140
}
141141

142142
/**
143-
* An @Input property that sets the selection mode of the buttons. By default, the selection mode is single.
143+
* An @Input property that get/set the selection mode 'single', 'singleRequired' or 'multi' of the buttons. By default, the selection mode is 'single'.
144144
* ```html
145145
* <igx-buttongroup [selectionMode]="'multi'" [alignment]="alignment"></igx-buttongroup>
146146
* ```
147147
*/
148-
@Input() public selectionMode: 'single' | 'singleRequired' | 'multi' = 'single';
148+
@Input()
149+
public get selectionMode() {
150+
return this._selectionMode;
151+
}
152+
public set selectionMode(selectionMode: 'single' | 'singleRequired' | 'multi') {
153+
if (this.viewButtons && selectionMode !== this._selectionMode) {
154+
this.buttons.forEach((b,i) => {
155+
this.deselectButton(i);
156+
});
157+
this._selectionMode = selectionMode;
158+
} else {
159+
this._selectionMode = selectionMode;
160+
}
161+
}
149162

150163
/**
151164
* An @Input property that allows setting the buttons in the button group.
@@ -294,6 +307,7 @@ export class IgxButtonGroupComponent extends DisplayDensityBase implements After
294307
private _isVertical: boolean;
295308
private _itemContentCssClass: string;
296309
private _disabled = false;
310+
private _selectionMode: 'single' | 'singleRequired' | 'multi' = 'single';
297311

298312
constructor(
299313
private _cdr: ChangeDetectorRef,

projects/igniteui-angular/src/lib/buttonGroup/buttongroup.component.spec.ts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,28 @@ describe('IgxButtonGroup', () => {
183183
expect(btnGroupInstance.buttons[0].selected).toBe(true);
184184
});
185185

186+
it('should should reset its current selection state on selectionMode runtime change', () => {
187+
const fixture = TestBed.createComponent(ButtonGroupWithSelectedButtonComponent);
188+
fixture.detectChanges();
189+
190+
const buttonGroup = fixture.componentInstance.buttonGroup;
191+
192+
buttonGroup.selectionMode = 'multi';
193+
fixture.detectChanges();
194+
195+
buttonGroup.selectButton(0);
196+
buttonGroup.selectButton(1);
197+
buttonGroup.selectButton(2);
198+
fixture.detectChanges();
199+
200+
expect(buttonGroup.selectedButtons.length).toBe(3);
201+
202+
buttonGroup.selectionMode = 'single';
203+
fixture.detectChanges();
204+
205+
expect(buttonGroup.selectedButtons.length).toBe(0);
206+
});
207+
186208
it('Button Group single selection', () => {
187209
const fixture = TestBed.createComponent(InitButtonGroupComponent);
188210
fixture.detectChanges();

0 commit comments

Comments
 (0)