contentoh-components-library 21.3.30 → 21.3.32

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 (128) hide show
  1. package/.env.development +3 -0
  2. package/.env.production +5 -2
  3. package/dist/assets/images/generalButton/closeIcon.svg +2 -2
  4. package/dist/components/atoms/ProgressBar/index.js +36 -6
  5. package/dist/components/atoms/ProgressBar/styles.js +11 -3
  6. package/dist/components/molecules/CustomSelect/CustomSelect.stories.js +21 -22
  7. package/dist/components/molecules/CustomSelect/SelectItem.js +10 -1
  8. package/dist/components/molecules/GalleryElement/index.js +1 -1
  9. package/dist/components/molecules/HeaderTop/index.js +15 -1
  10. package/dist/components/molecules/HeaderTop/styles.js +1 -1
  11. package/dist/components/molecules/ProductNameHeader/index.js +6 -4
  12. package/dist/components/molecules/StatusAsignationInfo/index.js +1 -1
  13. package/dist/components/organisms/FullProductNameHeader/index.js +1 -0
  14. package/dist/components/organisms/ProductImageModal/index.js +10 -3
  15. package/dist/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +214 -30
  16. package/dist/components/pages/ProviderProductEdition/index.js +86 -65
  17. package/dist/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +88 -52
  18. package/dist/components/pages/RetailerProductEdition/index.js +27 -18
  19. package/dist/components/pages/RetailerProductEdition/utils.js +1 -1
  20. package/dist/global-files/data.js +18 -23
  21. package/dist/global-files/fonts.css +6 -0
  22. package/dist/global-files/variables.js +2 -0
  23. package/dist/index.js +267 -46
  24. package/package.json +14 -1
  25. package/src/assets/images/customSelect/starIcon.svg +14 -0
  26. package/src/assets/images/defaultImages/Spinner.gif +0 -0
  27. package/src/assets/images/defaultImages/notFound.svg +124 -0
  28. package/src/assets/images/generalButton/closeIcon.svg +2 -2
  29. package/src/assets/sounds/newMessage.mp3 +0 -0
  30. package/src/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +47 -0
  31. package/src/components/atoms/ButtonFileChooser/index.js +68 -0
  32. package/src/components/atoms/ButtonFileChooser/styles.js +4 -0
  33. package/src/components/atoms/ButtonV2/ButtonV2.stories.js +53 -0
  34. package/src/components/atoms/ButtonV2/index.js +85 -0
  35. package/src/components/atoms/ButtonV2/styles.js +217 -0
  36. package/src/components/atoms/CustomIcon/CustomIcon.stories.js +36 -0
  37. package/src/components/atoms/CustomIcon/index.js +41 -0
  38. package/src/components/atoms/CustomIcon/styles.js +85 -0
  39. package/src/components/atoms/IconFile/IconFile.stories.js +35 -0
  40. package/src/components/atoms/IconFile/index.js +119 -0
  41. package/src/components/atoms/IconFile/styles.js +67 -0
  42. package/src/components/atoms/Image/Image.stories.js +51 -0
  43. package/src/components/atoms/Image/index.js +55 -0
  44. package/src/components/atoms/Image/styles.js +34 -0
  45. package/src/components/atoms/ImageLink/ImageLink.stories.js +43 -0
  46. package/src/components/atoms/ImageLink/index.js +57 -0
  47. package/src/components/atoms/ImageLink/styles.js +30 -0
  48. package/src/components/atoms/ImagePreview/ImagePreview.stories.js +52 -0
  49. package/src/components/atoms/ImagePreview/index.js +178 -0
  50. package/src/components/atoms/ImagePreview/styles.js +77 -0
  51. package/src/components/atoms/InputText/InputText.stories.js +39 -0
  52. package/src/components/atoms/InputText/index.js +61 -0
  53. package/src/components/atoms/InputText/styles.js +89 -0
  54. package/src/components/atoms/NotFound/NotFound.stories.js +19 -0
  55. package/src/components/atoms/NotFound/index.js +52 -0
  56. package/src/components/atoms/NotFound/styles.js +55 -0
  57. package/src/components/atoms/ProgressBar/index.js +40 -5
  58. package/src/components/atoms/ProgressBar/styles.js +24 -0
  59. package/src/components/atoms/SelectItemV2/SelectItemV2.stories.js +26 -0
  60. package/src/components/atoms/SelectItemV2/index.js +61 -0
  61. package/src/components/atoms/SelectItemV2/styles.js +90 -0
  62. package/src/components/atoms/Tooltip/Tooltip.stories.js +51 -0
  63. package/src/components/atoms/Tooltip/index.js +59 -0
  64. package/src/components/atoms/Tooltip/styles.js +42 -0
  65. package/src/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +54 -0
  66. package/src/components/molecules/ButtonDownloadFile/index.js +109 -0
  67. package/src/components/molecules/ButtonDownloadFile/styles.js +66 -0
  68. package/src/components/molecules/CustomSelect/CustomSelect.stories.js +20 -12
  69. package/src/components/molecules/CustomSelect/SelectItem.js +7 -0
  70. package/src/components/molecules/Dropdown/Dropdown.stories.js +103 -0
  71. package/src/components/molecules/Dropdown/index.js +150 -0
  72. package/src/components/molecules/Dropdown/styles.js +75 -0
  73. package/src/components/molecules/GalleryElement/index.js +1 -1
  74. package/src/components/molecules/HeaderTop/index.js +17 -0
  75. package/src/components/molecules/HeaderTop/styles.js +5 -2
  76. package/src/components/molecules/ImageTooltip/ImageTooltip.stories.js +68 -0
  77. package/src/components/molecules/ImageTooltip/index.js +63 -0
  78. package/src/components/molecules/ImageTooltip/styles.js +18 -0
  79. package/src/components/molecules/ProductNameHeader/index.js +7 -2
  80. package/src/components/molecules/SelectV2/SelectV2.stories.js +115 -0
  81. package/src/components/molecules/SelectV2/index.js +357 -0
  82. package/src/components/molecules/SelectV2/styles.js +105 -0
  83. package/src/components/molecules/SelectV2/test.js +60 -0
  84. package/src/components/molecules/SelectV2/test.stories.js +10 -0
  85. package/src/components/molecules/StatusAsignationInfo/index.js +11 -9
  86. package/src/components/organisms/Chat/Chat.stories.js +149 -0
  87. package/src/components/organisms/Chat/ChatLists/ChatLists.stories.js +65 -0
  88. package/src/components/organisms/Chat/ChatLists/Rotoplas.jpeg +0 -0
  89. package/src/components/organisms/Chat/ChatLists/THD.png +0 -0
  90. package/src/components/organisms/Chat/ChatLists/index.js +141 -0
  91. package/src/components/organisms/Chat/ChatLists/styles.js +162 -0
  92. package/src/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +142 -0
  93. package/src/components/organisms/Chat/ContainerItems/index.js +522 -0
  94. package/src/components/organisms/Chat/ContainerItems/styles.js +348 -0
  95. package/src/components/organisms/Chat/ContentChat/ContentChat.stories.js +102 -0
  96. package/src/components/organisms/Chat/ContentChat/Rotoplas.jpeg +0 -0
  97. package/src/components/organisms/Chat/ContentChat/THD.png +0 -0
  98. package/src/components/organisms/Chat/ContentChat/index.js +922 -0
  99. package/src/components/organisms/Chat/ContentChat/styles.js +41 -0
  100. package/src/components/organisms/Chat/Footer/Footer.stories.js +22 -0
  101. package/src/components/organisms/Chat/Footer/index.js +661 -0
  102. package/src/components/organisms/Chat/Footer/styles.js +286 -0
  103. package/src/components/organisms/Chat/Header/Header.stories.js +66 -0
  104. package/src/components/organisms/Chat/Header/index.js +93 -0
  105. package/src/components/organisms/Chat/Header/styles.js +49 -0
  106. package/src/components/organisms/Chat/index.js +238 -0
  107. package/src/components/organisms/Chat/styles.js +42 -0
  108. package/src/components/organisms/FullProductNameHeader/index.js +1 -0
  109. package/src/components/organisms/Modal/Modal.stories.js +55 -0
  110. package/src/components/organisms/Modal/index.js +97 -0
  111. package/src/components/organisms/Modal/styles.js +103 -0
  112. package/src/components/organisms/ProductImageModal/index.js +6 -3
  113. package/src/components/organisms/RangeCalendar/RangeCalendar.stories.js +16 -0
  114. package/src/components/organisms/RangeCalendar/index.js +121 -0
  115. package/src/components/organisms/RangeCalendar/styles.js +883 -0
  116. package/src/components/pages/ProviderProductEdition/ProviderProductEdition.stories.js +239 -32
  117. package/src/components/pages/ProviderProductEdition/index.js +87 -67
  118. package/src/components/pages/RetailerProductEdition/RetailerProductEdition.stories.js +93 -52
  119. package/src/components/pages/RetailerProductEdition/index.js +23 -21
  120. package/src/components/pages/RetailerProductEdition/utils.js +2 -1
  121. package/src/global-files/data.js +18 -23
  122. package/src/global-files/fonts.css +6 -0
  123. package/src/global-files/handle_http.js +225 -0
  124. package/src/global-files/handle_userTech.js +7 -0
  125. package/src/global-files/utils.js +330 -0
  126. package/src/global-files/variables.js +2 -0
  127. package/src/index.js +17 -0
  128. package/src/assets/fonts/roboto/LICENSE.txt +0 -202
