mirror of
https://github.com/element-hq/element-web
synced 2024-11-27 11:47:23 +03:00
Fix ToggleSwitch A11Y (trapping tab and switch v. checkbox)
This commit is contained in:
parent
b7fe06706d
commit
9d0bf13ca0
1 changed files with 6 additions and 20 deletions
|
@ -19,46 +19,32 @@ import React from "react";
|
|||
import PropTypes from "prop-types";
|
||||
import classNames from "classnames";
|
||||
|
||||
import {KeyCode} from "../../../Keyboard";
|
||||
import sdk from "../../../index";
|
||||
|
||||
// Controlled Toggle Switch element
|
||||
// Controlled Toggle Switch element, written with Accessibility in mind
|
||||
const ToggleSwitch = ({checked, disabled=false, onChange, ...props}) => {
|
||||
const _onClick = (e) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
if (disabled) return;
|
||||
|
||||
onChange(!checked);
|
||||
};
|
||||
|
||||
const _onKeyDown = (e) => {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
if (disabled) return;
|
||||
|
||||
if (e.keyCode === KeyCode.ENTER || e.keyCode === KeyCode.SPACE) {
|
||||
onChange(!checked);
|
||||
}
|
||||
};
|
||||
|
||||
const classes = classNames({
|
||||
"mx_ToggleSwitch": true,
|
||||
"mx_ToggleSwitch_on": checked,
|
||||
"mx_ToggleSwitch_enabled": !disabled,
|
||||
});
|
||||
|
||||
const AccessibleButton = sdk.getComponent("elements.AccessibleButton");
|
||||
return (
|
||||
<div {...props}
|
||||
<AccessibleButton {...props}
|
||||
className={classes}
|
||||
onClick={_onClick}
|
||||
onKeyDown={_onKeyDown}
|
||||
role="checkbox"
|
||||
role="switch"
|
||||
aria-checked={checked}
|
||||
aria-disabled={disabled}
|
||||
tabIndex={0}
|
||||
>
|
||||
<div className="mx_ToggleSwitch_ball" />
|
||||
</div>
|
||||
</AccessibleButton>
|
||||
);
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in a new issue