import React, { useState, useEffect } from 'react'; import PropTypes from 'prop-types'; import classNames from 'classnames'; const CheckedIcon = () => <>🌜; const UncheckedIcon = () => <>🌞; const ToggleButton = ( props ) => { const [toggle, setToggle] = useState(false); const { defaultChecked, onChange, disabled, className } = props; useEffect(() => { if (defaultChecked) { setToggle(defaultChecked) } }, [defaultChecked]); const triggerToggle = () => { if ( disabled ) { return; } setToggle(!toggle); if ( typeof onChange === 'function' ) { onChange(!toggle); } } const getIcon = (type) => { const { icons } = props; if ( ! icons ) { return null; } return icons[type] === undefined ? ToggleButton.defaultProps.icons[type] : icons[type]; } const toggleClasses = classNames('wrg-toggle', { 'wrg-toggle--checked': toggle, 'wrg-toggle--disabled': disabled }, className); return (
{ getIcon('checked') }
{ getIcon('unchecked') }
); } ToggleButton.defaultProps = { icons: { checked: , unchecked: } }; ToggleButton.propTypes = { disabled: PropTypes.bool, defaultChecked: PropTypes.bool, className: PropTypes.string, onChange: PropTypes.func, icons: PropTypes.oneOfType([ PropTypes.bool, PropTypes.shape({ checked: PropTypes.node, unchecked: PropTypes.node }) ]) }; export default ToggleButton;