contentoh-components-library 21.2.57 → 21.2.59

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 (81) hide show
  1. package/.env.development +4 -1
  2. package/dist/assets/images/chatPopup/Spinner.gif +0 -0
  3. package/dist/assets/images/chatPopup/close.svg +3 -0
  4. package/dist/assets/images/chatPopup/defaultImage.png +0 -0
  5. package/dist/assets/images/chatPopup/defaultProfile.png +0 -0
  6. package/dist/assets/images/chatPopup/doc.svg +1 -0
  7. package/dist/assets/images/chatPopup/document.svg +1 -0
  8. package/dist/assets/images/chatPopup/iconChat.svg +19 -0
  9. package/dist/assets/images/chatPopup/iconPlus.svg +3 -0
  10. package/dist/assets/images/chatPopup/pdf.svg +75 -0
  11. package/dist/assets/images/chatPopup/remove.svg +4 -0
  12. package/dist/assets/images/chatPopup/send.svg +3 -0
  13. package/dist/assets/images/chatPopup/svgIcon.svg +109 -0
  14. package/dist/assets/images/chatPopup/upload_file.svg +3 -0
  15. package/dist/assets/images/chatPopup/xls.svg +53 -0
  16. package/dist/assets/images/customSelect/starIcon.svg +14 -0
  17. package/dist/components/atoms/ChatPopUp/ChatPopUp.stories.js +28 -0
  18. package/dist/components/atoms/ChatPopUp/index.js +843 -0
  19. package/dist/components/atoms/ChatPopUp/styles.js +27 -0
  20. package/dist/components/atoms/ChatPopUp/utils/handlersChat.js +182 -0
  21. package/dist/components/atoms/ListCommercialRetailers/ListCommercialRetailers.stories.js +36 -0
  22. package/dist/components/atoms/ListCommercialRetailers/index.js +64 -0
  23. package/dist/components/atoms/ListCommercialRetailers/styles.js +20 -0
  24. package/dist/components/atoms/MenuCommercialRetailers/MenuCommercialRetailers.stories.js +37 -0
  25. package/dist/components/atoms/MenuCommercialRetailers/index.js +25 -0
  26. package/dist/components/atoms/MenuCommercialRetailers/styles.js +20 -0
  27. package/dist/components/atoms/MenuProductImage/MenuProductImage.stories.js +28 -0
  28. package/dist/components/atoms/MenuProductImage/index.js +88 -0
  29. package/dist/components/atoms/MenuProductImage/styles.js +20 -0
  30. package/dist/components/atoms/Tooltip/Tooltip.stories.js +36 -0
  31. package/dist/components/atoms/Tooltip/index.js +55 -0
  32. package/dist/components/atoms/Tooltip/styles.js +18 -0
  33. package/dist/components/molecules/ApproveRejetPanel/ApproveRejetPanel.stories.js +25 -0
  34. package/dist/components/molecules/ApproveRejetPanel/index.js +49 -0
  35. package/dist/components/molecules/ApproveRejetPanel/styles.js +18 -0
  36. package/dist/components/molecules/CustomSelect/CustomSelect.stories.js +21 -22
  37. package/dist/components/molecules/CustomSelect/SelectItem.js +10 -1
  38. package/dist/components/molecules/CustomSelect/index.js +36 -9
  39. package/dist/components/molecules/CustomSelect/styles.js +3 -1
  40. package/dist/components/molecules/HeaderTop/index.js +19 -6
  41. package/dist/components/molecules/HeaderTop/styles.js +1 -1
  42. package/dist/components/molecules/SignInLoginCreationApp/SignInLogin.stories.js +28 -0
  43. package/dist/components/molecules/SignInLoginCreationApp/index.js +270 -0
  44. package/dist/components/molecules/SignInLoginCreationApp/styles.js +20 -0
  45. package/dist/components/pages/Dashboard/Dashboard.stories.js +20 -51
  46. package/dist/components/pages/Dashboard/index.js +1 -1
  47. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +1 -0
  48. package/dist/components/pages/ProviderProductEdition/index.js +7 -2
  49. package/package.json +6 -1
  50. package/src/assets/images/chatPopup/Spinner.gif +0 -0
  51. package/src/assets/images/chatPopup/close.svg +3 -0
  52. package/src/assets/images/chatPopup/defaultImage.png +0 -0
  53. package/src/assets/images/chatPopup/defaultProfile.png +0 -0
  54. package/src/assets/images/chatPopup/doc.svg +1 -0
  55. package/src/assets/images/chatPopup/document.svg +1 -0
  56. package/src/assets/images/chatPopup/iconChat.svg +19 -0
  57. package/src/assets/images/chatPopup/iconPlus.svg +3 -0
  58. package/src/assets/images/chatPopup/pdf.svg +75 -0
  59. package/src/assets/images/chatPopup/remove.svg +4 -0
  60. package/src/assets/images/chatPopup/send.svg +3 -0
  61. package/src/assets/images/chatPopup/svgIcon.svg +109 -0
  62. package/src/assets/images/chatPopup/upload_file.svg +3 -0
  63. package/src/assets/images/chatPopup/xls.svg +53 -0
  64. package/src/assets/images/customSelect/starIcon.svg +14 -0
  65. package/src/components/atoms/ChatPopUp/ChatPopUp.stories.js +11 -0
  66. package/src/components/atoms/ChatPopUp/index.js +545 -0
  67. package/src/components/atoms/ChatPopUp/styles.js +278 -0
  68. package/src/components/atoms/ChatPopUp/utils/handlersChat.js +104 -0
  69. package/src/components/atoms/Tooltip/Tooltip.stories.js +15 -0
  70. package/src/components/atoms/Tooltip/index.js +35 -0
  71. package/src/components/atoms/Tooltip/styles.js +5 -0
  72. package/src/components/molecules/CustomSelect/CustomSelect.stories.js +19 -11
  73. package/src/components/molecules/CustomSelect/SelectItem.js +7 -0
  74. package/src/components/molecules/CustomSelect/index.js +83 -58
  75. package/src/components/molecules/CustomSelect/styles.js +3 -1
  76. package/src/components/molecules/HeaderTop/index.js +23 -7
  77. package/src/components/molecules/HeaderTop/styles.js +4 -0
  78. package/src/components/pages/Dashboard/Dashboard.stories.js +20 -56
  79. package/src/components/pages/Dashboard/index.js +1 -1
  80. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +1 -0
  81. package/src/components/pages/ProviderProductEdition/index.js +8 -1
