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,45 +0,0 @@
1
- .input-search {
2
- display: flex;
3
- align-items: center;
4
- justify-content: center;
5
- width: 100%;
6
- margin: 1rem 0;
7
- position: relative;
8
-
9
- &__select {
10
- border-radius: 30px 0 0 30px;
11
- padding: 10px;
12
- background: transparent;
13
- margin-left: 1rem;
14
- width: 30%;
15
- }
16
-
17
- &__option {
18
- color: black;
19
- }
20
-
21
- &__search {
22
- width: 70%;
23
- margin-right: 1rem;
24
- border-radius: 0 30px 30px 0;
25
- padding: 9px;
26
- color: var(--secondary-color);
27
- border: var(--secondary-color) 1px solid;
28
- background: transparent;
29
- position: relative;
30
-
31
- &::placeholder {
32
- color: var(--secondary-color);
33
- opacity: 60%;
34
- }
35
- }
36
-
37
- &__icon {
38
- border: none;
39
- background: transparent;
40
- position: absolute;
41
- right: 2rem;
42
- display: flex;
43
- cursor: pointer;
44
- }
45
- }
@@ -1,77 +0,0 @@
1
- import SearchIcon from '../../icons/SearchIcon'
2
- import React, { useState } from 'react'
3
- import useTheme from '../../hooks/useThemes'
4
- import { useTranslation } from 'react-i18next'
5
-
6
- interface IProps {
7
- searchChat: (value: string, key: string) => void
8
- searchKeys: { label: string; value: string }[]
9
- loadingSearch: boolean
10
- }
11
-
12
- function SearchInput ({ searchChat, searchKeys, loadingSearch }: IProps) {
13
- const { t } = useTranslation('messengerList')
14
- const [searchKey, setSearchKey] = useState<string>(searchKeys[0].value)
15
- const [searchValue, setSearchValue] = useState<string>('')
16
- const { theme } = useTheme()
17
-
18
- const onSearch = (event: React.ChangeEvent<HTMLInputElement>) => {
19
- setSearchValue(event.target.value)
20
- }
21
-
22
- const handleKeyPress = (event: React.KeyboardEvent<HTMLInputElement>) => {
23
- if (event.key === 'Enter') {
24
- searchChat(searchValue, searchKey)
25
- }
26
- }
27
-
28
- return (
29
- <div className='input-search'>
30
- <select
31
- className='input-search__select'
32
- onChange={(e) => setSearchKey(e.target.value)}
33
- style={{
34
- color: theme.asideFontColor,
35
- border: `${theme.asideFontColor} 1px solid`,
36
- }}
37
- >
38
- {searchKeys.map((item, index) => (
39
- <option
40
- className='input-search__option'
41
- key={index}
42
- value={item.value}
43
- >
44
- {item.label}
45
- </option>
46
- ))}
47
- </select>
48
-
49
- <input
50
- className='input-search__search'
51
- placeholder={t('searchInput.placeholder')}
52
- onChange={onSearch}
53
- onKeyDown={handleKeyPress}
54
- style={{
55
- color: theme.asideFontColor,
56
- border: `${theme.asideFontColor} 1px solid`,
57
- borderLeft: 0,
58
- }}
59
- />
60
-
61
- <button
62
- className='input-search__icon'
63
- onClick={() => searchChat(searchValue, searchKey)}
64
- >
65
- {loadingSearch ? (
66
- <div className='messenger__messages-loading'>
67
- <div className='messenger__messages-loading--loader' />
68
- </div>
69
- ) : (
70
- <SearchIcon />
71
- )}
72
- </button>
73
- </div>
74
- )
75
- }
76
-
77
- export default SearchInput
@@ -1,22 +0,0 @@
1
- .form-select {
2
- margin-bottom: 1rem;
3
- width: 100%;
4
-
5
- &__label {
6
- color: @title-form-color;
7
- font-weight: bold;
8
- margin: 0.5rem;
9
- }
10
-
11
- &__input {
12
- border: 1.5px solid hsl(0, 0%, 80%);
13
- border-radius: 4px;
14
- margin-top: 0.5rem;
15
- padding: 8px 8px;
16
- width: 100%;
17
-
18
- &:focus {
19
- outline: #2684ff 2px solid !important;
20
- }
21
- }
22
- }
@@ -1,56 +0,0 @@
1
- import React from 'react'
2
- import useTheme from '../../hooks/useThemes'
3
- interface IProps {
4
- options: {
5
- label: string
6
- value: string
7
- }[]
8
- label: string
9
- onChange: (value: string) => void
10
- name: string
11
- placeholder: string
12
- value: string
13
- }
14
-
15
- function SelectNew ({
16
- options,
17
- name,
18
- placeholder,
19
- label,
20
- onChange,
21
- value,
22
- }: IProps) {
23
- const { theme } = useTheme()
24
- return (
25
- <div className='form-select'>
26
- <label
27
- htmlFor={name}
28
- className='form-select__label'
29
- style={{ color: theme.newChatFormTexts }}
30
- >
31
- {label}
32
- </label>
33
- <select
34
- name={name}
35
- className='form-select__input'
36
- onChange={(e) => onChange(e.target.value)}
37
- value={value}
38
- style={{
39
- backgroundColor: theme.inputBg,
40
- color: theme.newChatFormTexts,
41
- }}
42
- >
43
- <option value='' disabled hidden>
44
- {placeholder}
45
- </option>
46
- {options.map((motivo) => (
47
- <option key={motivo.value} value={motivo.value}>
48
- {motivo.label}
49
- </option>
50
- ))}
51
- </select>
52
- </div>
53
- )
54
- }
55
-
56
- export default SelectNew
@@ -1,254 +0,0 @@
1
- import useTheme from '../../hooks/useThemes'
2
- import React, {
3
- Fragment,
4
- MutableRefObject,
5
- useMemo,
6
- useRef,
7
- useState,
8
- } from 'react'
9
- import { IList } from 'types'
10
- import AttachFileIcon from '../../../Messenger/icons/AttachFileIcon'
11
- import rightArrow from '../../../../assets/right-arrow.svg'
12
- import { SpinLoading } from '../../views/MessengerMessages'
13
- import ToolTip from '../Tooltip/Tooltip'
14
- import { useTranslation } from 'react-i18next'
15
-
16
- interface IProps {
17
- allowImages: boolean
18
- current?: IList
19
- onSubmit: (value: FormData, callback: () => void) => void
20
- file?: File | null
21
- updateFile: (file: File | null) => void
22
- isLoading?: boolean
23
- maxFileSize: string
24
- }
25
-
26
- function AllowDocuments ({
27
- allowImages,
28
- attachFile,
29
- handleFile,
30
- closedChat,
31
- maxFileField,
32
- }: {
33
- allowImages: boolean
34
- attachFile: MutableRefObject<HTMLInputElement | null>
35
- handleFile: (e: React.ChangeEvent<HTMLInputElement>) => void
36
- closedChat: boolean
37
- maxFileField: string
38
- }) {
39
- const { t } = useTranslation('messengerMessages')
40
-
41
- if (allowImages) {
42
- return (
43
- <Fragment>
44
- <input
45
- type='file'
46
- size={1}
47
- className='messenger__messages-send--file'
48
- ref={attachFile}
49
- onChange={handleFile}
50
- accept='.jpg, .jpeg, .png, .pdf, .doc, .docx, .mp4, .csv'
51
- />
52
-
53
- <ToolTip text={t('sendMessageForm.maxFileField', { maxFileField })}>
54
- <AttachFileIcon
55
- className={`messenger__messages-send__attach ${closedChat ? 'messenger__messages-send__attach--disabled' : ''}`}
56
- onClick={() => (!closedChat ? attachFile.current?.click() : null)}
57
- />
58
- </ToolTip>
59
- </Fragment>
60
- )
61
- }
62
-
63
- return <></>
64
- }
65
-
66
- function SendMessageForm ({
67
- allowImages,
68
- current,
69
- onSubmit,
70
- file,
71
- updateFile,
72
- isLoading,
73
- maxFileSize,
74
- }: IProps) {
75
- const { t } = useTranslation('messengerMessages')
76
- const [formHeight, setFormHeight] = useState<number>(100)
77
- const [sending, setSending] = useState<boolean>(false)
78
-
79
- const inputRef: MutableRefObject<HTMLTextAreaElement | null> = useRef(null)
80
- const attachFile: MutableRefObject<HTMLInputElement | null> = useRef(null)
81
-
82
- const closedChat = useMemo(
83
- () => current?.status.current.state === 'final',
84
- [current]
85
- )
86
-
87
- const { theme } = useTheme()
88
-
89
- function correctTextAreaHeight (styleConfig: {
90
- height: number
91
- overflow: string
92
- }) {
93
- const textarea = inputRef.current
94
- if (textarea) {
95
- textarea.style.height = `${styleConfig.height}px`
96
- textarea.style.overflowY = styleConfig.overflow
97
- }
98
- }
99
-
100
- function resetHeights () {
101
- const inicialFormHeight = 100
102
- const inicialTextAreaHeight = 50
103
- setFormHeight(inicialFormHeight)
104
- correctTextAreaHeight({ height: inicialTextAreaHeight, overflow: 'hidden' })
105
- }
106
-
107
- function adjustFormHeight (textareaRef: typeof inputRef.current) {
108
- if (textareaRef) {
109
- const initialHeight = 50
110
- const maxHeight = 80
111
- const newHeight = textareaRef.scrollHeight
112
-
113
- if (newHeight > maxHeight) {
114
- correctTextAreaHeight({
115
- height: maxHeight,
116
- overflow: 'auto',
117
- })
118
- return maxHeight + initialHeight
119
- }
120
-
121
- correctTextAreaHeight({
122
- height: initialHeight,
123
- overflow: 'auto',
124
- })
125
- return initialHeight * 2
126
- }
127
-
128
- return formHeight
129
- }
130
-
131
- function handleTextareaChange () {
132
- const textarea = inputRef.current
133
- setFormHeight(adjustFormHeight(textarea))
134
- }
135
-
136
- function handleSubmit (e?: React.FormEvent<HTMLFormElement>) {
137
- e?.preventDefault()
138
- if (sending) return
139
- setSending(true)
140
-
141
- const data = new FormData()
142
- if (file) data.append('file', file)
143
- if (inputRef.current?.value) data.append('message', inputRef.current?.value)
144
-
145
- onSubmit(data, () => {
146
- if (inputRef.current) inputRef.current.value = ''
147
- if (file) updateFile(null)
148
- setSending(false)
149
- resetHeights()
150
- })
151
- }
152
-
153
- function handleFile (e: React.ChangeEvent<HTMLInputElement>) {
154
- if (e.target.files) {
155
- const file = e.target.files[0]
156
- const allowedTypes = [
157
- 'image/png',
158
- 'image/jpeg',
159
- 'application/pdf',
160
- 'application/msword',
161
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
162
- 'text/csv',
163
- 'video/mp4',
164
- ]
165
- const allowedExtensions = [
166
- 'png',
167
- 'jpeg',
168
- 'jpg',
169
- 'pdf',
170
- 'doc',
171
- 'docx',
172
- 'csv',
173
- 'mp4',
174
- ]
175
- const fileType = file?.type
176
- const fileExtension = file?.name.split('.').pop()?.toLowerCase()
177
- const isAllowed = fileType
178
- ? allowedTypes.includes(fileType)
179
- : fileExtension
180
- ? allowedExtensions.includes(fileExtension)
181
- : false
182
- if (isAllowed) {
183
- updateFile(file)
184
- }
185
- }
186
- }
187
-
188
- return (
189
- <form
190
- onSubmit={handleSubmit}
191
- className='messenger__messages-send--form'
192
- style={{
193
- height: `${formHeight}px`,
194
- maxHeight: '150px',
195
- }}
196
- >
197
- <div className='messenger__messages-send__input-container'>
198
- <textarea
199
- onChange={handleTextareaChange}
200
- placeholder={
201
- closedChat
202
- ? t('sendMessageForm.chatEnded')
203
- : t('sendMessageForm.typeMessage')
204
- }
205
- ref={inputRef}
206
- onKeyDown={(e) => {
207
- if (e.key === 'Enter' && !e.shiftKey) {
208
- e.preventDefault()
209
- handleSubmit()
210
- }
211
- }}
212
- className={`messenger__messages-send__input ${closedChat || sending ? 'messenger__messages-send__input--disabled' : ''} `}
213
- disabled={closedChat || sending}
214
- style={{
215
- backgroundColor: theme?.inputBg,
216
- }}
217
- />
218
-
219
- <AllowDocuments
220
- allowImages={allowImages}
221
- handleFile={handleFile}
222
- attachFile={attachFile}
223
- closedChat={closedChat}
224
- maxFileField={maxFileSize}
225
- />
226
- </div>
227
-
228
- {isLoading ? (
229
- <div className='messenger__messages-sending'>
230
- <SpinLoading />
231
- </div>
232
- ) : (
233
- <button
234
- type='submit'
235
- className={`messenger__messages-send__button ${closedChat || sending ? 'messenger__messages-send__button--disabled' : ''}`}
236
- disabled={closedChat || sending}
237
- style={{
238
- backgroundColor: theme?.buttonPrimary,
239
- }}
240
- >
241
- <img
242
- alt={t('sendMessageForm.rightIcon')}
243
- height={25}
244
- width={25}
245
- className='ml-1'
246
- src={rightArrow}
247
- />
248
- </button>
249
- )}
250
- </form>
251
- )
252
- }
253
-
254
- export default SendMessageForm
@@ -1,91 +0,0 @@
1
- import useTheme from '../../hooks/useThemes'
2
- import React, { useCallback, useState } from 'react'
3
- import { IMessagesBalloon } from 'types'
4
- import ReadIcon from '../../icons/ReadIcon'
5
- import ReactSimpleImageViewer from 'react-simple-image-viewer'
6
- import { MessageImage } from '../IncomingMessage/IncomingMessage'
7
- import DocMessage from '../DocMessage/DocMessage'
8
-
9
- function SenderMessages ({
10
- date,
11
- message,
12
- read,
13
- hasFile,
14
- file,
15
- formatDate,
16
- id,
17
- }: IMessagesBalloon) {
18
- const [currentImage, setCurrentImage] = useState(0)
19
- const [isViewerOpen, setIsViewerOpen] = useState(false)
20
- const { theme } = useTheme()
21
-
22
- const openImageViewer = useCallback((index: number) => {
23
- setCurrentImage(index)
24
- setIsViewerOpen(true)
25
- }, [])
26
-
27
- const closeImageViewer = () => {
28
- setCurrentImage(0)
29
- setIsViewerOpen(false)
30
- }
31
-
32
- const isDoc = [
33
- 'application/msword',
34
- 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
35
- 'application/pdf',
36
- 'text/csv',
37
- 'video/mp4',
38
- ].includes(file?.mimetype ?? '')
39
-
40
- return (
41
- <div className='messenger__messages-row--sender'>
42
- <div
43
- className='messenger__messages-sender'
44
- id={id}
45
- style={{
46
- background: theme?.messengerSenderColor,
47
- color: theme?.documentMessagesTextColor,
48
- }}
49
- >
50
- <span>
51
- {hasFile &&
52
- (isDoc ? (
53
- <DocMessage
54
- date={date}
55
- message={message}
56
- read={read}
57
- file={file}
58
- formatDate={formatDate}
59
- id={id}
60
- />
61
- ) : (
62
- <MessageImage
63
- src={file?.location}
64
- onClick={() => openImageViewer(currentImage)}
65
- />
66
- ))}
67
-
68
- <p className='messenger__message'>{message}</p>
69
- <div className='messenger__message--bottom'>
70
- <p className='messenger__message--date'>
71
- {formatDate(date) ?? new Date(date).toString()}
72
- </p>
73
- <ReadIcon fill={read ? '#00efff' : 'white'} />
74
- </div>
75
- </span>
76
- </div>
77
-
78
- {file && !isDoc && isViewerOpen && (
79
- <ReactSimpleImageViewer
80
- src={[file.location]}
81
- currentIndex={0}
82
- disableScroll={false}
83
- closeOnClickOutside={true}
84
- onClose={closeImageViewer}
85
- />
86
- )}
87
- </div>
88
- )
89
- }
90
-
91
- export default SenderMessages
@@ -1,25 +0,0 @@
1
- import React from 'react'
2
- import useTheme from '../../hooks/useThemes'
3
- import { IInconmingMessage } from 'types'
4
-
5
- function SystemMessage ({ date, message, formatDate, id }: IInconmingMessage) {
6
- const { theme } = useTheme()
7
-
8
- return (
9
- <div className='messenger__messages-row--system' id={id}>
10
- <div
11
- className='messenger__messages-received messenger__messages-received--system'
12
- style={{ background: theme?.messengerSystemColor }}
13
- >
14
- <span>
15
- <p className='messenger__message'>{message}</p>
16
- <p className='messenger__message--date'>
17
- {formatDate(date) ?? new Date(date).toString()}
18
- </p>
19
- </span>
20
- </div>
21
- </div>
22
- )
23
- }
24
-
25
- export default SystemMessage
@@ -1,35 +0,0 @@
1
- import React from 'react'
2
- import useTheme from '../../hooks/useThemes'
3
- interface IProps {
4
- label: string
5
- onChange: (value: string) => void
6
- name: string
7
- placeholder: string
8
- }
9
-
10
- function Textarea ({ name, placeholder, label, onChange }: IProps) {
11
- const { theme } = useTheme()
12
- return (
13
- <div className='text-area'>
14
- <label
15
- htmlFor={name}
16
- className='text-area__label'
17
- style={{ color: theme.newChatFormTexts }}
18
- >
19
- {label}
20
- </label>
21
- <textarea
22
- style={{
23
- backgroundColor: theme.inputBg,
24
- color: theme.newChatFormTexts,
25
- }}
26
- name={name}
27
- placeholder={placeholder}
28
- className='text-area__input'
29
- onChange={(e) => onChange(e.target.value)}
30
- />
31
- </div>
32
- )
33
- }
34
-
35
- export default Textarea
@@ -1,22 +0,0 @@
1
- .text-area {
2
- margin-bottom: 1rem;
3
- width: 100%;
4
-
5
- &__label {
6
- color: @title-form-color;
7
- font-weight: bold;
8
- margin: 0.5rem;
9
- }
10
-
11
- &__input {
12
- border: 1.5px solid hsl(0, 0%, 80%);
13
- border-radius: 4px;
14
- margin-top: 0.5rem;
15
- padding: 4px 8px;
16
- width: 100%;
17
-
18
- &:focus {
19
- outline: #2684ff 2px solid !important;
20
- }
21
- }
22
- }
@@ -1,27 +0,0 @@
1
- .tooltip {
2
- position: relative;
3
- display: inline-block;
4
- }
5
-
6
- .tooltip__text {
7
- visibility: hidden;
8
- background-color: black;
9
- color: #fff;
10
- text-align: center;
11
- border-radius: 5px;
12
- padding: 5px;
13
- position: absolute;
14
- z-index: 1;
15
- bottom: 125%;
16
- left: -40%;
17
- margin-left: -60px;
18
- opacity: 0;
19
- transition:
20
- opacity 0.3s,
21
- visibility 0.3s;
22
- }
23
-
24
- .tooltip:hover .tooltip__text {
25
- visibility: visible;
26
- opacity: 1;
27
- }
@@ -1,17 +0,0 @@
1
- import React, { ReactNode } from 'react'
2
-
3
- interface ToolTipProps {
4
- text: string
5
- children: ReactNode
6
- }
7
-
8
- const ToolTip: React.FC<ToolTipProps> = ({ text, children }) => {
9
- return (
10
- <div className='tooltip'>
11
- {children}
12
- <div className='tooltip__text'>{text}</div>
13
- </div>
14
- )
15
- }
16
-
17
- export default ToolTip