contentoh-components-library 21.3.66 → 21.3.68

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/.env.development +0 -2
  2. package/dist/assets/fonts/roboto/LICENSE.txt +202 -0
  3. package/dist/components/atoms/ButtonV2/styles.js +1 -1
  4. package/dist/components/atoms/InputFormatter/styles.js +1 -1
  5. package/dist/components/molecules/CarouselImagesLogin/index.js +1 -1
  6. package/dist/components/molecules/HeaderTop/index.js +11 -68
  7. package/dist/components/molecules/TagAndInput/index.js +1 -1
  8. package/dist/components/organisms/Chat/Chat.stories.js +1 -21
  9. package/dist/components/organisms/Chat/ContainerItems/index.js +3 -19
  10. package/dist/components/organisms/Chat/ContainerItems/styles.js +1 -1
  11. package/dist/components/organisms/Chat/ContentChat/index.js +191 -343
  12. package/dist/components/organisms/Chat/Footer/index.js +39 -48
  13. package/dist/components/organisms/Chat/index.js +3 -48
  14. package/dist/components/organisms/FullProductNameHeader/index.js +2 -2
  15. package/dist/components/organisms/Modal/styles.js +1 -1
  16. package/dist/components/organisms/SideModal/index.js +0 -11
  17. package/dist/components/organisms/SideModal/styles.js +1 -1
  18. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +96 -171
  19. package/dist/components/pages/ProviderProductEdition/index.js +182 -191
  20. package/dist/components/pages/ProviderProductEdition/styles.js +1 -1
  21. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +28 -40
  22. package/dist/components/pages/RetailerProductEdition/index.js +273 -265
  23. package/dist/components/pages/RetailerProductEdition/styles.js +1 -1
  24. package/dist/components/pages/RetailerProductEdition/utils.js +2 -61
  25. package/dist/index.js +0 -13
  26. package/package.json +1 -1
  27. package/src/components/atoms/ButtonV2/styles.js +1 -1
  28. package/src/components/atoms/InputFormatter/styles.js +1 -2
  29. package/src/components/molecules/AvatarAndValidation/index.js +1 -1
  30. package/src/components/molecules/CarouselImagesLogin/index.js +1 -1
  31. package/src/components/molecules/HeaderTop/index.js +6 -52
  32. package/src/components/molecules/TagAndInput/index.js +8 -10
  33. package/src/components/organisms/Chat/Chat.stories.js +0 -21
  34. package/src/components/organisms/Chat/ContainerItems/index.js +2 -18
  35. package/src/components/organisms/Chat/ContainerItems/styles.js +2 -10
  36. package/src/components/organisms/Chat/ContentChat/index.js +6 -81
  37. package/src/components/organisms/Chat/Footer/index.js +0 -11
  38. package/src/components/organisms/Chat/index.js +3 -47
  39. package/src/components/organisms/FullProductNameHeader/index.js +1 -1
  40. package/src/components/organisms/Modal/styles.js +1 -4
  41. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +98 -181
  42. package/src/components/pages/ProviderProductEdition/index.js +133 -135
  43. package/src/components/pages/ProviderProductEdition/styles.js +1 -5
  44. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +26 -38
  45. package/src/components/pages/RetailerProductEdition/index.js +135 -109
  46. package/src/components/pages/RetailerProductEdition/styles.js +0 -4
  47. package/src/components/pages/RetailerProductEdition/utils.js +0 -37
  48. package/src/index.js +0 -1
  49. package/src/components/organisms/SideModal/SideModal.stories.js +0 -23
  50. package/src/components/organisms/SideModal/index.js +0 -50
  51. package/src/components/organisms/SideModal/styles.js +0 -30
@@ -24,20 +24,15 @@ import descriptionSent from "../../../assets/images/modalsSVGs/descriptionSent.s
24
24
  import imagesSent from "../../../assets/images/modalsSVGs/uploadingImages.svg";
25
25
  import { TagAndInput } from "../../molecules/TagAndInput/index";
26
26
  import { Button } from "../../atoms/GeneralButton";
27
+ import { Commentary } from "../../atoms/Commentary";
27
28
  import { GenericModal } from "../../atoms/GenericModal";
28
29
  import { ScreenHeader } from "../../atoms/ScreenHeader";
29
30
  import { Loading } from "../../atoms/Loading";
30
31
  import succes from "../../../assets/images/genericModal/genericModalCheck.svg";
32
+ import errorModal from "../../../assets/images/genericModal/errorModal.svg";
31
33
  import { VersionSelector } from "../../organisms/VersionSelector";
32
34
  import { useCloseModal } from "../../../global-files/customHooks";
