2020-08-17 21:07:16 +01:00
|
|
|
import React from 'react'
|
2020-08-17 21:59:29 +01:00
|
|
|
import PropTypes from 'prop-types'
|
2020-07-15 00:46:10 +01:00
|
|
|
import { CX } from '../constants'
|
2020-03-24 04:39:12 +00:00
|
|
|
import Text from './text'
|
|
|
|
|
2020-08-18 01:57:35 +01:00
|
|
|
class Switch extends React.PureComponent {
|
2020-03-24 04:39:12 +00:00
|
|
|
|
2020-09-01 20:54:17 +01:00
|
|
|
handleOnChange = (e) => {
|
|
|
|
this.props.onChange(e.currentTarget.checked)
|
|
|
|
}
|
|
|
|
|
2020-03-24 04:39:12 +00:00
|
|
|
render() {
|
|
|
|
const {
|
|
|
|
id,
|
|
|
|
description,
|
|
|
|
label,
|
|
|
|
checked,
|
|
|
|
onChange,
|
|
|
|
onKeyDown,
|
|
|
|
disabled,
|
|
|
|
labelProps
|
|
|
|
} = this.props
|
|
|
|
|
2020-07-15 00:46:10 +01:00
|
|
|
const checkboxContainerClasses = CX({
|
2020-03-24 04:39:12 +00:00
|
|
|
cursorPointer: 1,
|
2020-08-18 21:49:11 +01:00
|
|
|
d: 1,
|
2020-08-18 21:43:06 +01:00
|
|
|
h24PX: 1,
|
|
|
|
w50PX: 1,
|
2020-03-24 04:39:12 +00:00
|
|
|
circle: 1,
|
|
|
|
border1PX: 1,
|
2020-04-24 04:17:27 +01:00
|
|
|
mlAuto: 1,
|
2020-05-03 06:22:49 +01:00
|
|
|
bgPrimary: 1,
|
2020-03-24 04:39:12 +00:00
|
|
|
borderColorSecondary: 1,
|
2020-04-29 23:32:49 +01:00
|
|
|
bgBrand: checked,
|
2020-03-24 04:39:12 +00:00
|
|
|
})
|
|
|
|
|
2020-07-15 00:46:10 +01:00
|
|
|
const checkboxLabelClasses = CX({
|
2020-08-18 21:49:11 +01:00
|
|
|
d: 1,
|
2020-04-29 23:32:49 +01:00
|
|
|
m1PX: 1,
|
2020-08-18 21:43:06 +01:00
|
|
|
h20PX: 1,
|
|
|
|
w20PX: 1,
|
2020-03-24 04:39:12 +00:00
|
|
|
circle: 1,
|
2020-04-23 07:13:29 +01:00
|
|
|
posAbs: 1,
|
2020-04-29 23:32:49 +01:00
|
|
|
bgSecondary: !checked,
|
|
|
|
bgPrimary: checked,
|
2020-03-24 04:39:12 +00:00
|
|
|
left0: !checked,
|
|
|
|
right0: checked,
|
|
|
|
})
|
|
|
|
|
|
|
|
return (
|
2020-08-18 21:49:11 +01:00
|
|
|
<div className={[_s.d, _s.flexRow, _s.py5, _s.aiCenter].join(' ')}>
|
2020-09-02 23:54:50 +01:00
|
|
|
<Text {...labelProps} htmlFor={id} className={_s.mr10}>
|
2020-03-24 04:39:12 +00:00
|
|
|
{label}
|
|
|
|
</Text>
|
|
|
|
|
|
|
|
<label className={checkboxContainerClasses} htmlFor={id}>
|
|
|
|
<span className={checkboxLabelClasses} />
|
2020-09-01 20:54:17 +01:00
|
|
|
<input type='checkbox' id={id} onChange={this.handleOnChange} disabled={disabled} className={[_s.visibilityHidden].join(' ')} />
|
2020-03-24 04:39:12 +00:00
|
|
|
</label>
|
|
|
|
</div>
|
|
|
|
)
|
|
|
|
}
|
2020-07-15 00:46:10 +01:00
|
|
|
|
2020-08-18 01:57:35 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
Switch.propTypes = {
|
|
|
|
id: PropTypes.string.isRequired,
|
|
|
|
description: PropTypes.string,
|
|
|
|
label: PropTypes.string,
|
|
|
|
checked: PropTypes.bool,
|
|
|
|
onChange: PropTypes.func,
|
|
|
|
onKeyDown: PropTypes.func,
|
|
|
|
disabled: PropTypes.bool,
|
|
|
|
labelProps: PropTypes.object,
|
|
|
|
}
|
|
|
|
|
|
|
|
export default Switch
|