Rev 1273 | Rev 2785 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useEffect, useState } from 'react'import styled, { css } from 'styled-components'const SwitchContainer = styled.label`display: inline-flex;flex-direction: column;`const StyledSwitch = styled.div`position: relative;display: inline-block;width: 60px;height: 34px;input {opacity: 0;width: 0;height: 0;}.slider {position: absolute;cursor: pointer;top: 0;left: 0;right: 0;bottom: 0;background-color: #ccc;-webkit-transition: 0.4s;transition: 0.4s;}.slider:before {position: absolute;content: '';height: 26px;width: 26px;left: 4px;bottom: 4px;background-color: white;-webkit-transition: 0.4s;transition: 0.4s;}input:focus + .slider {box-shadow: 0 0 1px #2196f3;}.slider.round {border-radius: 34px;}.slider.round:before {border-radius: 50%;}${(props) =>props.isChecked &&css`input + .slider {background-color: #2196f3;}input + .slider:before {-webkit-transform: translateX(26px);-ms-transform: translateX(26px);transform: translateX(26px);}`}`const SwitchInput = ({label = '',isChecked: initialValue = false,setValue = () => null}) => {const [isChecked, setIsChecked] = useState(false)const handleToggle = () => {setIsChecked(!isChecked)setValue(!isChecked)}useEffect(() => {setIsChecked(initialValue)}, [initialValue])return (<SwitchContainer>{label}<StyledSwitch isChecked={isChecked}><input type='checkbox' checked={isChecked} onChange={handleToggle} /><span className='slider round'></span></StyledSwitch></SwitchContainer>)}export default SwitchInput