agx-chat-web 1.2.2 → 1.2.4

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,414 +0,0 @@
1
- import React, {
2
- Fragment,
3
- useState,
4
- useRef,
5
- MutableRefObject,
6
- useEffect,
7
- } from 'react'
8
- import ImagesContainer from '../components/ImagesContainer/ImagesContainer'
9
- import MessageBalloon from '../components/MessageBallon/MessageBalloon'
10
-
11
- import MessageIcon from '../icons/MessageIcon'
12
-
13
- import { ICommonProps, IList, IMessages, IOption } from 'types'
14
- import useTheme from '../hooks/useThemes'
15
-
16
- import NewChatForm from './NewFormChat'
17
- import EmptyIcon from '../icons/EmptyIcon'
18
- import SendMessageForm from '../components/SendMessageForm/SendMessageForm'
19
- import InfiniteScroll from '../components/InfiniteScroll/InfiniteScroll'
20
- import { formatFileSize } from '../components/DocMessage/DocMessage'
21
- import { useTranslation } from 'react-i18next'
22
-
23
- interface IScrollableContainer {
24
- loading: boolean
25
- onIntersect: () => Promise<void>
26
- hasNext: boolean
27
- }
28
-
29
- type MessengerView = 'empty' | 'messages' | 'newChat'
30
-
31
- interface IMessengerMessages extends ICommonProps, IScrollableContainer {
32
- header: React.ReactElement
33
- current?: IList
34
- creatorId?: string
35
- allowImages: boolean
36
- tab?: 'list' | 'messages'
37
- messegerView: MessengerView
38
- className?: string
39
- messages: IMessages[]
40
- onSubmit: (value: FormData, callback: () => void) => Promise<void>
41
- cancelNewChat: () => void
42
- formatDate: (date: string | Date) => string | undefined
43
- reasons: Array<IOption>
44
- products: Array<IOption>
45
- submitNewChat: (values: FormData) => void
46
- newChatLoading: boolean
47
- maxFileSize: () => Promise<{ data: { data: { maxFileSize: number } } }>
48
- }
49
-
50
- interface IMessengerForm {
51
- children: React.ReactNode
52
- messegerView: MessengerView
53
- reasons: Array<IOption>
54
- products: Array<IOption>
55
- submitNewChat: (values: FormData) => void
56
- cancelNewChat: () => void
57
- newChatLoading: boolean
58
- maxFileSize: string
59
- loadingResources: boolean
60
- }
61
-
62
- function MessagesContainerView ({
63
- children,
64
- messegerView,
65
- submitNewChat,
66
- cancelNewChat,
67
- reasons,
68
- products,
69
- newChatLoading,
70
- maxFileSize,
71
- loadingResources,
72
- }: IMessengerForm) {
73
- const { theme } = useTheme()
74
- const { t } = useTranslation('messengerMessages')
75
-
76
- if (messegerView === 'empty') {
77
- return (
78
- <div
79
- className='messenger__messages-container--empty'
80
- style={{ backgroundColor: theme?.messengerNotSelectedBg }}
81
- >
82
- <MessageIcon width='72' height='72' />
83
- <p>{t('selectConversation')}</p>
84
- </div>
85
- )
86
- }
87
-
88
- if (messegerView === 'newChat') {
89
- return (
90
- <NewChatForm
91
- reasons={reasons}
92
- products={products}
93
- submitNewChat={submitNewChat}
94
- cancelNewChat={cancelNewChat}
95
- loading={newChatLoading}
96
- maxFileSize={maxFileSize}
97
- loadingResources={loadingResources}
98
- />
99
- )
100
- }
101
-
102
- return <>{children}</>
103
- }
104
-
105
- export function SpinLoading () {
106
- return (
107
- <div className='messenger__messages-loading'>
108
- <div className='messenger__messages-loading--loader' />
109
- </div>
110
- )
111
- }
112
-
113
- function Messages ({
114
- messages,
115
- creatorId,
116
- formatDate,
117
- loading,
118
- }: {
119
- messages: IMessages[]
120
- creatorId?: string
121
- formatDate: (date: string | Date) => string | undefined
122
- loading: boolean
123
- }) {
124
- const { theme } = useTheme()
125
- const { t } = useTranslation('messengerMessages')
126
-
127
- if (!messages || (messages.length === 0 && !loading)) {
128
- return (
129
- <div
130
- className='messenger__message-empty'
131
- style={{ color: theme.emptyMessagesFontColor }}
132
- >
133
- <EmptyIcon />
134
- <p>{t('noMessagesFound')}</p>
135
- </div>
136
- )
137
- }
138
-
139
- return (
140
- <>
141
- {messages.map((item, idx) => {
142
- return (
143
- <Fragment key={`${item.ticketId}_${item.senderId}_${idx}`}>
144
- <MessageBalloon
145
- id={`message_${idx}`}
146
- formatDate={formatDate}
147
- creatorId={creatorId}
148
- item={item}
149
- />
150
- </Fragment>
151
- )
152
- })}
153
- </>
154
- )
155
- }
156
-
157
- const onScrollToBottom = (
158
- scrollContainer: MutableRefObject<HTMLDivElement | null>
159
- ) => {
160
- if (scrollContainer.current) {
161
- scrollContainer.current.scrollTop = Number.MAX_SAFE_INTEGER
162
- }
163
- }
164
-
165
- function MessagesContainer ({
166
- children,
167
- fowardRef,
168
- ...rest
169
- }: {
170
- children: React.ReactNode
171
- fowardRef: MutableRefObject<HTMLDivElement | null>
172
- } & React.DetailedHTMLProps<
173
- React.HTMLAttributes<HTMLDivElement>,
174
- HTMLDivElement
175
- >) {
176
- const { theme } = useTheme()
177
-
178
- return (
179
- <div
180
- {...rest}
181
- ref={fowardRef}
182
- className='messenger__messages-container'
183
- style={{
184
- padding: '1rem',
185
- backgroundColor: theme?.messengerMessagesBg,
186
- border: `1px solid ${theme.borderColor}`,
187
- }}
188
- >
189
- {children}
190
- </div>
191
- )
192
- }
193
-
194
- function ScrollableContainer ({
195
- children,
196
- loading,
197
- onIntersect,
198
- hasNext,
199
- scrollContainerFowardRef,
200
- }: {
201
- children: React.ReactNode
202
- scrollContainerFowardRef: MutableRefObject<HTMLDivElement | null>
203
- } & IScrollableContainer) {
204
- const intersetRootMargin = 300
205
-
206
- const getElementScrollHeight = (divRef: HTMLDivElement | null) => {
207
- if (!divRef) return null
208
- return divRef.scrollHeight
209
- }
210
-
211
- const getElementScrollTop = (divRef: HTMLDivElement | null) => {
212
- if (!divRef) return null
213
- return divRef.scrollTop
214
- }
215
-
216
- const calculateScrollToDecrease = (
217
- elementBeforeIntersetHeight: number,
218
- elementAfterIntersectHeight: number,
219
- intersetRootMargin: number
220
- ) => {
221
- return (
222
- Math.abs(elementAfterIntersectHeight - elementBeforeIntersetHeight) +
223
- intersetRootMargin
224
- )
225
- }
226
-
227
- const isNill = (value: number | null | undefined) => {
228
- return value === null && value === undefined
229
- }
230
-
231
- const onFetchInfiniteScroll = async () => {
232
- const elementBeforeIntersetHeight = getElementScrollHeight(
233
- scrollContainerFowardRef.current
234
- )
235
-
236
- await onIntersect()
237
-
238
- const elementAfterIntersectHeight = getElementScrollHeight(
239
- scrollContainerFowardRef.current
240
- )
241
-
242
- if (
243
- scrollContainerFowardRef.current &&
244
- !isNill(elementBeforeIntersetHeight) &&
245
- !isNill(elementAfterIntersectHeight)
246
- ) {
247
- const currentScrollTop =
248
- getElementScrollTop(scrollContainerFowardRef.current) || 0
249
- scrollContainerFowardRef.current.scrollTop = calculateScrollToDecrease(
250
- elementAfterIntersectHeight as number,
251
- elementBeforeIntersetHeight as number,
252
- currentScrollTop
253
- )
254
- }
255
- }
256
-
257
- useEffect(() => {
258
- onScrollToBottom(scrollContainerFowardRef)
259
- }, [])
260
-
261
- return (
262
- <MessagesContainer fowardRef={scrollContainerFowardRef}>
263
- <InfiniteScroll
264
- root={document.querySelector('.messenger__messages-container')}
265
- loading={loading}
266
- loadingCover={<SpinLoading />}
267
- more={hasNext}
268
- fetch={onFetchInfiniteScroll}
269
- rootMargin={intersetRootMargin}
270
- reverse
271
- >
272
- {children}
273
- </InfiniteScroll>
274
- </MessagesContainer>
275
- )
276
- }
277
-
278
- function MessengerMessages ({
279
- header,
280
- tab,
281
- className = '',
282
- current,
283
- messages,
284
- allowImages,
285
- creatorId,
286
- loading,
287
- onSubmit,
288
- submitNewChat,
289
- cancelNewChat,
290
- reasons,
291
- products,
292
- messegerView,
293
- formatDate,
294
- hasNext,
295
- onIntersect,
296
- newChatLoading,
297
- maxFileSize,
298
- }: IMessengerMessages) {
299
- const { t } = useTranslation('messengerMessages')
300
- const [file, setFile] = useState<File | null>()
301
- const scrollContainerRef = useRef<HTMLDivElement | null>(null)
302
- const [isSending, setIsSending] = useState(false)
303
- const [maxSize, setMaxSize] = useState<string>('')
304
-
305
- const { theme } = useTheme()
306
-
307
- const styleClassnames = {
308
- mobile: tab === 'list' ? 'messenger__mobile-hide' : '',
309
- }
310
-
311
- const updateFile = (file: File | null) => {
312
- setFile(file)
313
- }
314
-
315
- const onSubmitNewMessage = async (
316
- message: FormData,
317
- callback: () => void
318
- ) => {
319
- setIsSending(true)
320
- try {
321
- await onSubmit(message, callback)
322
- onScrollToBottom(scrollContainerRef)
323
- } finally {
324
- setIsSending(false)
325
- }
326
- }
327
-
328
- useEffect(() => {
329
- const fetchMaxFileSize = async () => {
330
- try {
331
- const response = await maxFileSize()
332
- const size = formatFileSize(response.data.data.maxFileSize)
333
- setMaxSize(size)
334
- } catch (error) {
335
- console.error(t('errorSearchingMaxFileSize'), error)
336
- }
337
- }
338
-
339
- fetchMaxFileSize()
340
- }, [maxSize])
341
-
342
- return (
343
- <div
344
- className={`messenger__messages ${className} ${styleClassnames.mobile} `}
345
- >
346
- <MessagesContainerView
347
- newChatLoading={newChatLoading}
348
- reasons={reasons}
349
- products={products}
350
- submitNewChat={submitNewChat}
351
- cancelNewChat={cancelNewChat}
352
- messegerView={messegerView}
353
- maxFileSize={maxSize}
354
- loadingResources={loading}
355
- >
356
- {file ? (
357
- <ImagesContainer file={file} onClose={() => setFile(null)} />
358
- ) : (
359
- <>
360
- <div
361
- className='messenger__messages-header'
362
- style={{
363
- backgroundColor: theme?.headerAndSenderBg,
364
- border: `1px solid ${theme.borderColor}`,
365
- }}
366
- >
367
- {React.cloneElement(header)}
368
- </div>
369
-
370
- {loading && !messages.length ? (
371
- <MessagesContainer fowardRef={scrollContainerRef}>
372
- <SpinLoading />
373
- </MessagesContainer>
374
- ) : (
375
- <ScrollableContainer
376
- scrollContainerFowardRef={scrollContainerRef}
377
- loading={loading}
378
- hasNext={hasNext}
379
- onIntersect={onIntersect}
380
- >
381
- <Messages
382
- formatDate={formatDate}
383
- messages={messages}
384
- creatorId={creatorId}
385
- loading={loading}
386
- />
387
- </ScrollableContainer>
388
- )}
389
- </>
390
- )}
391
-
392
- <div
393
- className='messenger__messages-send'
394
- style={{
395
- backgroundColor: theme?.headerAndSenderBg,
396
- border: `1px solid ${theme.borderColor}`,
397
- }}
398
- >
399
- <SendMessageForm
400
- allowImages={allowImages}
401
- onSubmit={onSubmitNewMessage}
402
- file={file}
403
- updateFile={updateFile}
404
- current={current}
405
- isLoading={isSending}
406
- maxFileSize={maxSize}
407
- />
408
- </div>
409
- </MessagesContainerView>
410
- </div>
411
- )
412
- }
413
-
414
- export default MessengerMessages
@@ -1,145 +0,0 @@
1
- import React, { FormEvent, useState } from 'react'
2
-
3
- import InputFile from '../components/InputFile/InputFile'
4
- import Select from '../components/Select/Select'
5
- import Textarea from '../components/TextArea/TextArea'
6
- import useTheme from '../hooks/useThemes'
7
- import CloseIcon from '../icons/CloseIcon'
8
- import { IOption } from 'types'
9
- import { useTranslation } from 'react-i18next'
10
-
11
- interface IProps {
12
- submitNewChat: (values: FormData) => void
13
- cancelNewChat: () => void
14
- reasons: Array<IOption>
15
- products: Array<IOption>
16
- loading: boolean
17
- maxFileSize: string
18
- loadingResources: boolean
19
- }
20
-
21
- function NewChatForm ({
22
- submitNewChat,
23
- cancelNewChat,
24
- reasons,
25
- products,
26
- loading,
27
- maxFileSize,
28
- loadingResources,
29
- }: IProps) {
30
- const [reason, setReason] = useState<string>(reasons?.[0]?.value)
31
- const [product, setProduct] = useState<string>(products?.[0]?.value)
32
- const [message, setMessage] = useState<string>()
33
- const [fileList, setFileList] = useState<File[]>([])
34
- const { t } = useTranslation('newFormChat')
35
-
36
- const { theme } = useTheme()
37
-
38
- const onSubmit = (event: FormEvent) => {
39
- const data2 = new FormData()
40
- event.preventDefault()
41
-
42
- fileList.forEach((file) => {
43
- data2.append(`documents`, file, file.name)
44
- })
45
-
46
- if (reason) data2.append('reason', reason)
47
- if (product) data2.append('product', product)
48
-
49
- if (message) data2.append('message', message)
50
- submitNewChat(data2)
51
- }
52
-
53
- const onUpdateFile = (file: File) => {
54
- setFileList((files) => [...files, file])
55
- }
56
-
57
- const onRemoveFile = (file: File) => {
58
- setFileList(fileList.filter((item: File) => item !== file))
59
- }
60
-
61
- return (
62
- <div
63
- className='messenger__new-chat-form'
64
- style={{
65
- backgroundColor: theme.newChatFormBg,
66
- borderRadius: theme.newChatFormRadius,
67
- }}
68
- >
69
- <div className='messenger__new-chat-form-header'>
70
- <h2 className='messenger__new-chat-form-title'>
71
- <b style={{ color: theme.newChatFormTexts }}>{t('newChat')}</b>
72
- </h2>
73
-
74
- <button
75
- onClick={cancelNewChat}
76
- className='messenger__new-chat-form-close'
77
- >
78
- <CloseIcon />
79
- </button>
80
- </div>
81
-
82
- <h3
83
- className='messenger__disclaimer'
84
- style={{
85
- borderColor: theme.disclaimerPrimaryColor,
86
- color: theme.disclaimerTextColor,
87
- backgroundColor: theme.disclaimerSecondaryColor,
88
- }}
89
- >
90
- {t('description.1')} <b>{t('description.1/2bold')}</b>{' '}
91
- {t('description.2')}
92
- </h3>
93
-
94
- <form onSubmit={onSubmit} className='messenger__new-chat-fields'>
95
- <Select
96
- onChange={(value) => setReason(value)}
97
- options={reasons}
98
- placeholder={t('fields.reasons.placeholder')}
99
- name='reasons'
100
- value={reason}
101
- label={t('fields.reasons.label')}
102
- />
103
-
104
- <Select
105
- onChange={(value) => setProduct(value)}
106
- options={products}
107
- placeholder={t('fields.product.placeholder')}
108
- value={product}
109
- name='product'
110
- label={t('fields.product.label')}
111
- />
112
-
113
- <InputFile
114
- fileList={fileList}
115
- onUpdateFile={onUpdateFile}
116
- onRemoveFile={onRemoveFile}
117
- label={t('fields.document.label')}
118
- maxSize={maxFileSize}
119
- loading={loadingResources}
120
- />
121
-
122
- <Textarea
123
- onChange={(value) => setMessage(value)}
124
- placeholder={t('fields.message.placeholder')}
125
- name='message'
126
- label={t('fields.message.label')}
127
- />
128
-
129
- <button
130
- className={`w-100 ${!loading ? 'messenger__new-chat-form-send' : 'messenger__new-chat-form-send messenger__new-chat-form-send--disabled'}`}
131
- disabled={loading}
132
- type='submit'
133
- style={{
134
- backgroundColor: !loading ? theme.buttonPrimary : '#ccc',
135
- color: theme.buttonPrimaryText,
136
- }}
137
- >
138
- {!loading ? t('buttons.send') : t('buttons.sendingButton')}
139
- </button>
140
- </form>
141
- </div>
142
- )
143
- }
144
-
145
- export default NewChatForm
@@ -1,36 +0,0 @@
1
- import i18n from 'i18next'
2
- import { initReactI18next } from 'react-i18next'
3
-
4
- import pt from './locales/pt.json'
5
- import en from './locales/en.json'
6
-
7
- const resources = makeResources()
8
- function makeResources () {
9
- return {
10
- en: {
11
- newFormChat: en.newFormChat,
12
- messengerMessages: en.messengerMessages,
13
- messengerList: en.messengerList,
14
- },
15
- pt: {
16
- newFormChat: pt.newFormChat,
17
- messengerMessages: pt.messengerMessages,
18
- messengerList: pt.messengerList,
19
- },
20
- }
21
- }
22
-
23
- i18n.use(initReactI18next).init({
24
- resources,
25
- lng: 'pt',
26
- fallbackLng: 'pt',
27
- interpolation: {
28
- escapeValue: false,
29
- },
30
- })
31
-
32
- export default i18n
33
-
34
- export function setLanguage (lang: string) {
35
- i18n.changeLanguage(lang)
36
- }
@@ -1,64 +0,0 @@
1
- {
2
- "messengerList": {
3
- "noChatFound": "No chat found",
4
- "messengerAvatar": {
5
- "alt": "image of a user avatar"
6
- },
7
- "searchInput": {
8
- "placeholder": "Search chat..."
9
- }
10
- },
11
- "messengerMessages": {
12
- "selectConversation": "Select a conversation to view messages",
13
- "noMessagesFound": "No messages found",
14
- "errorSearchingMaxFileSize": "Error fetching maximum file size:",
15
- "incommingMessage": {
16
- "messageImage": "image in message"
17
- },
18
- "sendMessageForm": {
19
- "maxFileField": "Maximum size: {{maxFileField}}",
20
- "chatEnded": "Conversation ended",
21
- "typeMessage": "Type a message",
22
- "rightIcon": "Right icon"
23
- },
24
- "renderFileIcon": {
25
- "altImage": "files sent via agx chat"
26
- }
27
- },
28
- "newFormChat": {
29
- "newChat": "New Ticket",
30
- "description": {
31
- "1": "Your ticket will be answered as soon as possible! If you are absent from the ticket for",
32
- "1/2bold": "one hour",
33
- "2": "it will be automatically closed."
34
- },
35
- "fields": {
36
- "reasons": {
37
- "label": "Reasons",
38
- "placeholder": "Select a reason for the ticket"
39
- },
40
- "product": {
41
- "label": "Product (optional)",
42
- "placeholder": "Select the product related to the error"
43
- },
44
- "message": {
45
- "label": "Message",
46
- "placeholder": "Type your message here"
47
- },
48
- "document": {
49
- "label": "Document (optional)",
50
- "placeholder": "Select a document for the ticket"
51
- }
52
- },
53
- "buttons": {
54
- "send": "Send new ticket",
55
- "sendingButton": "Sending..."
56
- },
57
- "inputFile": {
58
- "chooseFile": "Choose file",
59
- "allowDocuments": "Only .png, .jpg, .pdf, .csv, .mp4, .doc or .docx files are accepted",
60
- "allowSizeDocument": "Maximum size: {{maxSize}}",
61
- "documentSendError": "Choose a JPG/PNG image, PDF, CSV, MP4 or DOC/DOCX file."
62
- }
63
- }
64
- }