Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Rev 1254 | 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";
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
              }}
134
              config={{
135
                startupFocus: "end",
1120 steven 136
                allowedContent: false,
1170 steven 137
                image_previewText: ' ',
1120 steven 138
                toolbarGroups: [
139
                  // { name: 'document',	   groups: [ 'mode', 'document', 'doctools' ] },
140
                  // { name: 'clipboard',   groups: [ 'undo' ] },
141
                  { name: 'editing', groups: ['find', 'selection', 'spellchecker'] },
142
                  { name: 'forms' },
143
                  { name: 'basicstyles', groups: ['basicstyles', 'cleanup'] },
144
                  { name: 'paragraph', groups: ['list', 'indent', 'blocks', 'align', 'bidi'] },
145
                  { name: 'links' },
146
                  { name: 'insert' },
147
                  { name: 'styles' },
148
                  { name: 'colors' },
149
                  { name: 'tools' },
150
                  { name: 'others' },
151
                ],
2042 steven 152
                removeButtons: 'Anchor,Scayt',
153
                removePlugins: 'elementspath,Anchor,wsc,scayt'
1 www 154
              }}
155
              name="description"
156
            />
157
            {errors.description && (
158
              <FormErrorFeedback>
159
                {errors.description.message}
160
              </FormErrorFeedback>
161
            )}
162
          </Modal.Body>
163
          <Modal.Footer>
164
            <Button type="submit">Enviar</Button>
165
            <Button variant="danger" onClick={handleModalOpen}>
166
              Cancel
167
            </Button>
168
          </Modal.Footer>
169
        </form>
170
        {loading && (
171
          <StyledSpinnerContainer>
172
            <Spinner />
173
          </StyledSpinnerContainer>
174
        )}
175
      </Modal>
176
    </React.Fragment>
177
  );
178
};
179
 
180
export default Overview;