Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1 | Rev 220 | 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";
6
import {axios} from "../../../../../utils";
218 steven 7
import {CKEditor} from "ckeditor4-react";
1 www 8
import FormErrorFeedback from "../../../../../shared/form-error-feedback/FormErrorFeedback";
9
import Spinner from "../../../../../shared/loading-spinner/Spinner";
10
import parse from "html-react-parser";
11
 
12
const StyledSpinnerContainer = styled.div`
13
  position: absolute;
14
  left: 0;
15
  top: 0;
16
  width: 100%;
17
  height: 100%;
18
  background: rgba(255, 255, 255, 0.4);
19
  display: flex;
20
  justify-content: center;
21
  align-items: center;
22
  z-index: 300;
23
`;
24
 
25
const Overview = (props) => {
26
  // props destructuring
27
  const { groupId, overview, addNotification } = props;
28
  // react hook form
29
  const {
30
    register,
31
    errors,
32
    handleSubmit,
33
    setValue,
34
    clearErrors,
35
    getValues,
36
    setError,
37
  } = useForm();
38
 
39
  // states
40
  const [isModalOpen, setIsModalOpen] = useState(false);
41
  const [loading, setLoading] = useState(false);
42
  const [settedOverview, setSettedOverview] = useState(overview);
43
 
44
  useEffect(() => {
45
    register("description", {
46
      required: "Este campo es requerido",
47
    });
48
    setValue("description", settedOverview);
49
  }, []);
50
 
51
  const handleModalOpen = (event) => {
52
    event && event.preventDefault();
53
    setIsModalOpen(!isModalOpen);
54
  };
55
 
56
  const onSubmitHandler = async (data) => {
57
    // profile/my-profiles/extended', [ 'id' => $user_profile_id_encrypted]
58
    // https://leaderslinked.com/profile/my-profiles/extended/MzU4NDg3ODcg
59
    setLoading(true);
60
    const formData = new FormData();
61
     (data);
62
    Object.entries(data).map(([key, value]) => {
63
      formData.append(key, value);
64
    });
65
    await axios
66
      .post(`/group/my-groups/extended/${groupId}`, formData)
67
      .then((response) => {
68
        const resData = response.data;
69
         (resData);
70
        if (resData.success) {
71
          setSettedOverview(resData.data);
72
          handleModalOpen();
73
        } else {
74
          const resError = resData.data;
75
          if (resError.constructor.name === "Object") {
76
            Object.entries(resError).map(([key, value]) => {
77
              if (key in getValues()) {
78
                setError(key, {
79
                  type: "manual",
80
                  message: Array.isArray(value) ? value[0] : value,
81
                });
82
              }
83
            });
84
          } else {
85
            addNotification({
86
              style: "danger",
87
              msg: resError,
88
            });
89
          }
90
        }
91
      });
92
    setLoading(false);
93
  };
94
 
95
  return (
96
    <React.Fragment>
97
      <div className="user-profile-extended-ov">
98
        <h3>
99
          Visión general
100
          <a
101
            href="#"
102
            title=""
103
            className="btn-extended-edit"
104
            onClick={handleModalOpen}
105
          >
106
            <i className="fa fa-pencil"></i>
107
          </a>
108
        </h3>
109
        <span id="overview-description">{parse(`${settedOverview}`)}</span>
110
      </div>
111
 
112
      <Modal
113
        show={isModalOpen}
114
        onHide={handleModalOpen}
115
        style={{ overflowY: "scroll" }}
116
      >
117
        <Modal.Header closeButton>
118
          <Modal.Title>Visión general</Modal.Title>
119
        </Modal.Header>
120
        <form onSubmit={handleSubmit(onSubmitHandler)}>
121
          <Modal.Body>
122
            <CKEditor
123
              data={settedOverview}
124
              onChange={(e) => {
125
                const text = e.editor.getData();
126
                setValue("description", text);
127
                if (errors.description) {
128
                  clearErrors("description");
129
                }
130
              }}
131
              config={{
132
                startupFocus: "end",
133
              }}
134
              name="description"
135
            />
136
            {errors.description && (
137
              <FormErrorFeedback>
138
                {errors.description.message}
139
              </FormErrorFeedback>
140
            )}
141
          </Modal.Body>
142
          <Modal.Footer>
143
            <Button type="submit">Enviar</Button>
144
            <Button variant="danger" onClick={handleModalOpen}>
145
              Cancel
146
            </Button>
147
          </Modal.Footer>
148
        </form>
149
        {loading && (
150
          <StyledSpinnerContainer>
151
            <Spinner />
152
          </StyledSpinnerContainer>
153
        )}
154
      </Modal>
155
    </React.Fragment>
156
  );
157
};
158
 
159
export default Overview;