contentoh-components-library 21.2.84 → 21.2.85

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 (177) hide show
  1. package/.env.development +6 -1
  2. package/dist/assets/fonts/Roboto/Roboto-Medium.ttf +0 -0
  3. package/dist/assets/fonts/Roboto/Roboto-Regular.ttf +0 -0
  4. package/dist/assets/images/defaultImages/Spinner.gif +0 -0
  5. package/dist/assets/images/defaultImages/notFound.svg +124 -0
  6. package/dist/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +72 -0
  7. package/dist/components/atoms/ButtonFileChooser/index.js +116 -0
  8. package/dist/components/atoms/ButtonFileChooser/styles.js +20 -0
  9. package/dist/components/atoms/ButtonV2/ButtonV2.stories.js +66 -0
  10. package/dist/components/atoms/ButtonV2/index.js +109 -0
  11. package/dist/components/atoms/ButtonV2/styles.js +53 -0
  12. package/dist/components/atoms/CustomIcon/CustomIcon.stories.js +50 -0
  13. package/dist/components/atoms/CustomIcon/index.js +38 -0
  14. package/dist/components/atoms/CustomIcon/styles.js +33 -0
  15. package/dist/components/atoms/IconFile/IconFile.stories.js +48 -0
  16. package/dist/components/atoms/IconFile/index.js +251 -0
  17. package/dist/components/atoms/IconFile/styles.js +23 -0
  18. package/dist/components/atoms/Image/Image.stories.js +63 -0
  19. package/dist/components/atoms/Image/index.js +72 -0
  20. package/dist/components/atoms/Image/styles.js +40 -0
  21. package/dist/components/atoms/ImageLink/ImageLink.stories.js +63 -0
  22. package/dist/components/atoms/ImageLink/index.js +75 -0
  23. package/dist/components/atoms/ImageLink/styles.js +40 -0
  24. package/dist/components/atoms/ImagePreview/ImagePreview.stories.js +70 -0
  25. package/dist/components/atoms/ImagePreview/index.js +220 -0
  26. package/dist/components/atoms/ImagePreview/styles.js +44 -0
  27. package/dist/components/atoms/InputText/InputText.stories.js +62 -0
  28. package/dist/components/atoms/InputText/index.js +64 -0
  29. package/dist/components/atoms/InputText/styles.js +32 -0
  30. package/dist/components/atoms/NotFound/NotFound.stories.js +36 -0
  31. package/dist/components/atoms/NotFound/index.js +73 -0
  32. package/dist/components/atoms/NotFound/styles.js +20 -0
  33. package/dist/components/atoms/Tooltip/Tooltip.stories.js +36 -6
  34. package/dist/components/atoms/Tooltip/index.js +41 -26
  35. package/dist/components/atoms/Tooltip/styles.js +3 -1
  36. package/dist/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +66 -0
  37. package/dist/components/molecules/ButtonDownloadFile/index.js +179 -0
  38. package/dist/components/molecules/ButtonDownloadFile/styles.js +23 -0
  39. package/dist/components/molecules/CustomSelect/CustomSelect.stories.js +21 -22
  40. package/dist/components/molecules/CustomSelect/SelectItem.js +10 -1
  41. package/dist/components/molecules/HeaderTop/index.js +12 -5
  42. package/dist/components/molecules/HeaderTop/styles.js +1 -1
  43. package/dist/components/molecules/ImageTooltip/ImageTooltip.stories.js +72 -0
  44. package/dist/components/molecules/ImageTooltip/index.js +84 -0
  45. package/dist/components/molecules/ImageTooltip/styles.js +33 -0
  46. package/dist/components/organisms/Chat/Chat.stories.js +215 -0
  47. package/dist/components/organisms/Chat/ChatLists/ChatLists.stories.js +83 -0
  48. package/dist/components/organisms/Chat/ChatLists/index.js +158 -0
  49. package/dist/components/organisms/Chat/ChatLists/styles.js +29 -0
  50. package/dist/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +176 -0
  51. package/dist/components/organisms/Chat/ContainerItems/index.js +570 -0
  52. package/dist/components/organisms/Chat/ContainerItems/styles.js +20 -0
  53. package/dist/components/organisms/Chat/ContentChat/ContentChat.stories.js +142 -0
  54. package/dist/components/organisms/Chat/ContentChat/index.js +1422 -0
  55. package/dist/components/organisms/Chat/ContentChat/styles.js +20 -0
  56. package/dist/components/organisms/Chat/Footer/Footer.stories.js +43 -0
  57. package/dist/components/organisms/Chat/Footer/index.js +983 -0
  58. package/dist/components/organisms/Chat/Footer/styles.js +32 -0
  59. package/dist/components/organisms/Chat/Header/Header.stories.js +96 -0
  60. package/dist/components/organisms/Chat/Header/index.js +84 -0
  61. package/dist/components/organisms/Chat/Header/styles.js +20 -0
  62. package/dist/components/organisms/Chat/index.js +325 -0
  63. package/dist/components/organisms/Chat/styles.js +29 -0
  64. package/dist/components/organisms/Modal/Modal.stories.js +66 -0
  65. package/dist/components/organisms/Modal/index.js +95 -0
  66. package/dist/components/organisms/Modal/styles.js +20 -0
  67. package/dist/components/pages/Dashboard/Dashboard.stories.js +16 -44
  68. package/dist/components/pages/Dashboard/index.js +10 -17
  69. package/dist/components/pages/ProviderProductEdition/index.js +3 -2
  70. package/dist/components/pages/RetailerProductEdition/index.js +4 -7
  71. package/dist/global-files/fonts.css +18 -0
  72. package/dist/global-files/handle_http.js +383 -0
  73. package/dist/global-files/utils.js +472 -0
  74. package/dist/global-files/variables.js +3 -1
  75. package/package.json +13 -1
  76. package/src/assets/fonts/Roboto/Roboto-Medium.ttf +0 -0
  77. package/src/assets/fonts/Roboto/Roboto-Regular.ttf +0 -0
  78. package/src/assets/images/chatPopup/Spinner.gif +0 -0
  79. package/src/assets/images/chatPopup/close.svg +3 -0
  80. package/src/assets/images/chatPopup/defaultImage.png +0 -0
  81. package/src/assets/images/chatPopup/defaultProfile.png +0 -0
  82. package/src/assets/images/chatPopup/doc.svg +1 -0
  83. package/src/assets/images/chatPopup/document.svg +1 -0
  84. package/src/assets/images/chatPopup/iconChat.svg +19 -0
  85. package/src/assets/images/chatPopup/iconPlus.svg +3 -0
  86. package/src/assets/images/chatPopup/pdf.svg +75 -0
  87. package/src/assets/images/chatPopup/remove.svg +4 -0
  88. package/src/assets/images/chatPopup/send.svg +3 -0
  89. package/src/assets/images/chatPopup/svgIcon.svg +109 -0
  90. package/src/assets/images/chatPopup/upload_file.svg +3 -0
  91. package/src/assets/images/chatPopup/xls.svg +53 -0
  92. package/src/assets/images/customSelect/starIcon.svg +14 -0
  93. package/src/assets/images/defaultImages/Spinner.gif +0 -0
  94. package/src/assets/images/defaultImages/notFound.svg +124 -0
  95. package/src/components/atoms/ButtonFileChooser/ButtonFileChooser.stories.js +47 -0
  96. package/src/components/atoms/ButtonFileChooser/index.js +70 -0
  97. package/src/components/atoms/ButtonFileChooser/styles.js +4 -0
  98. package/src/components/atoms/ButtonV2/ButtonV2.stories.js +50 -0
  99. package/src/components/atoms/ButtonV2/index.js +74 -0
  100. package/src/components/atoms/ButtonV2/styles.js +187 -0
  101. package/src/components/atoms/CustomIcon/CustomIcon.stories.js +36 -0
  102. package/src/components/atoms/CustomIcon/index.js +41 -0
  103. package/src/components/atoms/CustomIcon/styles.js +85 -0
  104. package/src/components/atoms/IconFile/IconFile.stories.js +35 -0
  105. package/src/components/atoms/IconFile/index.js +120 -0
  106. package/src/components/atoms/IconFile/styles.js +67 -0
  107. package/src/components/atoms/Image/Image.stories.js +43 -0
  108. package/src/components/atoms/Image/index.js +54 -0
  109. package/src/components/atoms/Image/styles.js +25 -0
  110. package/src/components/atoms/ImageLink/ImageLink.stories.js +43 -0
  111. package/src/components/atoms/ImageLink/index.js +58 -0
  112. package/src/components/atoms/ImageLink/styles.js +30 -0
  113. package/src/components/atoms/ImagePreview/ImagePreview.stories.js +52 -0
  114. package/src/components/atoms/ImagePreview/index.js +192 -0
  115. package/src/components/atoms/ImagePreview/styles.js +77 -0
  116. package/src/components/atoms/InputText/InputText.stories.js +40 -0
  117. package/src/components/atoms/InputText/index.js +63 -0
  118. package/src/components/atoms/InputText/styles.js +89 -0
  119. package/src/components/atoms/NotFound/NotFound.stories.js +19 -0
  120. package/src/components/atoms/NotFound/index.js +53 -0
  121. package/src/components/atoms/NotFound/styles.js +55 -0
  122. package/src/components/atoms/Tooltip/Tooltip.stories.js +51 -0
  123. package/src/components/atoms/Tooltip/index.js +59 -0
  124. package/src/components/atoms/Tooltip/styles.js +42 -0
  125. package/src/components/molecules/ButtonDownloadFile/DownloadFile.stories.js +54 -0
  126. package/src/components/molecules/ButtonDownloadFile/index.js +113 -0
  127. package/src/components/molecules/ButtonDownloadFile/styles.js +66 -0
  128. package/src/components/molecules/CustomSelect/CustomSelect.stories.js +20 -12
  129. package/src/components/molecules/CustomSelect/SelectItem.js +7 -0
  130. package/src/components/molecules/HeaderTop/index.js +11 -6
  131. package/src/components/molecules/HeaderTop/styles.js +4 -0
  132. package/src/components/molecules/ImageTooltip/ImageTooltip.stories.js +46 -0
  133. package/src/components/molecules/ImageTooltip/index.js +64 -0
  134. package/src/components/molecules/ImageTooltip/styles.js +18 -0
  135. package/src/components/organisms/Chat/Chat.stories.js +199 -0
  136. package/src/components/organisms/Chat/ChatLists/ChatLists.stories.js +65 -0
  137. package/src/components/organisms/Chat/ChatLists/Rotoplas.jpeg +0 -0
  138. package/src/components/organisms/Chat/ChatLists/THD.png +0 -0
  139. package/src/components/organisms/Chat/ChatLists/index.js +141 -0
  140. package/src/components/organisms/Chat/ChatLists/styles.js +162 -0
  141. package/src/components/organisms/Chat/ContainerItems/ContainerItems.stories.js +142 -0
  142. package/src/components/organisms/Chat/ContainerItems/index.js +551 -0
  143. package/src/components/organisms/Chat/ContainerItems/styles.js +336 -0
  144. package/src/components/organisms/Chat/ContentChat/ContentChat.stories.js +102 -0
  145. package/src/components/organisms/Chat/ContentChat/Rotoplas.jpeg +0 -0
  146. package/src/components/organisms/Chat/ContentChat/THD.png +0 -0
  147. package/src/components/organisms/Chat/ContentChat/index.js +900 -0
  148. package/src/components/organisms/Chat/ContentChat/styles.js +41 -0
  149. package/src/components/organisms/Chat/Footer/Footer.stories.js +22 -0
  150. package/src/components/organisms/Chat/Footer/index.js +669 -0
  151. package/src/components/organisms/Chat/Footer/styles.js +286 -0
  152. package/src/components/organisms/Chat/Header/Header.stories.js +66 -0
  153. package/src/components/organisms/Chat/Header/index.js +94 -0
  154. package/src/components/organisms/Chat/Header/styles.js +49 -0
  155. package/src/components/organisms/Chat/index.js +295 -0
  156. package/src/components/organisms/Chat/styles.js +42 -0
  157. package/src/components/organisms/Modal/Modal.stories.js +55 -0
  158. package/src/components/organisms/Modal/index.js +97 -0
  159. package/src/components/organisms/Modal/styles.js +103 -0
  160. package/src/components/pages/Dashboard/Dashboard.stories.js +16 -47
  161. package/src/components/pages/Dashboard/index.js +4 -13
  162. package/src/components/pages/ProviderProductEdition/index.js +6 -7
  163. package/src/components/pages/RetailerProductEdition/index.js +5 -4
  164. package/src/global-files/fonts.css +18 -0
  165. package/src/global-files/handle_http.js +231 -0
  166. package/src/global-files/utils.js +300 -0
  167. package/src/global-files/variables.js +2 -0
  168. package/dist/components/atoms/ChatPopUp/ChatPopUp.stories.js +0 -28
  169. package/dist/components/atoms/ChatPopUp/index.js +0 -841
  170. package/dist/components/atoms/ChatPopUp/styles.js +0 -27
  171. package/dist/components/atoms/ChatPopUp/utils/handlersChat.js +0 -182
  172. package/dist/components/atoms/StatusTag/StatusTag.stories.js +0 -48
  173. package/dist/components/atoms/StatusTag/index.js +0 -58
  174. package/dist/components/atoms/StatusTag/styles.js +0 -20
  175. package/dist/components/pages/RegistrationLoginFirstStep/RegistrationLoginFirstStep.stories.js +0 -37
  176. package/dist/components/pages/RegistrationLoginFirstStep/index.js +0 -269
  177. package/dist/components/pages/RegistrationLoginFirstStep/styles.js +0 -20
