Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2785 | 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;