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,143 +1,143 @@
1
- import { useState } from 'react'
2
- import { IList } from 'types'
3
-
4
- type _viewDesktop = 'empty' | 'messages' | 'newChat'
5
- type _viewMobile = 'list' | 'messages'
6
-
7
- export const useConversations = () => {
8
- const SLICE = 15
9
- const [sliceCount, setSliceCount] = useState(SLICE)
10
- const [conversations, setConversations] = useState<IList[]>([])
11
- const [currentChat, setCurrentChat] = useState<IList>()
12
- const [viewDesktop, setViewDesktop] = useState<_viewDesktop>('empty')
13
- const [viewMobile, setViewMobile] = useState<'list' | 'messages'>('list')
14
-
15
- const changeViewDesktop = (view: _viewDesktop) => {
16
- setViewDesktop(view)
17
- }
18
-
19
- const changeViewMobile = (view: _viewMobile) => {
20
- setViewMobile(view)
21
- }
22
-
23
- const selectChat = (chat: IList) => {
24
- setCurrentChat(chat)
25
- }
26
-
27
- const onIntersect = () => {
28
- setSliceCount((prev) => {
29
- const count = prev + SLICE
30
- return count
31
- })
32
- }
33
-
34
- const hasNext = () => {
35
- return conversations.length >= sliceCount
36
- }
37
-
38
- const resetConversations = () => {
39
- setConversations([])
40
- }
41
-
42
- const mapConversationsUnread = (prev: IList[]) => (id: string) => {
43
- return (prev || []).map((conversation) => {
44
- if (conversation?._id === id) {
45
- return {
46
- ...conversation,
47
- totalUnreadMessages: 0,
48
- }
49
- }
50
-
51
- return conversation
52
- })
53
- }
54
-
55
- const reorderConversations = (conversations: IList[], ticketId?: string) => {
56
- const index = conversations.findIndex(
57
- (conversation) => conversation._id === ticketId
58
- )
59
- if (index !== -1) {
60
- const conversationToMove = conversations.splice(index, 1)[0]
61
- conversations.unshift(conversationToMove)
62
- }
63
- }
64
-
65
- const mapConversationsIncrementUnread =
66
- (prev: IList[], ticketId?: string) => (id: string) => {
67
- const updatedConversations = (prev || []).map((conversation) => {
68
- if (conversation._id === id) {
69
- return {
70
- ...conversation,
71
- totalUnreadMessages:
72
- ticketId === id ? 0 : conversation.totalUnreadMessages + 1,
73
- }
74
- }
75
- return conversation
76
- })
77
-
78
- reorderConversations(updatedConversations, ticketId)
79
-
80
- return updatedConversations
81
- }
82
-
83
- const setAsRead = (id: string) => {
84
- setConversations((prev) => mapConversationsUnread(prev)(id))
85
- }
86
-
87
- const addConversations = (
88
- conversations: IList[],
89
- goToNewConversation?: (chat: IList) => void
90
- ) => {
91
- setConversations(conversations)
92
-
93
- if (goToNewConversation) goToNewConversation(conversations[0])
94
- }
95
-
96
- const addOneUnreadToTicket = (ticketId: string, currentChat?: string) => {
97
- setConversations((prev) => {
98
- return mapConversationsIncrementUnread(prev, currentChat)(ticketId)
99
- })
100
- }
101
-
102
- const removeClosedConversation = (ticketId: string) => {
103
- const filtred = conversations.filter(
104
- (conversation) => conversation._id !== ticketId
105
- )
106
- addConversations(filtred)
107
- }
108
-
109
- const closeIfIsCurrent = (ticketId: string) => {
110
- if (ticketId === currentChat?._id) {
111
- changeViewDesktop('empty')
112
- changeViewMobile('list')
113
- }
114
- }
115
-
116
- const onCloseChat = (ticketId: string) => {
117
- removeClosedConversation(ticketId)
118
- closeIfIsCurrent(ticketId)
119
- }
120
-
121
- const reset = () => {
122
- setSliceCount(SLICE)
123
- resetConversations()
124
- }
125
-
126
- return {
127
- onIntersect,
128
- reset,
129
- conversations,
130
- hasNext,
131
- addConversations,
132
- addOneUnreadToTicket,
133
- setAsRead,
134
- sliceCount,
135
- currentChat,
136
- selectChat,
137
- onCloseChat,
138
- changeViewDesktop,
139
- viewDesktop,
140
- changeViewMobile,
141
- viewMobile,
142
- }
143
- }
1
+ import { useState } from 'react'
2
+ import { IList } from 'types'
3
+
4
+ type _viewDesktop = 'empty' | 'messages' | 'newChat'
5
+ type _viewMobile = 'list' | 'messages'
6
+
7
+ export const useConversations = () => {
8
+ const SLICE = 15
9
+ const [sliceCount, setSliceCount] = useState(SLICE)
10
+ const [conversations, setConversations] = useState<IList[]>([])
11
+ const [currentChat, setCurrentChat] = useState<IList>()
12
+ const [viewDesktop, setViewDesktop] = useState<_viewDesktop>('empty')
13
+ const [viewMobile, setViewMobile] = useState<'list' | 'messages'>('list')
14
+
15
+ const changeViewDesktop = (view: _viewDesktop) => {
16
+ setViewDesktop(view)
17
+ }
18
+
19
+ const changeViewMobile = (view: _viewMobile) => {
20
+ setViewMobile(view)
21
+ }
22
+
23
+ const selectChat = (chat: IList) => {
24
+ setCurrentChat(chat)
25
+ }
26
+
27
+ const onIntersect = () => {
28
+ setSliceCount((prev) => {
29
+ const count = prev + SLICE
30
+ return count
31
+ })
32
+ }
33
+
34
+ const hasNext = () => {
35
+ return conversations.length >= sliceCount
36
+ }
37
+
38
+ const resetConversations = () => {
39
+ setConversations([])
40
+ }
41
+
42
+ const mapConversationsUnread = (prev: IList[]) => (id: string) => {
43
+ return (prev || []).map((conversation) => {
44
+ if (conversation?._id === id) {
45
+ return {
46
+ ...conversation,
47
+ totalUnreadMessages: 0,
48
+ }
49
+ }
50
+
51
+ return conversation
52
+ })
53
+ }
54
+
55
+ const reorderConversations = (conversations: IList[], ticketId?: string) => {
56
+ const index = conversations.findIndex(
57
+ (conversation) => conversation._id === ticketId
58
+ )
59
+ if (index !== -1) {
60
+ const conversationToMove = conversations.splice(index, 1)[0]
61
+ conversations.unshift(conversationToMove)
62
+ }
63
+ }
64
+
65
+ const mapConversationsIncrementUnread =
66
+ (prev: IList[], ticketId?: string) => (id: string) => {
67
+ const updatedConversations = (prev || []).map((conversation) => {
68
+ if (conversation._id === id) {
69
+ return {
70
+ ...conversation,
71
+ totalUnreadMessages:
72
+ ticketId === id ? 0 : conversation.totalUnreadMessages + 1,
73
+ }
74
+ }
75
+ return conversation
76
+ })
77
+
78
+ reorderConversations(updatedConversations, ticketId)
79
+
80
+ return updatedConversations
81
+ }
82
+
83
+ const setAsRead = (id: string) => {
84
+ setConversations((prev) => mapConversationsUnread(prev)(id))
85
+ }
86
+
87
+ const addConversations = (
88
+ conversations: IList[],
89
+ goToNewConversation?: (chat: IList) => void
90
+ ) => {
91
+ setConversations(conversations)
92
+
93
+ if (goToNewConversation) goToNewConversation(conversations[0])
94
+ }
95
+
96
+ const addOneUnreadToTicket = (ticketId: string, currentChat?: string) => {
97
+ setConversations((prev) => {
98
+ return mapConversationsIncrementUnread(prev, currentChat)(ticketId)
99
+ })
100
+ }
101
+
102
+ const removeClosedConversation = (ticketId: string) => {
103
+ const filtred = conversations.filter(
104
+ (conversation) => conversation._id !== ticketId
105
+ )
106
+ addConversations(filtred)
107
+ }
108
+
109
+ const closeIfIsCurrent = (ticketId: string) => {
110
+ if (ticketId === currentChat?._id) {
111
+ changeViewDesktop('empty')
112
+ changeViewMobile('list')
113
+ }
114
+ }
115
+
116
+ const onCloseChat = (ticketId: string) => {
117
+ removeClosedConversation(ticketId)
118
+ closeIfIsCurrent(ticketId)
119
+ }
120
+
121
+ const reset = () => {
122
+ setSliceCount(SLICE)
123
+ resetConversations()
124
+ }
125
+
126
+ return {
127
+ onIntersect,
128
+ reset,
129
+ conversations,
130
+ hasNext,
131
+ addConversations,
132
+ addOneUnreadToTicket,
133
+ setAsRead,
134
+ sliceCount,
135
+ currentChat,
136
+ selectChat,
137
+ onCloseChat,
138
+ changeViewDesktop,
139
+ viewDesktop,
140
+ changeViewMobile,
141
+ viewMobile,
142
+ }
143
+ }
@@ -1,49 +1,49 @@
1
- import { useState } from 'react'
2
- import { IMessages, ISocketMessage } from 'types'
3
-
4
- export const useMessages = () => {
5
- const [messages, setMessages] = useState<IMessages[]>([])
6
- const [totalMessages, setTotalMessages] = useState<number>(0)
7
-
8
- const addMessages = (messages: IMessages[]) => {
9
- setMessages(messages)
10
- }
11
- const addTotalMessages = (total: number) => {
12
- setTotalMessages(total)
13
- }
14
-
15
- const incrementMessages = (ticket: ISocketMessage, currentChatId: string) => {
16
- const existentMessage = messages.find(
17
- (item) => item.messagecode === ticket.message.messagecode
18
- )
19
- if (ticket.message.ticketId === currentChatId && !existentMessage) {
20
- addMessages([...messages, ticket.message])
21
- }
22
- }
23
-
24
- const updateMesssagesAsRead = (
25
- ticket: ISocketMessage,
26
- currentChatId: string
27
- ) => {
28
- if (ticket.markAsRead || currentChatId === ticket?.message?.ticketId) {
29
- const readMessages = messages.map((message) => ({
30
- ...message,
31
- everybodyHasRead: true,
32
- }))
33
- addMessages(readMessages)
34
- }
35
- }
36
-
37
- const hasOlderMessages = () => {
38
- return messages.length > 9 && messages.length < totalMessages
39
- }
40
-
41
- return {
42
- addMessages,
43
- messages,
44
- incrementMessages,
45
- updateMesssagesAsRead,
46
- addTotalMessages,
47
- hasOlderMessages,
48
- }
49
- }
1
+ import { useState } from 'react'
2
+ import { IMessages, ISocketMessage } from 'types'
3
+
4
+ export const useMessages = () => {
5
+ const [messages, setMessages] = useState<IMessages[]>([])
6
+ const [totalMessages, setTotalMessages] = useState<number>(0)
7
+
8
+ const addMessages = (messages: IMessages[]) => {
9
+ setMessages(messages)
10
+ }
11
+ const addTotalMessages = (total: number) => {
12
+ setTotalMessages(total)
13
+ }
14
+
15
+ const incrementMessages = (ticket: ISocketMessage, currentChatId: string) => {
16
+ const existentMessage = messages.find(
17
+ (item) => item.messagecode === ticket.message.messagecode
18
+ )
19
+ if (ticket.message.ticketId === currentChatId && !existentMessage) {
20
+ addMessages([...messages, ticket.message])
21
+ }
22
+ }
23
+
24
+ const updateMesssagesAsRead = (
25
+ ticket: ISocketMessage,
26
+ currentChatId: string
27
+ ) => {
28
+ if (ticket.markAsRead || currentChatId === ticket?.message?.ticketId) {
29
+ const readMessages = messages.map((message) => ({
30
+ ...message,
31
+ everybodyHasRead: true,
32
+ }))
33
+ addMessages(readMessages)
34
+ }
35
+ }
36
+
37
+ const hasOlderMessages = () => {
38
+ return messages.length > 9 && messages.length < totalMessages
39
+ }
40
+
41
+ return {
42
+ addMessages,
43
+ messages,
44
+ incrementMessages,
45
+ updateMesssagesAsRead,
46
+ addTotalMessages,
47
+ hasOlderMessages,
48
+ }
49
+ }
@@ -1,14 +1,14 @@
1
- import { useContext } from 'react'
2
- import { MessageThemeContext } from '../components/MessengerThemeWrapper/MessengerThemeWrapper'
3
-
4
- const useTheme = () => {
5
- const context = useContext(MessageThemeContext)
6
-
7
- if (context === undefined) {
8
- throw new Error('useTheme must be used within a ThemeProvider')
9
- }
10
-
11
- return context
12
- }
13
-
14
- export default useTheme
1
+ import { useContext } from 'react'
2
+ import { MessageThemeContext } from '../components/MessengerThemeWrapper/MessengerThemeWrapper'
3
+
4
+ const useTheme = () => {
5
+ const context = useContext(MessageThemeContext)
6
+
7
+ if (context === undefined) {
8
+ throw new Error('useTheme must be used within a ThemeProvider')
9
+ }
10
+
11
+ return context
12
+ }
13
+
14
+ export default useTheme
@@ -1,20 +1,20 @@
1
- import React from 'react'
2
- import useTheme from '../hooks/useThemes'
3
-
4
- export default function AttachFileIcon ({ ...rest }) {
5
- const { theme } = useTheme()
6
- return (
7
- <svg
8
- width='26'
9
- height='28'
10
- viewBox='0 0 26 28'
11
- xmlns='http://www.w3.org/2000/svg'
12
- {...rest}
13
- >
14
- <path
15
- d='M22.5464 2.73571C19.1821 -0.628572 13.7036 -0.628572 10.3429 2.73571L1.02143 12.05C0.960715 12.1107 0.928572 12.1929 0.928572 12.2786C0.928572 12.3643 0.960715 12.4464 1.02143 12.5071L2.33929 13.825C2.39953 13.885 2.48107 13.9186 2.56607 13.9186C2.65108 13.9186 2.73262 13.885 2.79286 13.825L12.1143 4.51071C13.2714 3.35357 14.8107 2.71786 16.4464 2.71786C18.0821 2.71786 19.6214 3.35357 20.775 4.51071C21.9321 5.66786 22.5679 7.20714 22.5679 8.83929C22.5679 10.475 21.9321 12.0107 20.775 13.1679L11.275 22.6643L9.73572 24.2036C8.29643 25.6429 5.95714 25.6429 4.51786 24.2036C3.82143 23.5071 3.43929 22.5821 3.43929 21.5964C3.43929 20.6107 3.82143 19.6857 4.51786 18.9893L13.9429 9.56786C14.1821 9.33214 14.4964 9.2 14.8321 9.2H14.8357C15.1714 9.2 15.4821 9.33214 15.7179 9.56786C15.9571 9.80714 16.0857 10.1214 16.0857 10.4571C16.0857 10.7893 15.9536 11.1036 15.7179 11.3393L8.01429 19.0357C7.95357 19.0964 7.92143 19.1786 7.92143 19.2643C7.92143 19.35 7.95357 19.4321 8.01429 19.4929L9.33214 20.8107C9.39238 20.8707 9.47393 20.9044 9.55893 20.9044C9.64393 20.9044 9.72548 20.8707 9.78572 20.8107L17.4857 13.1107C18.1964 12.4 18.5857 11.4571 18.5857 10.4536C18.5857 9.45 18.1929 8.50357 17.4857 7.79643C16.0179 6.32857 13.6321 6.33214 12.1643 7.79643L11.25 8.71429L2.74286 17.2179C2.16547 17.7919 1.70778 18.4748 1.39634 19.227C1.0849 19.9793 0.925905 20.7858 0.928572 21.6C0.928572 23.2536 1.575 24.8071 2.74286 25.975C3.95357 27.1821 5.53929 27.7857 7.125 27.7857C8.71072 27.7857 10.2964 27.1821 11.5036 25.975L22.5464 14.9393C24.1714 13.3107 25.0714 11.1429 25.0714 8.83929C25.075 6.53214 24.175 4.36429 22.5464 2.73571Z'
16
- fill={theme.uploadFileIconColor}
17
- />
18
- </svg>
19
- )
20
- }
1
+ import React from 'react'
2
+ import useTheme from '../hooks/useThemes'
3
+
4
+ export default function AttachFileIcon ({ ...rest }) {
5
+ const { theme } = useTheme()
6
+ return (
7
+ <svg
8
+ width='26'
9
+ height='28'
10
+ viewBox='0 0 26 28'
11
+ xmlns='http://www.w3.org/2000/svg'
12
+ {...rest}
13
+ >
14
+ <path
15
+ d='M22.5464 2.73571C19.1821 -0.628572 13.7036 -0.628572 10.3429 2.73571L1.02143 12.05C0.960715 12.1107 0.928572 12.1929 0.928572 12.2786C0.928572 12.3643 0.960715 12.4464 1.02143 12.5071L2.33929 13.825C2.39953 13.885 2.48107 13.9186 2.56607 13.9186C2.65108 13.9186 2.73262 13.885 2.79286 13.825L12.1143 4.51071C13.2714 3.35357 14.8107 2.71786 16.4464 2.71786C18.0821 2.71786 19.6214 3.35357 20.775 4.51071C21.9321 5.66786 22.5679 7.20714 22.5679 8.83929C22.5679 10.475 21.9321 12.0107 20.775 13.1679L11.275 22.6643L9.73572 24.2036C8.29643 25.6429 5.95714 25.6429 4.51786 24.2036C3.82143 23.5071 3.43929 22.5821 3.43929 21.5964C3.43929 20.6107 3.82143 19.6857 4.51786 18.9893L13.9429 9.56786C14.1821 9.33214 14.4964 9.2 14.8321 9.2H14.8357C15.1714 9.2 15.4821 9.33214 15.7179 9.56786C15.9571 9.80714 16.0857 10.1214 16.0857 10.4571C16.0857 10.7893 15.9536 11.1036 15.7179 11.3393L8.01429 19.0357C7.95357 19.0964 7.92143 19.1786 7.92143 19.2643C7.92143 19.35 7.95357 19.4321 8.01429 19.4929L9.33214 20.8107C9.39238 20.8707 9.47393 20.9044 9.55893 20.9044C9.64393 20.9044 9.72548 20.8707 9.78572 20.8107L17.4857 13.1107C18.1964 12.4 18.5857 11.4571 18.5857 10.4536C18.5857 9.45 18.1929 8.50357 17.4857 7.79643C16.0179 6.32857 13.6321 6.33214 12.1643 7.79643L11.25 8.71429L2.74286 17.2179C2.16547 17.7919 1.70778 18.4748 1.39634 19.227C1.0849 19.9793 0.925905 20.7858 0.928572 21.6C0.928572 23.2536 1.575 24.8071 2.74286 25.975C3.95357 27.1821 5.53929 27.7857 7.125 27.7857C8.71072 27.7857 10.2964 27.1821 11.5036 25.975L22.5464 14.9393C24.1714 13.3107 25.0714 11.1429 25.0714 8.83929C25.075 6.53214 24.175 4.36429 22.5464 2.73571Z'
16
+ fill={theme.uploadFileIconColor}
17
+ />
18
+ </svg>
19
+ )
20
+ }
@@ -1,26 +1,26 @@
1
- import * as React from 'react'
2
- import { SVGProps } from 'react'
3
-
4
- const CSVFileIcon = (props: SVGProps<SVGSVGElement>) => (
5
- <svg
6
- xmlns='http://www.w3.org/2000/svg'
7
- width={40}
8
- height={40}
9
- viewBox='0 0 32 32'
10
- {...props}
11
- >
12
- <rect width='32' height='32' rx='5' fill='#21A366' />
13
- <text
14
- x='16'
15
- y='22'
16
- textAnchor='middle'
17
- fontSize='12'
18
- fill='#fff'
19
- fontWeight='bold'
20
- >
21
- CSV
22
- </text>
23
- </svg>
24
- )
25
-
26
- export default CSVFileIcon
1
+ import * as React from 'react'
2
+ import { SVGProps } from 'react'
3
+
4
+ const CSVFileIcon = (props: SVGProps<SVGSVGElement>) => (
5
+ <svg
6
+ xmlns='http://www.w3.org/2000/svg'
7
+ width={40}
8
+ height={40}
9
+ viewBox='0 0 32 32'
10
+ {...props}
11
+ >
12
+ <rect width='32' height='32' rx='5' fill='#21A366' />
13
+ <text
14
+ x='16'
15
+ y='22'
16
+ textAnchor='middle'
17
+ fontSize='12'
18
+ fill='#fff'
19
+ fontWeight='bold'
20
+ >
21
+ CSV
22
+ </text>
23
+ </svg>
24
+ )
25
+
26
+ export default CSVFileIcon
@@ -1,20 +1,20 @@
1
- import React from 'react'
2
- import useTheme from '../hooks/useThemes'
3
-
4
- export default function CloseIcon () {
5
- const { theme } = useTheme()
6
- return (
7
- <svg
8
- width='21'
9
- height='21'
10
- viewBox='0 0 21 21'
11
- fill='none'
12
- xmlns='http://www.w3.org/2000/svg'
13
- >
14
- <path
15
- d='M13.4519 10.9583L20.435 3.9751C20.7664 3.64426 20.9529 3.19532 20.9533 2.72704C20.9537 2.25875 20.7681 1.80949 20.4372 1.47807C20.1064 1.14665 19.6574 0.960225 19.1892 0.959812C18.7209 0.959398 18.2716 1.14503 17.9402 1.47586L10.957 8.45902L3.97388 1.47586C3.64246 1.14444 3.19296 0.958252 2.72426 0.958252C2.25556 0.958252 1.80606 1.14444 1.47464 1.47586C1.14322 1.80728 0.957031 2.25678 0.957031 2.72548C0.957031 3.19418 1.14322 3.64368 1.47464 3.9751L8.4578 10.9583L1.47464 17.9414C1.14322 18.2728 0.957031 18.7223 0.957031 19.191C0.957031 19.6597 1.14322 20.1092 1.47464 20.4406C1.80606 20.7721 2.25556 20.9583 2.72426 20.9583C3.19296 20.9583 3.64246 20.7721 3.97388 20.4406L10.957 13.4575L17.9402 20.4406C18.2716 20.7721 18.7211 20.9583 19.1898 20.9583C19.6585 20.9583 20.108 20.7721 20.4394 20.4406C20.7708 20.1092 20.957 19.6597 20.957 19.191C20.957 18.7223 20.7708 18.2728 20.4394 17.9414L13.4519 10.9583Z'
16
- fill={theme.newChatFormTexts ?? '#476077'}
17
- />
18
- </svg>
19
- )
20
- }
1
+ import React from 'react'
2
+ import useTheme from '../hooks/useThemes'
3
+
4
+ export default function CloseIcon () {
5
+ const { theme } = useTheme()
6
+ return (
7
+ <svg
8
+ width='21'
9
+ height='21'
10
+ viewBox='0 0 21 21'
11
+ fill='none'
12
+ xmlns='http://www.w3.org/2000/svg'
13
+ >
14
+ <path
15
+ d='M13.4519 10.9583L20.435 3.9751C20.7664 3.64426 20.9529 3.19532 20.9533 2.72704C20.9537 2.25875 20.7681 1.80949 20.4372 1.47807C20.1064 1.14665 19.6574 0.960225 19.1892 0.959812C18.7209 0.959398 18.2716 1.14503 17.9402 1.47586L10.957 8.45902L3.97388 1.47586C3.64246 1.14444 3.19296 0.958252 2.72426 0.958252C2.25556 0.958252 1.80606 1.14444 1.47464 1.47586C1.14322 1.80728 0.957031 2.25678 0.957031 2.72548C0.957031 3.19418 1.14322 3.64368 1.47464 3.9751L8.4578 10.9583L1.47464 17.9414C1.14322 18.2728 0.957031 18.7223 0.957031 19.191C0.957031 19.6597 1.14322 20.1092 1.47464 20.4406C1.80606 20.7721 2.25556 20.9583 2.72426 20.9583C3.19296 20.9583 3.64246 20.7721 3.97388 20.4406L10.957 13.4575L17.9402 20.4406C18.2716 20.7721 18.7211 20.9583 19.1898 20.9583C19.6585 20.9583 20.108 20.7721 20.4394 20.4406C20.7708 20.1092 20.957 19.6597 20.957 19.191C20.957 18.7223 20.7708 18.2728 20.4394 17.9414L13.4519 10.9583Z'
16
+ fill={theme.newChatFormTexts ?? '#476077'}
17
+ />
18
+ </svg>
19
+ )
20
+ }
@@ -1,54 +1,54 @@
1
- import * as React from 'react'
2
- import { SVGProps } from 'react'
3
- const FileDoc = (props: SVGProps<SVGSVGElement>) => (
4
- <svg
5
- xmlns='http://www.w3.org/2000/svg'
6
- xmlnsXlink='http://www.w3.org/1999/xlink'
7
- id='Layer_1'
8
- width={800}
9
- height={800}
10
- data-name='Layer 1'
11
- viewBox='0 0 32 32'
12
- {...props}
13
- >
14
- <defs>
15
- <linearGradient
16
- id='doc-gradient'
17
- x1={6.65}
18
- x2={27.27}
19
- y1={6.65}
20
- y2={27.27}
21
- gradientUnits='userSpaceOnUse'
22
- >
23
- <stop offset={0} stopColor='#00a6fb' />
24
- <stop offset={1} stopColor='#0094ce' />
25
- </linearGradient>
26
- <linearGradient
27
- xlinkHref='#doc-gradient'
28
- id='doc-gradient-2'
29
- x1={6}
30
- x2={12}
31
- y1={5}
32
- y2={5}
33
- />
34
- <style>{'.cls-3{fill:#f8edeb}'}</style>
35
- </defs>
36
- <path
37
- d='M23.5 2h-12a.47.47 0 0 0-.35.15l-5 5A.47.47 0 0 0 6 7.5v20A2.5 2.5 0 0 0 8.5 30h15a2.5 2.5 0 0 0 2.5-2.5v-23A2.5 2.5 0 0 0 23.5 2Z'
38
- style={{
39
- fill: '#00a6fb',
40
- }}
41
- />
42
- <path
43
- d='M11.69 2a.47.47 0 0 0-.54.11l-5 5a.47.47 0 0 0-.15.58.5.5 0 0 0 .5.31h3A2.5 2.5 0 0 0 12 5.5v-3a.5.5 0 0 0-.31-.5Z'
44
- style={{
45
- fill: '#0094ce',
46
- }}
47
- />
48
- <path
49
- d='M16 21a2 2 0 0 1-2-2v-6a2 2 0 0 1 4 0v6a2 2 0 0 1-2 2Zm0-9a1 1 0 0 0-1 1v6a1 1 0 0 0 2 0v-6a1 1 0 0 0-1-1ZM9.5 21a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5 3.5 3.5 0 0 1 3.5 3.5v3A3.5 3.5 0 0 1 9.5 21Zm.5-8.95V20a2.5 2.5 0 0 0 2-2.45v-3a2.5 2.5 0 0 0-2-2.5ZM21 21a2 2 0 0 1-2-2v-6a2 2 0 0 1 4 0 .5.5 0 0 1-1 0 1 1 0 0 0-2 0v6a1 1 0 0 0 2 0 .5.5 0 0 1 1 0 2 2 0 0 1-2 2Z'
50
- className='cls-3'
51
- />
52
- </svg>
53
- )
54
- export default FileDoc
1
+ import * as React from 'react'
2
+ import { SVGProps } from 'react'
3
+ const FileDoc = (props: SVGProps<SVGSVGElement>) => (
4
+ <svg
5
+ xmlns='http://www.w3.org/2000/svg'
6
+ xmlnsXlink='http://www.w3.org/1999/xlink'
7
+ id='Layer_1'
8
+ width={800}
9
+ height={800}
10
+ data-name='Layer 1'
11
+ viewBox='0 0 32 32'
12
+ {...props}
13
+ >
14
+ <defs>
15
+ <linearGradient
16
+ id='doc-gradient'
17
+ x1={6.65}
18
+ x2={27.27}
19
+ y1={6.65}
20
+ y2={27.27}
21
+ gradientUnits='userSpaceOnUse'
22
+ >
23
+ <stop offset={0} stopColor='#00a6fb' />
24
+ <stop offset={1} stopColor='#0094ce' />
25
+ </linearGradient>
26
+ <linearGradient
27
+ xlinkHref='#doc-gradient'
28
+ id='doc-gradient-2'
29
+ x1={6}
30
+ x2={12}
31
+ y1={5}
32
+ y2={5}
33
+ />
34
+ <style>{'.cls-3{fill:#f8edeb}'}</style>
35
+ </defs>
36
+ <path
37
+ d='M23.5 2h-12a.47.47 0 0 0-.35.15l-5 5A.47.47 0 0 0 6 7.5v20A2.5 2.5 0 0 0 8.5 30h15a2.5 2.5 0 0 0 2.5-2.5v-23A2.5 2.5 0 0 0 23.5 2Z'
38
+ style={{
39
+ fill: '#00a6fb',
40
+ }}
41
+ />
42
+ <path
43
+ d='M11.69 2a.47.47 0 0 0-.54.11l-5 5a.47.47 0 0 0-.15.58.5.5 0 0 0 .5.31h3A2.5 2.5 0 0 0 12 5.5v-3a.5.5 0 0 0-.31-.5Z'
44
+ style={{
45
+ fill: '#0094ce',
46
+ }}
47
+ />
48
+ <path
49
+ d='M16 21a2 2 0 0 1-2-2v-6a2 2 0 0 1 4 0v6a2 2 0 0 1-2 2Zm0-9a1 1 0 0 0-1 1v6a1 1 0 0 0 2 0v-6a1 1 0 0 0-1-1ZM9.5 21a.5.5 0 0 1-.5-.5v-9a.5.5 0 0 1 .5-.5 3.5 3.5 0 0 1 3.5 3.5v3A3.5 3.5 0 0 1 9.5 21Zm.5-8.95V20a2.5 2.5 0 0 0 2-2.45v-3a2.5 2.5 0 0 0-2-2.5ZM21 21a2 2 0 0 1-2-2v-6a2 2 0 0 1 4 0 .5.5 0 0 1-1 0 1 1 0 0 0-2 0v6a1 1 0 0 0 2 0 .5.5 0 0 1 1 0 2 2 0 0 1-2 2Z'
50
+ className='cls-3'
51
+ />
52
+ </svg>
53
+ )
54
+ export default FileDoc