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 React, { Fragment } from 'react'
2
- import { IList } from 'types'
3
- import ChatTabs from '../components/ChatTabs/ChatTabs'
4
- import ChatButtons from '../components/ChatButton/ChatButton'
5
- import SearchInput from '../components/SearchInput/SearchInput'
6
- import MessengerListItem, { activeItem } from './MessengerListItem'
7
- import useTheme from '../hooks/useThemes'
8
- import EmptyIcon from '../icons/EmptyIcon'
9
- import InfiniteScroll from '../components/InfiniteScroll/InfiniteScroll'
10
- import { useTranslation } from 'react-i18next'
11
-
12
- interface IMessengerList {
13
- affix?: React.ReactElement
14
- loading: boolean
15
- conversations: IList[]
16
- currentId?: string
17
- failed?: boolean
18
- showBadge: boolean
19
- tab?: 'list' | 'messages'
20
- className?: string
21
- onClick: (item: IList) => void
22
- searchChat: (search: string, key: string) => void
23
- searchKeys: { label: string; value: string }[]
24
- messegerView: 'empty' | 'messages' | 'newChat'
25
- helpDesk: boolean
26
- handleChangeTickets: (tab: string) => void
27
- loadingSearch: boolean
28
- chatListTabs: { value: string; label: string }[]
29
- chatButtons: {
30
- label: string
31
- onClick: () => void
32
- type: string
33
- canSee: boolean
34
- disabled?: boolean
35
- }[]
36
- canSeeDetailsChat: boolean
37
- hasNext: boolean
38
- onIntersect: () => void
39
- sliceCount: number
40
- currentViewerId: string
41
- }
42
-
43
- const ListLoading = () => {
44
- const { theme } = useTheme()
45
- return (
46
- <Fragment>
47
- {new Array(5).fill('').map((_, idx) => (
48
- <button
49
- key={`asideSkeleton${idx}`}
50
- style={{
51
- background: theme.listItemHover,
52
- borderBottom: idx < 4 ? `1px solid ${theme.borderColor}` : '0',
53
- }}
54
- className='messenger__aside-skeleton'
55
- />
56
- ))}
57
- </Fragment>
58
- )
59
- }
60
-
61
- function MessengerList ({
62
- affix,
63
- conversations,
64
- tab,
65
- className = '',
66
- loading,
67
- failed,
68
- showBadge,
69
- currentId,
70
- onClick,
71
- searchChat,
72
- searchKeys,
73
- messegerView,
74
- helpDesk,
75
- handleChangeTickets,
76
- chatListTabs,
77
- chatButtons,
78
- loadingSearch,
79
- canSeeDetailsChat,
80
- hasNext,
81
- onIntersect,
82
- sliceCount,
83
- currentViewerId,
84
- }: IMessengerList) {
85
- const { t } = useTranslation('messengerList')
86
- const { theme } = useTheme()
87
-
88
- return (
89
- <aside
90
- className={`messenger__aside ${className} ${tab === 'messages' ? 'messenger__mobile-hide' : ''}`}
91
- style={{
92
- border: `1px solid ${theme.borderColor}`,
93
- borderRadius: '20px 0 0 20px',
94
- background: theme.asideBg,
95
- }}
96
- >
97
- <div className='messenger__buttons-container'>
98
- <ChatButtons
99
- chatButtons={chatButtons}
100
- messegerView={messegerView}
101
- removeActiveItem={(e: React.MouseEvent<HTMLElement, MouseEvent>) => {
102
- activeItem(
103
- e,
104
- 'messenger__aside-list-item',
105
- 'messenger__aside-list-item--active'
106
- )
107
- }}
108
- />
109
-
110
- {helpDesk && (
111
- <SearchInput
112
- searchKeys={searchKeys}
113
- searchChat={searchChat}
114
- loadingSearch={loadingSearch}
115
- />
116
- )}
117
- </div>
118
-
119
- {affix && (
120
- <div className='messenger__aside-header'>
121
- {React.cloneElement(affix)}
122
- </div>
123
- )}
124
-
125
- <ChatTabs
126
- chatListTabs={chatListTabs}
127
- handleChangeTickets={handleChangeTickets}
128
- />
129
-
130
- <div className='messenger__aside-list'>
131
- <InfiniteScroll
132
- root={document.querySelector('.messenger__aside-list')}
133
- loading={loading}
134
- loadingCover={<ListLoading />}
135
- more={hasNext}
136
- fetch={onIntersect}
137
- >
138
- {Array.isArray(conversations) &&
139
- conversations.length > 0 &&
140
- conversations.slice(0, sliceCount).map((item) => {
141
- return (
142
- <div
143
- key={item?._id}
144
- className={`messenger__aside-item-container ${showBadge ? 'messenger__active-badge' : ''}`}
145
- >
146
- <MessengerListItem
147
- canSeeDetailsChat={canSeeDetailsChat}
148
- currentId={currentId}
149
- item={item}
150
- onClick={onClick}
151
- currentViewerId={currentViewerId}
152
- />
153
- </div>
154
- )
155
- })}
156
- </InfiniteScroll>
157
-
158
- {failed ||
159
- (conversations?.length === 0 && !loading && (
160
- <div className='messenger__aside-empty'>
161
- <EmptyIcon />
162
- <p>{t('noChatFound')}</p>
163
- </div>
164
- ))}
165
- </div>
166
- </aside>
167
- )
168
- }
169
-
170
- export default MessengerList
@@ -1,178 +0,0 @@
1
- import React, { useState, useMemo, useEffect } from 'react'
2
- import { IList } from 'types'
3
- import { SlaDates, timeAsDayjs } from '../classes/slaCalculations'
4
- import MessengerAvatar from '../components/MessengerAvatar/MessengerAvatar'
5
- import useTheme from '../hooks/useThemes'
6
- import TimerIcon from '../icons/TimerIcon'
7
-
8
- interface IListItem {
9
- onClick: (item: IList) => void
10
- item: IList
11
- currentId?: string
12
- canSeeDetailsChat: boolean
13
- currentViewerId: string
14
- }
15
-
16
- export function activeItem (
17
- e: React.MouseEvent<HTMLElement, MouseEvent>,
18
- defaultClass: string,
19
- activeClass: string
20
- ) {
21
- const click = document.querySelectorAll(`.${defaultClass}`)
22
- click.forEach((item) => {
23
- item.classList.remove(activeClass)
24
- })
25
-
26
- e.currentTarget.className += ` ${activeClass} `
27
- }
28
-
29
- function MessengerListItem ({
30
- item,
31
- onClick,
32
- canSeeDetailsChat,
33
- currentId,
34
- currentViewerId,
35
- }: IListItem) {
36
- const [unreadMessages, setUnreadMessages] = useState<
37
- typeof item.totalUnreadMessages
38
- >(item.totalUnreadMessages)
39
- const closedChat = useMemo(
40
- () =>
41
- item.status.current.state === 'final'
42
- ? 'messenger__aside-list-item--closed'
43
- : '',
44
- [item]
45
- )
46
- const [background, setBackground] = useState<string | undefined>('')
47
- const [counter, setCounter] = useState<number | null>(null)
48
-
49
- const { theme } = useTheme()
50
- const isInprogress = item.status?.current?.systemicValue === 'inprogress'
51
-
52
- const otherChatMember = useMemo(
53
- () =>
54
- item?.users.find((item) => item.uniqueCode !== currentViewerId) ||
55
- item.creator,
56
- [item?.users, currentViewerId]
57
- )
58
-
59
- useEffect(() => {
60
- let interval: NodeJS.Timer
61
- if (isInprogress && canSeeDetailsChat) {
62
- const sla = new SlaDates(
63
- timeAsDayjs(item.currentTime).diff(item.createdAt, 'second')
64
- )
65
- const diference = sla.calculateWorkingTime(
66
- timeAsDayjs(item.createdAt),
67
- timeAsDayjs(),
68
- { start: 9, end: 18 }
69
- )
70
-
71
- setCounter(diference)
72
- if (sla.canUpdateClock(timeAsDayjs())) {
73
- interval = setInterval(() => {
74
- setCounter((prev) => (prev !== null ? prev + 1 : null))
75
- }, 1000)
76
- }
77
- } else {
78
- setCounter(item.SLATimePassed ?? null)
79
- }
80
-
81
- return () => {
82
- clearInterval(interval)
83
- }
84
- }, [])
85
-
86
- useEffect(() => {
87
- setUnreadMessages(item.totalUnreadMessages)
88
- }, [item])
89
-
90
- function handleClick (
91
- e: React.MouseEvent<HTMLElement, MouseEvent>,
92
- item: IList
93
- ) {
94
- activeItem(
95
- e,
96
- 'messenger__aside-list-item',
97
- 'messenger__aside-list-item--active'
98
- )
99
- onClick(item)
100
- }
101
-
102
- function formatUnreadMessages (unread: number) {
103
- if (!unread) return 0
104
- if (unread >= 99) return 99
105
- return unread
106
- }
107
-
108
- const onMouseOver = () => {
109
- setBackground(theme?.listItemHover)
110
- }
111
-
112
- const onMouseLeave = () => {
113
- setBackground('')
114
- }
115
-
116
- const ShowTimer = () => {
117
- if (counter === null) return null
118
-
119
- return (
120
- <span
121
- className='messenger__aside-timer'
122
- style={{
123
- background: SlaDates.getColorsByTime(counter),
124
- color: 'var(--secondary-color)',
125
- width: 'fit-content',
126
- }}
127
- >
128
- <TimerIcon color='var(--secondary-color)' />
129
- &nbsp;
130
- <b>{SlaDates.secondsInHours(counter)}</b>
131
- </span>
132
- )
133
- }
134
-
135
- return (
136
- <div
137
- className={`messenger__aside-list-item ${closedChat}`}
138
- onClick={(e) => handleClick(e, item)}
139
- onMouseOver={onMouseOver}
140
- onMouseLeave={onMouseLeave}
141
- style={{
142
- color: theme?.asideFontColor,
143
- backgroundColor: currentId === item._id ? theme?.active : background,
144
- }}
145
- >
146
- <MessengerAvatar image={otherChatMember?.image}>
147
- {otherChatMember && otherChatMember.username
148
- ? otherChatMember.username.slice(0, 1)
149
- : ''}
150
- </MessengerAvatar>
151
-
152
- <div className='messenger__aside-list-item--info'>
153
- <p className='messenger__aside-list-item--title'>
154
- {otherChatMember?.username}
155
- </p>
156
- {item?.reason && (
157
- <p className='messenger__aside-list-item--description'>
158
- {item.reason}
159
- </p>
160
- )}
161
- {canSeeDetailsChat && <ShowTimer />}
162
- </div>
163
-
164
- {item && (
165
- <div className='messenger__aside-list-item--additional'>
166
- {canSeeDetailsChat && `#${item.protocol}`}
167
- {unreadMessages > 0 && (
168
- <div className='messenger__aside-list-item--unread'>
169
- <span>{formatUnreadMessages(unreadMessages)}</span>
170
- </div>
171
- )}
172
- </div>
173
- )}
174
- </div>
175
- )
176
- }
177
-
178
- export default MessengerListItem