33
- import {
34
- getAuditVersion,
35
- getInputsData,
36
- createMessage,
37
- sendMessage,
38
- } from "./utils";
39
- import { Modal } from "../../organisms/Modal";
40
- import { ButtonV2 } from "../../atoms/ButtonV2";
35
+ import { getAuditVersion, getInputsData } from "./utils";
41
36
 
42
37
  const reducerImages = (state, action) => {
43
38
  let { values, attrForImgs, inputsByRetailer } = state;
@@ -137,7 +132,6 @@ export const RetailerProductEdition = ({
137
132
  const [datasheets, setDatasheets] = useState([]);
138
133
  const [images, setImages] = useReducer(reducerImages, {});
139
134
  const [showModal, setShowModal] = useState(false);
140
- const [showRejectModal, setShowRejectModal] = useState(false);
141
135
  const { getRootProps, getInputProps } = useDropzone({
142
136
  accept: "image/*",
143
137
  noKeyboard: true,
@@ -224,7 +218,6 @@ export const RetailerProductEdition = ({
224
218
  const [auditDescriptions, setAuditDescriptions] = useState([]);
225
219
  const [auditImages, setAuditImages] = useState([]);
226
220
  const [compare, setCompare] = useState(false);
227
- const [valRejAll, setValRejAll] = useState(false);
228
221
 
229
222
  useEffect(async () => {
230
223
  const { id_article } = product?.article || {};
@@ -862,25 +855,6 @@ export const RetailerProductEdition = ({
862
855
  const { newStatus, newOrderStatus, newArticleStatus } = JSON.parse(
863
856
  res.data.body
864
857
  );
865
- const messageToChat = createMessage(
866
- product.retailers,
867
- activeRetailer.id,
868
- evalStatus,
869
- newStatus,
870
- activeTab
871
- );
872
-
873
- const data = {
874
- paramsBody: {
875
- id: product.article.id_article,
876
- version: version,
877
- items: [{ type: "status", value: messageToChat }],
878
- retailerId: activeRetailer.id,
879
- status: product.status,
880
- },
881
- paramsHeader: { Authorization: token },
882
- };
883
- await sendMessage(data);
884
858
  if (newOrderStatus) productTemp.status = newArticleStatus[articleId];
885
859
  productTemp[`${concept}_status`] = newStatus;
886
860
  await loadData();
@@ -923,19 +897,35 @@ export const RetailerProductEdition = ({
923
897
  return product?.article[`id_auditor`] === user.id_user;
924
898
  };
925
899
 
926
- const createComment = async (messages = [], retailerId) => {
900
+ const createComment = async (e, body, tab) => {
901
+ let concept = "";
902
+ switch (activeTab) {
903
+ case "Ficha técnica":
904
+ concept = "datasheet";
905
+ break;
906
+ case "Imágenes":
907
+ concept = "images";
908
+ break;
909
+
910
+ default:
911
+ concept = "description";
912
+ break;
913
+ }
927
914
  const data = {
928
- paramsBody: {
929
- id: product.article.id_article,
930
- version: version,
931
- items: messages,
932
- retailerId: retailerId,
933
- status: product.status,
934
- },
935
- paramsHeader: { Authorization: token },
915
+ articleId: product?.article?.id_article,
916
+ orderId: product?.orderId,
917
+ message: body?.replace(/<.*?\/?>/gm, ""),
918
+ concept: concept,
919
+ version: version,
936
920
  };
921
+ await axios.post(`${process.env.REACT_APP_COMMENTS_ENDPOINT}`, data, {
922
+ headers: {
923
+ Authorization: token,
924
+ },
925
+ });
926
+ await getComments(tab);
937
927
  setMessage("");
938
- return sendMessage(data);
928
+ setComponentsArray([]);
939
929
  };
940
930
 
941
931
  const getRequired = (services) => {
@@ -1217,8 +1207,6 @@ export const RetailerProductEdition = ({
1217
1207
  break;
1218
1208
  }
1219
1209
 
1220
- const messages = [];
1221
-
1222
1210
  servicesData?.forEach((ret) => {
1223
1211
  if (conceptArray.includes(ret.service)) {
1224
1212
  let data = {
@@ -1229,21 +1217,6 @@ export const RetailerProductEdition = ({
1229
1217
  evalStatus: ret.status,
1230
1218
  retailerId: ret.id_retailer,
1231
1219
  };
1232
- if (product[`${ret.service}_status`] !== "NS") {
1233
- const message = createMessage(
1234
- product.retailers,
1235
- ret.id_retailer,
1236
- product[`${ret.service}_status`],
1237
- `${result}A`,
1238
- ret.service
1239
- );
1240
- messages.push(
1241
- createComment(
1242
- [{ type: "status", value: message }],
1243
- ret.id_retailer
1244
- )
1245
- );
1246
- }
1247
1220
  evaluationArray.push(
1248
1221
  axios.put(`${process.env.REACT_APP_EVALUATION_ENDPOINT}`, data, {
1249
1222
  headers: {
@@ -1253,19 +1226,19 @@ export const RetailerProductEdition = ({
1253
1226
  );
1254
1227
  }
1255
1228
  });
1229
+
1256
1230
  await Promise.all(evaluationArray);
1257
1231
 
1258
1232
  const productTemp = product;
1259
1233
  productTemp.status = `${result}A`;
1260
1234
  productTemp.datasheet_status =
1261
- productTemp.datasheet_status === "NS" ? "NS" : `${result}A`;
1235
+ productTemp.datasheet_status === "NA" ? "NA" : `${result}A`;
1262
1236
  productTemp.description_status =
1263
- productTemp.description_status === "NS" ? "NS" : `${result}A`;
1237
+ productTemp.description_status === "NA" ? "NA" : `${result}A`;
1264
1238
  productTemp.images_status =
1265
- productTemp.images_status === "NS" ? "NS" : `${result}A`;
1239
+ productTemp.images_status === "NA" ? "NA" : `${result}A`;
1266
1240
  sessionStorage.setItem("productSelected", JSON.stringify(productTemp));
1267
1241
  setProduct(productTemp);
1268
- const messagesResponse = await Promise.all(messages);
1269
1242
 
1270
1243
  await loadData();
1271
1244
  } catch (error) {
@@ -1281,10 +1254,8 @@ export const RetailerProductEdition = ({
1281
1254
  setCompare={setCompare}
1282
1255
  isAuditor={[1, 6].includes(user.id_role)}
1283
1256
  withChat={location?.state?.withChat}
1284
- chatType={location?.state?.chatType}
1285
- productSelected={product}
1257
+ productSelected={productSelected}
1286
1258
  token={token}
1287
- activeRetailer={activeRetailer}
1288
1259
  />
1289
1260
  <div className="data-container">
1290
1261
  <div className="image-data-panel">
@@ -1324,7 +1295,36 @@ export const RetailerProductEdition = ({
1324
1295
  sendToFacilitator("A");
1325
1296
  }}
1326
1297
  reject={() => {
1327
- setShowRejectModal(true);
1298
+ sendToFacilitator("R");
1299
+ setMessage("Rechazado");
1300
+ setComponentsArray([
1301
+ <img src={errorModal} />,
1302
+ <ScreenHeader
1303
+ text={"Agrega tu comentarios para enviar el rechazo"}
1304
+ headerType={"input-name-header"}
1305
+ color={"white"}
1306
+ />,
1307
+ <TagAndInput
1308
+ label={"Caja de Comentario"}
1309
+ inputType={"textarea"}
1310
+ inputId={"modal-commentary-box"}
1311
+ index={0}
1312
+ color={"white"}
1313
+ />,
1314
+ <Button
1315
+ buttonType={"general-default-button"}
1316
+ label={"Enviar comentario"}
1317
+ onClick={(e) =>
1318
+ createComment(
1319
+ e,
1320
+ document.querySelector(
1321
+ "#modal-commentary-box .ql-container .ql-editor > p"
1322
+ ).innerHTML,
1323
+ activeTab
1324
+ )
1325
+ }
1326
+ />,
1327
+ ]);
1328
1328
  }}
1329
1329
  showApproveRejectAll={
1330
1330
  approveRejectAllButtons() && (auditorAssigned() || userAssigned())
@@ -1334,8 +1334,36 @@ export const RetailerProductEdition = ({
1334
1334
  }
1335
1335
  approveAll={() => validateAll("A")}
1336
1336
  rejectAll={() => {
1337
- setShowRejectModal(true);
1338
- setValRejAll(true);
1337
+ validateAll("R");
1338
+ setMessage("Rechazado");
1339
+ setComponentsArray([
1340
+ <img src={errorModal} />,
1341
+ <ScreenHeader
1342
+ text={"Agrega tu comentarios para enviar el rechazo"}
1343
+ headerType={"input-name-header"}
1344
+ color={"white"}
1345
+ />,
1346
+ <TagAndInput
1347
+ label={"Caja de Comentario"}
1348
+ inputType={"textarea"}
1349
+ inputId={"modal-commentary-box"}
1350
+ index={0}
1351
+ color={"white"}
1352
+ />,
1353
+ <Button
1354
+ buttonType={"general-default-button"}
1355
+ label={"Enviar comentario"}
1356
+ onClick={(e) =>
1357
+ createComment(
1358
+ e,
1359
+ document.querySelector(
1360
+ "#modal-commentary-box .ql-container .ql-editor > p"
1361
+ ).innerHTML,
1362
+ activeTab
1363
+ )
1364
+ }
1365
+ />,
1366
+ ]);
1339
1367
  }}
1340
1368
  />
1341
1369
  <FullTabsMenu
@@ -1456,6 +1484,47 @@ export const RetailerProductEdition = ({
1456
1484
  {(userAssigned(activeTab) || auditorAssigned()) &&
1457
1485
  product[`${getConcept(activeTab)}_status`] !== "NS" && (
1458
1486
  <div className="commentary-box">
1487
+ {!comment ? (
1488
+ <div className="commentary">
1489
+ <TagAndInput
1490
+ label={"Caja de Comentario"}
1491
+ inputType={"textarea"}
1492
+ inputCols={80}
1493
+ inputRows={4}
1494
+ inputId={"commentary-box"}
1495
+ index={0}
1496
+ />
1497
+ <div className="buttons-box">
1498
+ <Button
1499
+ buttonType={"general-transparent-button"}
1500
+ label={"Enviar comentario"}
1501
+ onClick={(e) =>
1502
+ createComment(
1503
+ e,
1504
+ document.querySelector(
1505
+ "#commentary-box .ql-container .ql-editor > p"
1506
+ ).innerHTML,
1507
+ activeTab
1508
+ )
1509
+ }
1510
+ />
1511
+ </div>
1512
+ </div>
1513
+ ) : (
1514
+ <div className="feedback-box">
1515
+ <Commentary
1516
+ comment={comment?.message?.replace(/<.*?\/?>/gm, "")}
1517
+ reviewed={crossComment}
1518
+ />
1519
+ <Button
1520
+ buttonType={"circular-button accept-button"}
1521
+ onClick={async () => {
1522
+ setCrossComment(true);
1523
+ commentRevised();
1524
+ }}
1525
+ />
1526
+ </div>
1527
+ )}
1459
1528
  {[7, 8].includes(user.id_role) && (
1460
1529
  <Button
1461
1530
  buttonType={
@@ -1513,49 +1582,6 @@ export const RetailerProductEdition = ({
1513
1582
  jwt={token}
1514
1583
  />
1515
1584
  )}
1516
- {showRejectModal && (
1517
- <Modal
1518
- title={`Agregar mensaje de rechazo para ${activeTab?.toLowerCase()}`}
1519
- show={showRejectModal}
1520
- customComponent={
1521
- <TagAndInput
1522
- inputType={"textarea"}
1523
- inputId={"modal-message-box"}
1524
- index={0}
1525
- color={"white"}
1526
- />
1527
- }
1528
- buttons={[
1529
- <ButtonV2
1530
- key={"btn-Cancelar"}
1531
- type={"white"}
1532
- label={"Cancelar"}
1533
- size={12}
1534
- onClick={() => {
1535
- setShowRejectModal(false);
1536
- }}
1537
- />,
1538
- <ButtonV2
1539
- key={"btn-Aceptar"}
1540
- type={"pink"}
1541
- label={"Aceptar"}
1542
- size={12}
1543
- onClick={async () => {
1544
- const body = document.querySelector(
1545
- "#modal-message-box .ql-container .ql-editor > p"
1546
- ).innerHTML;
1547
- const messages = [
1548
- { type: "message", value: body?.replace(/<.*?\/?>/gm, "") },
1549
- ];
1550
- await createComment(messages, activeRetailer.id);
1551
- valRejAll ? validateAll("R") : sendToFacilitator("R");
1552
- setMessage("Rechazado");
1553
- setShowRejectModal(false);
1554
- }}
1555
- />,
1556
- ]}
1557
- />
1558
- )}
1559
1585
  </Container>
1560
1586
  );
1561
1587
  };
@@ -89,10 +89,6 @@ export const Container = styled.div`
89
89
  }
90
90
  }
91
91
  }
92
- #modal-message-box {
93
- width: 400px;
94
- height: 100px;
95
- }
96
92
  .container {
97
93
  width: 100%;
98
94
  height: 100%;
@@ -1,5 +1,4 @@
1
1
  import axios from "axios";
2
- import { fetchPOST } from "../../../global-files/handle_http";
3
2
 
4
3
  export const getAuditVersion = async (articleId, setState, token) => {
5
4
  const auditResponse = await axios.get(
@@ -33,39 +32,3 @@ export const getInputsData = (
33
32
  setDescriptionState(descriptions);
34
33
  }
35
34
  };
36
-
37
- export const translateService = (tab) => {
38
- switch (tab) {
39
- case "description":
40
- case "Descripción":
41
- return "Descripciones";
42
- case "datasheet":
43
- case "Ficha técnica":
44
- return "Fichas técnicas";
45
- case "images":
46
- case "Imágenes":
47
- return "Imágenes";
48
- }
49
- };
50
-
51
- export const createMessage = (
52
- retailers,
53
- idRetailer,
54
- oldStatus,
55
- newStatus,
56
- service
57
- ) => {
58
- const [retailer] = retailers?.filter((ret) => ret.id === idRetailer) || [];
59
- return `${translateService(service)} de ${
60
- retailer.name
61
- } |${oldStatus}| a |${newStatus}`;
62
- };
63
-
64
- export const sendMessage = async (data) => {
65
- const { paramsBody, paramsHeader } = data;
66
- return fetchPOST(
67
- process.env.REACT_APP_CREATE_MESSAGES,
68
- paramsBody,
69
- paramsHeader
70
- );
71
- };
package/src/index.js CHANGED
@@ -79,7 +79,6 @@ export * from "./components/organisms/Modal/index";
79
79
  export * from "./components/organisms/OrderDetail/index";
80
80
  export * from "./components/organisms/RangeCalendar";
81
81
  export * from "./components/organisms/TableResizable";
82
- export * from "./components/organisms/SideModal/index";
83
82
 
84
83
  //pages
85
84
  export * from "./components/pages/ChangePasswordLogin";
@@ -1,23 +0,0 @@
1
- import { SideModal } from ".";
2
- import { ButtonV2 } from "../../atoms/ButtonV2";
3
-
4
- export default {
5
- title: "Components/organisms/SideModal",
6
- component: SideModal,
7
- };
8
-
9
- const Template = (args) => <SideModal {...args} />;
10
-
11
- export const DefaultSideModal = Template.bind({});
12
- DefaultSideModal.args = {
13
- show: false,
14
- header: [
15
- <div className="title-container">
16
- <h2></h2>
17
- </div>,
18
- <ButtonV2 label="Ir al Checkout" />,
19
- <ButtonV2 label="X" />,
20
- ],
21
- body: <></>,
22
- footer: <></>,
23
- };
@@ -1,50 +0,0 @@
1
- import { useRef } from "react";
2
- import { Container } from "./styles";
3
- import { useEffect } from "react";
4
- import { PropaneSharp } from "@mui/icons-material";
5
-
6
- export const SideModal = ({
7
- header,
8
- body,
9
- footer,
10
- show,
11
- setShow,
12
- id = "side-modal",
13
- }) => {
14
- const modal = useRef();
15
-
16
- const closeModal = (e) => {
17
- if (!e.target.closest(`#${id}`) && show) {
18
- document.removeEventListener("click", closeModal, false);
19
- modal?.current?.classList?.remove("shown");
20
- setShow && setShow(false);
21
- }
22
- };
23
-
24
- useEffect(() => {
25
- if (show && modal.current) {
26
- document.addEventListener("click", closeModal, false);
27
- modal?.current?.classList?.add("shown");
28
- }
29
- }, [show]);
30
-
31
- useEffect(() => {
32
- return () => {
33
- document.removeEventListener("click", closeModal, false);
34
- modal?.current?.classList?.remove("shown");
35
- setShow && setShow(false);
36
- };
37
- }, []);
38
-
39
- return (
40
- show && (
41
- <Container>
42
- <div id={id} ref={modal} className="modal-container">
43
- <div className="modal-header">{header}</div>
44
- <div className="modal-body">{body}</div>
45
- <div className="modal-footer">{footer}</div>
46
- </div>
47
- </Container>
48
- )
49
- );
50
- };
@@ -1,30 +0,0 @@
1
- import styled from "styled-components";
2
-
3
- export const Container = styled.div`
4
- width: 100vw;
5
- height: 100vh;
6
- position: fixed;
7
- z-index: 9999999;
8
- background-color: transparent;
9
- top: 0;
10
- left: 0;
11
-
12
- .modal-container {
13
- width: 600px;
14
- height: 100%;
15
- position: absolute;
16
- right: -600px;
17
- background-color: #fff;
18
- display: flex;
19
- flex-direction: column;
20
- box-shadow: -0.5px 0px 5px #f0f0f0;
21
- border: 1px solid #f0f0f0;
22
- .modal-body {
23
- flex: 1;
24
- }
25
-
26
- &.shown {
27
- right: 0;
28
- }
29
- }
30
- `;