|
import React from 'react'; |
|
import PropTypes from 'prop-types'; |
|
|
|
const style = { |
|
label: { |
|
display: 'inline', |
|
fontFamily: 'RobotoCondensed-Regular, sans-serif', |
|
userSelect: 'none', // disable text selection |
|
fontWeight: 'bold' |
|
}, |
|
checkbox: { |
|
display: 'none' |
|
}, |
|
checkboxPlusLabel: { |
|
backgroundColor: '#fafafa', |
|
border: '1px solid #cacece', |
|
// boxShadow: '0 1px 2px rgba(0,0,0,0.05), inset 0px -15px 10px -12px rgba(0,0,0,0.05)', |
|
padding: '18px', |
|
borderRadius: '3px', |
|
display: 'inline-block', |
|
position: 'relative' |
|
}, |
|
checkboxCheckedPlusLabel: { |
|
backgroundColor: 'red', |
|
border: '1px solid #adb8c0', |
|
boxShadow: [ |
|
'0 1px 2px rgba(0,0,0,0.05)', |
|
'inset 0px -15px 10px -12px rgba(0,0,0,0.05)', |
|
'inset 15px 10px -12px rgba(255,255,255,0.1)' |
|
].join(', '), |
|
color: 'white' |
|
}, |
|
checkboxCheckedPlusLabelAfter: { |
|
fontSize: '28px', |
|
position: 'absolute', |
|
top: '0px', |
|
left: '6px', |
|
color: '#99a1a7' |
|
} |
|
}; |
|
|
|
export default function CheckboxButton(props) { |
|
let id = props.id; |
|
if (!props.id) { |
|
id = String(Math.round(Math.random() * 10000000000000000)); |
|
} |
|
|
|
const checkboxStyle = { |
|
...style.checkbox |
|
}; |
|
|
|
const labelStyle = { |
|
...style.label, |
|
...style.checkboxPlusLabel, |
|
...(props.checked ? style.checkboxCheckedPlusLabel : {}), |
|
...(props.style || {}), |
|
...(props.checked ? props.checkedStyle : {}) |
|
}; |
|
|
|
const labelAfterStyle = { |
|
...(props.checked ? style.checkboxCheckedPlusLabelAfter : {}) |
|
}; |
|
|
|
return ( |
|
<div> |
|
<input style={checkboxStyle} type="checkbox" id={id} checked={props.checked} onChange={props.onChange} /> |
|
<label style={labelStyle} htmlFor={id}>{props.label}</label> |
|
<div style={labelAfterStyle} /> |
|
</div> |
|
); |
|
} |
|
CheckboxButton.propTypes = { |
|
label: PropTypes.string.isRequired, |
|
id: PropTypes.string, |
|
checked: PropTypes.bool.isRequired, |
|
onChange: PropTypes.func.isRequired, |
|
style: PropTypes.object, |
|
checkedStyle: PropTypes.object |
|
}; |