contentoh-components-library 21.2.102 → 21.2.104

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 (192) hide show
  1. package/.env.development +2 -5
  2. package/.env.production +25 -25
  3. package/dist/components/atoms/GeneralButton/index.js +6 -2
  4. package/dist/components/atoms/Select/VersionSelect.js +2 -1
  5. package/dist/components/molecules/CustomSelect/CustomSelect.stories.js +22 -21
  6. package/dist/components/molecules/CustomSelect/SelectItem.js +1 -10
  7. package/dist/components/molecules/HeaderTop/index.js +5 -10
  8. package/dist/components/molecules/HeaderTop/styles.js +1 -1
  9. package/dist/components/organisms/CreateVersion/RenderChilds.js +11 -11
  10. package/dist/components/organisms/CreateVersion/index.js +30 -89
  11. package/dist/components/organisms/OrderDetail/OrderDetail.stories.js +1 -1
  12. package/dist/components/organisms/OrderDetail/index.js +20 -11
  13. package/dist/components/organisms/OrderDetail/styles.js +1 -1
  14. package/dist/components/organisms/OrderDetail/utils/Table/styles.js +1 -1
  15. package/dist/components/organisms/OrderDetail/utils/Table/utils.js +45 -15
  16. package/dist/components/organisms/VersionSelector/index.js +28 -2
  17. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +69 -147
  18. package/dist/components/pages/ProviderProductEdition/index.js +2 -22
  19. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +77 -67
  20. package/dist/components/pages/RetailerProductEdition/index.js +5 -24
  21. package/dist/global-files/fonts.css +0 -12
  22. package/dist/global-files/variables.js +0 -2
  23. package/dist/index.js +46 -254
  24. package/package.json +1 -12
  25. package/src/components/atoms/GeneralButton/index.js +4 -1
  26. package/src/components/atoms/Select/VersionSelect.js +4 -2
  27. package/src/components/molecules/CustomSelect/CustomSelect.stories.js +12 -20
  28. package/src/components/molecules/CustomSelect/SelectItem.js +0 -7
  29. package/src/components/molecules/HeaderTop/index.js +6 -11
  30. package/src/components/molecules/HeaderTop/styles.js +0 -4
  31. package/src/components/organisms/CreateVersion/RenderChilds.js +28 -34
  32. package/src/components/organisms/CreateVersion/index.js +16 -36
  33. package/src/components/organisms/OrderDetail/OrderDetail.stories.js +1 -1
  34. package/src/components/organisms/OrderDetail/index.js +19 -12
  35. package/src/components/organisms/OrderDetail/styles.js +1 -0
  36. package/src/components/organisms/OrderDetail/utils/Table/styles.js +30 -0
  37. package/src/components/organisms/OrderDetail/utils/Table/utils.js +30 -15
  38. package/src/components/organisms/VersionSelector/index.js +18 -3
  39. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +75 -166
  40. package/src/components/pages/ProviderProductEdition/index.js +2 -21
  41. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +79 -67
  42. package/src/components/pages/RetailerProductEdition/index.js +2 -14
  43. package/src/global-files/customHooks.js +2 -2
  44. package/src/global-files/fonts.css +0 -12
  45. package/src/global-files/variables.js +0 -2
  46. package/src/index.js +0 -16
  47. package/dist/assets/images/customSelect/starIcon.svg +0 -14
  48. package/dist/assets/images/defaultImages/Spinner.gif +0 -0
  49. package/dist/assets/images/defaultImages/notFound.svg +0 -124
  50. package/dist/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +0 -72
  51. package/dist/components/atoms/ButtonFileChooser/index.js +0 -118
  52. package/dist/components/atoms/ButtonFileChooser/styles.js +0 -20
  53. package/dist/components/atoms/ButtonV2/ButtonV2.stories.js +0 -66
  54. package/dist/components/atoms/ButtonV2/index.js +0 -111
  55. package/dist/components/atoms/ButtonV2/styles.js +0 -53
  56. package/dist/components/atoms/CustomIcon/CustomIcon.stories.js +0 -50
  57. package/dist/components/atoms/CustomIcon/index.js +0 -40
  58. package/dist/components/atoms/CustomIcon/styles.js +0 -33
  59. package/dist/components/atoms/IconFile/IconFile.stories.js +0 -48
  60. package/dist/components/atoms/IconFile/index.js +0 -249
  61. package/dist/components/atoms/IconFile/styles.js +0 -23
  62. package/dist/components/atoms/Image/Image.stories.js +0 -73
  63. package/dist/components/atoms/Image/index.js +0 -76
  64. package/dist/components/atoms/Image/styles.js +0 -43
  65. package/dist/components/atoms/ImageLink/ImageLink.stories.js +0 -63
  66. package/dist/components/atoms/ImageLink/index.js +0 -77
  67. package/dist/components/atoms/ImageLink/styles.js +0 -40
  68. package/dist/components/atoms/ImagePreview/ImagePreview.stories.js +0 -70
  69. package/dist/components/atoms/ImagePreview/index.js +0 -222
  70. package/dist/components/atoms/ImagePreview/styles.js +0 -44
  71. package/dist/components/atoms/InputText/InputText.stories.js +0 -60
  72. package/dist/components/atoms/InputText/index.js +0 -66
  73. package/dist/components/atoms/InputText/styles.js +0 -32
  74. package/dist/components/atoms/NotFound/NotFound.stories.js +0 -36
  75. package/dist/components/atoms/NotFound/index.js +0 -75
  76. package/dist/components/atoms/NotFound/styles.js +0 -20
  77. package/dist/components/atoms/SelectItemV2/SelectItemV2.stories.js +0 -45
  78. package/dist/components/atoms/SelectItemV2/index.js +0 -46
  79. package/dist/components/atoms/SelectItemV2/styles.js +0 -23
  80. package/dist/components/atoms/Tooltip/Tooltip.stories.js +0 -66
  81. package/dist/components/atoms/Tooltip/index.js +0 -72
  82. package/dist/components/atoms/Tooltip/styles.js +0 -20
  83. package/dist/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +0 -66
  84. package/dist/components/molecules/ButtonDownloadFile/index.js +0 -179
  85. package/dist/components/molecules/ButtonDownloadFile/styles.js +0 -23
  86. package/dist/components/molecules/Dropdown/Dropdown.stories.js +0 -96
  87. package/dist/components/molecules/Dropdown/index.js +0 -148
  88. package/dist/components/molecules/Dropdown/styles.js +0 -26
  89. package/dist/components/molecules/ImageTooltip/ImageTooltip.stories.js +0 -72
  90. package/dist/components/molecules/ImageTooltip/index.js +0 -84
  91. package/dist/components/molecules/ImageTooltip/styles.js +0 -33
  92. package/dist/components/molecules/SelectV2/SelectV2.stories.js +0 -119
  93. package/dist/components/molecules/SelectV2/index.js +0 -298
  94. package/dist/components/molecules/SelectV2/styles.js +0 -42
  95. package/dist/components/organisms/Chat/Chat.stories.js +0 -215
  96. package/dist/components/organisms/Chat/ChatLists/ChatLists.stories.js +0 -83
  97. package/dist/components/organisms/Chat/ChatLists/index.js +0 -160
  98. package/dist/components/organisms/Chat/ChatLists/styles.js +0 -29
  99. package/dist/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +0 -176
  100. package/dist/components/organisms/Chat/ContainerItems/index.js +0 -569
  101. package/dist/components/organisms/Chat/ContainerItems/styles.js +0 -20
  102. package/dist/components/organisms/Chat/ContentChat/ContentChat.stories.js +0 -142
  103. package/dist/components/organisms/Chat/ContentChat/index.js +0 -1422
  104. package/dist/components/organisms/Chat/ContentChat/styles.js +0 -20
  105. package/dist/components/organisms/Chat/Footer/Footer.stories.js +0 -43
  106. package/dist/components/organisms/Chat/Footer/index.js +0 -984
  107. package/dist/components/organisms/Chat/Footer/styles.js +0 -32
  108. package/dist/components/organisms/Chat/Header/Header.stories.js +0 -96
  109. package/dist/components/organisms/Chat/Header/index.js +0 -84
  110. package/dist/components/organisms/Chat/Header/styles.js +0 -20
  111. package/dist/components/organisms/Chat/index.js +0 -327
  112. package/dist/components/organisms/Chat/styles.js +0 -29
  113. package/dist/components/organisms/Modal/Modal.stories.js +0 -66
  114. package/dist/components/organisms/Modal/index.js +0 -95
  115. package/dist/components/organisms/Modal/styles.js +0 -20
  116. package/dist/global-files/handle_http.js +0 -383
  117. package/dist/global-files/utils.js +0 -472
  118. package/src/assets/images/customSelect/starIcon.svg +0 -14
  119. package/src/assets/images/defaultImages/Spinner.gif +0 -0
  120. package/src/assets/images/defaultImages/notFound.svg +0 -124
  121. package/src/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +0 -47
  122. package/src/components/atoms/ButtonFileChooser/index.js +0 -69
  123. package/src/components/atoms/ButtonFileChooser/styles.js +0 -4
  124. package/src/components/atoms/ButtonV2/ButtonV2.stories.js +0 -51
  125. package/src/components/atoms/ButtonV2/index.js +0 -79
  126. package/src/components/atoms/ButtonV2/styles.js +0 -195
  127. package/src/components/atoms/CustomIcon/CustomIcon.stories.js +0 -36
  128. package/src/components/atoms/CustomIcon/index.js +0 -41
  129. package/src/components/atoms/CustomIcon/styles.js +0 -85
  130. package/src/components/atoms/IconFile/IconFile.stories.js +0 -35
  131. package/src/components/atoms/IconFile/index.js +0 -119
  132. package/src/components/atoms/IconFile/styles.js +0 -67
  133. package/src/components/atoms/Image/Image.stories.js +0 -51
  134. package/src/components/atoms/Image/index.js +0 -55
  135. package/src/components/atoms/Image/styles.js +0 -34
  136. package/src/components/atoms/ImageLink/ImageLink.stories.js +0 -43
  137. package/src/components/atoms/ImageLink/index.js +0 -57
  138. package/src/components/atoms/ImageLink/styles.js +0 -30
  139. package/src/components/atoms/ImagePreview/ImagePreview.stories.js +0 -52
  140. package/src/components/atoms/ImagePreview/index.js +0 -191
  141. package/src/components/atoms/ImagePreview/styles.js +0 -77
  142. package/src/components/atoms/InputText/InputText.stories.js +0 -39
  143. package/src/components/atoms/InputText/index.js +0 -61
  144. package/src/components/atoms/InputText/styles.js +0 -89
  145. package/src/components/atoms/NotFound/NotFound.stories.js +0 -19
  146. package/src/components/atoms/NotFound/index.js +0 -52
  147. package/src/components/atoms/NotFound/styles.js +0 -55
  148. package/src/components/atoms/SelectItemV2/SelectItemV2.stories.js +0 -26
  149. package/src/components/atoms/SelectItemV2/index.js +0 -45
  150. package/src/components/atoms/SelectItemV2/styles.js +0 -55
  151. package/src/components/atoms/Tooltip/Tooltip.stories.js +0 -51
  152. package/src/components/atoms/Tooltip/index.js +0 -59
  153. package/src/components/atoms/Tooltip/styles.js +0 -42
  154. package/src/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +0 -54
  155. package/src/components/molecules/ButtonDownloadFile/index.js +0 -111
  156. package/src/components/molecules/ButtonDownloadFile/styles.js +0 -66
  157. package/src/components/molecules/Dropdown/Dropdown.stories.js +0 -101
  158. package/src/components/molecules/Dropdown/index.js +0 -142
  159. package/src/components/molecules/Dropdown/styles.js +0 -75
  160. package/src/components/molecules/ImageTooltip/ImageTooltip.stories.js +0 -46
  161. package/src/components/molecules/ImageTooltip/index.js +0 -62
  162. package/src/components/molecules/ImageTooltip/styles.js +0 -18
  163. package/src/components/molecules/SelectV2/SelectV2.stories.js +0 -114
  164. package/src/components/molecules/SelectV2/index.js +0 -332
  165. package/src/components/molecules/SelectV2/styles.js +0 -100
  166. package/src/components/organisms/Chat/Chat.stories.js +0 -199
  167. package/src/components/organisms/Chat/ChatLists/ChatLists.stories.js +0 -65
  168. package/src/components/organisms/Chat/ChatLists/Rotoplas.jpeg +0 -0
  169. package/src/components/organisms/Chat/ChatLists/THD.png +0 -0
  170. package/src/components/organisms/Chat/ChatLists/index.js +0 -141
  171. package/src/components/organisms/Chat/ChatLists/styles.js +0 -162
  172. package/src/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +0 -142
  173. package/src/components/organisms/Chat/ContainerItems/index.js +0 -549
  174. package/src/components/organisms/Chat/ContainerItems/styles.js +0 -328
  175. package/src/components/organisms/Chat/ContentChat/ContentChat.stories.js +0 -102
  176. package/src/components/organisms/Chat/ContentChat/Rotoplas.jpeg +0 -0
  177. package/src/components/organisms/Chat/ContentChat/THD.png +0 -0
  178. package/src/components/organisms/Chat/ContentChat/index.js +0 -900
  179. package/src/components/organisms/Chat/ContentChat/styles.js +0 -41
  180. package/src/components/organisms/Chat/Footer/Footer.stories.js +0 -22
  181. package/src/components/organisms/Chat/Footer/index.js +0 -669
  182. package/src/components/organisms/Chat/Footer/styles.js +0 -286
  183. package/src/components/organisms/Chat/Header/Header.stories.js +0 -66
  184. package/src/components/organisms/Chat/Header/index.js +0 -94
  185. package/src/components/organisms/Chat/Header/styles.js +0 -49
  186. package/src/components/organisms/Chat/index.js +0 -294
  187. package/src/components/organisms/Chat/styles.js +0 -42
  188. package/src/components/organisms/Modal/Modal.stories.js +0 -55
  189. package/src/components/organisms/Modal/index.js +0 -97
  190. package/src/components/organisms/Modal/styles.js +0 -103
  191. package/src/global-files/handle_http.js +0 -231
  192. package/src/global-files/utils.js +0 -300
