Skip to content

Commit eb64d50

Browse files
feat: add readonly state for dropdown (#2979)
1 parent 770277b commit eb64d50

File tree

2 files changed

+15
-1
lines changed

2 files changed

+15
-1
lines changed

src/dropdown/dropdown.component.ts

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ import { hasScrollableParents } from "carbon-components-angular/utils";
7777
'cds--list-box--inline': inline,
7878
'cds--skeleton': skeleton,
7979
'cds--dropdown--disabled cds--list-box--disabled': disabled,
80+
'cds--dropdown--readonly': readonly,
8081
'cds--dropdown--invalid': invalid,
8182
'cds--dropdown--warning cds--list-box--warning': warn,
8283
'cds--dropdown--sm cds--list-box--sm': size === 'sm',
@@ -92,8 +93,9 @@ import { hasScrollableParents } from "carbon-components-angular/utils";
9293
[ngClass]="{'a': !menuIsClosed}"
9394
[attr.aria-expanded]="!menuIsClosed"
9495
[attr.aria-disabled]="disabled"
96+
[attr.aria-readonly]="readonly"
9597
aria-haspopup="listbox"
96-
(click)="disabled ? $event.stopPropagation() : toggleMenu()"
98+
(click)="disabled || readonly ? $event.stopPropagation() : toggleMenu()"
9799
(blur)="onBlur()"
98100
[attr.disabled]="disabled ? true : null">
99101
<div
@@ -224,6 +226,10 @@ export class Dropdown implements OnInit, AfterContentInit, AfterViewInit, OnDest
224226
* Set to `true` to disable the dropdown.
225227
*/
226228
@Input() disabled = false;
229+
/**
230+
* Set to `true` for a readonly state.
231+
*/
232+
@Input() readonly = false;
227233
/**
228234
* Set to `true` for a loading dropdown.
229235
*/
@@ -514,6 +520,10 @@ export class Dropdown implements OnInit, AfterContentInit, AfterViewInit, OnDest
514520
*/
515521
@HostListener("keydown", ["$event"])
516522
onKeyDown(event: KeyboardEvent) {
523+
if (this.readonly) {
524+
return;
525+
}
526+
517527
if ((event.key === "Escape") && !this.menuIsClosed) {
518528
event.stopImmediatePropagation(); // don't unintentionally close other widgets that listen for Escape
519529
}

src/dropdown/dropdown.stories.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ export default {
2525
hideLabel: false,
2626
helperText: "Optional helper text",
2727
disabled: false,
28+
readonly: false,
2829
invalid: false,
2930
invalidText: "A valid value is required",
3031
warn: false,
@@ -101,6 +102,7 @@ const Template = (args) => ({
101102
[theme]="theme"
102103
placeholder="Select"
103104
[disabled]="disabled"
105+
[readonly]="readonly"
104106
(selected)="selected($event)"
105107
(onClose)="onClose($event)">
106108
<cds-dropdown-list [items]="items"></cds-dropdown-list>
@@ -128,6 +130,7 @@ const MultiTemplate = (args) => ({
128130
[theme]="theme"
129131
placeholder="Select"
130132
[disabled]="disabled"
133+
[readonly]="readonly"
131134
(selected)="selected($event)"
132135
(onClose)="onClose($event)">
133136
<cds-dropdown-list [items]="items"></cds-dropdown-list>
@@ -174,6 +177,7 @@ const NgTemplate = (args) => ({
174177
[invalid]="invalid"
175178
[invalidText]="invalidText"
176179
[disabled]="disabled"
180+
[readonly]="readonly"
177181
(selected)="selected($event)"
178182
(onClose)="onClose($event)">
179183
<cds-dropdown-list [items]="items" [listTpl]="dropdownRenderer"></cds-dropdown-list>

0 commit comments

Comments
 (0)