56 lines
1.5 KiB
JavaScript
56 lines
1.5 KiB
JavaScript
import React from 'react';
|
|
import Toggle from 'react-toggle';
|
|
import classNames from 'classnames';
|
|
|
|
export default class Switch extends Toggle {
|
|
render() {
|
|
const {
|
|
className,
|
|
icons: _icons,
|
|
ariaLabelledBy,
|
|
ariaDescribedBy,
|
|
ariaLabel,
|
|
ariaDesc,
|
|
...inputProps,
|
|
} = this.props;
|
|
|
|
const classes = classNames('react-toggle', {
|
|
'react-toggle--checked': this.state.checked,
|
|
'react-toggle--focus': this.state.hasFocus,
|
|
'react-toggle--disabled': this.props.disabled,
|
|
}, className);
|
|
|
|
return (
|
|
<div className={classes}
|
|
onClick={this.handleClick}
|
|
onTouchStart={this.handleTouchStart}
|
|
onTouchMove={this.handleTouchMove}
|
|
onTouchEnd={this.handleTouchEnd}>
|
|
<div className='react-toggle-track'>
|
|
<div className='react-toggle-track-check'>
|
|
ON
|
|
</div>
|
|
<div className='react-toggle-track-x'>
|
|
OFF
|
|
</div>
|
|
</div>
|
|
<div className='react-toggle-thumb' />
|
|
|
|
<input
|
|
{...inputProps}
|
|
ref={ref => { this.input = ref; }}
|
|
|
|
onFocus={this.handleFocus}
|
|
onBlur={this.handleBlur}
|
|
className='react-toggle-screenreader-only'
|
|
type='checkbox'
|
|
tabIndex='0'
|
|
aria-labelledby={ariaLabelledBy}
|
|
aria-describedby={ariaDescribedBy}/>
|
|
<div id={ariaLabelledBy} hidden>{ariaLabel}</div>
|
|
<div id={ariaDescribedBy} hidden>{ariaDesc}</div>
|
|
</div>
|
|
);
|
|
}
|
|
};
|