agx-chat-web 1.2.1 → 1.2.2

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 (204) hide show
  1. package/README.md +49 -49
  2. package/package.json +91 -91
  3. package/src/__tests__/app/Messenger/classes/slaCalculations.spec.ts +122 -122
  4. package/src/app/ChatProvider/ChatProvider.tsx +20 -20
  5. package/src/app/Messenger/classes/slaCalculations.ts +197 -197
  6. package/src/app/Messenger/components/ChatButton/ChatButton.tsx +64 -64
  7. package/src/app/Messenger/components/ChatTabs/ChatTabs.less +18 -18
  8. package/src/app/Messenger/components/ChatTabs/ChatTabs.tsx +32 -32
  9. package/src/app/Messenger/components/DocMessage/DocMessage.less +71 -71
  10. package/src/app/Messenger/components/DocMessage/DocMessage.tsx +50 -50
  11. package/src/app/Messenger/components/ImagesContainer/ImagesContainer.less +79 -79
  12. package/src/app/Messenger/components/ImagesContainer/ImagesContainer.tsx +51 -51
  13. package/src/app/Messenger/components/IncomingMessage/IncomingMessage.tsx +170 -170
  14. package/src/app/Messenger/components/InfiniteScroll/InfiniteScroll.tsx +80 -80
  15. package/src/app/Messenger/components/InputFile/InputFile.tsx +147 -147
  16. package/src/app/Messenger/components/InputFile/inputFile.less +59 -59
  17. package/src/app/Messenger/components/MessageBallon/MessageBalloon.tsx +100 -100
  18. package/src/app/Messenger/components/MessengerAvatar/MessengerAvatar.tsx +29 -29
  19. package/src/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.tsx +62 -62
  20. package/src/app/Messenger/components/RenderFileIcon/RenderFileIcon.tsx +40 -40
  21. package/src/app/Messenger/components/SearchInput/SearchInput.less +45 -45
  22. package/src/app/Messenger/components/SearchInput/SearchInput.tsx +77 -77
  23. package/src/app/Messenger/components/Select/Select.less +22 -22
  24. package/src/app/Messenger/components/Select/Select.tsx +56 -56
  25. package/src/app/Messenger/components/SendMessageForm/SendMessageForm.tsx +254 -254
  26. package/src/app/Messenger/components/SenderMessages/SenderMessages.tsx +91 -91
  27. package/src/app/Messenger/components/SystemMessage/SystemMessage.tsx +25 -25
  28. package/src/app/Messenger/components/TextArea/TextArea.tsx +35 -35
  29. package/src/app/Messenger/components/TextArea/Textarea.less +22 -22
  30. package/src/app/Messenger/components/Tooltip/Tooltip.less +27 -27
  31. package/src/app/Messenger/components/Tooltip/Tooltip.tsx +17 -17
  32. package/src/app/Messenger/hooks/useConversations.tsx +143 -143
  33. package/src/app/Messenger/hooks/useMessages.tsx +49 -49
  34. package/src/app/Messenger/hooks/useThemes.tsx +14 -14
  35. package/src/app/Messenger/icons/AttachFileIcon.tsx +20 -20
  36. package/src/app/Messenger/icons/CSVFileIcon.tsx +26 -26
  37. package/src/app/Messenger/icons/CloseIcon.tsx +20 -20
  38. package/src/app/Messenger/icons/DOCFileIcon.tsx +54 -54
  39. package/src/app/Messenger/icons/DownloadMinimalistIcon.tsx +37 -37
  40. package/src/app/Messenger/icons/EmptyIcon.tsx +20 -20
  41. package/src/app/Messenger/icons/MP4FileIcon.tsx +26 -26
  42. package/src/app/Messenger/icons/MessageIcon.tsx +27 -27
  43. package/src/app/Messenger/icons/PDFFileIcon.tsx +54 -54
  44. package/src/app/Messenger/icons/ReadIcon.tsx +18 -18
  45. package/src/app/Messenger/icons/SearchIcon.tsx +20 -20
  46. package/src/app/Messenger/icons/TimerIcon.tsx +18 -18
  47. package/src/app/Messenger/icons/TrashIcon.tsx +21 -21
  48. package/src/app/Messenger/views/Messenger.less +623 -623
  49. package/src/app/Messenger/views/MessengerList.tsx +170 -170
  50. package/src/app/Messenger/views/MessengerListItem.tsx +178 -178
  51. package/src/app/Messenger/views/MessengerMessages.tsx +414 -414
  52. package/src/app/Messenger/views/NewFormChat.tsx +145 -145
  53. package/src/app/i18n/index.ts +36 -36
  54. package/src/app/i18n/locales/en.json +64 -64
  55. package/src/app/i18n/locales/pt.json +64 -64
  56. package/src/assets/right-arrow.svg +9 -9
  57. package/src/index.ts +23 -23
  58. package/src/react-app-env.d.ts +19 -19
  59. package/src/setupTests.ts +5 -5
  60. package/src/styles/abstracts/animations.less +8 -8
  61. package/src/styles/abstracts/mixins.less +5 -5
  62. package/src/styles/abstracts/variables.less +31 -31
  63. package/src/styles/base/base.less +6 -6
  64. package/src/styles/index.less +5 -5
  65. package/src/types.ts +174 -174
  66. package/dist/agx-chat.esm.js +0 -2
  67. package/dist/agx-chat.esm.js.map +0 -1
  68. package/dist/agx-chat.umd.js +0 -2
  69. package/dist/agx-chat.umd.js.map +0 -1
  70. package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.d.ts +0 -1
  71. package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.js +0 -46
  72. package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.js.map +0 -1
  73. package/dist/esm/app/ChatProvider/ChatProvider.d.ts +0 -7
  74. package/dist/esm/app/ChatProvider/ChatProvider.js +0 -14
  75. package/dist/esm/app/ChatProvider/ChatProvider.js.map +0 -1
  76. package/dist/esm/app/Messenger/classes/slaCalculations.d.ts +0 -30
  77. package/dist/esm/app/Messenger/classes/slaCalculations.js +0 -144
  78. package/dist/esm/app/Messenger/classes/slaCalculations.js.map +0 -1
  79. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.d.ts +0 -14
  80. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js +0 -31
  81. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js.map +0 -1
  82. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.d.ts +0 -10
  83. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js +0 -15
  84. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js.map +0 -1
  85. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.d.ts +0 -5
  86. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js +0 -35
  87. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js.map +0 -1
  88. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.d.ts +0 -4
  89. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js +0 -39
  90. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js.map +0 -1
  91. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.d.ts +0 -7
  92. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js +0 -53
  93. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js.map +0 -1
  94. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.d.ts +0 -13
  95. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js +0 -43
  96. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js.map +0 -1
  97. package/dist/esm/app/Messenger/components/InputFile/InputFile.d.ts +0 -11
  98. package/dist/esm/app/Messenger/components/InputFile/InputFile.js +0 -74
  99. package/dist/esm/app/Messenger/components/InputFile/InputFile.js.map +0 -1
  100. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.d.ts +0 -9
  101. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js +0 -34
  102. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js.map +0 -1
  103. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.d.ts +0 -4
  104. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js +0 -13
  105. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js.map +0 -1
  106. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.d.ts +0 -41
  107. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js +0 -40
  108. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js.map +0 -1
  109. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.d.ts +0 -6
  110. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js +0 -29
  111. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js.map +0 -1
  112. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.d.ts +0 -11
  113. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js +0 -33
  114. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js.map +0 -1
  115. package/dist/esm/app/Messenger/components/Select/Select.d.ts +0 -14
  116. package/dist/esm/app/Messenger/components/Select/Select.js +0 -16
  117. package/dist/esm/app/Messenger/components/Select/Select.js.map +0 -1
  118. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.d.ts +0 -13
  119. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js +0 -143
  120. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js.map +0 -1
  121. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.d.ts +0 -4
  122. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js +0 -43
  123. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js.map +0 -1
  124. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.d.ts +0 -4
  125. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js +0 -14
  126. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js.map +0 -1
  127. package/dist/esm/app/Messenger/components/TextArea/TextArea.d.ts +0 -9
  128. package/dist/esm/app/Messenger/components/TextArea/TextArea.js +0 -14
  129. package/dist/esm/app/Messenger/components/TextArea/TextArea.js.map +0 -1
  130. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.d.ts +0 -7
  131. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js +0 -9
  132. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js.map +0 -1
  133. package/dist/esm/app/Messenger/hooks/useConversations.d.ts +0 -21
  134. package/dist/esm/app/Messenger/hooks/useConversations.js +0 -105
  135. package/dist/esm/app/Messenger/hooks/useConversations.js.map +0 -1
  136. package/dist/esm/app/Messenger/hooks/useMessages.d.ts +0 -9
  137. package/dist/esm/app/Messenger/hooks/useMessages.js +0 -37
  138. package/dist/esm/app/Messenger/hooks/useMessages.js.map +0 -1
  139. package/dist/esm/app/Messenger/hooks/useThemes.d.ts +0 -32
  140. package/dist/esm/app/Messenger/hooks/useThemes.js +0 -11
  141. package/dist/esm/app/Messenger/hooks/useThemes.js.map +0 -1
  142. package/dist/esm/app/Messenger/icons/AttachFileIcon.d.ts +0 -4
  143. package/dist/esm/app/Messenger/icons/AttachFileIcon.js +0 -10
  144. package/dist/esm/app/Messenger/icons/AttachFileIcon.js.map +0 -1
  145. package/dist/esm/app/Messenger/icons/CSVFileIcon.d.ts +0 -4
  146. package/dist/esm/app/Messenger/icons/CSVFileIcon.js +0 -7
  147. package/dist/esm/app/Messenger/icons/CSVFileIcon.js.map +0 -1
  148. package/dist/esm/app/Messenger/icons/CloseIcon.d.ts +0 -2
  149. package/dist/esm/app/Messenger/icons/CloseIcon.js +0 -9
  150. package/dist/esm/app/Messenger/icons/CloseIcon.js.map +0 -1
  151. package/dist/esm/app/Messenger/icons/DOCFileIcon.d.ts +0 -4
  152. package/dist/esm/app/Messenger/icons/DOCFileIcon.js +0 -18
  153. package/dist/esm/app/Messenger/icons/DOCFileIcon.js.map +0 -1
  154. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.d.ts +0 -7
  155. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js +0 -12
  156. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js.map +0 -1
  157. package/dist/esm/app/Messenger/icons/EmptyIcon.d.ts +0 -2
  158. package/dist/esm/app/Messenger/icons/EmptyIcon.js +0 -8
  159. package/dist/esm/app/Messenger/icons/EmptyIcon.js.map +0 -1
  160. package/dist/esm/app/Messenger/icons/MP4FileIcon.d.ts +0 -4
  161. package/dist/esm/app/Messenger/icons/MP4FileIcon.js +0 -7
  162. package/dist/esm/app/Messenger/icons/MP4FileIcon.js.map +0 -1
  163. package/dist/esm/app/Messenger/icons/MessageIcon.d.ts +0 -6
  164. package/dist/esm/app/Messenger/icons/MessageIcon.js +0 -12
  165. package/dist/esm/app/Messenger/icons/MessageIcon.js.map +0 -1
  166. package/dist/esm/app/Messenger/icons/PDFFileIcon.d.ts +0 -4
  167. package/dist/esm/app/Messenger/icons/PDFFileIcon.js +0 -18
  168. package/dist/esm/app/Messenger/icons/PDFFileIcon.js.map +0 -1
  169. package/dist/esm/app/Messenger/icons/ReadIcon.d.ts +0 -4
  170. package/dist/esm/app/Messenger/icons/ReadIcon.js +0 -7
  171. package/dist/esm/app/Messenger/icons/ReadIcon.js.map +0 -1
  172. package/dist/esm/app/Messenger/icons/SearchIcon.d.ts +0 -2
  173. package/dist/esm/app/Messenger/icons/SearchIcon.js +0 -8
  174. package/dist/esm/app/Messenger/icons/SearchIcon.js.map +0 -1
  175. package/dist/esm/app/Messenger/icons/TimerIcon.d.ts +0 -4
  176. package/dist/esm/app/Messenger/icons/TimerIcon.js +0 -7
  177. package/dist/esm/app/Messenger/icons/TimerIcon.js.map +0 -1
  178. package/dist/esm/app/Messenger/icons/TrashIcon.d.ts +0 -6
  179. package/dist/esm/app/Messenger/icons/TrashIcon.js +0 -7
  180. package/dist/esm/app/Messenger/icons/TrashIcon.js.map +0 -1
  181. package/dist/esm/app/Messenger/views/MessengerList.d.ts +0 -40
  182. package/dist/esm/app/Messenger/views/MessengerList.js +0 -46
  183. package/dist/esm/app/Messenger/views/MessengerList.js.map +0 -1
  184. package/dist/esm/app/Messenger/views/MessengerListItem.d.ts +0 -12
  185. package/dist/esm/app/Messenger/views/MessengerListItem.js +0 -99
  186. package/dist/esm/app/Messenger/views/MessengerListItem.js.map +0 -1
  187. package/dist/esm/app/Messenger/views/MessengerMessages.d.ts +0 -35
  188. package/dist/esm/app/Messenger/views/MessengerMessages.js +0 -181
  189. package/dist/esm/app/Messenger/views/MessengerMessages.js.map +0 -1
  190. package/dist/esm/app/Messenger/views/NewFormChat.d.ts +0 -13
  191. package/dist/esm/app/Messenger/views/NewFormChat.js +0 -68
  192. package/dist/esm/app/Messenger/views/NewFormChat.js.map +0 -1
  193. package/dist/esm/app/i18n/index.d.ts +0 -3
  194. package/dist/esm/app/i18n/index.js +0 -32
  195. package/dist/esm/app/i18n/index.js.map +0 -1
  196. package/dist/esm/index.d.ts +0 -11
  197. package/dist/esm/index.js +0 -12
  198. package/dist/esm/index.js.map +0 -1
  199. package/dist/esm/setupTests.d.ts +0 -1
  200. package/dist/esm/setupTests.js +0 -6
  201. package/dist/esm/setupTests.js.map +0 -1
  202. package/dist/esm/types.d.ts +0 -140
  203. package/dist/esm/types.js +0 -2
  204. package/dist/esm/types.js.map +0 -1
