Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 1821 | 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: 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