Skip to content

Commit 966b83d

Browse files
authored
fix(dropdown-item): provides accessible label when href is not parsed (#7316)
**Related Issue:** #6921 ## Summary This PR provides accessible label for `calcite-dropdown-item` irrespective of `href` property value.
1 parent 25aff2f commit 966b83d

File tree

1 file changed

+17
-16
lines changed

1 file changed

+17
-16
lines changed

packages/calcite-components/src/components/dropdown-item/dropdown-item.tsx

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -128,10 +128,11 @@ export class DropdownItem implements LoadableComponent {
128128

129129
render(): VNode {
130130
const scale = getElementProp(this.el, "scale", this.scale);
131+
const { href, selectionMode, label, iconFlipRtl } = this;
131132
const iconStartEl = (
132133
<calcite-icon
133134
class={CSS.iconStart}
134-
flipRtl={this.iconFlipRtl === "start" || this.iconFlipRtl === "both"}
135+
flipRtl={iconFlipRtl === "start" || iconFlipRtl === "both"}
135136
icon={this.iconStart}
136137
scale={scale === "l" ? "m" : "s"}
137138
/>
@@ -144,7 +145,7 @@ export class DropdownItem implements LoadableComponent {
144145
const iconEndEl = (
145146
<calcite-icon
146147
class={CSS.iconEnd}
147-
flipRtl={this.iconFlipRtl === "end" || this.iconFlipRtl === "both"}
148+
flipRtl={iconFlipRtl === "end" || iconFlipRtl === "both"}
148149
icon={this.iconEnd}
149150
scale={scale === "l" ? "m" : "s"}
150151
/>
@@ -159,13 +160,13 @@ export class DropdownItem implements LoadableComponent {
159160
? [contentNode, iconEndEl]
160161
: contentNode;
161162

162-
const contentEl = !this.href ? (
163+
const contentEl = !href ? (
163164
slottedContent
164165
) : (
165166
<a
166-
aria-label={this.label}
167+
aria-label={label}
167168
class={CSS.link}
168-
href={this.href}
169+
href={href}
169170
rel={this.rel}
170171
tabIndex={-1}
171172
target={this.target}
@@ -176,34 +177,34 @@ export class DropdownItem implements LoadableComponent {
176177
</a>
177178
);
178179

179-
const itemRole = this.href
180+
const itemRole = href
180181
? null
181-
: this.selectionMode === "single"
182+
: selectionMode === "single"
182183
? "menuitemradio"
183-
: this.selectionMode === "multiple"
184+
: selectionMode === "multiple"
184185
? "menuitemcheckbox"
185186
: "menuitem";
186187

187-
const itemAria = this.selectionMode !== "none" ? toAriaBoolean(this.selected) : null;
188+
const itemAria = selectionMode !== "none" ? toAriaBoolean(this.selected) : null;
188189

189190
return (
190-
<Host aria-checked={itemAria} role={itemRole} tabindex="0">
191+
<Host aria-checked={itemAria} aria-label={!href ? label : ""} role={itemRole} tabindex="0">
191192
<div
192193
class={{
193194
container: true,
194-
[CSS.containerLink]: !!this.href,
195+
[CSS.containerLink]: !!href,
195196
[CSS.containerSmall]: scale === "s",
196197
[CSS.containerMedium]: scale === "m",
197198
[CSS.containerLarge]: scale === "l",
198-
[CSS.containerMulti]: this.selectionMode === "multiple",
199-
[CSS.containerSingle]: this.selectionMode === "single",
200-
[CSS.containerNone]: this.selectionMode === "none"
199+
[CSS.containerMulti]: selectionMode === "multiple",
200+
[CSS.containerSingle]: selectionMode === "single",
201+
[CSS.containerNone]: selectionMode === "none"
201202
}}
202203
>
203-
{this.selectionMode !== "none" ? (
204+
{selectionMode !== "none" ? (
204205
<calcite-icon
205206
class={CSS.icon}
206-
icon={this.selectionMode === "multiple" ? "check" : "bullet-point"}
207+
icon={selectionMode === "multiple" ? "check" : "bullet-point"}
207208
scale={scale === "l" ? "m" : "s"}
208209
/>
209210
) : null}

0 commit comments

Comments
 (0)