@@ -0,0 +1,522 @@
1
+ import { Container } from "./styles";
2
+ import { useEffect, useState } from "react";
3
+ import { getProfilePicture } from "../../../../global-files/data";
4
+ import { ImageTooltip } from "../../../molecules/ImageTooltip";
5
+ import {
6
+ decodeJSON,
7
+ getFullDate,
8
+ getImageURL,
9
+ getResizeImgHeight,
10
+ getTime,
11
+ } from "../../../../global-files/utils";
12
+ import {
13
+ faUser as IconUser,
14
+ faImage as IconImage,
15
+ faRedoAlt as IconReload,
16
+ } from "@fortawesome/free-solid-svg-icons";
17
+ import { CustomIcon } from "../../../atoms/CustomIcon";
18
+ import { ButtonV2 } from "../../../atoms/ButtonV2";
19
+ import { ButtonDownloadFile } from "../../../molecules/ButtonDownloadFile";
20
+ import { Modal } from "../../Modal";
21
+ import { Tooltip } from "../../../atoms/Tooltip";
22
+ import { Slide, Zoom } from "@mui/material";
23
+ import { useRef } from "react";
24
+ import { ImagePreview } from "../../../atoms/ImagePreview";
25
+ import { isUserTech } from "../../../../global-files/handle_userTech";
26
+ import { container } from "aws-amplify";
27
+
28
+ export const ContainerItems = (props) => {
29
+ const {
30
+ items /* [
31
+ { id , date , type , value , userId } ,
32
+ ...
33
+ ] */,
34
+ users /* {
35
+ id: { name , companyId } ,
36
+ ...
37
+ } */,
38
+ currentUser, // { id , companyId , ... }
39
+ activeCompanyId, // number
40
+ chatType, // string
41
+ showBtnLoadMore, // boolean
42
+ onClickBtnLoadMore, // () => {}
43
+ ticketCompany, // id de la comañía que creó el ticket
44
+ } = props;
45
+ const [scrollHeight, setScrollHeight] = useState(0);
46
+ const [btnLoadMoreLoading, setBtnLoadMoreLoading] = useState(false);
47
+ const [customItems, setCustomItems] = useState([]);
48
+ const [modalAlert, setModalAlert] = useState({
49
+ show: false,
50
+ title: "",
51
+ message: "",
52
+ });
53
+ const containerList = useRef(null);
54
+ const containerItems = useRef(null);
55
+
56
+ useEffect(() => {
57
+ if (!items) return;
58
+ if (["merchant_product", "order_product"].includes(chatType)) renderItems();
59
+ else if (chatType === "ticket") renderItemsTicket();
60
+ else setCustomItems([]);
61
+ }, [items]);
62
+
63
+ useEffect(() => {
64
+ const containerScroll = document.getElementById("ulItems");
65
+ if (customItems.length)
66
+ setTimeout(() => {
67
+ containerScroll.lastElementChild.scrollIntoView({
68
+ block: "start",
69
+ });
70
+ }, 1);
71
+ }, [customItems]);
72
+
73
+ const updateScroll = () => {
74
+ const containerScroll = document.getElementById("containerItems");
75
+ if (containerScroll) {
76
+ const newScrollHeight = containerScroll.scrollHeight + 15;
77
+ const positionScroll = newScrollHeight - scrollHeight;
78
+
79
+ if (newScrollHeight !== scrollHeight) {
80
+ containerScroll.scrollTop = positionScroll;
81
+ setScrollHeight(newScrollHeight);
82
+ }
83
+ }
84
+ };
85
+
86
+ const renderGrayLabel = (text, key) => {
87
+ return (
88
+ <Zoom
89
+ in={true}
90
+ timeout={600}
91
+ container={containerList.current}
92
+ key={key ?? ""}
93
+ >
94
+ <li className={`label-gray`}>
95
+ <div className="separator"></div>
96
+ <label>{text}</label>
97
+ <div className="separator"></div>
98
+ </li>
99
+ </Zoom>
100
+ );
101
+ };
102
+
103
+ const renderStatusService = (text, key) => {
104
+ return (
105
+ <Zoom
106
+ in={true}
107
+ timeout={600}
108
+ container={containerList.current}
109
+ key={key ?? ""}
110
+ >
111
+ <div className="label-statusService">{text}</div>
112
+ </Zoom>
113
+ );
114
+ };
115
+
116
+ const renderStatusArticle = (text, key) => {
117
+ return (
118
+ <Zoom
119
+ in={true}
120
+ timeout={600}
121
+ container={containerList.current}
122
+ key={key ?? ""}
123
+ >
124
+ <div className="label-statusArticle">{text}</div>
125
+ </Zoom>
126
+ );
127
+ };
128
+
129
+ const renderStatusTicket = (item) => {
130
+ return <label className="item-statusTicket">{item.value}</label>;
131
+ };
132
+
133
+ const renderStatusTicketNeutral = (item) => {
134
+ return (
135
+ <Tooltip
136
+ componentTooltip={<label>{users[item.userId].name}</label>}
137
+ className="itemStatus ticket"
138
+ position={"topCenter"}
139
+ addArrow={false}
140
+ transitionType={"zoom"}
141
+ followCursor={false}
142
+ >
143
+ {item.value}
144
+ </Tooltip>
145
+ );
146
+ };
147
+
148
+ const renderMessage = (item, differentCompany) => {
149
+ return (
150
+ <label
151
+ className={`item-message ${
152
+ differentCompany ? "different-company" : ""
153
+ }`}
154
+ >
155
+ {" "}
156
+ {item.value}{" "}
157
+ </label>
158
+ );
159
+ };
160
+
161
+ const renderComment = (item) => {
162
+ return <label className="item-comment"> {item.value} </label>;
163
+ };
164
+
165
+ const renderImg = (item) => {
166
+ const value = decodeJSON(item.value);
167
+ const originalImgURL = `${process.env.REACT_APP_IMAGES_ENDPOINT}/${value.key}`;
168
+ // dimensiones de la imagen a mostrar en el chat
169
+ const imgHeight = getResizeImgHeight(
170
+ value.width ?? 400,
171
+ value.height ?? 400,
172
+ 400
173
+ );
174
+ const imgURL = getImageURL(
175
+ process.env.REACT_APP_IMAGES_BUCKET,
176
+ value.key,
177
+ 400,
178
+ imgHeight
179
+ );
180
+ // dimensiones de la imagen a mostrar en modal full
181
+ const modalImgHeight = getResizeImgHeight(
182
+ value.width ?? screen.width,
183
+ value.height ?? screen.height,
184
+ screen.width
185
+ );
186
+ const modalImgURL = getImageURL(
187
+ process.env.REACT_APP_IMAGES_BUCKET,
188
+ value.key,
189
+ screen.width,
190
+ modalImgHeight
191
+ );
192
+
193
+ return (
194
+ <div className="item-img">
195
+ <ImagePreview
196
+ className="container-ImagePreview"
197
+ width={"100%"}
198
+ sizeLoading={35}
199
+ colorLoading={undefined}
200
+ imgURL={imgURL}
201
+ modalImgURL={modalImgURL}
202
+ downloadImgURL={originalImgURL}
203
+ imageName={value.name}
204
+ showButtonDownload={true}
205
+ componentDefault={
206
+ <Tooltip
207
+ componentTooltip={<label>{value.name}</label>}
208
+ className="label-nameImg"
209
+ position={"topCenter"}
210
+ addArrow={false}
211
+ transitionType={"zoom"}
212
+ followCursor={false}
213
+ >
214
+ <CustomIcon
215
+ className="iconDefaultImg"
216
+ type={"white"}
217
+ size={60}
218
+ borderType={"rectangle"}
219
+ icon={IconImage}
220
+ />
221
+ </Tooltip>
222
+ }
223
+ componentDefaultModal={
224
+ <Tooltip
225
+ componentTooltip={<label>{value.name}</label>}
226
+ className="label-nameImgModal"
227
+ position={"topCenter"}
228
+ addArrow={false}
229
+ transitionType={"zoom"}
230
+ followCursor={false}
231
+ >
232
+ <CustomIcon
233
+ className="iconDefaultImgModal"
234
+ type={"white"}
235
+ size={100}
236
+ borderType={"rectangle"}
237
+ icon={IconImage}
238
+ />
239
+ </Tooltip>
240
+ }
241
+ />
242
+ </div>
243
+ );
244
+ /*
245
+ <Tooltip
246
+ componentTooltip={<label>{value.name}</label>}
247
+ className="label-nameFileShort"
248
+ position={"topCenter"}
249
+ addArrow={false}
250
+ transitionType={"zoom"}
251
+ followCursor={false}
252
+ >
253
+ {value.name}
254
+ </Tooltip>
255
+ */
256
+ };
257
+
258
+ const renderFile = (item, ownMessage) => {
259
+ const value = decodeJSON(item.value);
260
+ const url = `${process.env.REACT_APP_IMAGES_ENDPOINT}/${value.key}`;
261
+
262
+ return (
263
+ <div className="item-file">
264
+ <ButtonDownloadFile
265
+ className="btnDownloadFileItem"
266
+ size={22}
267
+ type={ownMessage ? "black" : "white"}
268
+ transparent
269
+ url={url}
270
+ onDownload={(error) => {
271
+ error &&
272
+ setModalAlert((prev) => ({
273
+ show: true,
274
+ title: error.message,
275
+ message: error.details,
276
+ }));
277
+ }}
278
+ />
279
+ <Tooltip
280
+ componentTooltip={<label>{value.name}</label>}
281
+ className="label-nameFileShort"
282
+ position={"topCenter"}
283
+ addArrow={false}
284
+ transitionType={"zoom"}
285
+ followCursor={false}
286
+ >
287
+ {value.name}
288
+ </Tooltip>
289
+ </div>
290
+ );
291
+ };
292
+
293
+ const getUserCreatedItem = (ownMessage, item, lastUserId) => {
294
+ const differentCompany =
295
+ currentUser.companyId !== users[item.userId].companyId;
296
+ return (
297
+ <Slide
298
+ id={"itemScroll-" + item.id}
299
+ direction={ownMessage ? "left" : "right"}
300
+ in={true}
301
+ timeout={500}
302
+ container={containerList.current}
303
+ key={"item-" + item.id}
304
+ >
305
+ <li
306
+ className={
307
+ (ownMessage ? "own-message " : "") +
308
+ (lastUserId === item.userId ? "sameUser" : "")
309
+ }
310
+ >
311
+ {/* img del user */}
312
+ {item.type !== "statusTicket" && lastUserId !== item.userId && (
313
+ <ImageTooltip
314
+ className={"container-imgUser"}
315
+ sizeLoading={25}
316
+ colorLoading={undefined}
317
+ src={getProfilePicture(item.userId, 34, 34)}
318
+ componentDefault={
319
+ <CustomIcon
320
+ className="icon-imgUser"
321
+ type={"whiteS2"}
322
+ size={17}
323
+ borderType={"circle"}
324
+ icon={IconUser}
325
+ />
326
+ }
327
+ classNameTooltip={"tooltip-imgUser"}
328
+ componentTooltip={
329
+ <label className="label-nameUser">
330
+ {users[item.userId].name}
331
+ </label>
332
+ }
333
+ />
334
+ )}
335
+
336
+ {item.type === "message"
337
+ ? renderMessage(item, differentCompany)
338
+ : item.type === "comment"
339
+ ? renderComment(item)
340
+ : item.type === "img"
341
+ ? renderImg(item)
342
+ : item.type === "file"
343
+ ? renderFile(item, ownMessage)
344
+ : item.type === "statusTicket" &&
345
+ [ticketCompany, 254].includes(currentUser.companyId)
346
+ ? renderStatusTicket(item)
347
+ : null}
348
+
349
+ <label className="label-time">{getTime(item.date)}</label>
350
+ </li>
351
+ </Slide>
352
+ );
353
+ };
354
+
355
+ const getItemNeutral = (item) => {
356
+ return (
357
+ <Zoom
358
+ in={true}
359
+ timeout={600}
360
+ container={containerList.current}
361
+ key={"item-" + item.id}
362
+ >
363
+ <li className={"itemNeutral"}>
364
+ {item.type === "statusTicket"
365
+ ? renderStatusTicketNeutral(item)
366
+ : null}
367
+ </li>
368
+ </Zoom>
369
+ );
370
+ };
371
+
372
+ const renderItems = () => {
373
+ let jsxItems = [];
374
+ let date = undefined;
375
+ let countDate = 1;
376
+ for (const item of items) {
377
+ // manejo de las etiquetas fechas
378
+ if (!date) {
379
+ date = getFullDate(new Date(item.date));
380
+ jsxItems.push(renderGrayLabel(date, `itemDate-${countDate++}`));
381
+ } else {
382
+ let newDate = getFullDate(new Date(item.date));
383
+ if (newDate !== date) {
384
+ jsxItems.push(renderGrayLabel(newDate, `itemDate-${countDate++}`));
385
+ date = newDate;
386
+ }
387
+ }
388
+
389
+ // elementos que van alineados al centro
390
+ switch (item.type) {
391
+ case "statusArticle":
392
+ jsxItems.push(renderStatusArticle(item.value, `item-${item.id}`));
393
+ break;
394
+ case "statusService":
395
+ jsxItems.push(renderStatusService(item.value, `item-${item.id}`));
396
+ break;
397
+ }
398
+
399
+ // acomodo del item (left o right)
400
+ let ownMessage = false;
401
+ // CHAT MERCHANT ARTICLE
402
+ if (currentUser.id === item.userId) {
403
+ ownMessage = true;
404
+ }
405
+
406
+ // renderizar tipo de item
407
+ jsxItems.push(getUserCreatedItem(ownMessage, item));
408
+ }
409
+ setCustomItems(jsxItems);
410
+ };
411
+
412
+ const renderItemsTicket = () => {
413
+ let jsxItems = [];
414
+ let date = undefined;
415
+ let countDate = 1;
416
+ let lastUserId = undefined;
417
+
418
+ // recorrido de los items (del mas viejo al mas reciente)
419
+ for (let index = items.length - 1; index >= 0; index--) {
420
+ const item = items[index];
421
+ // manejo de las etiquetas fechas
422
+ if (!date) {
423
+ date = getFullDate(new Date(item.date));
424
+ if (item.type === "statusTicket") {
425
+ [ticketCompany, 254].includes(currentUser.companyId) &&
426
+ jsxItems.push(renderGrayLabel(date, `itemDate-${countDate++}`));
427
+ } else {
428
+ jsxItems.push(renderGrayLabel(date, `itemDate-${countDate++}`));
429
+ }
430
+ lastUserId = undefined;
431
+ } else {
432
+ let newDate = getFullDate(new Date(item.date));
433
+ if (newDate !== date) {
434
+ if (item.type === "statusTicket") {
435
+ [ticketCompany, 254].includes(currentUser.companyId) &&
436
+ jsxItems.push(renderGrayLabel(date, `itemDate-${countDate++}`));
437
+ } else {
438
+ jsxItems.push(renderGrayLabel(date, `itemDate-${countDate++}`));
439
+ }
440
+ date = newDate;
441
+ lastUserId = undefined;
442
+ }
443
+ }
444
+
445
+ // elementos que van alineados al centro
446
+ /*
447
+ switch (item.type) {
448
+ case "statusTicket":
449
+ jsxItems.push(getItemNeutral(item));
450
+ lastUserId = undefined;
451
+ continue;
452
+ }
453
+ */
454
+
455
+ // acomodo del item (left o right)
456
+ let ownMessage = false;
457
+ if (currentUser.id === item.userId) {
458
+ ownMessage = true;
459
+ }
460
+
461
+ // renderizar tipo de item
462
+ jsxItems.push(
463
+ getUserCreatedItem(ownMessage, item, lastUserId, index === 0)
464
+ );
465
+ lastUserId = item.userId;
466
+ }
467
+
468
+ setCustomItems(jsxItems);
469
+ };
470
+
471
+ return (
472
+ <>
473
+ <Container id="containerItems" ref={containerItems}>
474
+ <div className="btn-loadMore">
475
+ {showBtnLoadMore && (
476
+ <ButtonV2
477
+ className="container-btnLoadMore"
478
+ type={"purple"}
479
+ label={"cargar más"}
480
+ size={10}
481
+ borderType="oval"
482
+ icon={IconReload}
483
+ iconPosition="start"
484
+ isLoading={btnLoadMoreLoading}
485
+ onClick={async (event) => {
486
+ setBtnLoadMoreLoading(true);
487
+ if (onClickBtnLoadMore) {
488
+ const responseError = await onClickBtnLoadMore();
489
+ if (responseError) {
490
+ setModalAlert({
491
+ show: true,
492
+ title: responseError.title,
493
+ message: responseError.message,
494
+ });
495
+ }
496
+ }
497
+ setBtnLoadMoreLoading(false);
498
+ }}
499
+ />
500
+ )}
501
+ </div>
502
+
503
+ <ul id="ulItems" ref={containerList}>
504
+ {customItems}
505
+ </ul>
506
+ </Container>
507
+
508
+ <Modal
509
+ show={modalAlert.show}
510
+ title={modalAlert.title}
511
+ message={modalAlert.message}
512
+ icon={"info"}
513
+ onClickBtnDefault={(event) =>
514
+ setModalAlert((prev) => ({
515
+ ...prev,
516
+ show: false,
517
+ }))
518
+ }
519
+ />
520
+ </>
521
+ );
522
+ };