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.
- package/.env.development +2 -0
- package/dist/assets/images/generalButton/closeIcon.svg +2 -2
- package/dist/components/molecules/HeaderTop/index.js +16 -4
- package/dist/components/molecules/ProductNameHeader/index.js +1 -1
- package/dist/components/organisms/Chat/Chat.stories.js +31 -86
- package/dist/components/organisms/Chat/ContainerItems/index.js +4 -2
- package/dist/components/organisms/Chat/ContentChat/index.js +107 -50
- package/dist/components/organisms/Chat/index.js +51 -125
- package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +65 -50
- package/dist/components/pages/ProviderProductEdition/index.js +6 -2
- package/dist/global-files/handle_userTech.js +20 -0
- package/dist/global-files/utils.js +18 -2
- package/package.json +1 -1
- package/src/assets/images/generalButton/closeIcon.svg +2 -2
- package/src/components/molecules/HeaderTop/index.js +19 -3
- package/src/components/molecules/ProductNameHeader/index.js +1 -1
- package/src/components/organisms/Chat/Chat.stories.js +31 -83
- package/src/components/organisms/Chat/ContainerItems/index.js +3 -2
- package/src/components/organisms/Chat/ContentChat/index.js +82 -35
- package/src/components/organisms/Chat/index.js +66 -125
- package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +67 -48
- package/src/components/pages/ProviderProductEdition/index.js +7 -1
- package/src/global-files/handle_userTech.js +7 -0
- package/src/global-files/utils.js +13 -0
|
@@ -80,8 +80,20 @@ chatCAD_merchantsProduct.args = {
|
|
|
80
80
|
chatContainerType: "popUp",
|
|
81
81
|
chatData: {
|
|
82
82
|
userToken:
|
|
83
|
-
"eyJraWQiOiJkQWJkZCtlclwvTlwveVRQUWNvUlVyOCtrNUd2M1hMM2N1MWUzQ09zWExVRnc9IiwiYWxnIjoiUlMyNTYifQ.
|
|
84
|
-
id:
|
|
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
|
|
101
|
-
|
|
112
|
+
export const chatTicket_userNORMAL = Template.bind({});
|
|
113
|
+
chatTicket_userNORMAL.args = {
|
|
102
114
|
chatType: "ticket",
|
|
103
115
|
chatContainerType: "fixed",
|
|
104
116
|
chatData: {
|
|
105
|
-
id:
|
|
106
|
-
ticketOwnerUserId:
|
|
107
|
-
statusTicket: "
|
|
117
|
+
id: 104,
|
|
118
|
+
ticketOwnerUserId: 49,
|
|
119
|
+
statusTicket: "IN_PROGRESS",
|
|
108
120
|
currentUser: {
|
|
109
|
-
|
|
110
|
-
|
|
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
|
|
118
|
-
|
|
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:
|
|
124
|
-
statusTicket: "
|
|
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
|
-
|
|
195
|
-
|
|
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
|
|
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 {
|
|
18
|
-
|
|
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
|
|
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(
|
|
99
|
+
console.log("START UPDATE en 5s");
|
|
101
100
|
const processID = setTimeout(() => {
|
|
101
|
+
console.log("update");
|
|
102
102
|
setRunUpdate((prev) => prev + 1);
|
|
103
|
-
},
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
92
|
-
|
|
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 (
|
|
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
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
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
|
-
|
|
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=
|
|
222
|
+
chatContainerType="popUp"
|
|
256
223
|
dataChat={data}
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
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
|
-
</
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
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
|
};
|