1
0
mirror of https://github.com/kremalicious/metamask-extension.git synced 2024-12-23 09:52:26 +01:00
metamask-extension/ui/components/ui/toggle-button/toggle-button.component.js
2022-04-19 08:46:01 -02:30

117 lines
2.4 KiB
JavaScript

import React from 'react';
import PropTypes from 'prop-types';
import ReactToggleButton from 'react-toggle-button';
import classnames from 'classnames';
const trackStyle = {
width: '40px',
height: '24px',
padding: '0px',
borderRadius: '26px',
border: '2px solid var(--color-primary-default)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
};
const offTrackStyle = {
...trackStyle,
border: '2px solid var(--color-border-default)',
};
const thumbStyle = {
width: '18px',
height: '18px',
display: 'flex',
boxShadow: 'none',
alignSelf: 'center',
borderRadius: '50%',
position: 'relative',
};
const colors = {
activeThumb: {
base: '#037DD6',
},
inactiveThumb: {
base: '#6A737D',
},
active: {
base: '#F2F4F6',
hover: '#F2F4F6',
},
inactive: {
base: '#F2F4F6',
hover: '#F2F4F6',
},
};
const ToggleButton = (props) => {
const { value, onToggle, offLabel, onLabel, disabled, className } = props;
const modifier = value ? 'on' : 'off';
return (
<label
tabIndex="0"
onKeyDown={(e) => {
if (e.key === 'Enter') {
onToggle(value);
}
}}
className={classnames(
'toggle-button',
`toggle-button--${modifier}`,
{
'toggle-button--disabled': disabled,
},
className,
)}
>
<ReactToggleButton
value={value}
onToggle={disabled ? undefined : onToggle}
activeLabel=""
inactiveLabel=""
trackStyle={value ? trackStyle : offTrackStyle}
thumbStyle={thumbStyle}
thumbAnimateRange={[3, 18]}
colors={colors}
/>
<div className="toggle-button__status">
<span className="toggle-button__label-off">{offLabel}</span>
<span className="toggle-button__label-on">{onLabel}</span>
</div>
</label>
);
};
ToggleButton.propTypes = {
/**
* ToggleButton value
*/
value: PropTypes.bool,
/**
* The onChange handler of the ToggleButton
*/
onToggle: PropTypes.func,
/**
* Label text when toggle is off
*/
offLabel: PropTypes.string,
/**
* Label text when toggle is on
*/
onLabel: PropTypes.string,
/**
* Disables ToggleButton if true. Set to false as default
*/
disabled: PropTypes.bool,
/**
* Additional className to add to the ToggleButton
*/
className: PropTypes.string,
};
export default ToggleButton;