@@ -0,0 +1,545 @@
1
+ import { Container, Slider } from "./styles";
2
+ import { useEffect, useState } from "react";
3
+ import chatIcon from "../../../assets/images/chatPopup/iconChat.svg";
4
+ import closeChat from "../../../assets/images/chatPopup/close.svg";
5
+ import send from "../../../assets/images/chatPopup/send.svg";
6
+ import iconPlus from "../../../assets/images/chatPopup/iconPlus.svg";
7
+ import upload from "../../../assets/images/chatPopup/upload_file.svg";
8
+ import defaultProfile from "../../../assets/images/chatPopup/defaultProfile.png";
9
+ import defaultImage from "../../../assets/images/chatPopup/defaultImage.png";
10
+ import defaultSpinner from "../../../assets/images/chatPopup/Spinner.gif";
11
+ import doc from "../../../assets/images/chatPopup/doc.svg";
12
+ import xls from "../../../assets/images/chatPopup/xls.svg";
13
+ import documentType from "../../../assets/images/chatPopup/document.svg";
14
+ import svg from "../../../assets/images/chatPopup/svgIcon.svg";
15
+ import moment from "moment";
16
+ import AWS from "aws-sdk";
17
+ import ReactImageFallback from "react-image-fallback";
18
+ import { v4 as uuidv4 } from "uuid";
19
+ import { getBD, createItemBD } from "./utils/handlersChat";
20
+ import { getProfilePicture } from "../../../global-files/data";
21
+ import { CustomTooltip } from "../Tooltip";
22
+
23
+ const S3_BUCKET = process.env.REACT_APP_IMAGES_BUCKET;
24
+ const REGION = "us-east-1";
25
+ const Buffer = require("buffer/").Buffer;
26
+
27
+ AWS.config.update({
28
+ accessKeyId: process.env.REACT_APP_KEY_UPLOAD_TO_S3,
29
+ secretAccessKey: process.env.REACT_APP_ACCESS_KEY_UPLOAD_TO_S3,
30
+ });
31
+
32
+ const myBucket = new AWS.S3({
33
+ params: { Bucket: S3_BUCKET },
34
+ region: REGION,
35
+ });
36
+
37
+ export const ChatPopUp = ({
38
+ chat_authorization,
39
+ chat_id_article,
40
+ chat_version_article,
41
+ }) => {
42
+ const [showMenu, setShowMenu] = useState(false);
43
+ const [items, setItems] = useState(); // items que vienen de la BD
44
+ const [customItems, setCustomItems] = useState([]); // JSX acorde al tipo de los items
45
+ const [current_id_company, setCurrent_id_company] = useState(0);
46
+ const [valueInput, setValueInput] = useState("");
47
+ const [processUpdateID, setProcessUpdateID] = useState();
48
+ const [countUpdate, setCountUpdate] = useState(0);
49
+ let arrayIMG = { data: { ext: [], nameFile: [] } };
50
+ const Authorization = chat_authorization;
51
+ const prop_id_article = chat_id_article;
52
+ const prop_version_article = chat_version_article;
53
+
54
+ useEffect(() => {
55
+ //setItems([])
56
+ getInitial();
57
+ }, []);
58
+
59
+ useEffect(() => {
60
+ if (!items) return;
61
+ renderItems();
62
+ //console.log("update en 10s");
63
+ //const processUpdate = setTimeout( () => {
64
+ // setCountUpdate( (prev) => prev+1 )
65
+ //} , 25000 )
66
+ //setProcessUpdateID(processUpdate);
67
+ }, [items]);
68
+
69
+ // implementar update cada 30s
70
+ useEffect(() => {
71
+ if (countUpdate == 0) return;
72
+ getUpdate();
73
+ }, [countUpdate]);
74
+
75
+ const renderItems = async () => {
76
+ let jsxItems = [];
77
+ let date = undefined;
78
+ let countDate = 1;
79
+ for (const item of items) {
80
+ if (!date) {
81
+ date = getFullDate(new Date(item.creation_date));
82
+ } else {
83
+ let newDate = getFullDate(new Date(item.creation_date));
84
+ if (newDate != date) {
85
+ jsxItems.push(
86
+ <div className="group-date" key={"itemDate-" + countDate++}>
87
+ <hr />
88
+ <p>{date}</p>
89
+ <hr />
90
+ </div>
91
+ );
92
+ date = newDate;
93
+ }
94
+ }
95
+
96
+ // manejo de los tipos items
97
+ if (item.user.id_company == current_id_company) {
98
+ jsxItems.push(
99
+ <li className="own-message" key={"item-" + item.id}>
100
+ <CustomTooltip
101
+ className={"tooltip-userName"}
102
+ componentTooltip={<label>{item.user.name}</label>}
103
+ >
104
+ <div className="profile">
105
+ <ReactImageFallback
106
+ src={getProfilePicture(item.user.id, 24, 24)}
107
+ fallbackImage={defaultProfile}
108
+ initialImage={defaultSpinner}
109
+ alt="profile"
110
+ />
111
+ </div>
112
+ </CustomTooltip>
113
+
114
+ {item.value_type == "txt"
115
+ ? renderTXT(item)
116
+ : item.value_type == "img"
117
+ ? renderIMG(item)
118
+ : renderFILE(item)}
119
+ <div className="date">
120
+ <p>{getTime(item.creation_date)}</p>
121
+ </div>
122
+ </li>
123
+ );
124
+ } else {
125
+ jsxItems.push(
126
+ <li className="" key={"item-" + item.id}>
127
+ <CustomTooltip
128
+ className={"tooltip-userName"}
129
+ componentTooltip={<label>{item.user.name}</label>}
130
+ >
131
+ <div className="profile">
132
+ <ReactImageFallback
133
+ src={getProfilePicture(item.user.id, 24, 24)}
134
+ fallbackImage={defaultProfile}
135
+ initialImage={defaultSpinner}
136
+ alt="profile"
137
+ />
138
+ </div>
139
+ </CustomTooltip>
140
+
141
+ {item.value_type == "txt"
142
+ ? renderTXT(item)
143
+ : item.value_type == "img"
144
+ ? renderIMG(item)
145
+ : renderFILE(item)}
146
+ <div className="date">
147
+ <p>{getTime(item.creation_date)}</p>
148
+ </div>
149
+ </li>
150
+ );
151
+ }
152
+ }
153
+ if (date) {
154
+ jsxItems.push(
155
+ <div className="group-date" key={"itemDate-" + countDate++}>
156
+ <hr />
157
+ <p>{date}</p>
158
+ <hr />
159
+ </div>
160
+ );
161
+ }
162
+ setCustomItems(jsxItems);
163
+ };
164
+
165
+ const getBase64 = async (file) => {
166
+ return new Promise((resolve) => {
167
+ const reader = new FileReader();
168
+ reader.addEventListener("loadend", () => {
169
+ let base64 = reader.result.replace(/^data:\w+\/\w+.*;base64,/, "");
170
+ resolve(base64);
171
+ });
172
+ reader.readAsDataURL(file);
173
+ });
174
+ };
175
+
176
+ const createPreview = async (file) => {
177
+ if (
178
+ file.type.split("/")[0] === "image" ||
179
+ file.type.split("/")[0] === "application" ||
180
+ file.type.split("/")[0] === "text"
181
+ ) {
182
+ let base64IMG = await getBase64(file);
183
+ let ext = file.name.split(".")[file.name.split(".").length - 1];
184
+ arrayIMG.data.ext.push(ext);
185
+ arrayIMG.data.nameFile.push(file.name.split(".")[0]);
186
+ const fileB = Buffer.from(base64IMG, "base64");
187
+ const params = {
188
+ ACL: "public-read",
189
+ Body: fileB,
190
+ Bucket: S3_BUCKET,
191
+ Key: `${prop_id_article}/${prop_version_article}/chat/${
192
+ arrayIMG.data.nameFile[0]
193
+ }-${uuidv4()}.${arrayIMG.data.ext[0]}`,
194
+ };
195
+ await myBucket.putObject(params).promise();
196
+ if (file.type.split("/")[0] === "image") {
197
+ if (arrayIMG.data.ext[0] === "svg") {
198
+ onClickInsertar("file", params.Key);
199
+ } else onClickInsertar("img", params.Key);
200
+ } else if (
201
+ file.type.split("/")[0] === "application" ||
202
+ file.type.split("/")[0] === "text"
203
+ ) {
204
+ onClickInsertar("file", params.Key);
205
+ }
206
+ }
207
+ arrayIMG.data.ext.shift();
208
+ arrayIMG.data.nameFile.shift();
209
+ };
210
+
211
+ const getTime = (time) => {
212
+ const fecha = moment(time).format("LT");
213
+ const fechaHoy = new Date();
214
+ if (moment(time).format("L") === moment(fechaHoy).format("L")) {
215
+ return moment(time).format("LT");
216
+ } else return fecha;
217
+ };
218
+
219
+ const renderTXT = (item) => {
220
+ return (
221
+ <div className="body-message">
222
+ <p>{item.value}</p>
223
+ </div>
224
+ );
225
+ };
226
+
227
+ const renderIMG = (item) => {
228
+ return (
229
+ <div className="img-file">
230
+ <a
231
+ href={`https://content-management-images.s3.amazonaws.com/${item.value}`}
232
+ >
233
+ <ReactImageFallback
234
+ src={`https://content-management-images.s3.amazonaws.com/${item.value}`}
235
+ fallbackImage={defaultImage}
236
+ initialImage={defaultSpinner}
237
+ alt={item.value}
238
+ />
239
+ </a>
240
+ </div>
241
+ );
242
+ };
243
+
244
+ const renderFILE = (item) => {
245
+ let ext = item.value.split(".")[item.value.split(".").length - 1];
246
+ let imgFile;
247
+ if (ext === "docx" || ext === "doc" || ext === "docs") {
248
+ imgFile = doc;
249
+ } else if (
250
+ ext === "xls" ||
251
+ ext === "xlsx" ||
252
+ ext === "csv" ||
253
+ ext === "tsv"
254
+ ) {
255
+ imgFile = xls;
256
+ } else if (ext === "svg") {
257
+ imgFile = svg;
258
+ } else if (ext === "pdf") {
259
+ imgFile = "https://eu-phoenix.eu/wp-content/uploads/2022/03/pdf-icon.svg";
260
+ } else imgFile = documentType;
261
+
262
+ return (
263
+ <div className="body-message">
264
+ <a
265
+ href={`https://content-management-images.s3.amazonaws.com/${item.value}`}
266
+ >
267
+ <div>
268
+ <img src={imgFile} alt={item.value}></img>
269
+ <p>{item.value.split("/")[3]}</p>
270
+ </div>
271
+ </a>
272
+ </div>
273
+ );
274
+ };
275
+
276
+ const getInitial = async () => {
277
+ let response = await getBD(
278
+ prop_id_article,
279
+ prop_version_article,
280
+ "initial",
281
+ "",
282
+ Authorization
283
+ );
284
+ if (!response.body) {
285
+ // console.log("=====================");
286
+ // console.log("ERROR INITIAL");
287
+ // console.log("=====================");
288
+ // console.log(response);
289
+ console.log(
290
+ "Unable to retrieve company and user from database, please report this to TI"
291
+ );
292
+ setItems([]);
293
+ } else {
294
+ // console.log("=====================");
295
+ // console.log("ITEMS INICIALES");
296
+ // console.log("=====================");
297
+ // console.log(response.body.items);
298
+ setCurrent_id_company(response.body.current_id_company);
299
+ setItems(response.body.items);
300
+ }
301
+ };
302
+
303
+ const getUpdate = async () => {
304
+ let currentItems = items.slice();
305
+ let dateItem = currentItems[0]?.creation_date ?? "";
306
+ let response = {};
307
+ if (dateItem == "") {
308
+ await getInitial();
309
+ return;
310
+ } else {
311
+ response = await getBD(
312
+ prop_id_article,
313
+ prop_version_article,
314
+ "update_latest",
315
+ dateItem,
316
+ Authorization
317
+ );
318
+ }
319
+ if (!response.body) {
320
+ // console.log("=====================");
321
+ // console.log("ERROR UPDATE LATEST");
322
+ // console.log("=====================");
323
+ console.log(
324
+ "Unable to retrieve company and user from database, please report this to TI"
325
+ );
326
+ setItems(currentItems);
327
+ } else {
328
+ // console.log("=====================");
329
+ // console.log("ITEMS DEL UPDATE LATEST");
330
+ // console.log("=====================");
331
+ // console.log(response.body.items);
332
+ let newItems = response.body.items;
333
+ newItems = newItems.concat(currentItems);
334
+ setItems(newItems);
335
+ }
336
+ // setCountUpdate((prev) => prev + 1);
337
+ };
338
+
339
+ const getFullDate = (date = new Date()) => {
340
+ let dateString = "";
341
+ switch (date.getDay()) {
342
+ case 0:
343
+ dateString += "Dom ";
344
+ break;
345
+ case 1:
346
+ dateString += "Lun ";
347
+ break;
348
+ case 2:
349
+ dateString += "Mar ";
350
+ break;
351
+ case 3:
352
+ dateString += "Mie ";
353
+ break;
354
+ case 4:
355
+ dateString += "Jue ";
356
+ break;
357
+ case 5:
358
+ dateString += "Vie ";
359
+ break;
360
+ case 6:
361
+ dateString += "Sab ";
362
+ break;
363
+ default:
364
+ dateString += "-- ";
365
+ break;
366
+ }
367
+ dateString += date.getDate() + " ";
368
+ switch (date.getMonth() + 1) {
369
+ case 1:
370
+ dateString += "Ene ";
371
+ break;
372
+ case 2:
373
+ dateString += "Feb ";
374
+ break;
375
+ case 3:
376
+ dateString += "Mar ";
377
+ break;
378
+ case 4:
379
+ dateString += "Abr ";
380
+ break;
381
+ case 5:
382
+ dateString += "May ";
383
+ break;
384
+ case 6:
385
+ dateString += "Jun ";
386
+ break;
387
+ case 7:
388
+ dateString += "Jul ";
389
+ break;
390
+ case 8:
391
+ dateString += "Ago ";
392
+ break;
393
+ case 9:
394
+ dateString += "Sep ";
395
+ break;
396
+ case 10:
397
+ dateString += "Oct ";
398
+ break;
399
+ case 11:
400
+ dateString += "Nov ";
401
+ break;
402
+ case 12:
403
+ dateString += "Dic ";
404
+ break;
405
+ }
406
+ dateString += date.getFullYear();
407
+ return dateString;
408
+ };
409
+
410
+ const onClickLoadMore = async () => {
411
+ clearTimeout(processUpdateID);
412
+ let currentItems = items.slice();
413
+ let dateItem = currentItems[currentItems.length - 1]?.creation_date ?? "";
414
+ let response = {};
415
+ if (dateItem == "") {
416
+ await getInitial();
417
+ return;
418
+ } else {
419
+ response = await getBD(
420
+ prop_id_article,
421
+ prop_version_article,
422
+ "load_more",
423
+ dateItem,
424
+ Authorization
425
+ );
426
+ }
427
+ if (!response.body) {
428
+ // console.log("=====================");
429
+ // console.log("ERROR LOAD MORE");
430
+ // console.log("=====================");
431
+ console.log(
432
+ "Unable to retrieve company and user from database, please report this to TI"
433
+ );
434
+ setItems(currentItems);
435
+ } else {
436
+ // console.log("=====================");
437
+ // console.log("ITEMS DEL LOAD MORE");
438
+ // console.log("=====================");
439
+ // console.log(response.body.items);
440
+ let newItems = currentItems.concat(response.body.items);
441
+ setItems(newItems);
442
+ }
443
+ };
444
+ const onClickInsertar = async (valueType, valueInput) => {
445
+ clearTimeout(processUpdateID);
446
+ let currentItems = items.slice();
447
+ let response = await createItemBD(
448
+ prop_id_article,
449
+ prop_version_article,
450
+ valueType,
451
+ valueInput,
452
+ Authorization
453
+ );
454
+ if (!response.body) {
455
+ // console.log("=====================");
456
+ // console.log("ERROR INSERTAR");
457
+ // console.log("=====================");
458
+ console.log(
459
+ "Unable to retrieve company and user from database, please report this to TI"
460
+ );
461
+ setItems(currentItems);
462
+ } else {
463
+ setValueInput("");
464
+ if (currentItems?.length == 0) {
465
+ // console.log("NUEVO ITEM <> NUEVO INITIAL");
466
+ await getInitial();
467
+ } else {
468
+ // console.log("NUEVO ITEM <> NUEVO UPDATE");
469
+ await getUpdate();
470
+ }
471
+ }
472
+ };
473
+ return (
474
+ <>
475
+ <Container>
476
+ <img
477
+ src={chatIcon}
478
+ alt="chat icon"
479
+ className="icon-chat"
480
+ onClick={() => {
481
+ setShowMenu(!showMenu);
482
+ }}
483
+ />
484
+ </Container>
485
+ {showMenu && (
486
+ <Slider id="div-slider" showMenu={showMenu}>
487
+ <button
488
+ onClick={() => {
489
+ setShowMenu(false);
490
+ }}
491
+ className="close"
492
+ >
493
+ <img src={closeChat} alt="close-chat"></img>
494
+ </button>
495
+ <div className="content-chat">
496
+ <button
497
+ onClick={async (event) => onClickLoadMore()}
498
+ className="cargar-mas"
499
+ >
500
+ <img src={iconPlus} alt="Cargar más" />
501
+ cargar más
502
+ </button>
503
+ <ul id="myListChat">{customItems}</ul>
504
+ </div>
505
+ <div className="input-chat">
506
+ <input
507
+ className="send-message"
508
+ placeholder="Escribe Aquí..."
509
+ id="id-input-message"
510
+ onKeyDown={(e) => {
511
+ switch (e.key) {
512
+ case "Enter":
513
+ onClickInsertar("txt", valueInput);
514
+ break;
515
+ default:
516
+ break;
517
+ }
518
+ }}
519
+ value={valueInput}
520
+ onChange={(event) => setValueInput(event.target.value)}
521
+ />
522
+ <input
523
+ type="file"
524
+ id="file"
525
+ accept="image/*,text/*,application/*"
526
+ className="add-picture-input"
527
+ onChange={(e) => {
528
+ createPreview(document.getElementById("file").files[0]);
529
+ }}
530
+ />
531
+ <label htmlFor="file" className={"upload"}>
532
+ <img src={upload} alt="send chat"></img>
533
+ </label>
534
+ <button
535
+ onClick={async () => onClickInsertar("txt", valueInput)}
536
+ className="send"
537
+ >
538
+ <img src={send} alt="send chat"></img>
539
+ </button>
540
+ </div>
541
+ </Slider>
542
+ )}
543
+ </>
544
+ );
545
+ };