contentoh-components-library 21.3.8 → 21.3.10

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.
@@ -80,8 +80,20 @@ chatCAD_merchantsProduct.args = {
80
80
  chatContainerType: "popUp",
81
81
  chatData: {
82
82
  userToken:
83
- "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI1ODg0YWUzNC01OWQ2LTQ0NTQtYjk4ZS04MjE1MThiY2MzYTciLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6IjU4ODRhZTM0LTU5ZDYtNDQ1NC1iOThlLTgyMTUxOGJjYzNhNyIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiI2YmI0NzExMi03ZTNiLTRjYzUtYmVhZS02MzMxZjEwYjk3MzIiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY2NTYxNjI0MSwibmFtZSI6IkNhZGVuYSBJc21hZWwiLCJwaG9uZV9udW1iZXIiOiIrNTIzMTExMzY2MzM2IiwiZXhwIjoxNjY1NjE5ODQxLCJpYXQiOjE2NjU2MTYyNDEsImVtYWlsIjoiY2FkZW5hLmlzbWFlbEBhbGxmcmVlbWFpbC5uZXQifQ.gi1Jiua_O175vHLy-CYXOR945IRcObIj5j1LNk4_EhcKPz-MzPnfWDLH7L3sTiNS-VUhIRtAhtUVPUSYv0oP1qfJwFHomerxJvYgJge8SLWPjL6yGBnTxAvHVbuLU8kcaoZup2eNMV6XOIAEBAHeCDm4vW0rYWwfrKADPyYGZQF2si14o3wtgSMX5a4ccxGwikT3to3HttWBhmJs_I1Xr_BvBxePc4WghjQr5GVGbq8vhr4HwdkTmlcJAnQsc_fmIdbJ_ACyTa1wr343KYYOQVwBjAmZDa6rU16y0yTr_J4IVWY3aS5UpBEBHy4XE0c76UaN-_DcGiVl4ayWQIUz8A",
84
- id: 84300,
83
+ "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI1ODg0YWUzNC01OWQ2LTQ0NTQtYjk4ZS04MjE1MThiY2MzYTciLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6IjU4ODRhZTM0LTU5ZDYtNDQ1NC1iOThlLTgyMTUxOGJjYzNhNyIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiJhMWYyM2IzZC1mOTk0LTRjNWUtOTk4MC04ZThjYmQxMzcwMzYiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY3NDU3NjMzNywibmFtZSI6IkNhZGVuYSBJc21hZWwiLCJwaG9uZV9udW1iZXIiOiIrNTIzMTExMzY2MzM2IiwiZXhwIjoxNjc0NTc5OTM3LCJpYXQiOjE2NzQ1NzYzMzcsImVtYWlsIjoiY2FkZW5hLmlzbWFlbEBhbGxmcmVlbWFpbC5uZXQifQ.GZIbxwAqZBifyxJQdb-Asbf2X9k4Nmi44TRINg9oGdvz0MknHOUtCiQ2ID7XiqKzgcVvbl9RDDx2GFWZt0Fd2-Sd5NSMxEl3C3ZWqVWQb9ncrMdVcAOHPp76w2eR6IzOwpa5L4GAc_mLACaJtfGdYrSLSxYTpMPQfhxaG2GDdWbOLA-_hNflff0lQD-EvCg8wEirAcZHro2mEeqMFG2GLhh0zfb_H-A8EWMqmMM3kYXVHTza04S1HSYsXhGzBi-7paL_Oh3bcORN95CqeddkReSmThG5wcp0_YScCSFNeUDEvJo2Z9w9TlOrEgUIrSkaY0aLZUpERfOST55P4R9hRw",
84
+ id: 429,
85
+ version: 1,
86
+ },
87
+ };
88
+
89
+ export const chatCAD_merchantsProductProvider = Template.bind({});
90
+ chatCAD_merchantsProductProvider.args = {
91
+ chatType: "merchant_product",
92
+ chatContainerType: "popUp",
93
+ chatData: {
94
+ userToken:
95
+ "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI4MWY3NmNjYy0yZDYzLTQyYzYtYjQzOS03NDQ2ZWFhYjFhZDciLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6IjgxZjc2Y2NjLTJkNjMtNDJjNi1iNDM5LTc0NDZlYWFiMWFkNyIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiJiN2M5YWVlYS0zMmRmLTQ0YmUtODliNy01OGY1MzE0YzMzN2IiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY3NDUxMTUzMiwibmFtZSI6Im1lcmNoYW50czIzZW5lQGFsbGZyZWVtYWlsLm5ldCBtZXJjaGFudHMyM2VuZUBhbGxmcmVlbWFpbC5uZXQiLCJwaG9uZV9udW1iZXIiOiIrNTIxMjM0NTY3ODkzIiwiZXhwIjoxNjc0NTE1MTMyLCJpYXQiOjE2NzQ1MTE1MzIsImVtYWlsIjoibWVyY2hhbnRzMjNlbmVAYWxsZnJlZW1haWwubmV0In0.eeR19yCD--WMFFfbljOufIthXUuXc_gFoJzLX9Q6mzgPpA2TOmzabQFLh2O1WKgGgcmFSEfGfTjzFRAd44O5MYqB_VltFPoMSNIVA38rmX8yfKhVlzF_ZBRVLNHZZOrKOQrCTZX7vibtUtvnbXPtkPgJV1Wb3RoB-45qi3qa1xIUcHwtdInsdQG1PvL28ryH4-ZupjXYRC9JB2wMDFPF1c6HnUQQupTSHRgTHVj9USNCYblOuCJSj1s2_lUrmFZJBifRGXsYj8rBz6mkkl5wAGU-YCmCFkwuD3Gl5bsevFg_VL2CGEfSwSXMzsB-ud4FMIaMZuQHpF-CefGJaEHYxg",
96
+ id: 429,
85
97
  version: 1,
86
98
  },
87
99
  };
