Skip to content

Commit e0f22af

Browse files
committed
fix(suggest): prevent chip remove on multiselect & readonly
1 parent 484b9a6 commit e0f22af

File tree

2 files changed

+29
-1
lines changed

2 files changed

+29
-1
lines changed

projects/angular/components/ui-suggest/src/ui-suggest.component.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,8 @@
9292
(keydown.tab)="close(false)"
9393
(keydown.shift.tab)="close()">
9494
<mat-chip *ngFor="let option of value; let i = index"
95-
(removed)="deselectItem(option)">
95+
(removed)="deselectItem(option)"
96+
[removable]="!readonly">
9697
<span>
9798
{{ intl.translateLabel(option.text) }}
9899
</span>
@@ -106,6 +107,7 @@
106107
[uiAutofocus]="isOpen"
107108
[refocus]="isOpen"
108109
[placeholder]="(isFormControl && !empty) ? '' : defaultValue"
110+
[readonly]="readonly"
109111
[formControl]="inputControl"
110112
[matChipInputFor]="chipList"
111113
[attr.maxlength]="maxLength"

projects/angular/components/ui-suggest/src/ui-suggest.component.spec.ts

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1252,6 +1252,32 @@ const sharedSpecifications = (
12521252

12531253
discardPeriodicTasks();
12541254
}));
1255+
1256+
it('should NOT be able to remove chip if readonly', fakeAsync(() => {
1257+
const items = component.items!.slice(0, 3);
1258+
component.value = items;
1259+
component.readonly = true;
1260+
fixture.detectChanges();
1261+
tick();
1262+
1263+
const initialChips = fixture.debugElement.queryAll(By.css('.mat-chip'));
1264+
expect(initialChips.length).toBe(3);
1265+
1266+
const chipRemoveButton = getNativeElement<HTMLButtonElement>(initialChips[1].query(By.css('button')));
1267+
chipRemoveButton.click();
1268+
1269+
fixture.detectChanges();
1270+
tick(5000);
1271+
1272+
const updatedChips = fixture.debugElement
1273+
.queryAll(By.css('.mat-chip span'))
1274+
.map(el => getNativeElement<HTMLSpanElement>(el));
1275+
1276+
expect(updatedChips.length).toEqual(3);
1277+
expect(updatedChips.map(chip => chip.innerText)).toEqual(items.map(item => item.text));
1278+
1279+
discardPeriodicTasks();
1280+
}));
12551281
});
12561282
});
12571283

0 commit comments

Comments
 (0)