Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

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