@@ -1,669 +0,0 @@
1
- import {
2
- Container,
3
- ContainerItemCarrousel,
4
- ContainerMain,
5
- ContainerSecondary,
6
- ContainerTooltipFileName,
7
- } from "./styles";
8
- import { useEffect, useState, useRef } from "react";
9
- import AWS from "aws-sdk";
10
- import { v4 as uuidv4 } from "uuid";
11
- import { Image as CustomImage } from "../../../atoms/Image";
12
- import { ImageTooltip } from "../../../molecules/ImageTooltip";
13
- import {
14
- faArrowUp as IconSend,
15
- faImage as IconImage,
16
- faTrash as IconDelete,
17
- faExclamationTriangle as IconWarning,
18
- } from "@fortawesome/free-solid-svg-icons";
19
- import { CustomIcon } from "../../../atoms/CustomIcon";
20
- import { ButtonV2 } from "../../../atoms/ButtonV2";
21
- import { IconFile } from "../../../atoms/IconFile";
22
- import { Modal } from "../../Modal";
23
- import { Tooltip } from "../../../atoms/Tooltip";
24
- import { Fade, Tooltip as TooltipMUI, Zoom } from "@mui/material";
25
- import { ButtonFileChooser } from "../../../atoms/ButtonFileChooser";
26
- import { Slide } from "@mui/material";
27
- // carrousel
28
- import { Swiper, SwiperSlide } from "swiper/react";
29
- import "swiper/swiper.min.css";
30
- //import "swiper/modules/free-mode/free-mode.min.css";
31
- import { FreeMode, Mousewheel, Keyboard } from "swiper";
32
- import {
33
- getBase64,
34
- getDataBase64,
35
- getDataBuffer,
36
- getFileExtension,
37
- getFileName,
38
- getImageSize,
39
- isStringEmpty,
40
- isValidNaturalNumber,
41
- } from "../../../../global-files/utils";
42
- import { InputText } from "../../../atoms/InputText";
43
-
44
- const S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
45
- const REGION = "us-east-1";
46
-
47
- AWS.config.update({
48
- accessKeyId: process.env.REACT_APP_KEY_UPLOAD_TO_S3,
49
- secretAccessKey: process.env.REACT_APP_ACCESS_KEY_UPLOAD_TO_S3,
50
- });
51
-
52
- const myBucket = new AWS.S3({
53
- params: { Bucket: S3_BUCKET },
54
- region: REGION,
55
- });
56
-
57
- export const Footer = (props) => {
58
- const {
59
- chatType, // "merchant_product" | "order_product" | "ticket"
60
- dataChat /* {
61
- caso ticket: { id }
62
- case merchant_product: { id , version }
63
- case order_product: { id , version }
64
- } */,
65
- statusChat, // string
66
- messageDisabled, // string
67
- createItemsChat, // (items) => {}
68
- errorUpdate, // { startDate , lastDate }
69
- } = props;
70
- const [valueInputMessage, setValueInputMessage] = useState("");
71
- const [filesPreview, setFilesPreview] = useState([]);
72
- const [filesJsxPreview, setFilesJsxPreview] = useState([]);
73
- const [btnSendFilesLoading, setBtnSendFilesLoading] = useState(false);
74
- const [btnSendMessageLoading, setBtnSendMessageLoading] = useState(false);
75
- const [btnChooserFileDisabled, setBtnChooserFileDisabled] = useState(false);
76
- const [inputMessageDisabled, setInputMessageDisabled] = useState(false);
77
- const [openPreview, setOpenPreview] = useState(false);
78
- const [toggleFocusInputMessage, setToggleFocusInputMessage] = useState(false);
79
- const [tooltipFileName, setTooltipFileName] = useState({
80
- show: false,
81
- fileName: "",
82
- });
83
- const [modalAlert, setModalAlert] = useState({
84
- show: false,
85
- title: "",
86
- message: "",
87
- errorInputMessage: false,
88
- });
89
- const containerRef = useRef();
90
- const refInputTextMessage = useRef();
91
-
92
- useEffect(() => {
93
- //console.log("filesPreview: ", filesPreview.slice());
94
- setTooltipFileName({
95
- show: false,
96
- fileName: "",
97
- });
98
- renderFilesPreview();
99
- }, [filesPreview]);
100
-
101
- useEffect(() => {
102
- if (filesJsxPreview.length) setOpenPreview(true);
103
- else setOpenPreview(false);
104
- }, [filesJsxPreview]);
105
-
106
- useEffect(() => {
107
- refInputTextMessage.current && refInputTextMessage.current.focus();
108
- }, [toggleFocusInputMessage]);
109
-
110
- const sendFilesPreview = async () => {
111
- if (createItemsChat) {
112
- const files = filesPreview.slice();
113
- if (!files.length) {
114
- setModalAlert({
115
- show: true,
116
- title: "No hay ningun archivo o imagen seleccionado para enviar",
117
- message:
118
- "Por favor, cargue los archivos o imagenes que quiera enviar al chat",
119
- errorInputMessage: false,
120
- });
121
- return;
122
- }
123
- disableSecondaryContainer(true);
124
-
125
- // subir archivos a AWS
126
- const customFiles = [];
127
- try {
128
- //console.log("files:", files);
129
- const fileUploadRequests = [];
130
- //console.log(dataChat);
131
- for (const file of files) {
132
- let errorMessage;
133
- // obtener base64
134
- const fullBase64 = await getBase64(file);
135
- if (!fullBase64) {
136
- errorMessage = "No se pudo decodificar el archivo o imagen";
137
- }
138
- // obtener buffer
139
- let dataBuffer;
140
- if (!errorMessage)
141
- dataBuffer = getDataBuffer(getDataBase64(fullBase64));
142
- if (!dataBuffer) {
143
- errorMessage = "No se pudo decodificar el archivo o imagen";
144
- }
145
- // obtener la key
146
- let fileKey = "chat/";
147
- switch (chatType) {
148
- case "merchant_product":
149
- if (
150
- isValidNaturalNumber(dataChat?.id) &&
151
- isValidNaturalNumber(dataChat?.version)
152
- ) {
153
- fileKey += `merchantArticle/${dataChat.id}-${dataChat.version}/`;
154
- } else {
155
- errorMessage = "El ID o la version del producto no es valido";
156
- }
157
- break;
158
-
159
- case "order_product":
160
- if (
161
- isValidNaturalNumber(dataChat?.id) &&
162
- isValidNaturalNumber(dataChat?.version)
163
- ) {
164
- fileKey += `orderArticle/${dataChat.id}-${dataChat.version}/`;
165
- } else {
166
- errorMessage = "El ID o la version del producto no es valido";
167
- }
168
- break;
169
-
170
- case "ticket":
171
- if (isValidNaturalNumber(dataChat?.id)) {
172
- fileKey += `ticket/${dataChat.id}/`;
173
- } else {
174
- errorMessage = "El ID del ticket no es valido";
175
- }
176
- break;
177
-
178
- default:
179
- errorMessage =
180
- "El tipo de chat no se especifico de manera correcta";
181
- }
182
- if (!errorMessage) {
183
- const today = new Date();
184
- fileKey += `${uuidv4()}-${today.getTime()}.${getFileExtension(
185
- file.name
186
- )}`;
187
- } else {
188
- fileKey = undefined;
189
- }
190
- //console.log("fileKey: ", fileKey);
191
- // enviar file a AWS
192
- customFiles.push({
193
- itemType: file.type.split("/")[0] == "image" ? "img" : "file",
194
- key: fileKey,
195
- errorOwn: errorMessage,
196
- });
197
- const paramsCreate = {
198
- ACL: "public-read",
199
- Body: dataBuffer,
200
- Bucket: S3_BUCKET,
201
- Key: fileKey,
202
- };
203
- fileUploadRequests.push(myBucket.putObject(paramsCreate).promise());
204
- }
205
- const responseAWS = await Promise.allSettled(fileUploadRequests);
206
- console.log("responseAWS:", responseAWS);
207
- responseAWS.forEach((responseFile, index) => {
208
- if (responseFile.status === "rejected") {
209
- customFiles[index].errorAWS = responseFile.reason.message;
210
- customFiles[index].uploaded = false;
211
- } else {
212
- customFiles[index].uploaded = true;
213
- }
214
- });
215
- //console.log("customFiles:", customFiles);
216
- } catch (err) {
217
- disableSecondaryContainer(false);
218
- setModalAlert({
219
- show: true,
220
- title: "hubo un problema al subir los archivos al chat",
221
- message: `${err.message}
222
- Reporta esto a TI`,
223
- errorInputMessage: false,
224
- });
225
- return;
226
- }
227
-
228
- // obtener las keys de los files subidos
229
- const items = [];
230
- for (let index = 0; index < customFiles.length; index++) {
231
- const file = customFiles[index];
232
- if (file.uploaded) {
233
- const valueItem = {
234
- key: file.key,
235
- name: files[index].name,
236
- };
237
- // caso imagen -> obtener width y height
238
- if (file.itemType === "img") {
239
- const imgSize = await getImageSize(files[index]);
240
- if (imgSize) {
241
- valueItem.width = imgSize.width;
242
- valueItem.height = imgSize.height;
243
- }
244
- }
245
- console.log("valueItemFile:", valueItem);
246
- items.push({
247
- type: file.itemType,
248
- value: JSON.stringify(valueItem),
249
- });
250
- }
251
- }
252
-
253
- // enviar los archivos subidos en AWS a la BD
254
- if (items.length) {
255
- const responseError = await createItemsChat(items);
256
- // cuando ningun archivo se guardo en la BD
257
- if (responseError) {
258
- setModalAlert({
259
- show: true,
260
- title: responseError.message,
261
- message: responseError.errorDetail,
262
- errorInputMessage: false,
263
- });
264
- disableSecondaryContainer(false);
265
- return;
266
- }
267
- }
268
-
269
- // obtener los errores de los files no subidos a AWS
270
- const failedFiles = [];
271
- let errorDetailFiles = "";
272
- customFiles.forEach((file, index) => {
273
- if (!file.uploaded) {
274
- if (failedFiles.length === 0) {
275
- errorDetailFiles = `${files[index].name}:
276
- Error: ${file.errorOwn ? file.errorOwn : file.errorAWS}`;
277
- } else {
278
- errorDetailFiles += `${"\n\n"}${files[index].name}:
279
- Error: ${file.errorOwn ? file.errorOwn : file.errorAWS}`;
280
- }
281
- failedFiles.push(files[index]);
282
- }
283
- });
284
- if (failedFiles.length) {
285
- setModalAlert({
286
- show: true,
287
- title: `${failedFiles.length}/${files.length} archivos no fueron enviados al chat`,
288
- message: errorDetailFiles,
289
- errorInputMessage: false,
290
- });
291
- }
292
- // actualizar filesPreview
293
- disableSecondaryContainer(false);
294
- setFilesPreview(failedFiles);
295
- }
296
-
297
- /*
298
- if (file.type.split("/")[0] === "image") {
299
- if (arrayIMG.data.ext[0] === "svg") {
300
- handlerCreateItem("file", params.Key);
301
- } else handlerCreateItem("img", params.Key);
302
- } else if (
303
- file.type.split("/")[0] === "application" ||
304
- file.type.split("/")[0] === "text"
305
- ) {
306
- handlerCreateItem("file", params.Key);
307
- }
308
- */
309
- };
310
-
311
- const sendMessage = async () => {
312
- if (createItemsChat) {
313
- if (isStringEmpty(valueInputMessage)) {
314
- setValueInputMessage("");
315
- setModalAlert({
316
- show: true,
317
- title: "mensaje vacío",
318
- message:
319
- "Por favor, especifica el mensaje que quieres enviar al chat",
320
- errorInputMessage: true,
321
- });
322
- return;
323
- }
324
- setBtnSendMessageLoading(true);
325
- setBtnChooserFileDisabled(true);
326
- setInputMessageDisabled(true);
327
- const responseError = await createItemsChat([
328
- {
329
- type: "message",
330
- value: valueInputMessage.trim(),
331
- },
332
- ]);
333
- setInputMessageDisabled(false);
334
- setBtnSendMessageLoading(false);
335
- setBtnChooserFileDisabled(false);
336
- if (responseError) {
337
- setModalAlert({
338
- show: true,
339
- title: responseError.message,
340
- message: responseError.errorDetail,
341
- errorInputMessage: true,
342
- });
343
- } else {
344
- setValueInputMessage("");
345
- setToggleFocusInputMessage((prev) => !prev);
346
- }
347
- }
348
- };
349
-
350
- const disableSecondaryContainer = (disabled = false) => {
351
- setBtnSendFilesLoading(disabled);
352
- setBtnChooserFileDisabled(disabled);
353
- setOpenPreview(!disabled);
354
- };
355
-
356
- const deleteFile = async (index) => {
357
- let newFiles = filesPreview.slice();
358
- newFiles.splice(index, 1);
359
- setFilesPreview(newFiles);
360
- };
361
-
362
- const renderFilesPreview = async () => {
363
- const jsxFiles = [];
364
- for (let index = 0; index < filesPreview.length; index++) {
365
- const file = filesPreview[index];
366
- const fileType = file.type?.split("/")[0];
367
- const base64 = await getBase64(file);
368
- jsxFiles.push(
369
- <SwiperSlide className="item-carrousel" key={"item-" + index}>
370
- <ContainerItemCarrousel>
371
- {fileType === "image" ? (
372
- <CustomImage
373
- width={"100%"}
374
- className={"container-img"}
375
- sizeLoading={40}
376
- colorLoading={undefined}
377
- src={base64}
378
- componentDefault={
379
- <CustomIcon
380
- className="icon-img"
381
- size={60}
382
- icon={IconImage}
383
- type={"pink"}
384
- transparent
385
- />
386
- }
387
- />
388
- ) : (
389
- <IconFile
390
- transparent
391
- size={60}
392
- ext={getFileExtension(file.name)}
393
- />
394
- )}
395
-
396
- <div
397
- className="container-delete"
398
- onMouseEnter={() => {
399
- setTooltipFileName({
400
- show: true,
401
- fileName: file.name,
402
- });
403
- }}
404
- onMouseLeave={() => {
405
- setTooltipFileName({
406
- show: false,
407
- fileName: "",
408
- });
409
- }}
410
- >
411
- <ButtonV2
412
- className="btn-delete"
413
- type={"white"}
414
- label={"Eliminar"}
415
- size={8}
416
- borderType={"oval"}
417
- icon={IconDelete}
418
- isLoading={undefined}
419
- onClick={async (event) => {
420
- deleteFile(index);
421
- }}
422
- />
423
- </div>
424
- </ContainerItemCarrousel>
425
- </SwiperSlide>
426
- );
427
- }
428
- setFilesJsxPreview(jsxFiles);
429
- };
430
-
431
- const onChangeFiles = async (selectedFiles) => {
432
- //console.log("selected files: ", selectedFiles);
433
- let newFiles = filesPreview.slice();
434
- newFiles = newFiles.concat(selectedFiles);
435
- setFilesPreview(newFiles);
436
- };
437
-
438
- const getErrorUpdate = () => {
439
- if (errorUpdate?.startDate) {
440
- let errorDetail = "Ultima actualización hace ";
441
- if (errorUpdate?.lastDate) {
442
- let msDif =
443
- errorUpdate.lastDate.getTime() - errorUpdate.startDate.getTime();
444
- const minutes = Math.floor(msDif / 60000);
445
- const hours = Math.floor(minutes / 60);
446
- if (hours === 0) {
447
- if (minutes === 0) errorDetail += "menos de 1 minuto";
448
- else if (minutes === 1) errorDetail += "1 minuto";
449
- else errorDetail += minutes + " minutos";
450
- } else {
451
- if (hours === 1) errorDetail += "1 hora con ";
452
- else errorDetail += hours + " horas con ";
453
-
454
- if (minutes === 0) errorDetail += "menos de 1 minuto";
455
- else if (minutes === 1) errorDetail += "1 minuto";
456
- else errorDetail += minutes + " minutos";
457
- }
458
- } else {
459
- errorDetail += "menos de 1 minuto";
460
- }
461
- // retornar el icono
462
- return (
463
- <Tooltip
464
- componentTooltip={
465
- <div>
466
- <label className="label-title">Chat desactualizado</label>
467
- <label className="label-detail">{errorDetail}</label>
468
- </div>
469
- }
470
- className="container-ErrorUpdate"
471
- classNameTooltip="tooltipErrorUpdate"
472
- position={"topCenter"}
473
- addArrow={false}
474
- transitionType={"zoom"}
475
- followCursor={false}
476
- >
477
- <CustomIcon
478
- className="icon-errorUpdate"
479
- size={15}
480
- icon={IconWarning}
481
- type={"pink"}
482
- transparent
483
- />
484
- </Tooltip>
485
- );
486
- } else {
487
- return null;
488
- }
489
- };
490
-
491
- return (
492
- <>
493
- <Container ref={containerRef}>
494
- {statusChat === "closed" ? (
495
- <>
496
- {/* chat bloqueado */}
497
- <div className="container-chatDisabled">
498
- {/* icono de chat desactualizado */}
499
- {getErrorUpdate()}
500
-
501
- <div className="label-chatDisabled">{messageDisabled}</div>
502
- </div>
503
- </>
504
- ) : filesJsxPreview.length === 0 ? (
505
- <>
506
- {/* container del input y el btn sendTXT */}
507
- <ContainerMain>
508
- {/* icono de chat desactualizado */}
509
- {getErrorUpdate()}
510
-
511
- <InputText
512
- className="input-itemMessage"
513
- type="gray"
514
- transparent
515
- size={13}
516
- placeHolder="Escribe aquí..."
517
- multiline
518
- maxRows={5}
519
- minRows={1}
520
- disabled={inputMessageDisabled}
521
- text={valueInputMessage}
522
- onChangeText={(newValue) => setValueInputMessage(newValue)}
523
- onEnter={async (event) => await sendMessage()}
524
- refInputText={refInputTextMessage}
525
- />
526
-
527
- {/* selector de files */}
528
- <ButtonFileChooser
529
- className="btn-chooserFiles"
530
- type={"gray"}
531
- transparent
532
- size={18}
533
- disabled={btnChooserFileDisabled}
534
- showIcon={true}
535
- multipleFiles={true}
536
- onChangeFiles={onChangeFiles}
537
- />
538
-
539
- {/* boton send message */}
540
- <ButtonV2
541
- className="btn-sendMessage"
542
- type={"pink"}
543
- size={10}
544
- borderType={"circle"}
545
- icon={IconSend}
546
- isLoading={btnSendMessageLoading}
547
- onClick={async (event) => {
548
- await sendMessage();
549
- }}
550
- />
551
- </ContainerMain>
552
- </>
553
- ) : (
554
- <>
555
- {/* container para el modo previewFiles */}
556
- <TooltipMUI
557
- open={openPreview}
558
- placement={"top-start"}
559
- arrow={false}
560
- componentsProps={{
561
- popper: {
562
- className: "tooltip-previewFiles",
563
- disablePortal: true,
564
- },
565
- transition: { timeout: 300 },
566
- }}
567
- title={
568
- <TooltipMUI
569
- open={tooltipFileName.show}
570
- placement={"top"}
571
- arrow={false}
572
- followCursor={true}
573
- TransitionComponent={Fade}
574
- componentsProps={{
575
- popper: {
576
- className: "tooltip-previewFileName",
577
- disablePortal: true,
578
- },
579
- transition: { timeout: 300 },
580
- }}
581
- title={<label>{tooltipFileName.fileName}</label>}
582
- >
583
- <div className="container-carrouselFiles">
584
- <Swiper
585
- spaceBetween={5}
586
- slidesPerView={"auto"}
587
- freeMode
588
- mousewheel
589
- keyboard
590
- modules={[Mousewheel, Keyboard, FreeMode]}
591
- className="carrousel-files"
592
- >
593
- {filesJsxPreview}
594
- </Swiper>
595
- </div>
596
- </TooltipMUI>
597
- }
598
- >
599
- <ContainerSecondary>
600
- {/* icono de chat desactualizado */}
601
- {getErrorUpdate()}
602
-
603
- {/* selector de files */}
604
- <Slide
605
- direction={"left"}
606
- in={true}
607
- timeout={500}
608
- container={containerRef.current}
609
- >
610
- <div>
611
- <ButtonFileChooser
612
- className={"btn-chooserFiles"}
613
- type={"gray"}
614
- size={17}
615
- borderType="circle"
616
- showIcon={true}
617
- disabled={btnChooserFileDisabled}
618
- multipleFiles={true}
619
- onChangeFiles={onChangeFiles}
620
- />
621
- </div>
622
- </Slide>
623
-
624
- {/* boton send files */}
625
- <Slide
626
- direction={"up"}
627
- in={true}
628
- timeout={500}
629
- container={containerRef.current}
630
- >
631
- <div className="slide-btnSendFiles">
632
- <ButtonV2
633
- className="btn-sendFiles"
634
- type={"pink"}
635
- label={"Enviar archivos"}
636
- size={12}
637
- borderType={"oval"}
638
- loading={btnSendFilesLoading}
639
- isLoading={btnSendFilesLoading}
640
- onClick={async (event) => {
641
- await sendFilesPreview();
642
- }}
643
- />
644
- </div>
645
- </Slide>
646
- </ContainerSecondary>
647
- </TooltipMUI>
648
- </>
649
- )}
650
- </Container>
651
-
652
- <Modal
653
- className="container-modalAlert"
654
- show={modalAlert.show}
655
- title={modalAlert.title}
656
- message={modalAlert.message}
657
- icon={"info"}
658
- onClickBtnDefault={(event) => {
659
- setModalAlert((prev) => ({
660
- ...prev,
661
- show: false,
662
- errorInputMessage: false,
663
- }));
664
- setToggleFocusInputMessage((prev) => !prev);
665
- }}
666
- />
667
- </>
668
- );
669
- };