Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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