@@ -0,0 +1,142 @@
1
+ import ContainerItems from "./index";
2
+
3
+ export default {
4
+ title: "Components/organisms/Chat/ContainerItems",
5
+ component: ContainerItems,
6
+ };
7
+
8
+ const Template = (args) => <ContainerItems {...args} />;
9
+
10
+ // items de prueba
11
+ const items = {
12
+ 1: {
13
+ date: "2022-10-13 10:10:00",
14
+ type: "message",
15
+ value: "mensaje 1 user10",
16
+ userId: 10,
17
+ },
18
+ 2: {
19
+ date: "2022-10-12 13:19:00",
20
+ type: "message",
21
+ value: "mensaje 1 user20",
22
+ userId: 20,
23
+ },
24
+ 3: {
25
+ date: "2022-10-12 12:33:00",
26
+ type: "comment",
27
+ value: "comentario 1 user20",
28
+ userId: 20,
29
+ },
30
+ 4: {
31
+ date: "2022-10-12 11:56:00",
32
+ type: "comment",
33
+ value: "comentario 1 user30",
34
+ userId: 30,
35
+ },
36
+ 5: {
37
+ date: "2022-10-12 8:41:00",
38
+ type: "statusService",
39
+ value: "La sección imágenes ha sido validada",
40
+ userId: 20,
41
+ },
42
+ 6: {
43
+ date: "2022-10-11 14:58:00",
44
+ type: "img",
45
+ value: "84300/1/chat/playa-213f791b-d890-48e1-be19-28bf5a95d517.jpeg",
46
+ userId: 10,
47
+ },
48
+ 7: {
49
+ date: "2022-10-10 16:12:00",
50
+ type: "img",
51
+ value: `84300/1/chat/21dba1da-3c60-42c4-97bd-033664808256-fb19ff57-b91c-4ef2-ba2a-d857b55fb33b.svg`,
52
+ userId: 30,
53
+ },
54
+ 8: {
55
+ date: "2022-10-10 15:55:00",
56
+ type: "statusArticle",
57
+ value: "El estatus cambio a Aprobado Coordinador",
58
+ userId: 20,
59
+ },
60
+ 9: {
61
+ date: "2022-10-10 9:15:00",
62
+ type: "comment",
63
+ value: "comentario 1 user10",
64
+ userId: 10,
65
+ },
66
+ 10: {
67
+ date: "2022-10-9 6:24:00",
68
+ type: "file",
69
+ value:
70
+ "84300/1/chat/acuse RFC-8b2eb177-5bfc-4266-9b26-4e7297880594-9e2e5853-4697-442a-8ff7-3b7a1ede0856.pdf",
71
+ userId: 10,
72
+ },
73
+ 11: {
74
+ date: "2022-10-9 4:29:00",
75
+ type: "file",
76
+ value: "84300/1/chat/noExiste.docx",
77
+ userId: 30,
78
+ },
79
+ 12: {
80
+ date: "2022-10-9 2:39:00",
81
+ type: "file",
82
+ value: "84300/1/chat/noExiste2.xlsx",
83
+ userId: 20,
84
+ },
85
+ 13: {
86
+ date: "2022-10-8 23:46:00",
87
+ type: "file",
88
+ value: "84300/1/chat/noExiste3.csv",
89
+ userId: 20,
90
+ },
91
+ 14: {
92
+ date: "2022-10-8 23:22:00",
93
+ type: "file",
94
+ value: "84300/1/chat/noExiste4.pptx",
95
+ userId: 30,
96
+ },
97
+ 15: {
98
+ date: "2022-10-8 21:01:00",
99
+ type: "file",
100
+ value: "84300/1/chat/noExiste5.zip",
101
+ userId: 10,
102
+ },
103
+ 16: {
104
+ date: "2022-10-8 20:11:00",
105
+ type: "file",
106
+ value: "84300/1/chat/noExiste6.txt",
107
+ userId: 10,
108
+ },
109
+ };
110
+
111
+ // users de prueba
112
+ const users = {
113
+ 10: { name: "Pedro Castillo", companyId: 100 },
114
+ 20: { name: "Ana Carranza", companyId: 200 },
115
+ 30: { name: "Javier Aguayo", companyId: 100 },
116
+ };
117
+
118
+ // companies de prueba multiple
119
+ const companies = {
120
+ 100: { name: "Fábrica", statusChat: "enabled" },
121
+ 200: { name: "Proveedor", statusChat: "current" },
122
+ };
123
+
124
+ export const exampleChat = Template.bind({});
125
+ exampleChat.args = {
126
+ chatData: {
127
+ items,
128
+ users,
129
+ companies,
130
+ },
131
+ currentUser: { id: 10, companyId: 100 },
132
+ };
133
+
134
+ export const emptyChat = Template.bind({});
135
+ emptyChat.args = {
136
+ chatData: {
137
+ items: [],
138
+ users: [],
139
+ companies: [],
140
+ },
141
+ currentUser: { id: 10, companyId: 100 },
142
+ };
@@ -0,0 +1,551 @@
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
+
26
+ export default function ContainerItems(props) {
27
+ const {
28
+ items /* [
29
+ { id , date , type , value , userId } ,
30
+ ...
31
+ ] */,
32
+ users /* {
33
+ id: { name , companyId } ,
34
+ ...
35
+ } */,
36
+ currentUser, // { id , companyId , ... }
37
+ activeCompanyId, // number
38
+ chatType, // string
39
+ showBtnLoadMore, // boolean
40
+ onClickBtnLoadMore, // () => {}
41
+ } = props;
42
+ const [scrollHeight, setScrollHeight] = useState(0);
43
+ const [btnLoadMoreLoading, setBtnLoadMoreLoading] = useState(false);
44
+ const [customItems, setCustomItems] = useState([]);
45
+ const [modalAlert, setModalAlert] = useState({
46
+ show: false,
47
+ title: "",
48
+ message: "",
49
+ });
50
+ const containerList = useRef(null);
51
+
52
+ /*
53
+ useEffect(() => {
54
+ //console.log("new observer");
55
+ const observer = new MutationObserver((mutationList) => {
56
+ updateScroll();
57
+ });
58
+ const itemsList = document.getElementById("ulItems");
59
+ const observerOptions = {
60
+ attributes: false,
61
+ childList: true,
62
+ subtree: false,
63
+ characterData: false,
64
+ attributeOldValue: false,
65
+ characterDataOldValue: false,
66
+ };
67
+ observer.observe(itemsList, observerOptions);
68
+
69
+ return () => {
70
+ observer.disconnect();
71
+ //console.log("remove observer");
72
+ };
73
+ }, [scrollHeight]);
74
+ */
75
+
76
+ useEffect(() => {
77
+ if (!items) return;
78
+ if (chatType === "merchant_product") renderItems();
79
+ else if (chatType === "order_product") renderItems();
80
+ else if (chatType === "ticket") renderItemsTicket();
81
+ else setCustomItems([]);
82
+ }, [items]);
83
+
84
+ const updateScroll = () => {
85
+ const containerScroll = document.getElementById("containerItems");
86
+ if (containerScroll) {
87
+ const newScrollHeight = containerScroll.scrollHeight + 15;
88
+ const positionScroll = newScrollHeight - scrollHeight;
89
+
90
+ /*
91
+ console.log("========");
92
+ console.log("old:", scrollHeight);
93
+ console.log("new:", newScrollHeight);
94
+ console.log("pos:", positionScroll);
95
+ console.log("========");
96
+ */
97
+
98
+ if (newScrollHeight !== scrollHeight) {
99
+ containerScroll.scrollTop = positionScroll;
100
+ setScrollHeight(newScrollHeight);
101
+ }
102
+ }
103
+ };
104
+
105
+ const renderGrayLabel = (text, key) => {
106
+ return (
107
+ <Zoom
108
+ in={true}
109
+ timeout={600}
110
+ container={containerList.current}
111
+ key={key ?? ""}
112
+ >
113
+ <li className={`label-gray`}>
114
+ <div className="separator"></div>
115
+ <label>{text}</label>
116
+ <div className="separator"></div>
117
+ </li>
118
+ </Zoom>
119
+ );
120
+ };
121
+
122
+ const renderStatusService = (text, key) => {
123
+ return (
124
+ <Zoom
125
+ in={true}
126
+ timeout={600}
127
+ container={containerList.current}
128
+ key={key ?? ""}
129
+ >
130
+ <div className="label-statusService">{text}</div>
131
+ </Zoom>
132
+ );
133
+ };
134
+
135
+ const renderStatusArticle = (text, key) => {
136
+ return (
137
+ <Zoom
138
+ in={true}
139
+ timeout={600}
140
+ container={containerList.current}
141
+ key={key ?? ""}
142
+ >
143
+ <div className="label-statusArticle">{text}</div>
144
+ </Zoom>
145
+ );
146
+ };
147
+
148
+ const renderStatusTicket = (item) => {
149
+ return <label className="item-statusTicket">{item.value}</label>;
150
+ };
151
+
152
+ const renderStatusTicketNeutral = (item) => {
153
+ return (
154
+ <Tooltip
155
+ componentTooltip={<label>{users[item.userId].name}</label>}
156
+ className="itemStatus ticket"
157
+ position={"topCenter"}
158
+ addArrow={false}
159
+ transitionType={"zoom"}
160
+ followCursor={false}
161
+ >
162
+ {item.value}
163
+ </Tooltip>
164
+ );
165
+ };
166
+
167
+ const renderMessage = (item) => {
168
+ return <label className="item-message"> {item.value} </label>;
169
+ };
170
+
171
+ const renderComment = (item) => {
172
+ return <label className="item-comment"> {item.value} </label>;
173
+ };
174
+
175
+ const renderImg = (item) => {
176
+ const value = decodeJSON(item.value);
177
+ const originalImgURL = `${process.env.REACT_APP_IMAGES_ENDPOINT}/${value.key}`;
178
+ // dimensiones de la imagen a mostrar en el chat
179
+ const imgHeight = getResizeImgHeight(
180
+ value.width ?? 400,
181
+ value.height ?? 400,
182
+ 400
183
+ );
184
+ //console.log("newHeight imgURL:", imgHeight);
185
+ const imgURL = getImageURL(
186
+ process.env.REACT_APP_IMAGES_BUCKET,
187
+ value.key,
188
+ 400,
189
+ imgHeight
190
+ );
191
+ // dimensiones de la imagen a mostrar en modal full
192
+ const modalImgHeight = getResizeImgHeight(
193
+ value.width ?? screen.width,
194
+ value.height ?? screen.height,
195
+ screen.width
196
+ );
197
+ //console.log("height full:", modalImgHeight);
198
+ const modalImgURL = getImageURL(
199
+ process.env.REACT_APP_IMAGES_BUCKET,
200
+ value.key,
201
+ screen.width,
202
+ modalImgHeight
203
+ );
204
+
205
+ return (
206
+ <div className="item-img">
207
+ <ImagePreview
208
+ className="container-ImagePreview"
209
+ width={"100%"}
210
+ sizeLoading={35}
211
+ colorLoading={undefined}
212
+ imgURL={imgURL}
213
+ modalImgURL={modalImgURL}
214
+ downloadImgURL={originalImgURL}
215
+ imageName={value.name}
216
+ showButtonDownload={true}
217
+ componentDefault={
218
+ <Tooltip
219
+ componentTooltip={<label>{value.name}</label>}
220
+ className="label-nameImg"
221
+ position={"topCenter"}
222
+ addArrow={false}
223
+ transitionType={"zoom"}
224
+ followCursor={false}
225
+ >
226
+ <CustomIcon
227
+ className="iconDefaultImg"
228
+ type={"white"}
229
+ size={60}
230
+ borderType={"rectangle"}
231
+ icon={IconImage}
232
+ />
233
+ </Tooltip>
234
+ }
235
+ componentDefaultModal={
236
+ <Tooltip
237
+ componentTooltip={<label>{value.name}</label>}
238
+ className="label-nameImgModal"
239
+ position={"topCenter"}
240
+ addArrow={false}
241
+ transitionType={"zoom"}
242
+ followCursor={false}
243
+ >
244
+ <CustomIcon
245
+ className="iconDefaultImgModal"
246
+ type={"white"}
247
+ size={100}
248
+ borderType={"rectangle"}
249
+ icon={IconImage}
250
+ />
251
+ </Tooltip>
252
+ }
253
+ />
254
+ </div>
255
+ );
256
+ /*
257
+ <Tooltip
258
+ componentTooltip={<label>{value.name}</label>}
259
+ className="label-nameFileShort"
260
+ position={"topCenter"}
261
+ addArrow={false}
262
+ transitionType={"zoom"}
263
+ followCursor={false}
264
+ >
265
+ {value.name}
266
+ </Tooltip>
267
+ */
268
+ };
269
+
270
+ const renderFile = (item, ownMessage) => {
271
+ const value = decodeJSON(item.value);
272
+ const url = `${process.env.REACT_APP_IMAGES_ENDPOINT}/${value.key}`;
273
+
274
+ return (
275
+ <div className="item-file">
276
+ <ButtonDownloadFile
277
+ className="btnDownloadFileItem"
278
+ size={22}
279
+ type={ownMessage ? "black" : "white"}
280
+ transparent
281
+ url={url}
282
+ onDownload={(error) => {
283
+ error &&
284
+ setModalAlert((prev) => ({
285
+ show: true,
286
+ title: error.message,
287
+ message: error.details,
288
+ }));
289
+ }}
290
+ />
291
+ <Tooltip
292
+ componentTooltip={<label>{value.name}</label>}
293
+ className="label-nameFileShort"
294
+ position={"topCenter"}
295
+ addArrow={false}
296
+ transitionType={"zoom"}
297
+ followCursor={false}
298
+ >
299
+ {value.name}
300
+ </Tooltip>
301
+ </div>
302
+ );
303
+ };
304
+
305
+ const getUserCreatedItem = (ownMessage, item, lastUserId) => {
306
+ return (
307
+ <Slide
308
+ id={"itemScroll"}
309
+ direction={ownMessage ? "left" : "right"}
310
+ in={true}
311
+ timeout={500}
312
+ container={containerList.current}
313
+ key={"item-" + item.id}
314
+ >
315
+ <li
316
+ className={
317
+ (ownMessage ? "own-message " : "") +
318
+ (lastUserId == item.userId ? "sameUser" : "")
319
+ }
320
+ >
321
+ {/* img del user */}
322
+ {lastUserId !== item.userId && (
323
+ <ImageTooltip
324
+ className={"container-imgUser"}
325
+ sizeLoading={25}
326
+ colorLoading={undefined}
327
+ src={getProfilePicture(item.userId, 34, 34)}
328
+ componentDefault={
329
+ <CustomIcon
330
+ className="icon-imgUser"
331
+ type={"whiteS2"}
332
+ size={17}
333
+ borderType={"circle"}
334
+ icon={IconUser}
335
+ />
336
+ }
337
+ classNameTooltip={"tooltip-imgUser"}
338
+ componentTooltip={
339
+ <div className="container">
340
+ <label className="label-nameUser">
341
+ {users[item.userId].name}
342
+ </label>
343
+ </div>
344
+ }
345
+ />
346
+ )}
347
+
348
+ {item.type === "message"
349
+ ? renderMessage(item)
350
+ : item.type === "comment"
351
+ ? renderComment(item)
352
+ : item.type === "img"
353
+ ? renderImg(item)
354
+ : item.type === "file"
355
+ ? renderFile(item, ownMessage)
356
+ : item.type === "statusTicket"
357
+ ? renderStatusTicket(item)
358
+ : null}
359
+
360
+ <label className="label-time">{getTime(item.date)}</label>
361
+ </li>
362
+ </Slide>
363
+ );
364
+ };
365
+
366
+ const getItemNeutral = (item) => {
367
+ return (
368
+ <Zoom
369
+ in={true}
370
+ timeout={600}
371
+ container={containerList.current}
372
+ key={"item-" + item.id}
373
+ >
374
+ <li className={"itemNeutral"}>
375
+ {item.type === "statusTicket"
376
+ ? renderStatusTicketNeutral(item)
377
+ : null}
378
+ </li>
379
+ </Zoom>
380
+ );
381
+ };
382
+
383
+ const renderItems = () => {
384
+ let jsxItems = [];
385
+ let date = undefined;
386
+ let countDate = 1;
387
+ for (const item of items) {
388
+ // manejo de las etiquetas fechas
389
+ if (!date) {
390
+ date = getFullDate(new Date(item.date));
391
+ } else {
392
+ let newDate = getFullDate(new Date(item.date));
393
+ if (newDate !== date) {
394
+ jsxItems.push(renderGrayLabel(date, `itemDate-${countDate++}`));
395
+ date = newDate;
396
+ }
397
+ }
398
+
399
+ // elementos que van alineados al centro
400
+ switch (item.type) {
401
+ case "statusArticle":
402
+ jsxItems.push(renderStatusArticle(item.value, `item-${item.id}`));
403
+ continue;
404
+ case "statusService":
405
+ jsxItems.push(renderStatusService(item.value, `item-${item.id}`));
406
+ continue;
407
+ }
408
+
409
+ // acomodo del item (left o right)
410
+ let ownMessage = false;
411
+ // CHAT MERCHANT ARTICLE
412
+ if (chatType === "merchant_product") {
413
+ if (currentUser.companyId == users[item.userId].companyId) {
414
+ ownMessage = true;
415
+ }
416
+ }
417
+ // CHAT ORDER ARTICLE
418
+ else if (chatType === "order_product") {
419
+ if (currentUser.companyId == users[item.userId].companyId) {
420
+ if (activeCompanyId && activeCompanyId == currentUser.companyId) {
421
+ if (item.userId == currentUser.id) {
422
+ ownMessage = true;
423
+ }
424
+ } else {
425
+ ownMessage = true;
426
+ }
427
+ }
428
+ }
429
+
430
+ // renderizar tipo de item
431
+ jsxItems.push(getUserCreatedItem(ownMessage, item));
432
+ }
433
+ if (date)
434
+ jsxItems.push(
435
+ renderGrayLabel(date, `itemDate-${countDate}`, "label-date")
436
+ );
437
+ setCustomItems(jsxItems);
438
+ };
439
+
440
+ const renderItemsTicket = () => {
441
+ let jsxItems = [];
442
+ let date = undefined;
443
+ let countDate = 1;
444
+ let lastUserId = undefined;
445
+ //console.log("isUserTech:", currentUser.isUserTech);
446
+
447
+ // recorrido de los items (del mas viejo al mas reciente)
448
+ for (let index = items.length - 1; index >= 0; index--) {
449
+ const item = items[index];
450
+ // manejo de las etiquetas fechas
451
+ if (!date) {
452
+ date = getFullDate(new Date(item.date));
453
+ jsxItems.push(renderGrayLabel(date, `itemDate-${countDate++}`));
454
+ lastUserId = undefined;
455
+ } else {
456
+ let newDate = getFullDate(new Date(item.date));
457
+ if (newDate !== date) {
458
+ jsxItems.push(renderGrayLabel(newDate, `itemDate-${countDate++}`));
459
+ date = newDate;
460
+ lastUserId = undefined;
461
+ }
462
+ }
463
+
464
+ // elementos que van alineados al centro
465
+ /*
466
+ switch (item.type) {
467
+ case "statusTicket":
468
+ jsxItems.push(getItemNeutral(item));
469
+ lastUserId = undefined;
470
+ continue;
471
+ }
472
+ */
473
+
474
+ // acomodo del item (left o right)
475
+ let ownMessage = false;
476
+ // user tech
477
+ if (currentUser.isUserTech) {
478
+ if (users[item.userId].isUserTech) ownMessage = true;
479
+ }
480
+ // user normal
481
+ else {
482
+ if (!users[item.userId].isUserTech) {
483
+ if (currentUser.companyId == users[item.userId].companyId) {
484
+ ownMessage = true;
485
+ }
486
+ } else if (currentUser.id == item.userId) {
487
+ ownMessage = true;
488
+ }
489
+ }
490
+
491
+ // renderizar tipo de item
492
+ //console.log(lastUserId + "<>" + item.userId);
493
+ jsxItems.push(getUserCreatedItem(ownMessage, item, lastUserId));
494
+ lastUserId = item.userId;
495
+ }
496
+
497
+ setCustomItems(jsxItems);
498
+ };
499
+
500
+ return (
501
+ <>
502
+ <Container id={"containerItems"}>
503
+ <div className="btn-loadMore">
504
+ {showBtnLoadMore && (
505
+ <ButtonV2
506
+ className="container-btnLoadMore"
507
+ type={"purple"}
508
+ label={"cargar más"}
509
+ size={10}
510
+ borderType="oval"
511
+ icon={IconReload}
512
+ iconPosition="start"
513
+ isLoading={btnLoadMoreLoading}
514
+ onClick={async (event) => {
515
+ setBtnLoadMoreLoading(true);
516
+ if (onClickBtnLoadMore) {
517
+ const responseError = await onClickBtnLoadMore();
518
+ if (responseError) {
519
+ setModalAlert({
520
+ show: true,
521
+ title: responseError.title,
522
+ message: responseError.message,
523
+ });
524
+ }
525
+ }
526
+ setBtnLoadMoreLoading(false);
527
+ }}
528
+ />
529
+ )}
530
+ </div>
531
+
532
+ <ul id="ulItems" ref={containerList}>
533
+ {customItems}
534
+ </ul>
535
+ </Container>
536
+
537
+ <Modal
538
+ show={modalAlert.show}
539
+ title={modalAlert.title}
540
+ message={modalAlert.message}
541
+ icon={"info"}
542
+ onClickBtnDefault={(event) =>
543
+ setModalAlert((prev) => ({
544
+ ...prev,
545
+ show: false,
546
+ }))
547
+ }
548
+ />
549
+ </>
550
+ );
551
+ }