Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 3181 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 www 1
import React from "react";
2
import { useState, useEffect } from "react";
3
import { Button, Modal } from "react-bootstrap";
4
import { useForm } from "react-hook-form";
5
import styled from "styled-components";
2612 stevensc 6
import { axios } from "../../../../../utils";
1 www 7
import FormErrorFeedback from "../../../../../shared/form-error-feedback/FormErrorFeedback";
8
import Spinner from "../../../../../shared/loading-spinner/Spinner";
9
 
10
const StyledSpinnerContainer = styled.div`
11
  position: absolute;
12
  left: 0;
13
  top: 0;
14
  width: 100%;
15
  height: 100%;
16
  background: rgba(255, 255, 255, 0.4);
17
  display: flex;
18
  justify-content: center;
19
  align-items: center;
20
  z-index: 300;
21
`;
22
 
23
const Accessibility = (props) => {
24
  // props destructuring
3182 stevensc 25
  const { groupId, privacy, accessibility, accessibilities, addNotification, setSettedAccesibility } = props;
1 www 26
  // react hook form
27
  const {
28
    register,
29
    errors,
30
    handleSubmit,
31
    setValue,
32
    getValues,
33
    setError,
34
  } = useForm();
35
 
36
  // states
37
  const [isModalOpen, setIsModalOpen] = useState(false);
38
  const [loading, setLoading] = useState(false);
39
 
3182 stevensc 40
 
1 www 41
  const handleModalOpen = (event) => {
42
    event && event.preventDefault();
43
    setIsModalOpen(!isModalOpen);
44
  };
45
 
46
  useEffect(() => {
3181 stevensc 47
    axios.get(`/group/my-groups/accessibility/${groupId}`)
48
      .then((response) => {
49
        const resData = response.data;
50
        if (resData.success) {
51
          if (resData.data) setValue('accessibility', resData.data)
52
        }
53
      });
3182 stevensc 54
  }, []);
1 www 55
 
56
  const onSubmitHandler = async (data) => {
57
    setLoading(true);
58
    const formData = new FormData();
3181 stevensc 59
    Object.entries(data).map(([key, value]) => formData.append(key, value))
1 www 60
    await axios
61
      .post(`/group/my-groups/accessibility/${groupId}`, formData)
62
      .then((response) => {
63
        const resData = response.data;
2612 stevensc 64
        (resData);
1 www 65
        if (resData.success) {
66
          setSettedAccesibility(resData.data);
67
          handleModalOpen();
68
        } else {
69
          const resError = resData.data;
70
          if (resError.constructor.name === "Object") {
71
            Object.entries(resError).map(([key, value]) => {
72
              if (key in getValues()) {
73
                setError(key, {
74
                  type: "manual",
75
                  message: Array.isArray(value) ? value[0] : value,
76
                });
77
              }
78
            });
79
          } else {
80
            addNotification({
81
              style: "danger",
82
              msg: resError,
83
            });
84
          }
85
        }
86
      });
87
    setLoading(false);
88
  };
89
  return (
90
    <React.Fragment>
91
      <div className="user-profile-extended-ov">
92
        <h3>
93
          Accesibilidad
94
          <a
95
            href="#"
96
            title=""
97
            className="btn-accessibility-edit"
98
            onClick={handleModalOpen}
99
          >
100
            <i className="fa fa-pencil"></i>
101
          </a>
102
        </h3>
3182 stevensc 103
        <span id="overview-accessibility">{accessibility}</span>
1 www 104
      </div>
105
 
106
      {/* modal */}
107
      <Modal
108
        show={isModalOpen}
109
        onHide={handleModalOpen}
110
        style={{ overflowY: "scroll" }}
111
      >
112
        <Modal.Header closeButton>
1180 stevensc 113
          <Modal.Title>Accesibilidad</Modal.Title>
1 www 114
        </Modal.Header>
115
        <form onSubmit={handleSubmit(onSubmitHandler)}>
116
          <Modal.Body>
117
            <select
118
              name="accessibility"
3181 stevensc 119
              ref={register({ required: "Por favor eliga una accesibilidad", })}
1 www 120
            >
121
              <option value="" hidden>
122
                Accesibilidad
123
              </option>
2612 stevensc 124
              {Object.entries(accessibilities).map(([key, value]) => {
125
                if (privacy === 'Privado' && key === 'aj') {
3181 stevensc 126
                  return
2612 stevensc 127
                }
3181 stevensc 128
                if (privacy === 'Privado' && key === 'rj') {
129
                  return
130
                }
2612 stevensc 131
 
132
                return (
133
                  <option value={key} key={key}>
134
                    {value}
135
                  </option>
136
                )
137
              }
138
              )}
1 www 139
            </select>
140
            {errors.accessibility && (
141
              <FormErrorFeedback>
142
                {errors.accessibility.message}
143
              </FormErrorFeedback>
144
            )}
145
          </Modal.Body>
146
          <Modal.Footer>
147
            <Button type="submit">Enviar</Button>
148
            <Button variant="danger" onClick={handleModalOpen}>
1206 stevensc 149
              Cancelar
1 www 150
            </Button>
151
          </Modal.Footer>
152
        </form>
153
        {loading && (
154
          <StyledSpinnerContainer>
155
            <Spinner />
156
          </StyledSpinnerContainer>
157
        )}
158
      </Modal>
159
    </React.Fragment>
160
  );
161
};
162
 
163
export default Accessibility;