contentoh-components-library 21.3.3 → 21.3.5

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 (202) 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 +19 -39
  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 +3 -15
  22. package/dist/global-files/variables.js +0 -2
  23. package/dist/index.js +46 -267
  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 +26 -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 +3 -22
  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 +3 -15
  45. package/src/global-files/variables.js +0 -2
  46. package/src/index.js +0 -17
  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 -110
  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 -57
  79. package/dist/components/atoms/SelectItemV2/styles.js +0 -30
  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 -98
  87. package/dist/components/molecules/Dropdown/index.js +0 -150
  88. package/dist/components/molecules/Dropdown/styles.js +0 -26
  89. package/dist/components/molecules/ImageTooltip/ImageTooltip.stories.js +0 -82
  90. package/dist/components/molecules/ImageTooltip/index.js +0 -85
  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 -306
  94. package/dist/components/molecules/SelectV2/styles.js +0 -42
  95. package/dist/components/molecules/SelectV2/test.js +0 -95
  96. package/dist/components/molecules/SelectV2/test.stories.js +0 -27
  97. package/dist/components/organisms/Chat/Chat.stories.js +0 -215
  98. package/dist/components/organisms/Chat/ChatLists/ChatLists.stories.js +0 -83
  99. package/dist/components/organisms/Chat/ChatLists/index.js +0 -160
  100. package/dist/components/organisms/Chat/ChatLists/styles.js +0 -29
  101. package/dist/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +0 -176
  102. package/dist/components/organisms/Chat/ContainerItems/index.js +0 -569
  103. package/dist/components/organisms/Chat/ContainerItems/styles.js +0 -20
  104. package/dist/components/organisms/Chat/ContentChat/ContentChat.stories.js +0 -142
  105. package/dist/components/organisms/Chat/ContentChat/index.js +0 -1422
  106. package/dist/components/organisms/Chat/ContentChat/styles.js +0 -20
  107. package/dist/components/organisms/Chat/Footer/Footer.stories.js +0 -43
  108. package/dist/components/organisms/Chat/Footer/index.js +0 -984
  109. package/dist/components/organisms/Chat/Footer/styles.js +0 -32
  110. package/dist/components/organisms/Chat/Header/Header.stories.js +0 -96
  111. package/dist/components/organisms/Chat/Header/index.js +0 -84
  112. package/dist/components/organisms/Chat/Header/styles.js +0 -20
  113. package/dist/components/organisms/Chat/index.js +0 -327
  114. package/dist/components/organisms/Chat/styles.js +0 -29
  115. package/dist/components/organisms/Modal/Modal.stories.js +0 -66
  116. package/dist/components/organisms/Modal/index.js +0 -95
  117. package/dist/components/organisms/Modal/styles.js +0 -20
  118. package/dist/components/organisms/RangeCalendar/RangeCalendar.stories.js +0 -33
  119. package/dist/components/organisms/RangeCalendar/index.js +0 -148
  120. package/dist/components/organisms/RangeCalendar/styles.js +0 -27
  121. package/dist/global-files/handle_http.js +0 -383
  122. package/dist/global-files/utils.js +0 -484
  123. package/src/assets/images/customSelect/starIcon.svg +0 -14
  124. package/src/assets/images/defaultImages/Spinner.gif +0 -0
  125. package/src/assets/images/defaultImages/notFound.svg +0 -124
  126. package/src/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +0 -47
  127. package/src/components/atoms/ButtonFileChooser/index.js +0 -69
  128. package/src/components/atoms/ButtonFileChooser/styles.js +0 -4
  129. package/src/components/atoms/ButtonV2/ButtonV2.stories.js +0 -53
  130. package/src/components/atoms/ButtonV2/index.js +0 -85
  131. package/src/components/atoms/ButtonV2/styles.js +0 -217
  132. package/src/components/atoms/CustomIcon/CustomIcon.stories.js +0 -36
  133. package/src/components/atoms/CustomIcon/index.js +0 -41
  134. package/src/components/atoms/CustomIcon/styles.js +0 -85
  135. package/src/components/atoms/IconFile/IconFile.stories.js +0 -35
  136. package/src/components/atoms/IconFile/index.js +0 -119
  137. package/src/components/atoms/IconFile/styles.js +0 -67
  138. package/src/components/atoms/Image/Image.stories.js +0 -51
  139. package/src/components/atoms/Image/index.js +0 -55
  140. package/src/components/atoms/Image/styles.js +0 -34
  141. package/src/components/atoms/ImageLink/ImageLink.stories.js +0 -43
  142. package/src/components/atoms/ImageLink/index.js +0 -57
  143. package/src/components/atoms/ImageLink/styles.js +0 -30
  144. package/src/components/atoms/ImagePreview/ImagePreview.stories.js +0 -52
  145. package/src/components/atoms/ImagePreview/index.js +0 -191
  146. package/src/components/atoms/ImagePreview/styles.js +0 -77
  147. package/src/components/atoms/InputText/InputText.stories.js +0 -39
  148. package/src/components/atoms/InputText/index.js +0 -61
  149. package/src/components/atoms/InputText/styles.js +0 -89
  150. package/src/components/atoms/NotFound/NotFound.stories.js +0 -19
  151. package/src/components/atoms/NotFound/index.js +0 -52
  152. package/src/components/atoms/NotFound/styles.js +0 -55
  153. package/src/components/atoms/SelectItemV2/SelectItemV2.stories.js +0 -26
  154. package/src/components/atoms/SelectItemV2/index.js +0 -61
  155. package/src/components/atoms/SelectItemV2/styles.js +0 -90
  156. package/src/components/atoms/Tooltip/Tooltip.stories.js +0 -51
  157. package/src/components/atoms/Tooltip/index.js +0 -59
  158. package/src/components/atoms/Tooltip/styles.js +0 -42
  159. package/src/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +0 -54
  160. package/src/components/molecules/ButtonDownloadFile/index.js +0 -111
  161. package/src/components/molecules/ButtonDownloadFile/styles.js +0 -66
  162. package/src/components/molecules/Dropdown/Dropdown.stories.js +0 -103
  163. package/src/components/molecules/Dropdown/index.js +0 -150
  164. package/src/components/molecules/Dropdown/styles.js +0 -75
  165. package/src/components/molecules/ImageTooltip/ImageTooltip.stories.js +0 -68
  166. package/src/components/molecules/ImageTooltip/index.js +0 -63
  167. package/src/components/molecules/ImageTooltip/styles.js +0 -18
  168. package/src/components/molecules/SelectV2/SelectV2.stories.js +0 -114
  169. package/src/components/molecules/SelectV2/index.js +0 -350
  170. package/src/components/molecules/SelectV2/styles.js +0 -105
  171. package/src/components/molecules/SelectV2/test.js +0 -61
  172. package/src/components/molecules/SelectV2/test.stories.js +0 -10
  173. package/src/components/organisms/Chat/Chat.stories.js +0 -199
  174. package/src/components/organisms/Chat/ChatLists/ChatLists.stories.js +0 -65
  175. package/src/components/organisms/Chat/ChatLists/Rotoplas.jpeg +0 -0
  176. package/src/components/organisms/Chat/ChatLists/THD.png +0 -0
  177. package/src/components/organisms/Chat/ChatLists/index.js +0 -141
  178. package/src/components/organisms/Chat/ChatLists/styles.js +0 -162
  179. package/src/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +0 -142
  180. package/src/components/organisms/Chat/ContainerItems/index.js +0 -549
  181. package/src/components/organisms/Chat/ContainerItems/styles.js +0 -328
  182. package/src/components/organisms/Chat/ContentChat/ContentChat.stories.js +0 -102
  183. package/src/components/organisms/Chat/ContentChat/Rotoplas.jpeg +0 -0
  184. package/src/components/organisms/Chat/ContentChat/THD.png +0 -0
  185. package/src/components/organisms/Chat/ContentChat/index.js +0 -900
  186. package/src/components/organisms/Chat/ContentChat/styles.js +0 -41
  187. package/src/components/organisms/Chat/Footer/Footer.stories.js +0 -22
  188. package/src/components/organisms/Chat/Footer/index.js +0 -669
  189. package/src/components/organisms/Chat/Footer/styles.js +0 -286
  190. package/src/components/organisms/Chat/Header/Header.stories.js +0 -66
  191. package/src/components/organisms/Chat/Header/index.js +0 -94
  192. package/src/components/organisms/Chat/Header/styles.js +0 -49
  193. package/src/components/organisms/Chat/index.js +0 -294
  194. package/src/components/organisms/Chat/styles.js +0 -42
  195. package/src/components/organisms/Modal/Modal.stories.js +0 -55
  196. package/src/components/organisms/Modal/index.js +0 -97
  197. package/src/components/organisms/Modal/styles.js +0 -103
  198. package/src/components/organisms/RangeCalendar/RangeCalendar.stories.js +0 -16
  199. package/src/components/organisms/RangeCalendar/index.js +0 -121
  200. package/src/components/organisms/RangeCalendar/styles.js +0 -883
  201. package/src/global-files/handle_http.js +0 -231
  202. package/src/global-files/utils.js +0 -309
@@ -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
- };