agx-chat-web 1.2.2 → 1.2.3

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 (203) hide show
  1. package/README.md +49 -49
  2. package/dist/agx-chat.esm.js +2 -0
  3. package/dist/agx-chat.esm.js.map +1 -0
  4. package/dist/agx-chat.umd.js +2 -0
  5. package/dist/agx-chat.umd.js.map +1 -0
  6. package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.d.ts +1 -0
  7. package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.js +46 -0
  8. package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.js.map +1 -0
  9. package/dist/esm/app/ChatProvider/ChatProvider.d.ts +7 -0
  10. package/dist/esm/app/ChatProvider/ChatProvider.js +14 -0
  11. package/dist/esm/app/ChatProvider/ChatProvider.js.map +1 -0
  12. package/dist/esm/app/Messenger/classes/slaCalculations.d.ts +30 -0
  13. package/dist/esm/app/Messenger/classes/slaCalculations.js +144 -0
  14. package/dist/esm/app/Messenger/classes/slaCalculations.js.map +1 -0
  15. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.d.ts +14 -0
  16. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js +31 -0
  17. package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js.map +1 -0
  18. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.d.ts +10 -0
  19. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js +15 -0
  20. package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js.map +1 -0
  21. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.d.ts +5 -0
  22. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js +35 -0
  23. package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js.map +1 -0
  24. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.d.ts +4 -0
  25. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js +39 -0
  26. package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js.map +1 -0
  27. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.d.ts +7 -0
  28. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js +53 -0
  29. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js.map +1 -0
  30. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.d.ts +13 -0
  31. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js +43 -0
  32. package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js.map +1 -0
  33. package/dist/esm/app/Messenger/components/InputFile/InputFile.d.ts +11 -0
  34. package/dist/esm/app/Messenger/components/InputFile/InputFile.js +74 -0
  35. package/dist/esm/app/Messenger/components/InputFile/InputFile.js.map +1 -0
  36. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.d.ts +9 -0
  37. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js +34 -0
  38. package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js.map +1 -0
  39. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.d.ts +4 -0
  40. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js +13 -0
  41. package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js.map +1 -0
  42. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.d.ts +41 -0
  43. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js +40 -0
  44. package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js.map +1 -0
  45. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.d.ts +6 -0
  46. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js +29 -0
  47. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js.map +1 -0
  48. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.d.ts +11 -0
  49. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js +33 -0
  50. package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js.map +1 -0
  51. package/dist/esm/app/Messenger/components/Select/Select.d.ts +14 -0
  52. package/dist/esm/app/Messenger/components/Select/Select.js +16 -0
  53. package/dist/esm/app/Messenger/components/Select/Select.js.map +1 -0
  54. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.d.ts +13 -0
  55. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js +143 -0
  56. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js.map +1 -0
  57. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.d.ts +4 -0
  58. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js +43 -0
  59. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js.map +1 -0
  60. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.d.ts +4 -0
  61. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js +14 -0
  62. package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js.map +1 -0
  63. package/dist/esm/app/Messenger/components/TextArea/TextArea.d.ts +9 -0
  64. package/dist/esm/app/Messenger/components/TextArea/TextArea.js +14 -0
  65. package/dist/esm/app/Messenger/components/TextArea/TextArea.js.map +1 -0
  66. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.d.ts +7 -0
  67. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js +9 -0
  68. package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js.map +1 -0
  69. package/dist/esm/app/Messenger/hooks/useConversations.d.ts +21 -0
  70. package/dist/esm/app/Messenger/hooks/useConversations.js +105 -0
  71. package/dist/esm/app/Messenger/hooks/useConversations.js.map +1 -0
  72. package/dist/esm/app/Messenger/hooks/useMessages.d.ts +9 -0
  73. package/dist/esm/app/Messenger/hooks/useMessages.js +37 -0
  74. package/dist/esm/app/Messenger/hooks/useMessages.js.map +1 -0
  75. package/dist/esm/app/Messenger/hooks/useThemes.d.ts +32 -0
  76. package/dist/esm/app/Messenger/hooks/useThemes.js +11 -0
  77. package/dist/esm/app/Messenger/hooks/useThemes.js.map +1 -0
  78. package/dist/esm/app/Messenger/icons/AttachFileIcon.d.ts +4 -0
  79. package/dist/esm/app/Messenger/icons/AttachFileIcon.js +10 -0
  80. package/dist/esm/app/Messenger/icons/AttachFileIcon.js.map +1 -0
  81. package/dist/esm/app/Messenger/icons/CSVFileIcon.d.ts +4 -0
  82. package/dist/esm/app/Messenger/icons/CSVFileIcon.js +7 -0
  83. package/dist/esm/app/Messenger/icons/CSVFileIcon.js.map +1 -0
  84. package/dist/esm/app/Messenger/icons/CloseIcon.d.ts +2 -0
  85. package/dist/esm/app/Messenger/icons/CloseIcon.js +9 -0
  86. package/dist/esm/app/Messenger/icons/CloseIcon.js.map +1 -0
  87. package/dist/esm/app/Messenger/icons/DOCFileIcon.d.ts +4 -0
  88. package/dist/esm/app/Messenger/icons/DOCFileIcon.js +18 -0
  89. package/dist/esm/app/Messenger/icons/DOCFileIcon.js.map +1 -0
  90. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.d.ts +7 -0
  91. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js +12 -0
  92. package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js.map +1 -0
  93. package/dist/esm/app/Messenger/icons/EmptyIcon.d.ts +2 -0
  94. package/dist/esm/app/Messenger/icons/EmptyIcon.js +8 -0
  95. package/dist/esm/app/Messenger/icons/EmptyIcon.js.map +1 -0
  96. package/dist/esm/app/Messenger/icons/MP4FileIcon.d.ts +4 -0
  97. package/dist/esm/app/Messenger/icons/MP4FileIcon.js +7 -0
  98. package/dist/esm/app/Messenger/icons/MP4FileIcon.js.map +1 -0
  99. package/dist/esm/app/Messenger/icons/MessageIcon.d.ts +6 -0
  100. package/dist/esm/app/Messenger/icons/MessageIcon.js +12 -0
  101. package/dist/esm/app/Messenger/icons/MessageIcon.js.map +1 -0
  102. package/dist/esm/app/Messenger/icons/PDFFileIcon.d.ts +4 -0
  103. package/dist/esm/app/Messenger/icons/PDFFileIcon.js +18 -0
  104. package/dist/esm/app/Messenger/icons/PDFFileIcon.js.map +1 -0
  105. package/dist/esm/app/Messenger/icons/ReadIcon.d.ts +4 -0
  106. package/dist/esm/app/Messenger/icons/ReadIcon.js +7 -0
  107. package/dist/esm/app/Messenger/icons/ReadIcon.js.map +1 -0
  108. package/dist/esm/app/Messenger/icons/SearchIcon.d.ts +2 -0
  109. package/dist/esm/app/Messenger/icons/SearchIcon.js +8 -0
  110. package/dist/esm/app/Messenger/icons/SearchIcon.js.map +1 -0
  111. package/dist/esm/app/Messenger/icons/TimerIcon.d.ts +4 -0
  112. package/dist/esm/app/Messenger/icons/TimerIcon.js +7 -0
  113. package/dist/esm/app/Messenger/icons/TimerIcon.js.map +1 -0
  114. package/dist/esm/app/Messenger/icons/TrashIcon.d.ts +6 -0
  115. package/dist/esm/app/Messenger/icons/TrashIcon.js +7 -0
  116. package/dist/esm/app/Messenger/icons/TrashIcon.js.map +1 -0
  117. package/dist/esm/app/Messenger/views/MessengerList.d.ts +40 -0
  118. package/dist/esm/app/Messenger/views/MessengerList.js +46 -0
  119. package/dist/esm/app/Messenger/views/MessengerList.js.map +1 -0
  120. package/dist/esm/app/Messenger/views/MessengerListItem.d.ts +12 -0
  121. package/dist/esm/app/Messenger/views/MessengerListItem.js +99 -0
  122. package/dist/esm/app/Messenger/views/MessengerListItem.js.map +1 -0
  123. package/dist/esm/app/Messenger/views/MessengerMessages.d.ts +35 -0
  124. package/dist/esm/app/Messenger/views/MessengerMessages.js +181 -0
  125. package/dist/esm/app/Messenger/views/MessengerMessages.js.map +1 -0
  126. package/dist/esm/app/Messenger/views/NewFormChat.d.ts +13 -0
  127. package/dist/esm/app/Messenger/views/NewFormChat.js +68 -0
  128. package/dist/esm/app/Messenger/views/NewFormChat.js.map +1 -0
  129. package/dist/esm/app/i18n/index.d.ts +3 -0
  130. package/dist/esm/app/i18n/index.js +32 -0
  131. package/dist/esm/app/i18n/index.js.map +1 -0
  132. package/dist/esm/index.d.ts +11 -0
  133. package/dist/esm/index.js +12 -0
  134. package/dist/esm/index.js.map +1 -0
  135. package/dist/esm/setupTests.d.ts +1 -0
  136. package/{src/setupTests.ts → dist/esm/setupTests.js} +2 -1
  137. package/dist/esm/setupTests.js.map +1 -0
  138. package/dist/esm/types.d.ts +140 -0
  139. package/dist/esm/types.js +2 -0
  140. package/dist/esm/types.js.map +1 -0
  141. package/package.json +90 -91
  142. package/src/__tests__/app/Messenger/classes/slaCalculations.spec.ts +0 -122
  143. package/src/app/ChatProvider/ChatProvider.tsx +0 -20
  144. package/src/app/Messenger/classes/slaCalculations.ts +0 -197
  145. package/src/app/Messenger/components/ChatButton/ChatButton.tsx +0 -64
  146. package/src/app/Messenger/components/ChatTabs/ChatTabs.less +0 -18
  147. package/src/app/Messenger/components/ChatTabs/ChatTabs.tsx +0 -32
  148. package/src/app/Messenger/components/DocMessage/DocMessage.less +0 -71
  149. package/src/app/Messenger/components/DocMessage/DocMessage.tsx +0 -50
  150. package/src/app/Messenger/components/ImagesContainer/ImagesContainer.less +0 -79
  151. package/src/app/Messenger/components/ImagesContainer/ImagesContainer.tsx +0 -51
  152. package/src/app/Messenger/components/IncomingMessage/IncomingMessage.tsx +0 -170
  153. package/src/app/Messenger/components/InfiniteScroll/InfiniteScroll.tsx +0 -80
  154. package/src/app/Messenger/components/InputFile/InputFile.tsx +0 -147
  155. package/src/app/Messenger/components/InputFile/inputFile.less +0 -59
  156. package/src/app/Messenger/components/MessageBallon/MessageBalloon.tsx +0 -100
  157. package/src/app/Messenger/components/MessengerAvatar/MessengerAvatar.tsx +0 -29
  158. package/src/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.tsx +0 -62
  159. package/src/app/Messenger/components/RenderFileIcon/RenderFileIcon.tsx +0 -40
  160. package/src/app/Messenger/components/SearchInput/SearchInput.less +0 -45
  161. package/src/app/Messenger/components/SearchInput/SearchInput.tsx +0 -77
  162. package/src/app/Messenger/components/Select/Select.less +0 -22
  163. package/src/app/Messenger/components/Select/Select.tsx +0 -56
  164. package/src/app/Messenger/components/SendMessageForm/SendMessageForm.tsx +0 -254
  165. package/src/app/Messenger/components/SenderMessages/SenderMessages.tsx +0 -91
  166. package/src/app/Messenger/components/SystemMessage/SystemMessage.tsx +0 -25
  167. package/src/app/Messenger/components/TextArea/TextArea.tsx +0 -35
  168. package/src/app/Messenger/components/TextArea/Textarea.less +0 -22
  169. package/src/app/Messenger/components/Tooltip/Tooltip.less +0 -27
  170. package/src/app/Messenger/components/Tooltip/Tooltip.tsx +0 -17
  171. package/src/app/Messenger/hooks/useConversations.tsx +0 -143
  172. package/src/app/Messenger/hooks/useMessages.tsx +0 -49
  173. package/src/app/Messenger/hooks/useThemes.tsx +0 -14
  174. package/src/app/Messenger/icons/AttachFileIcon.tsx +0 -20
  175. package/src/app/Messenger/icons/CSVFileIcon.tsx +0 -26
  176. package/src/app/Messenger/icons/CloseIcon.tsx +0 -20
  177. package/src/app/Messenger/icons/DOCFileIcon.tsx +0 -54
  178. package/src/app/Messenger/icons/DownloadMinimalistIcon.tsx +0 -37
  179. package/src/app/Messenger/icons/EmptyIcon.tsx +0 -20
  180. package/src/app/Messenger/icons/MP4FileIcon.tsx +0 -26
  181. package/src/app/Messenger/icons/MessageIcon.tsx +0 -27
  182. package/src/app/Messenger/icons/PDFFileIcon.tsx +0 -54
  183. package/src/app/Messenger/icons/ReadIcon.tsx +0 -18
  184. package/src/app/Messenger/icons/SearchIcon.tsx +0 -20
  185. package/src/app/Messenger/icons/TimerIcon.tsx +0 -18
  186. package/src/app/Messenger/icons/TrashIcon.tsx +0 -21
  187. package/src/app/Messenger/views/Messenger.less +0 -623
  188. package/src/app/Messenger/views/MessengerList.tsx +0 -170
  189. package/src/app/Messenger/views/MessengerListItem.tsx +0 -178
  190. package/src/app/Messenger/views/MessengerMessages.tsx +0 -414
  191. package/src/app/Messenger/views/NewFormChat.tsx +0 -145
  192. package/src/app/i18n/index.ts +0 -36
  193. package/src/app/i18n/locales/en.json +0 -64
  194. package/src/app/i18n/locales/pt.json +0 -64
  195. package/src/assets/right-arrow.svg +0 -10
  196. package/src/index.ts +0 -23
  197. package/src/react-app-env.d.ts +0 -19
  198. package/src/styles/abstracts/animations.less +0 -8
  199. package/src/styles/abstracts/mixins.less +0 -5
  200. package/src/styles/abstracts/variables.less +0 -31
  201. package/src/styles/base/base.less +0 -6
  202. package/src/styles/index.less +0 -5
  203. package/src/types.ts +0 -174
