1
0
mirror of https://github.com/chinchang/web-maker.git synced 2025-07-17 12:01:13 +02:00

Tabs: fix screen readering for tab switching

This commit is contained in:
Kushagra Gour
2018-11-13 18:46:07 +05:30
parent 097acc743a
commit 63cfa2d164

View File

@@ -22,7 +22,7 @@ function Tab({ label, isSelected, onKeyUp, onClick }) {
class={`tabs__tab ${isSelected ? 'tabs__tab--selected' : ''}`}
role="tab"
tabindex={isSelected ? null : -1}
aria-selected={isSelected}
aria-selected={`${isSelected}`}
aria-controls={`${ID_PREFIX}${hyphenate(label)}`}
onKeyUp={onKeyUp}
onClick={onClick}
@@ -41,18 +41,22 @@ export default class Tabs extends Component {
isSelected(index) {
return this.state.selectedTab === index;
}
switchTab(selectedTab) {
this.setState({ selectedTab: selectedTab });
this.tabListEl.querySelectorAll('[role=tab]')[selectedTab].focus();
}
keyUpHandler(e) {
let { selectedTab } = this.state;
if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {
selectedTab--;
selectedTab =
selectedTab < 0 ? this.props.children.length - 1 : selectedTab;
this.setState({ selectedTab: selectedTab });
this.switchTab(selectedTab);
e.preventDefault();
} else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {
selectedTab++;
selectedTab %= this.props.children.length;
this.setState({ selectedTab: selectedTab });
this.switchTab(selectedTab);
e.preventDefault();
}
}
@@ -60,7 +64,11 @@ export default class Tabs extends Component {
const tabs = this.props.children;
return (
<div class="tabs">
<div class="tabs__tablist" role="tablist">
<div
class="tabs__tablist"
role="tablist"
ref={el => (this.tabListEl = el)}
>
{tabs.map((child, index) => (
<Tab
isSelected={this.isSelected(index)}