Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3182 | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |

import React, { useState, useEffect } from 'react'

import { Button, Modal } from 'react-bootstrap'
import { useForm } from 'react-hook-form'
import styled from 'styled-components'
import { axios } from '../../../../../utils'
import FormErrorFeedback from '../../../../../shared/form-error-feedback/FormErrorFeedback'
import Spinner from '../../../../../shared/loading-spinner/Spinner'

const StyledSpinnerContainer = styled.div`
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background: rgba(255, 255, 255, 0.4);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 300;
`

const Accessibility = (props) => {
  // props destructuring
  const { groupId, privacy, accessibility, accessibilities, addNotification, setSettedAccesibility } = props
  // react hook form
  const {
    register,
    errors,
    handleSubmit,
    setValue,
    getValues,
    setError
  } = useForm()

  // states
  const [isModalOpen, setIsModalOpen] = useState(false)
  const [loading, setLoading] = useState(false)

  const handleModalOpen = (event) => {
    event && event.preventDefault()
    setIsModalOpen(!isModalOpen)
  }

  useEffect(() => {
    axios.get(`/group/my-groups/accessibility/${groupId}`)
      .then((response) => {
        const resData = response.data
        if (resData.success) {
          if (resData.data) setValue('accessibility', resData.data)
        }
      })
  }, [])

  const onSubmitHandler = async (data) => {
    setLoading(true)
    const formData = new FormData()
    Object.entries(data).map(([key, value]) => formData.append(key, value))
    await axios
      .post(`/group/my-groups/accessibility/${groupId}`, formData)
      .then((response) => {
        const resData = response.data;
        (resData)
        if (resData.success) {
          setSettedAccesibility(resData.data)
          handleModalOpen()
        } else {
          const resError = resData.data
          if (resError.constructor.name === 'Object') {
            Object.entries(resError).map(([key, value]) => {
              if (key in getValues()) {
                setError(key, {
                  type: 'manual',
                  message: Array.isArray(value) ? value[0] : value
                })
              }
            })
          } else {
            addNotification({
              style: 'danger',
              msg: resError
            })
          }
        }
      })
    setLoading(false)
  }
  return (
    <React.Fragment>
      <div className="user-profile-extended-ov">
        <h3>
          Accesibilidad
          <a
            href="#"
            title=""
            className="btn-accessibility-edit"
            onClick={handleModalOpen}
          >
            <i className="fa fa-pencil"></i>
          </a>
        </h3>
        <span id="overview-accessibility">{accessibility}</span>
      </div>

      {/* modal */}
      <Modal
        show={isModalOpen}
        onHide={handleModalOpen}
        style={{ overflowY: 'scroll' }}
      >
        <Modal.Header closeButton>
          <Modal.Title>Accesibilidad</Modal.Title>
        </Modal.Header>
        <form onSubmit={handleSubmit(onSubmitHandler)}>
          <Modal.Body>
            <select
              name="accessibility"
              ref={register({ required: 'Por favor eliga una accesibilidad' })}
            >
              <option value="" hidden>
                Accesibilidad
              </option>
              {Object.entries(accessibilities).map(([key, value]) => {
                if (privacy === 'Privado' && key === 'aj') {
                  return null
                }

                return (
                  <option value={key} key={key}>
                    {value}
                  </option>
                )
              }
              )}
            </select>
            {errors.accessibility && (
              <FormErrorFeedback>
                {errors.accessibility.message}
              </FormErrorFeedback>
            )}
          </Modal.Body>
          <Modal.Footer>
            <Button type="submit">Enviar</Button>
            <Button variant="danger" onClick={handleModalOpen}>
              Cancelar
            </Button>
          </Modal.Footer>
        </form>
        {loading && (
          <StyledSpinnerContainer>
            <Spinner />
          </StyledSpinnerContainer>
        )}
      </Modal>
    </React.Fragment>
  )
}

export default Accessibility