@@ -97,102 +109,38 @@ chatPROV_merchantsProduct.args = {
97
109
  };*/
98
110
 
99
111
  // ejemplo del chat ticket con user FAB
100
- export const chatFAB_ticketClosed_user49 = Template.bind({});
101
- chatFAB_ticketClosed_user49.args = {
112
+ export const chatTicket_userNORMAL = Template.bind({});
113
+ chatTicket_userNORMAL.args = {
102
114
  chatType: "ticket",
103
115
  chatContainerType: "fixed",
104
116
  chatData: {
105
- id: 10,
106
- ticketOwnerUserId: 23,
107
- statusTicket: "COMPLETED",
117
+ id: 104,
118
+ ticketOwnerUserId: 49,
119
+ statusTicket: "IN_PROGRESS",
108
120
  currentUser: {
109
- id: 49,
110
- companyId: 2,
121
+ token:
122
+ "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiI1ODg0YWUzNC01OWQ2LTQ0NTQtYjk4ZS04MjE1MThiY2MzYTciLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6IjU4ODRhZTM0LTU5ZDYtNDQ1NC1iOThlLTgyMTUxOGJjYzNhNyIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiI2YmI0NzExMi03ZTNiLTRjYzUtYmVhZS02MzMxZjEwYjk3MzIiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY2NTYxNjI0MSwibmFtZSI6IkNhZGVuYSBJc21hZWwiLCJwaG9uZV9udW1iZXIiOiIrNTIzMTExMzY2MzM2IiwiZXhwIjoxNjY1NjE5ODQxLCJpYXQiOjE2NjU2MTYyNDEsImVtYWlsIjoiY2FkZW5hLmlzbWFlbEBhbGxmcmVlbWFpbC5uZXQifQ.gi1Jiua_O175vHLy-CYXOR945IRcObIj5j1LNk4_EhcKPz-MzPnfWDLH7L3sTiNS-VUhIRtAhtUVPUSYv0oP1qfJwFHomerxJvYgJge8SLWPjL6yGBnTxAvHVbuLU8kcaoZup2eNMV6XOIAEBAHeCDm4vW0rYWwfrKADPyYGZQF2si14o3wtgSMX5a4ccxGwikT3to3HttWBhmJs_I1Xr_BvBxePc4WghjQr5GVGbq8vhr4HwdkTmlcJAnQsc_fmIdbJ_ACyTa1wr343KYYOQVwBjAmZDa6rU16y0yTr_J4IVWY3aS5UpBEBHy4XE0c76UaN-_DcGiVl4ayWQIUz8A",
123
+ id: 59,
124
+ companyId: 817,
111
125
  isUserTech: false,
112
126
  },
113
127
  },
114
128
  };
115
129
 
116
130
  // ejemplo del chat ticket con user TECH
117
- export const chatTECH_ticketClosed_user65 = Template.bind({});
118
- chatTECH_ticketClosed_user65.args = {
131
+ export const chatTicket_userTECH = Template.bind({});
132
+ chatTicket_userTECH.args = {
119
133
  chatType: "ticket",
120
134
  chatContainerType: "fixed",
121
135
  chatData: {
122
136
  id: 10,
123
- ticketOwnerUserId: 23,
124
- statusTicket: "COMPLETED",
125
- currentUser: {
126
- id: 65,
127
- companyId: 2,
128
- isUserTech: true,
129
- },
130
- },
131
- };
132
-
133
- // ejemplo del chat ticket con user TECH propietario del ticket
134
- export const chatTECH_ticketClosedOwn_user66 = Template.bind({});
135
- chatTECH_ticketClosedOwn_user66.args = {
136
- chatType: "ticket",
137
- chatContainerType: "fixed",
138
- chatData: {
139
- id: 10,
140
- ticketOwnerUserId: 66,
141
- statusTicket: "COMPLETED",
142
- currentUser: {
143
- id: 66,
144
- companyId: 2,
145
- isUserTech: true,
146
- },
147
- },
148
- };
149
-
150
- // ejemplo del chat ticket con user FAB
151
- export const chatFAB_ticketOpen_user49 = Template.bind({});
152
- chatFAB_ticketOpen_user49.args = {
153
- chatType: "ticket",
154
- chatContainerType: "fixed",
155
- chatData: {
156
- id: 11,
157
- ticketOwnerUserId: 23,
158
- statusTicket: "PENDING",
159
- currentUser: {
160
- id: 49,
161
- companyId: 2,
162
- isUserTech: false,
163
- },
164
- },
165
- };
166
-
167
- // ejemplo del chat ticket con user TECH
168
- export const chatTECH_ticketOpen_user65 = Template.bind({});
169
- chatTECH_ticketOpen_user65.args = {
170
- chatType: "ticket",
171
- chatContainerType: "fixed",
172
- chatData: {
173
- id: 11,
174
- ticketOwnerUserId: 23,
175
- statusTicket: "PENDING",
176
- currentUser: {
177
- id: 65,
178
- companyId: 2,
179
- isUserTech: true,
180
- },
181
- },
182
- };
183
-
184
- // ejemplo del chat ticket con user TECH propietario del ticket
185
- export const chatTECH_ticketOpenOwn_user66 = Template.bind({});
186
- chatTECH_ticketOpenOwn_user66.args = {
187
- chatType: "ticket",
188
- chatContainerType: "fixed",
189
- chatData: {
190
- id: 11,
191
- ticketOwnerUserId: 66,
192
- statusTicket: "PENDING",
137
+ ticketOwnerUserId: 49,
138
+ statusTicket: "IN_PROGRESS",
193
139
  currentUser: {
194
- id: 66,
195
- companyId: 2,
140
+ token:
141
+ "eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.eyJzdWIiOiJmNTkyN2Y4ZS1jYmY3LTQ5MjItOWUwOS1lNjllYzBiMjczMWEiLCJjb2duaXRvOmdyb3VwcyI6WyJ1c3VhcmlvX2NvbnRlbnRvaCJdLCJlbWFpbF92ZXJpZmllZCI6dHJ1ZSwiaXNzIjoiaHR0cHM6XC9cL2NvZ25pdG8taWRwLnVzLWVhc3QtMS5hbWF6b25hd3MuY29tXC91cy1lYXN0LTFfWE1aUWRxa0dqIiwicGhvbmVfbnVtYmVyX3ZlcmlmaWVkIjpmYWxzZSwiY29nbml0bzp1c2VybmFtZSI6ImY1OTI3ZjhlLWNiZjctNDkyMi05ZTA5LWU2OWVjMGIyNzMxYSIsImNvZ25pdG86cm9sZXMiOlsiYXJuOmF3czppYW06Ojg5ODY3MDIzMjgwNzpyb2xlXC9jb250ZW50b2gtZGV2LXVzLWVhc3QtMS1sYW1iZGFSb2xlIl0sImF1ZCI6IjVhYzh0cGdzNmdic3ExM2ZydnJwaWVlcDQwIiwiZXZlbnRfaWQiOiI5M2FkOTM5Yy04MzJjLTQ4NWItOWUzMS0yN2MxNzBjMDk1NWEiLCJ0b2tlbl91c2UiOiJpZCIsImF1dGhfdGltZSI6MTY2OTY2MjU5MiwibmFtZSI6IklzbWFlbCBMb3BleiIsInBob25lX251bWJlciI6Iis1MjMxMTEzNjYzMzYiLCJleHAiOjE2Njk2NjYxOTIsImlhdCI6MTY2OTY2MjU5MiwiZW1haWwiOiJpbG9wZXpAY29udGVudG9oLmNvbSJ9.hhdlQk-ljHpyZPRoG02YcvPow8jpm9coZfmEuZ29vIVX7bX5k05Ss3FkaT0dYNr2qEvqZHHqH61oJvx4xr2i6z2c3xEZxyJZFR-Cc_skhH0UwGXbCH9up5PW1aipY5rL45E42R7GKSGmB5Z-B7vxe2NcL-ZojYZkXNZ7Gx_lM8Vpq-XsFLJ4nCJlH7vx9D4SkREN3lLfYIIgqNrxJ_wqfqvcqexwRJfnr76ZqCuDR4dTWsES2Lf5D8Wa_wkQAjQNdzP7ai28l9fRyCSwkTxvamdJkx7p-tssOL5pAnCsKkD22UN-09c1bhuGrgfKWUV4awbptfjvHS7TSq0bWiv4gQ",
142
+ id: 28,
143
+ companyId: 1,
196
144
  isUserTech: true,
197
145
  },
198
146
  },
@@ -22,6 +22,7 @@ import { Tooltip } from "../../../atoms/Tooltip";
22
22
  import { Slide, Zoom } from "@mui/material";
23
23
  import { useRef } from "react";
24
24
  import { ImagePreview } from "../../../atoms/ImagePreview";
25
+ import { isUserTech } from "../../../../global-files/handle_userTech";
25
26
 
26
27
  export const ContainerItems = (props) => {
27
28
  const {
@@ -473,11 +474,11 @@ export const ContainerItems = (props) => {
473
474
  let ownMessage = false;
474
475
  // user tech
475
476
  if (currentUser.isUserTech) {
476
- if (users[item.userId].isUserTech) ownMessage = true;
477
+ if (isUserTech(users[item.userId].isUserTech)) ownMessage = true;
477
478
  }
478
479
  // user normal
479
480
  else {
480
- if (!users[item.userId].isUserTech) {
481
+ if (!isUserTech(users[item.userId].isUserTech)) {
481
482
  if (currentUser.companyId == users[item.userId].companyId) {
482
483
  ownMessage = true;
483
484
  }
@@ -1,21 +1,19 @@
1
- import { Container, ContainerError } from "./styles";
1
+ import { Container } from "./styles";
2
2
  import { useEffect, useState } from "react";
3
- import { Tooltip } from "../../../atoms/Tooltip";
4
3
  import { NotFound } from "../../../atoms/NotFound";
5
- import { ButtonV2 } from "../../../atoms/ButtonV2";
6
4
  import { Header } from "../Header";
7
- import {
8
- faComments as IconChat,
9
- faExclamationTriangle as IconWarning,
10
- } from "@fortawesome/free-solid-svg-icons";
5
+ import { faComments as IconChat } from "@fortawesome/free-solid-svg-icons";
11
6
  import { Loading } from "../../../atoms/Loading";
12
7
  import { ContainerItems } from "../ContainerItems";
13
8
  import { Footer } from "../Footer";
14
9
  import { ChatLists } from "../ChatLists";
15
10
  import { CustomIcon } from "../../../atoms/CustomIcon";
16
11
  import { fetchGET, fetchPOST } from "../../../../global-files/handle_http";
17
- import { Modal } from "../../Modal";
18
- import { isStringEmpty } from "../../../../global-files/utils";
12
+ import {
13
+ encodeUriJson,
14
+ isStringEmpty,
15
+ isValidNaturalNumber,
16
+ } from "../../../../global-files/utils";
19
17
 
20
18
  export const ContentChat = (props) => {
21
19
  const {
@@ -24,6 +22,7 @@ export const ContentChat = (props) => {
24
22
  dataChat, // { data | error }
25
23
  showBtnClose, // boolean
26
24
  onClickBtnClose, // () => {}
25
+ showPopUpChat, // boolean
27
26
  } = props;
28
27
  const [companies, setCompanies] = useState({}); /* {
29
28
  companyId: {
@@ -91,22 +90,24 @@ export const ContentChat = (props) => {
91
90
  else if (chatType === "order_product") getInitialOrderProduct();
92
91
  else getInitialTicket();
93
92
  }
94
- }, [dataChat]);
93
+ }, [dataChat, showPopUpChat]);
95
94
 
96
- // comenzar temporizador del update de 30s
95
+ // comenzar temporizador del update de 20s
97
96
  useEffect(() => {
98
97
  //return; -- descomentarizar para hacer pruebas sin update
99
98
  if (startUpdate == 0) return;
100
- console.log(`START UPDATE en 30s`);
99
+ console.log("START UPDATE en 5s");
101
100
  const processID = setTimeout(() => {
101
+ console.log("update");
102
102
  setRunUpdate((prev) => prev + 1);
103
- }, 30000);
103
+ }, 5000);
104
104
  setProcessUpdateID(processID);
105
+ return () => clearTimeout(processID);
105
106
  }, [startUpdate]);
106
107
 
107
108
  // ejecutar update
108
109
  useEffect(() => {
109
- if (runUpdate == 0) return;
110
+ // if (runUpdate == 0) return;
110
111
  if (chatType === "merchant_product") {
111
112
  if (singleChat.items) getUpdateLatestMerchantProduct();
112
113
  else getInitialMerchantProduct();
@@ -224,18 +225,33 @@ export const ContentChat = (props) => {
224
225
  };
225
226
 
226
227
  const getInitialTicket = async () => {
227
- console.log("======== INITIAL chat =======");
228
+ console.log("\n======== INITIAL chat =======");
228
229
  stopUpdate(); // finalizamos el temporizador
229
- const paramsQuery = {
230
+ const dataUser = {
231
+ id: dataChat.currentUser?.id,
232
+ companyId: dataChat.currentUser?.companyId,
233
+ isUserTech: dataChat.currentUser?.isUserTech,
234
+ };
235
+ /*
236
+ console.log("values send query:", {
237
+ id: dataChat.id,
230
238
  getType: "initial",
239
+ currentUser: dataUser,
240
+ currentItemsFront: getItemsIdSingleChat(),
241
+ });
242
+ */
243
+ const paramsQuery = {
231
244
  id: JSON.stringify(dataChat.id),
232
- isUserTech: JSON.stringify(dataChat.currentUser.isUserTech),
245
+ getType: "initial",
246
+ currentUser: encodeUriJson(dataUser),
247
+ currentItemsFront: encodeUriJson(getItemsIdSingleChat()),
233
248
  };
234
249
  const response = await fetchGET(
235
250
  process.env.REACT_APP_TICKETS_CHAT_ENDPOINT,
236
- paramsQuery
251
+ paramsQuery,
252
+ { Authorization: dataChat.currentUser?.token }
237
253
  );
238
- // programar update en 30s
254
+ // programar update en 20s
239
255
  setStartUpdate((prev) => prev + 1);
240
256
  if (!response.body) {
241
257
  setErrorChat({
@@ -248,7 +264,7 @@ export const ContentChat = (props) => {
248
264
  return;
249
265
  }
250
266
  // success
251
- console.log(response.body);
267
+ console.log("response initial:", response.body);
252
268
  setLastUpdateDate(response.body.data.lastUpdateDate);
253
269
  setAllUsers(response.body.users);
254
270
  setSingleChat({
@@ -336,20 +352,27 @@ export const ContentChat = (props) => {
336
352
 
337
353
  // este GET obtiene la lista de compañoas con las que se puede chatear
338
354
  const getLoadMoreTicket = async () => {
339
- console.log("======== LOAD MORE chat =======");
355
+ console.log("\n======== LOAD MORE chat =======");
340
356
  stopUpdate(); // finalizamos el temporizador
341
357
  let date = singleChat.items[singleChat.items.length - 1].date;
358
+ const dataUser = {
359
+ id: dataChat.currentUser?.id,
360
+ companyId: dataChat.currentUser?.companyId,
361
+ isUserTech: dataChat.currentUser?.isUserTech,
362
+ };
342
363
  const paramsQuery = {
343
- getType: "loadMore",
344
364
  id: JSON.stringify(dataChat.id),
365
+ getType: "loadMore",
345
366
  date: encodeURIComponent(date),
346
- isUserTech: JSON.stringify(dataChat.currentUser.isUserTech),
367
+ currentUser: encodeUriJson(dataUser),
368
+ currentItemsFront: encodeUriJson(getItemsIdSingleChat()),
347
369
  };
348
370
  const response = await fetchGET(
349
371
  process.env.REACT_APP_TICKETS_CHAT_ENDPOINT,
350
- paramsQuery
372
+ paramsQuery,
373
+ { Authorization: dataChat.currentUser?.token }
351
374
  );
352
- //programar update en 30s
375
+ //programar update en 20s
353
376
  setStartUpdate((prev) => prev + 1);
354
377
  if (!response.body) {
355
378
  return {
@@ -358,7 +381,7 @@ export const ContentChat = (props) => {
358
381
  };
359
382
  }
360
383
  // success
361
- console.log(response.body);
384
+ console.log("response loadMore:", response.body);
362
385
  // actualizar la lista de los users
363
386
  updateAllUsers(response.body.users);
364
387
  // actualizar los items del chat
@@ -491,19 +514,35 @@ export const ContentChat = (props) => {
491
514
  };
492
515
 
493
516
  const getUpdateLatestTicket = async () => {
494
- console.log("======== UPDATE chat =======");
517
+ console.log("\n======== UPDATE chat =======");
495
518
  console.log("lastUpdate:", lastUpdateDate);
496
- const paramsQuery = {
519
+ const dataUser = {
520
+ id: dataChat.currentUser?.id,
521
+ companyId: dataChat.currentUser?.companyId,
522
+ isUserTech: dataChat.currentUser?.isUserTech,
523
+ };
524
+ /*
525
+ console.log("values send query:", {
526
+ id: dataChat.id,
497
527
  getType: "updateLatest",
528
+ date: lastUpdateDate,
529
+ currentUser: dataUser,
530
+ currentItemsFront: getItemsIdSingleChat(),
531
+ });
532
+ */
533
+ const paramsQuery = {
498
534
  id: JSON.stringify(dataChat.id),
535
+ getType: "updateLatest",
499
536
  date: encodeURIComponent(lastUpdateDate),
500
- isUserTech: JSON.stringify(dataChat.currentUser.isUserTech),
537
+ currentUser: encodeUriJson(dataUser),
538
+ currentItemsFront: encodeUriJson(getItemsIdSingleChat()),
501
539
  };
502
540
  const response = await fetchGET(
503
541
  process.env.REACT_APP_TICKETS_CHAT_ENDPOINT,
504
- paramsQuery
542
+ paramsQuery,
543
+ { Authorization: dataChat.currentUser?.token }
505
544
  );
506
- //programar update en 30s
545
+ //programar update en 20s
507
546
  setStartUpdate((prev) => prev + 1);
508
547
  if (!response.body) {
509
548
  if (errorUpdate.startDate) {
@@ -527,7 +566,7 @@ export const ContentChat = (props) => {
527
566
  setErrorUpdate({});
528
567
  }
529
568
  // success
530
- console.log(response.body);
569
+ //console.log("response update:", response.body);
531
570
  setLastUpdateDate(response.body.data.lastUpdateDate);
532
571
  // actualizar la lista de los users
533
572
  updateAllUsers(response.body.users);
@@ -677,6 +716,16 @@ export const ContentChat = (props) => {
677
716
  else return false;
678
717
  };
679
718
 
719
+ const getItemsIdSingleChat = () => {
720
+ const itemsId = {};
721
+ if (Array.isArray(singleChat.items)) {
722
+ singleChat.items.forEach((item) => {
723
+ if (isValidNaturalNumber(item.id)) itemsId[item.id] = true;
724
+ });
725
+ }
726
+ return itemsId;
727
+ };
728
+
680
729
  const getChatCompany = () => {
681
730
  if (chatType === "merchant_product" || chatType === "ticket") {
682
731
  return undefined;
@@ -741,9 +790,7 @@ export const ContentChat = (props) => {
741
790
  };
742
791
 
743
792
  const renderBodyChat = () => {
744
- if (isLoading) {
745
- return <Loading />;
746
- }
793
+ if (isLoading) return <Loading />;
747
794
  if (errorChat.existError) {
748
795
  return (
749
796
  <NotFound
@@ -19,6 +19,7 @@ export const Chat = (props) => {
19
19
  chatContainerType, // ("fixed") | ("popUp")
20
20
  chatData, // {} => aqui poner los datos requeridos segun el tipo de chat
21
21
  classNameContainerFixed, // clases CSS del envoltoria chat fixed
22
+ size = 14, // tamaño del icono
22
23
  } = props;
23
24
  const [showPopUpChat, setShowPopUpChat] = useState(false);
24
25
  const [data, setData] = useState();
@@ -43,6 +44,20 @@ export const Chat = (props) => {
43
44
  }
44
45
  }, [chatType]);
45
46
 
47
+ const isValidGeneral = (userToken, id) => {
48
+ // validar token del user
49
+ if (isStringEmpty(userToken)) {
50
+ setDataError("El token del usuario no es valido");
51
+ return false;
52
+ }
53
+ // validar ID del producto
54
+ if (!isValidNaturalNumber(id)) {
55
+ setDataError("El ID del producto no es valido");
56
+ return false;
57
+ }
58
+ return true;
59
+ };
60
+
46
61
  // validar props que se requieren para el tipo de chat "order_product"
47
62
  const validateChatOrderProduct = () => {
48
63
  const {
@@ -52,16 +67,8 @@ export const Chat = (props) => {
52
67
  retailerId, // number
53
68
  } = chatData;
54
69
 
55
- // validar token del user
56
- if (isStringEmpty(userToken)) {
57
- setDataError("El token del usuario no es valido");
58
- return;
59
- }
60
- // validar ID del producto
61
- if (!isValidNaturalNumber(id)) {
62
- setDataError("El ID del producto no es valido");
63
- return;
64
- }
70
+ if (!isValidGeneral(userToken, id)) return;
71
+
65
72
  // validar el ID de la OT en donde se encuentra el producto
66
73
  if (!isValidNaturalNumber(orderId)) {
67
74
  setDataError("El ID de la orden del producto no es valido");
@@ -88,16 +95,8 @@ export const Chat = (props) => {
88
95
  version, // number
89
96
  } = chatData;
90
97
 
91
- // validar token del user
92
- if (isStringEmpty(userToken)) {
93
- setDataError("El token del usuario no es valido");
94
- return;
95
- }
96
- // validar ID del producto
97
- if (!isValidNaturalNumber(id)) {
98
- setDataError("El ID del producto no es valido");
99
- return;
100
- }
98
+ if (!isValidGeneral(userToken, id)) return;
99
+
101
100
  // validar la version del producto
102
101
  if (!isValidNaturalNumber(version)) {
103
102
  setDataError("La version del producto no es valida");
@@ -114,6 +113,7 @@ export const Chat = (props) => {
114
113
  const validateChatTicket = () => {
115
114
  const {
116
115
  currentUser /* {
116
+ token, // string
117
117
  id: number ,
118
118
  companyId: number ,
119
119
  isUserTech: boolean ,
@@ -123,6 +123,11 @@ export const Chat = (props) => {
123
123
  ticketOwnerUserId, // number
124
124
  } = chatData;
125
125
 
126
+ // validar el token del usuario conectado
127
+ if (isStringEmpty(currentUser?.token)) {
128
+ setDataError("Tu identificación de usuario no fue especificado");
129
+ return;
130
+ }
126
131
  // validar si ID del usuario conectado
127
132
  if (!isValidNaturalNumber(currentUser?.id)) {
128
133
  setDataError("Tu ID de usuario no fue especificado");
@@ -134,10 +139,7 @@ export const Chat = (props) => {
134
139
  return;
135
140
  }
136
141
  // validar si el usuario conectado es de tecnologia o no
137
- if (
138
- currentUser?.isUserTech === undefined ||
139
- typeof currentUser.isUserTech !== "boolean"
140
- ) {
142
+ if (![false, true].includes(currentUser?.isUserTech)) {
141
143
  setDataError("Tu tipo de usuario no fue especificado");
142
144
  return;
143
145
  }
@@ -154,7 +156,7 @@ export const Chat = (props) => {
154
156
  return;
155
157
  }
156
158
  // validar el status del chat
157
- if (isStringEmpty(statusTicket)) {
159
+ if (!["IN_PROGRESS", "PENDING", "COMPLETED"].includes(statusTicket)) {
158
160
  setDataError("El estatus del ticket no es valido");
159
161
  return;
160
162
  }
@@ -184,111 +186,50 @@ export const Chat = (props) => {
184
186
  });
185
187
  };
186
188
 
187
- /*
188
- const createItem = async (valueType, valueInput) => {
189
- clearTimeout(processUpdateID);
190
- let currentItems = items.slice();
191
- let paramsBody = {};
192
- let paramsHeaders = {};
193
- switch (chatType.toLowerCase()) {
194
- case "order_product": //------------------------------------------
195
- paramsBody = {
196
- articleId: articleId,
197
- valueType: valueType,
198
- value: valueInput,
199
- isOrderProduct: "1",
200
- orderId: orderId,
201
- retailerId: retailerId,
202
- };
203
- paramsHeaders = { Authorization: userToken };
204
- break;
205
-
206
- default:
207
- // merchants_products--------------------------------------
208
- paramsBody = {
209
- articleId: articleId,
210
- articleVersion: articleVersion,
211
- valueType: valueType,
212
- value: valueInput,
213
- isOrderProduct: "0",
214
- };
215
- paramsHeaders = { Authorization: userToken };
216
- }
217
- const response = await fetchPOST(
218
- process.env.REACT_APP_PRODUCTS_CHAT_ENDPOINT,
219
- paramsBody,
220
- paramsHeaders
189
+ if (chatContainerType?.toLowerCase() === "fixed") {
190
+ /* chat tipo fixed */
191
+ return (
192
+ <ContainerFixed className={classNameContainerFixed}>
193
+ <ContentChat
194
+ chatType={chatType?.toLowerCase()}
195
+ chatContainerType="fixed"
196
+ dataChat={data}
197
+ showBtnClose={false}
198
+ />
199
+ </ContainerFixed>
221
200
  );
222
- if (!response.body) {
223
- let itemType =
224
- valueType === "txt"
225
- ? "el mensaje"
226
- : valueType === "img"
227
- ? "la imagen"
228
- : "el archivo";
229
- showModalAlert(
230
- `No fue posible agregar ${itemType} en el chat`,
231
- response.errorDetail,
232
- "error"
233
- );
234
- setItems(currentItems);
235
- } else {
236
- if (currentItems?.length == 0) {
237
- // console.log("NUEVO ITEM <> NUEVO INITIAL");
238
- await getInitial();
239
- } else {
240
- // console.log("NUEVO ITEM <> NUEVO UPDATE");
241
- await getUpdate();
242
- }
243
- }
244
- };
245
- */
201
+ } else {
202
+ /* chat tipo popUp */
203
+ return (
204
+ <>
205
+ <ContainerBtnPopUpChat>
206
+ <ButtonV2
207
+ className="container-btn-popUpChat"
208
+ type="whiteS2"
209
+ size={size}
210
+ borderType="circle"
211
+ icon={IconChat}
212
+ onClick={() => {
213
+ setShowPopUpChat(!showPopUpChat);
214
+ }}
215
+ />
216
+ </ContainerBtnPopUpChat>
246
217
 
247
- return (
248
- <>
249
- {chatContainerType?.toLowerCase() === "fixed" ? (
250
- <>
251
- {/* chat tipo fixed */}
252
- <ContainerFixed className={classNameContainerFixed}>
218
+ <Slide direction="left" in={showPopUpChat} timeout={400}>
219
+ <ContainerPopUp>
253
220
  <ContentChat
254
221
  chatType={chatType?.toLowerCase()}
255
- chatContainerType={"fixed"}
222
+ chatContainerType="popUp"
256
223
  dataChat={data}
257
- showBtnClose={false}
258
- />
259
- </ContainerFixed>
260
- </>
261
- ) : (
262
- <>
263
- {/* chat tipo popUp */}
264
- <ContainerBtnPopUpChat>
265
- <ButtonV2
266
- className={"container-btn-popUpChat"}
267
- type={"whiteS2"}
268
- size={14}
269
- borderType={"circle"}
270
- icon={IconChat}
271
- onClick={async (event) => {
272
- setShowPopUpChat(!showPopUpChat);
224
+ showPopUpChat={showPopUpChat}
225
+ showBtnClose={true}
226
+ onClickBtnClose={() => {
227
+ setShowPopUpChat(false);
273
228
  }}
274
229
  />
275
- </ContainerBtnPopUpChat>
276
-
277
- <Slide direction={"left"} in={showPopUpChat} timeout={400}>
278
- <ContainerPopUp>
279
- <ContentChat
280
- chatType={chatType?.toLowerCase()}
281
- chatContainerType={"popUp"}
282
- dataChat={data}
283
- showBtnClose={true}
284
- onClickBtnClose={() => {
285
- setShowPopUpChat(false);
286
- }}
287
- />
288
- </ContainerPopUp>
289
- </Slide>
290
- </>
291
- )}
292
- </>
293
- );
230
+ </ContainerPopUp>
231
+ </Slide>
232
+ </>
233
+ );
234
+ }
294
235
  };