agx-chat-web 1.2.0 → 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 (198) 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.min.js +0 -2
  69. package/dist/agx-chat.min.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/Messenger/classes/slaCalculations.d.ts +0 -30
  74. package/dist/esm/app/Messenger/classes/slaCalculations.js +0 -144
  75. package/dist/esm/app/Messenger/classes/slaCalculations.js.map +0 -1
  76. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.d.ts +0 -14
  77. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js +0 -31
  78. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js.map +0 -1
  79. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.d.ts +0 -10
  80. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js +0 -15
  81. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js.map +0 -1
  82. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.d.ts +0 -5
  83. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js +0 -35
  84. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js.map +0 -1
  85. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.d.ts +0 -4
  86. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js +0 -39
  87. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js.map +0 -1
  88. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.d.ts +0 -7
  89. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js +0 -49
  90. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js.map +0 -1
  91. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.d.ts +0 -13
  92. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js +0 -43
  93. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js.map +0 -1
  94. package/dist/esm/app/Messenger/components/InputFile/InputFile.d.ts +0 -11
  95. package/dist/esm/app/Messenger/components/InputFile/InputFile.js +0 -72
  96. package/dist/esm/app/Messenger/components/InputFile/InputFile.js.map +0 -1
  97. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.d.ts +0 -9
  98. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js +0 -34
  99. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js.map +0 -1
  100. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.d.ts +0 -4
  101. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js +0 -13
  102. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js.map +0 -1
  103. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.d.ts +0 -41
  104. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js +0 -40
  105. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js.map +0 -1
  106. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.d.ts +0 -6
  107. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js +0 -21
  108. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js.map +0 -1
  109. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.d.ts +0 -11
  110. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js +0 -33
  111. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js.map +0 -1
  112. package/dist/esm/app/Messenger/components/Select/Select.d.ts +0 -14
  113. package/dist/esm/app/Messenger/components/Select/Select.js +0 -16
  114. package/dist/esm/app/Messenger/components/Select/Select.js.map +0 -1
  115. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.d.ts +0 -13
  116. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js +0 -119
  117. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js.map +0 -1
  118. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.d.ts +0 -4
  119. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js +0 -40
  120. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js.map +0 -1
  121. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.d.ts +0 -4
  122. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js +0 -14
  123. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js.map +0 -1
  124. package/dist/esm/app/Messenger/components/TextArea/TextArea.d.ts +0 -9
  125. package/dist/esm/app/Messenger/components/TextArea/TextArea.js +0 -14
  126. package/dist/esm/app/Messenger/components/TextArea/TextArea.js.map +0 -1
  127. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.d.ts +0 -7
  128. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js +0 -9
  129. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js.map +0 -1
  130. package/dist/esm/app/Messenger/hooks/useConversations.d.ts +0 -21
  131. package/dist/esm/app/Messenger/hooks/useConversations.js +0 -105
  132. package/dist/esm/app/Messenger/hooks/useConversations.js.map +0 -1
  133. package/dist/esm/app/Messenger/hooks/useMessages.d.ts +0 -9
  134. package/dist/esm/app/Messenger/hooks/useMessages.js +0 -37
  135. package/dist/esm/app/Messenger/hooks/useMessages.js.map +0 -1
  136. package/dist/esm/app/Messenger/hooks/useThemes.d.ts +0 -32
  137. package/dist/esm/app/Messenger/hooks/useThemes.js +0 -11
  138. package/dist/esm/app/Messenger/hooks/useThemes.js.map +0 -1
  139. package/dist/esm/app/Messenger/icons/AttachFileIcon.d.ts +0 -4
  140. package/dist/esm/app/Messenger/icons/AttachFileIcon.js +0 -10
  141. package/dist/esm/app/Messenger/icons/AttachFileIcon.js.map +0 -1
  142. package/dist/esm/app/Messenger/icons/CloseIcon.d.ts +0 -2
  143. package/dist/esm/app/Messenger/icons/CloseIcon.js +0 -9
  144. package/dist/esm/app/Messenger/icons/CloseIcon.js.map +0 -1
  145. package/dist/esm/app/Messenger/icons/DOCFileIcon.d.ts +0 -4
  146. package/dist/esm/app/Messenger/icons/DOCFileIcon.js +0 -18
  147. package/dist/esm/app/Messenger/icons/DOCFileIcon.js.map +0 -1
  148. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.d.ts +0 -7
  149. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js +0 -12
  150. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js.map +0 -1
  151. package/dist/esm/app/Messenger/icons/EmptyIcon.d.ts +0 -2
  152. package/dist/esm/app/Messenger/icons/EmptyIcon.js +0 -8
  153. package/dist/esm/app/Messenger/icons/EmptyIcon.js.map +0 -1
  154. package/dist/esm/app/Messenger/icons/MessageIcon.d.ts +0 -6
  155. package/dist/esm/app/Messenger/icons/MessageIcon.js +0 -12
  156. package/dist/esm/app/Messenger/icons/MessageIcon.js.map +0 -1
  157. package/dist/esm/app/Messenger/icons/PDFFileIcon.d.ts +0 -4
  158. package/dist/esm/app/Messenger/icons/PDFFileIcon.js +0 -18
  159. package/dist/esm/app/Messenger/icons/PDFFileIcon.js.map +0 -1
  160. package/dist/esm/app/Messenger/icons/ReadIcon.d.ts +0 -4
  161. package/dist/esm/app/Messenger/icons/ReadIcon.js +0 -7
  162. package/dist/esm/app/Messenger/icons/ReadIcon.js.map +0 -1
  163. package/dist/esm/app/Messenger/icons/SearchIcon.d.ts +0 -2
  164. package/dist/esm/app/Messenger/icons/SearchIcon.js +0 -8
  165. package/dist/esm/app/Messenger/icons/SearchIcon.js.map +0 -1
  166. package/dist/esm/app/Messenger/icons/TimerIcon.d.ts +0 -4
  167. package/dist/esm/app/Messenger/icons/TimerIcon.js +0 -7
  168. package/dist/esm/app/Messenger/icons/TimerIcon.js.map +0 -1
  169. package/dist/esm/app/Messenger/icons/TrashIcon.d.ts +0 -6
  170. package/dist/esm/app/Messenger/icons/TrashIcon.js +0 -7
  171. package/dist/esm/app/Messenger/icons/TrashIcon.js.map +0 -1
  172. package/dist/esm/app/Messenger/views/MessengerList.d.ts +0 -40
  173. package/dist/esm/app/Messenger/views/MessengerList.js +0 -46
  174. package/dist/esm/app/Messenger/views/MessengerList.js.map +0 -1
  175. package/dist/esm/app/Messenger/views/MessengerListItem.d.ts +0 -12
  176. package/dist/esm/app/Messenger/views/MessengerListItem.js +0 -99
  177. package/dist/esm/app/Messenger/views/MessengerListItem.js.map +0 -1
  178. package/dist/esm/app/Messenger/views/MessengerMessages.d.ts +0 -35
  179. package/dist/esm/app/Messenger/views/MessengerMessages.js +0 -181
  180. package/dist/esm/app/Messenger/views/MessengerMessages.js.map +0 -1
  181. package/dist/esm/app/Messenger/views/NewFormChat.d.ts +0 -13
  182. package/dist/esm/app/Messenger/views/NewFormChat.js +0 -68
  183. package/dist/esm/app/Messenger/views/NewFormChat.js.map +0 -1
  184. package/dist/esm/app/i18n/index.d.ts +0 -3
  185. package/dist/esm/app/i18n/index.js +0 -31
  186. package/dist/esm/app/i18n/index.js.map +0 -1
  187. package/dist/esm/app/i18n/locales/index.d.ts +0 -6
  188. package/dist/esm/app/i18n/locales/index.js +0 -7
  189. package/dist/esm/app/i18n/locales/index.js.map +0 -1
  190. package/dist/esm/index.d.ts +0 -10
  191. package/dist/esm/index.js +0 -11
  192. package/dist/esm/index.js.map +0 -1
  193. package/dist/esm/setupTests.d.ts +0 -1
  194. package/dist/esm/setupTests.js +0 -6
  195. package/dist/esm/setupTests.js.map +0 -1
  196. package/dist/esm/types.d.ts +0 -140
  197. package/dist/esm/types.js +0 -2
  198. 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