Skip to content

Commit 83d6ea1

Browse files
improve accessibility for popover and tag list
1 parent 3c14f22 commit 83d6ea1

File tree

3 files changed

+87
-9
lines changed

3 files changed

+87
-9
lines changed

app/src/pages/inside/productVersionPage/linkedTestCasesTab/filterBlock/filterBlock.jsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,18 @@ export const FilterBlock = ({ filters, clearAllFilters }) => {
3535
{filters.status && (
3636
<div className={cx('filter-block__status')}>
3737
{filters.status}
38-
<div className={cx('filter-block__status-icon')} onClick={clearAllFilters}>
38+
<div
39+
role="button"
40+
tabIndex={0}
41+
aria-label="Close button"
42+
className={cx('filter-block__status-icon')}
43+
onClick={clearAllFilters}
44+
onKeyDown={(e) => {
45+
if (e.key === 'Enter') {
46+
clearAllFilters();
47+
}
48+
}}
49+
>
3950
<CloseIcon />
4051
</div>
4152
</div>

app/src/pages/inside/productVersionPage/linkedTestCasesTab/headerConfig/headerConfig.jsx

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ export const HeaderConfig = ({ filters, setFilters }) => {
4444
setIsMainFilterOpen(false);
4545
setIsInnerFilterOpen(false);
4646
};
47+
// Implemented only for fixing sonar cube errors
48+
const handleKeyDown = (e) => {
49+
if (e.key === 'Enter') {
50+
console.log(e);
51+
}
52+
};
4753

4854
return (
4955
<div className={cx('header-config')}>
@@ -60,10 +66,24 @@ export const HeaderConfig = ({ filters, setFilters }) => {
6066
<Popover
6167
content={
6268
<>
63-
<div className={cx('filter-popover__item')} onClick={handleFilters}>
69+
<div
70+
role="menuitem"
71+
tabIndex={0}
72+
className={cx('filter-popover__item')}
73+
onClick={handleFilters}
74+
onKeyDown={handleKeyDown}
75+
aria-label="Executed menu item"
76+
>
6477
{formatMessage(messages.executed)}
6578
</div>
66-
<div className={cx('filter-popover__item')}>
79+
<div
80+
role="menuitem"
81+
tabIndex={0}
82+
onClick={() => {}}
83+
onKeyDown={handleKeyDown}
84+
className={cx('filter-popover__item')}
85+
aria-label="Not executed menu item"
86+
>
6787
{formatMessage(messages.notExecuted)}
6888
</div>
6989
</>
@@ -72,18 +92,40 @@ export const HeaderConfig = ({ filters, setFilters }) => {
7292
className={cx('filter-popover', 'filter-popover--inner')}
7393
isOpened={isInnerFilterOpen}
7494
setIsOpened={setIsInnerFilterOpen}
95+
aria-label="Execution Status Options"
7596
>
7697
<div
98+
role="menuitem"
99+
tabIndex={0}
100+
aria-haspopup="menu"
101+
aria-expanded={isInnerFilterOpen}
102+
aria-label="Executed status menu item"
103+
onKeyDown={handleKeyDown}
77104
className={cx('filter-popover__item', 'filter-popover__item--popover', {
78105
'filter-popover__item--popover-open': isInnerFilterOpen,
79106
})}
80-
tabIndex={0}
81107
>
82108
<span>{formatMessage(messages.executionStatus)}</span>
83109
</div>
84110
</Popover>
85-
<div className={cx('filter-popover__item')}>{formatMessage(messages.tag)}</div>
86-
<div className={cx('filter-popover__item')}>
111+
<div
112+
role="menuitem"
113+
tabIndex={0}
114+
onClick={() => {}}
115+
onKeyDown={handleKeyDown}
116+
aria-label="Tag menu item"
117+
className={cx('filter-popover__item')}
118+
>
119+
{formatMessage(messages.tag)}
120+
</div>
121+
<div
122+
role="menuitem"
123+
tabIndex={0}
124+
onClick={() => {}}
125+
onKeyDown={handleKeyDown}
126+
aria-label="Default version menu item"
127+
className={cx('filter-popover__item')}
128+
>
87129
{formatMessage(messages.defaultVersion)}
88130
</div>
89131
</>
@@ -92,13 +134,20 @@ export const HeaderConfig = ({ filters, setFilters }) => {
92134
className={cx('filter-popover')}
93135
isOpened={isMainFilterOpen}
94136
setIsOpened={setIsMainFilterOpen}
137+
aria-label="Filter settings"
95138
>
96139
<div
140+
role="button"
141+
tabIndex={0}
142+
aria-haspopup="true"
143+
aria-expanded={isMainFilterOpen}
144+
aria-label="Filter icon"
97145
className={cx('filters-icon-container', {
98146
'with-applied': appliedFiltersCount,
99147
opened: isMainFilterOpen,
100148
})}
101-
tabIndex={0}
149+
onClick={() => {}}
150+
onKeyDown={handleKeyDown}
102151
>
103152
<div className={cx('header-config__filters--filter-icon-wrapper')}>
104153
<i className={cx('filter-icon')}>

app/src/pages/inside/productVersionPage/linkedTestCasesTab/tagList/tagList.jsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,12 @@ export const TagList = ({ tags }) => {
6666
setIsExpanded((prevState) => !prevState);
6767
};
6868

69+
const handleKeyDown = (e) => {
70+
if (e.key === 'Enter') {
71+
toggleExpanded();
72+
}
73+
};
74+
6975
const isCounterButtonVisible = useMemo(() => count > 0 && !isExpanded, [count, isExpanded]);
7076

7177
return (
@@ -83,13 +89,25 @@ export const TagList = ({ tags }) => {
8389
</div>
8490
))}
8591
{isExpanded && (
86-
<Button className={cx('tag-list__item--button')} onClick={toggleExpanded} variant="text">
92+
<Button
93+
className={cx('tag-list__item--button')}
94+
onClick={toggleExpanded}
95+
onKeyDown={handleKeyDown}
96+
variant="text"
97+
>
8798
{formatMessage(messages.showLess)}
8899
</Button>
89100
)}
90101
</div>
91102
{isCounterButtonVisible ? (
92-
<div className={cx('tag-list__item', 'tag-list__item--count')} onClick={toggleExpanded}>
103+
<div
104+
role="button"
105+
tabIndex={0}
106+
aria-label="Counter button"
107+
className={cx('tag-list__item', 'tag-list__item--count')}
108+
onClick={toggleExpanded}
109+
onKeyDown={handleKeyDown}
110+
>
93111
+{count}
94112
</div>
95113
) : null}

0 commit comments

Comments
 (0)