@@ -1,170 +0,0 @@
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 +0,0 @@
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,147 +0,0 @@
1
- import TrashIcon from '../../icons/TrashIcon'
2
- import React, { useMemo } from 'react'
3
- import useTheme from '../../hooks/useThemes'
4
- import { useTranslation } from 'react-i18next'
5
-
6
- interface IProps {
7
- fileList: File[]
8
- onUpdateFile: (files: File) => void
9
- label: string
10
- onRemoveFile: (files: File) => void
11
- maxSize: string
12
- loading: boolean
13
- }
14
-
15
- function InputFile ({
16
- fileList,
17
- onUpdateFile,
18
- label,
19
- onRemoveFile,
20
- maxSize,
21
- loading,
22
- }: IProps) {
23
- const { theme } = useTheme()
24
- const { t } = useTranslation('newFormChat')
25
-
26
- const validateFileType = useMemo(
27
- () => (allowedTypes: string[], file?: File) => {
28
- if (file?.type) {
29
- return allowedTypes.includes(file.type)
30
- }
31
- const extension = file?.name.split('.').pop()?.toLowerCase()
32
- return extension ? allowedTypes.includes(`.${extension}`) : false
33
- },
34
- []
35
- )
36
-
37
- const onUpload = () => {
38
- const input = document.querySelector('.file-input__input') as HTMLElement
39
- input?.click()
40
- }
41
-
42
- const onChange = (e: React.ChangeEvent<HTMLInputElement>) => {
43
- const file = e?.target?.files?.[0]
44
-
45
- const isAllowedType = validateFileType(
46
- [
47
- 'image/png',
48
- 'image/jpeg',
49
- 'application/pdf',
50
- 'application/msword',
51
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
52
- 'text/csv',
53
- 'video/mp4',
54
- ],
55
- file
56
- )
57
- if (!isAllowedType) {
58
- console.error(t('inputFile.documentSendError'))
59
- return false
60
- }
61
-
62
- if (file) onUpdateFile(file)
63
- return true
64
- }
65
-
66
- const removeItem = (file: File) => {
67
- if (fileList.some((item) => item === file)) {
68
- onRemoveFile(file)
69
- }
70
- }
71
-
72
- return (
73
- <>
74
- <div className='file-input'>
75
- <label
76
- style={{ color: theme.newChatFormTexts }}
77
- htmlFor=''
78
- className='file-input__label'
79
- >
80
- {label}
81
- </label>
82
- <div
83
- className='file-input__container'
84
- style={{
85
- backgroundColor: theme.inputBg,
86
- color: theme.newChatFormTexts,
87
- }}
88
- >
89
- <input
90
- className='file-input__input'
91
- type='file'
92
- id='docpicker'
93
- hidden
94
- accept='.jpg, .jpeg, .png, .pdf, .doc, .docx, .csv, .mp4'
95
- onChange={(event) => onChange(event)}
96
- />
97
-
98
- <h4>{t('inputFile.chooseFile')}</h4>
99
- <button
100
- className='file-input__button'
101
- type='button'
102
- onClick={onUpload}
103
- style={{
104
- background: theme?.buttonPrimary,
105
- color: theme?.buttonPrimaryText,
106
- }}
107
- >
108
- {t('inputFile.chooseFile')}
109
- </button>
110
-
111
- {loading ? (
112
- ''
113
- ) : (
114
- <p>
115
- {t('inputFile.allowDocuments')}(
116
- {t('inputFile.allowSizeDocument', { maxSize })})
117
- </p>
118
- )}
119
- </div>
120
- </div>
121
-
122
- <div>
123
- {fileList &&
124
- fileList.map((item) => (
125
- <div
126
- className='file-input__list'
127
- key={item.name}
128
- style={{
129
- backgroundColor: theme.inputBg,
130
- color: theme.newChatFormTexts,
131
- }}
132
- >
133
- <span className='file-input__list--file-name'>{item.name}</span>
134
- <button
135
- className='file-input__delete'
136
- onClick={() => removeItem(item)}
137
- >
138
- <TrashIcon color={theme.newChatFormDeleteFileButton || 'red'} />
139
- </button>
140
- </div>
141
- ))}
142
- </div>
143
- </>
144
- )
145
- }
146
-
147
- export default InputFile
@@ -1,59 +0,0 @@
1
- .file-input {
2
- margin-bottom: 1rem;
3
- width: 100%;
4
-
5
- &__label {
6
- color: @title-form-color;
7
- font-weight: bold;
8
- margin: 0.5rem;
9
- }
10
-
11
- &__container {
12
- align-items: center;
13
- background-color: var(--secondary-color);
14
- border-radius: 10px;
15
- display: flex;
16
- flex-direction: column;
17
- justify-content: center;
18
- margin-top: 0.5rem;
19
- padding: 1rem;
20
- width: 100%;
21
- }
22
-
23
- &__button {
24
- border: none;
25
- border-radius: 30px;
26
- color: var(--secondary-color);
27
- cursor: pointer;
28
- font-size: 1rem;
29
- font-weight: bold;
30
- margin: 0.5rem 1rem;
31
- padding: 0.5rem;
32
- }
33
-
34
- &__list {
35
- align-items: center;
36
- background-color: var(--secondary-color);
37
- border-radius: 10px;
38
- display: flex;
39
- justify-content: space-between;
40
- margin: 0.5rem 0;
41
- padding: 0.5rem;
42
-
43
- &--file-name {
44
- overflow: hidden;
45
- text-overflow: ellipsis;
46
- white-space: nowrap;
47
- max-width: 100%;
48
- }
49
- }
50
-
51
- &__delete {
52
- align-items: center;
53
- background: transparent;
54
- border: none;
55
- cursor: pointer;
56
- display: flex;
57
- justify-content: center;
58
- }
59
- }
@@ -1,100 +0,0 @@
1
- import React from 'react'
2
- import { Iimages, IMessages } from 'types'
3
- import IncomingMessage from '../IncomingMessage/IncomingMessage'
4
- import SenderMessages from '../SenderMessages/SenderMessages'
5
- import SystemMessage from '../SystemMessage/SystemMessage'
6
-
7
- function MessageBalloon ({
8
- item,
9
- creatorId,
10
- formatDate,
11
- id,
12
- }: {
13
- item: IMessages
14
- creatorId?: string
15
- formatDate: (date: string | Date) => string | undefined
16
- id: string
17
- }) {
18
- if (item.isSystemMessage) {
19
- return (
20
- <SystemMessage
21
- formatDate={formatDate}
22
- date={item.createdAt}
23
- message={item.content}
24
- id={item.senderId}
25
- user={{ name: 'System' }}
26
- />
27
- )
28
- }
29
-
30
- if (
31
- item.sender.uniqueCode &&
32
- !item.isSystemMessage &&
33
- item.sender.uniqueCode === creatorId
34
- ) {
35
- return (
36
- <>
37
- <SenderMessages
38
- id={id}
39
- formatDate={formatDate}
40
- message={item.content}
41
- date={item.createdAt}
42
- read={item.everybodyHasRead}
43
- hasFile={item.hasFile}
44
- file={item.file}
45
- />
46
-
47
- {item.images &&
48
- item.images.map((image: Iimages, index: number) => (
49
- <SenderMessages
50
- key={image.key}
51
- id={`${id}image-${index}`}
52
- formatDate={formatDate}
53
- date={item.createdAt}
54
- file={image}
55
- message=''
56
- hasFile={true}
57
- read={item.everybodyHasRead}
58
- />
59
- ))}
60
- </>
61
- )
62
- }
63
-
64
- return (
65
- <>
66
- <IncomingMessage
67
- id={id}
68
- formatDate={formatDate}
69
- date={item.createdAt}
70
- message={item.content}
71
- hasFile={item.hasFile}
72
- isSystemMessage={item.isSystemMessage}
73
- file={item.file}
74
- user={{
75
- avatar: item.sender?.image,
76
- name: item.sender.username,
77
- }}
78
- />
79
-
80
- {item.images &&
81
- item.images.map((image: Iimages, index: number) => (
82
- <IncomingMessage
83
- key={image.key}
84
- id={`${id}image-${index}`}
85
- formatDate={formatDate}
86
- date={item.createdAt}
87
- file={image}
88
- message=''
89
- hasFile={true}
90
- user={{
91
- avatar: item.sender?.image,
92
- name: item.sender.username,
93
- }}
94
- />
95
- ))}
96
- </>
97
- )
98
- }
99
-
100
- export default MessageBalloon
@@ -1,29 +0,0 @@
1
- import useTheme from '../../hooks/useThemes'
2
- import React from 'react'
3
- import { useTranslation } from 'react-i18next'
4
- import { IMesssengerAvatar } from 'types'
5
-
6
- function MessengerAvatar ({
7
- image,
8
- children,
9
- className = '',
10
- }: IMesssengerAvatar) {
11
- const { t } = useTranslation('messengerList')
12
- const { theme } = useTheme()
13
- return (
14
- <figure
15
- className={`${className} messenger__aside-list-item--avatar`}
16
- style={{
17
- background: theme.messengerIncomerColor,
18
- }}
19
- >
20
- {image ? (
21
- <img loading='lazy' alt={t('messengerAvatar.alt')} src={image} />
22
- ) : (
23
- children
24
- )}
25
- </figure>
26
- )
27
- }
28
-
29
- export default MessengerAvatar
@@ -1,62 +0,0 @@
1
- import React, { createContext, ReactNode } from 'react'
2
-
3
- const defaultThemeVariables = {
4
- asideBg: '#eee',
5
- asideFontColor: 'var(--secondary-color)',
6
- messengerMessagesBg: '#eeeeee',
7
- headerAndSenderBg: '#232831',
8
- buttonPrimary: '#25D366',
9
- buttonPrimaryText: '#707070',
10
- buttonsDisabled: '#94989D',
11
- uploadFileIconColor: '#8696a0',
12
- messengerNotSelectedBg: '#DDDDDD',
13
- newChatFormBg: '',
14
- newChatFormRadius: '0 20px 20px 0',
15
- newChatFormTexts: '#000',
16
- newChatFormDeleteFileButton: '#DD4E4E',
17
- disclaimerPrimaryColor: '#4791FF',
18
- disclaimerSecondaryColor: '#4791FF',
19
- disclaimerTextColor: '#000',
20
- messengerSenderColor: '#00A73E',
21
- messengerIncomerColor: '#707070',
22
- messengerSystemColor: '#2A313A',
23
- borderColor: '#AAAAAA',
24
- inputBg: 'var(--secondary-color)',
25
- chatInputBorder: '',
26
- listItemHover: '',
27
- active: '',
28
- activeTabBorter: '#25D366',
29
- emptyMessagesFontColor: '#000',
30
- documentMessagesTextColor: '#fff',
31
- }
32
-
33
- type ThemeVariables = typeof defaultThemeVariables
34
-
35
- type ThemeContextContent = {
36
- theme: Partial<ThemeVariables>
37
- }
38
-
39
- export const MessageThemeContext = createContext<ThemeContextContent>(
40
- {} as unknown as ThemeContextContent
41
- )
42
-
43
- type Props = {
44
- children: ReactNode
45
- theme?: Partial<ThemeVariables>
46
- }
47
- const MessageThemeWrapper = ({
48
- children,
49
- theme = defaultThemeVariables,
50
- }: Props) => {
51
- const config = {
52
- theme,
53
- }
54
-
55
- return (
56
- <MessageThemeContext.Provider value={config}>
57
- {children}
58
- </MessageThemeContext.Provider>
59
- )
60
- }
61
-
62
- export default MessageThemeWrapper
@@ -1,40 +0,0 @@
1
- import React from 'react'
2
- import FileDoc from '../../icons/DOCFileIcon'
3
- import FilePdf from '../../icons/PDFFileIcon'
4
- import CSVFileIcon from '../../icons/CSVFileIcon'
5
- import MP4FileIcon from '../../icons/MP4FileIcon'
6
- import { useTranslation } from 'react-i18next'
7
-
8
- const RenderFileIcon = ({
9
- fileType,
10
- b64,
11
- }: {
12
- fileType?: string
13
- b64?: string
14
- }) => {
15
- const { t } = useTranslation('messengerMessages')
16
-
17
- if (fileType === 'application/pdf') {
18
- return <FilePdf width='40' height='40' />
19
- } else if (
20
- fileType === 'application/msword' ||
21
- fileType ===
22
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
23
- ) {
24
- return <FileDoc width='40' height='40' />
25
- } else if (fileType === 'text/csv') {
26
- return <CSVFileIcon width='40' height='40' />
27
- } else if (fileType === 'video/mp4') {
28
- return <MP4FileIcon width='40' height='40' />
29
- } else {
30
- return (
31
- <img
32
- alt={t('renderFileIcon.altImage')}
33
- src={b64}
34
- className='images-container__image'
35
- />
36
- )
37
- }
38
- }
39
-
40
- export default RenderFileIcon