@@ -1,170 +1,170 @@
1
- import useTheme from '../../hooks/useThemes'
2
- import React, { useCallback, useState } from 'react'
3
- import { Iimages, IInconmingMessage } from 'types'
4
- import MessengerAvatar from '../MessengerAvatar/MessengerAvatar'
5
- import ReactSimpleImageViewer from '../../../../../node_modules/react-simple-image-viewer'
6
- import DocMessage from '../DocMessage/DocMessage'
7
- import { useTranslation } from 'react-i18next'
8
-
9
- interface IMessagesWithFile {
10
- file:
11
- | Iimages
12
- | {
13
- contentType: string
14
- location: string
15
- mimetype: string
16
- originalname: string
17
- size?: number
18
- pages?: number
19
- key?: string
20
- }
21
- | undefined
22
- message: string
23
- date: string
24
- openImageViewer: (index: number) => void
25
- id: string
26
- formatDate: (date: string | Date) => string | undefined
27
- currentImage: number
28
- }
29
-
30
- export const MessageImage = ({ ...rest }) => {
31
- const { t } = useTranslation('messengerMessages')
32
- return (
33
- <div className='messenger__message--file'>
34
- <img
35
- {...rest}
36
- width={200}
37
- height={200}
38
- alt={t('incommingMessage.messageImage')}
39
- />
40
- </div>
41
- )
42
- }
43
-
44
- const MessageWithFile = ({
45
- file,
46
- message,
47
- date,
48
- openImageViewer,
49
- id,
50
- formatDate,
51
- currentImage,
52
- }: IMessagesWithFile) => {
53
- const isImage = (
54
- file:
55
- | {
56
- contentType: string
57
- location: string
58
- mimetype: string
59
- originalname: string
60
- size?: number
61
- pages?: number
62
- key?: string
63
- }
64
- | Iimages
65
- | undefined
66
- ): file is Iimages => {
67
- if (!file) return false
68
- if (['image/png', 'image/jpeg'].includes(file?.mimetype ?? '')) {
69
- return true
70
- }
71
- return false
72
- }
73
-
74
- return (
75
- <>
76
- {isImage(file) ? (
77
- <MessageImage
78
- src={file?.location}
79
- onClick={() => openImageViewer(currentImage)}
80
- />
81
- ) : (
82
- file && (
83
- <DocMessage
84
- file={file}
85
- message={message}
86
- date={date}
87
- read={false}
88
- id={id}
89
- formatDate={formatDate}
90
- />
91
- )
92
- )}
93
- </>
94
- )
95
- }
96
-
97
- function IncomingMessage ({
98
- date,
99
- message,
100
- user,
101
- hasFile,
102
- file,
103
- isSystemMessage,
104
- formatDate,
105
- id,
106
- }: IInconmingMessage) {
107
- const { theme } = useTheme()
108
- const [currentImage, setCurrentImage] = useState(0)
109
- const [isViewerOpen, setIsViewerOpen] = useState(false)
110
-
111
- const openImageViewer = useCallback((index: number) => {
112
- setCurrentImage(index)
113
- setIsViewerOpen(true)
114
- }, [])
115
-
116
- const closeImageViewer = () => {
117
- setCurrentImage(0)
118
- setIsViewerOpen(false)
119
- }
120
-
121
- return (
122
- <div className='messenger__messages-row--received' id={id}>
123
- {(user.avatar || user.name) && !isSystemMessage && (
124
- <div className='messenger__message-avatar mr-2'>
125
- <MessengerAvatar image={user.avatar}>
126
- {user.name.slice(0, 1)}
127
- </MessengerAvatar>
128
- </div>
129
- )}
130
-
131
- <div
132
- className='messenger__messages-received'
133
- style={{ background: theme?.messengerIncomerColor }}
134
- >
135
- {!isSystemMessage && (
136
- <p className='messenger__message-title'>{user.name}</p>
137
- )}
138
-
139
- <span>
140
- {hasFile && (
141
- <MessageWithFile
142
- file={file}
143
- message={message}
144
- date={date}
145
- openImageViewer={openImageViewer}
146
- id={id}
147
- formatDate={formatDate}
148
- currentImage={currentImage}
149
- />
150
- )}
151
- {message && <p className='messenger__message'>{message}</p>}
152
- <p className='messenger__message--date'>
153
- {formatDate(date) ?? new Date(date).toLocaleString()}
154
- </p>
155
- </span>
156
- </div>
157
- {file && isViewerOpen && (
158
- <ReactSimpleImageViewer
159
- src={[file.location]}
160
- currentIndex={0}
161
- disableScroll={false}
162
- closeOnClickOutside={true}
163
- onClose={closeImageViewer}
164
- />
165
- )}
166
- </div>
167
- )
168
- }
169
-
170
- export default IncomingMessage
1
+ import useTheme from '../../hooks/useThemes'
2
+ import React, { useCallback, useState } from 'react'
3
+ import { Iimages, IInconmingMessage } from 'types'
4
+ import MessengerAvatar from '../MessengerAvatar/MessengerAvatar'
5
+ import ReactSimpleImageViewer from '../../../../../node_modules/react-simple-image-viewer'
6
+ import DocMessage from '../DocMessage/DocMessage'
7
+ import { useTranslation } from 'react-i18next'
8
+
9
+ interface IMessagesWithFile {
10
+ file:
11
+ | Iimages
12
+ | {
13
+ contentType: string
14
+ location: string
15
+ mimetype: string
16
+ originalname: string
17
+ size?: number
18
+ pages?: number
19
+ key?: string
20
+ }
21
+ | undefined
22
+ message: string
23
+ date: string
24
+ openImageViewer: (index: number) => void
25
+ id: string
26
+ formatDate: (date: string | Date) => string | undefined
27
+ currentImage: number
28
+ }
29
+
30
+ export const MessageImage = ({ ...rest }) => {
31
+ const { t } = useTranslation('messengerMessages')
32
+ return (
33
+ <div className='messenger__message--file'>
34
+ <img
35
+ {...rest}
36
+ width={200}
37
+ height={200}
38
+ alt={t('incommingMessage.messageImage')}
39
+ />
40
+ </div>
41
+ )
42
+ }
43
+
44
+ const MessageWithFile = ({
45
+ file,
46
+ message,
47
+ date,
48
+ openImageViewer,
49
+ id,
50
+ formatDate,
51
+ currentImage,
52
+ }: IMessagesWithFile) => {
53
+ const isImage = (
54
+ file:
55
+ | {
56
+ contentType: string
57
+ location: string
58
+ mimetype: string
59
+ originalname: string
60
+ size?: number
61
+ pages?: number
62
+ key?: string
63
+ }
64
+ | Iimages
65
+ | undefined
66
+ ): file is Iimages => {
67
+ if (!file) return false
68
+ if (['image/png', 'image/jpeg'].includes(file?.mimetype ?? '')) {
69
+ return true
70
+ }
71
+ return false
72
+ }
73
+
74
+ return (
75
+ <>
76
+ {isImage(file) ? (
77
+ <MessageImage
78
+ src={file?.location}
79
+ onClick={() => openImageViewer(currentImage)}
80
+ />
81
+ ) : (
82
+ file && (
83
+ <DocMessage
84
+ file={file}
85
+ message={message}
86
+ date={date}
87
+ read={false}
88
+ id={id}
89
+ formatDate={formatDate}
90
+ />
91
+ )
92
+ )}
93
+ </>
94
+ )
95
+ }
96
+
97
+ function IncomingMessage ({
98
+ date,
99
+ message,
100
+ user,
101
+ hasFile,
102
+ file,
103
+ isSystemMessage,
104
+ formatDate,
105
+ id,
106
+ }: IInconmingMessage) {
107
+ const { theme } = useTheme()
108
+ const [currentImage, setCurrentImage] = useState(0)
109
+ const [isViewerOpen, setIsViewerOpen] = useState(false)
110
+
111
+ const openImageViewer = useCallback((index: number) => {
112
+ setCurrentImage(index)
113
+ setIsViewerOpen(true)
114
+ }, [])
115
+
116
+ const closeImageViewer = () => {
117
+ setCurrentImage(0)
118
+ setIsViewerOpen(false)
119
+ }
120
+
121
+ return (
122
+ <div className='messenger__messages-row--received' id={id}>
123
+ {(user.avatar || user.name) && !isSystemMessage && (
124
+ <div className='messenger__message-avatar mr-2'>
125
+ <MessengerAvatar image={user.avatar}>
126
+ {user.name.slice(0, 1)}
127
+ </MessengerAvatar>
128
+ </div>
129
+ )}
130
+
131
+ <div
132
+ className='messenger__messages-received'
133
+ style={{ background: theme?.messengerIncomerColor }}
134
+ >
135
+ {!isSystemMessage && (
136
+ <p className='messenger__message-title'>{user.name}</p>
137
+ )}
138
+
139
+ <span>
140
+ {hasFile && (
141
+ <MessageWithFile
142
+ file={file}
143
+ message={message}
144
+ date={date}
145
+ openImageViewer={openImageViewer}
146
+ id={id}
147
+ formatDate={formatDate}
148
+ currentImage={currentImage}
149
+ />
150
+ )}
151
+ {message && <p className='messenger__message'>{message}</p>}
152
+ <p className='messenger__message--date'>
153
+ {formatDate(date) ?? new Date(date).toLocaleString()}
154
+ </p>
155
+ </span>
156
+ </div>
157
+ {file && isViewerOpen && (
158
+ <ReactSimpleImageViewer
159
+ src={[file.location]}
160
+ currentIndex={0}
161
+ disableScroll={false}
162
+ closeOnClickOutside={true}
163
+ onClose={closeImageViewer}
164
+ />
165
+ )}
166
+ </div>
167
+ )
168
+ }
169
+
170
+ export default IncomingMessage
@@ -1,80 +1,80 @@
1
- import React, { ReactNode, CSSProperties } from 'react'
2
-
3
- interface IInfiniteScroll {
4
- loading: boolean
5
- more: boolean
6
- fetch: () => void
7
- children: ReactNode
8
- loadingCover: React.ReactElement
9
- root: Element | null
10
- reverse?: boolean
11
- rootMargin?: number
12
- }
13
-
14
- const intersectDivStyle: CSSProperties = {
15
- width: 25,
16
- height: 25,
17
- visibility: 'hidden',
18
- }
19
-
20
- function InfiniteScroll ({
21
- loading,
22
- loadingCover,
23
- more,
24
- fetch,
25
- children,
26
- root,
27
- reverse = false,
28
- rootMargin = 400,
29
- }: IInfiniteScroll) {
30
- const [infiniteElement, setInfiniteElement] =
31
- React.useState<HTMLDivElement | null>(null)
32
-
33
- React.useEffect(() => {
34
- if (!root) return
35
- const currentElement = infiniteElement
36
- const observer = new IntersectionObserver(
37
- (entries) => {
38
- const first = entries[0]
39
- if (first.isIntersecting === true) fetch()
40
- },
41
- {
42
- root,
43
- rootMargin: rootMargin.toString() + 'px',
44
- threshold: 0.5,
45
- }
46
- )
47
-
48
- if (currentElement) {
49
- observer.observe(currentElement)
50
- }
51
-
52
- return () => {
53
- if (currentElement) observer.unobserve(currentElement)
54
- }
55
- }, [infiniteElement])
56
-
57
- if (reverse) {
58
- return (
59
- <>
60
- {more && !loading && (
61
- <div ref={setInfiniteElement} style={intersectDivStyle}></div>
62
- )}
63
- {loading && loadingCover}
64
- {children}
65
- </>
66
- )
67
- }
68
-
69
- return (
70
- <>
71
- {children}
72
- {loading && loadingCover}
73
- {more && !loading && (
74
- <div ref={setInfiniteElement} style={intersectDivStyle}></div>
75
- )}
76
- </>
77
- )
78
- }
79
-
80
- export default InfiniteScroll
1
+ import React, { ReactNode, CSSProperties } from 'react'
2
+
3
+ interface IInfiniteScroll {
4
+ loading: boolean
5
+ more: boolean
6
+ fetch: () => void
7
+ children: ReactNode
8
+ loadingCover: React.ReactElement
9
+ root: Element | null
10
+ reverse?: boolean
11
+ rootMargin?: number
12
+ }
13
+
14
+ const intersectDivStyle: CSSProperties = {
15
+ width: 25,
16
+ height: 25,
17
+ visibility: 'hidden',
18
+ }
19
+
20
+ function InfiniteScroll ({
21
+ loading,
22
+ loadingCover,
23
+ more,
24
+ fetch,
25
+ children,
26
+ root,
27
+ reverse = false,
28
+ rootMargin = 400,
29
+ }: IInfiniteScroll) {
30
+ const [infiniteElement, setInfiniteElement] =
31
+ React.useState<HTMLDivElement | null>(null)
32
+
33
+ React.useEffect(() => {
34
+ if (!root) return
35
+ const currentElement = infiniteElement
36
+ const observer = new IntersectionObserver(
37
+ (entries) => {
38
+ const first = entries[0]
39
+ if (first.isIntersecting === true) fetch()
40
+ },
41
+ {
42
+ root,
43
+ rootMargin: rootMargin.toString() + 'px',
44
+ threshold: 0.5,
45
+ }
46
+ )
47
+
48
+ if (currentElement) {
49
+ observer.observe(currentElement)
50
+ }
51
+
52
+ return () => {
53
+ if (currentElement) observer.unobserve(currentElement)
54
+ }
55
+ }, [infiniteElement])
56
+
57
+ if (reverse) {
58
+ return (
59
+ <>
60
+ {more && !loading && (
61
+ <div ref={setInfiniteElement} style={intersectDivStyle}></div>
62
+ )}
63
+ {loading && loadingCover}
64
+ {children}
65
+ </>
66
+ )
67
+ }
68
+
69
+ return (
70
+ <>
71
+ {children}
72
+ {loading && loadingCover}
73
+ {more && !loading && (
74
+ <div ref={setInfiniteElement} style={intersectDivStyle}></div>
75
+ )}
76
+ </>
77
+ )
78
+ }
79
+
80
+ export default InfiniteScroll