agx-chat-web 1.1.0 → 1.2.1

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 (86) hide show
  1. package/README.md +49 -49
  2. package/dist/agx-chat.esm.js +1 -1
  3. package/dist/agx-chat.esm.js.map +1 -1
  4. package/dist/{agx-chat.min.js → agx-chat.umd.js} +2 -2
  5. package/dist/agx-chat.umd.js.map +1 -0
  6. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js +7 -3
  7. package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js.map +1 -1
  8. package/dist/esm/app/Messenger/components/InputFile/InputFile.js +3 -1
  9. package/dist/esm/app/Messenger/components/InputFile/InputFile.js.map +1 -1
  10. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js +8 -0
  11. package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js.map +1 -1
  12. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js +30 -8
  13. package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js.map +1 -1
  14. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js +11 -8
  15. package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js.map +1 -1
  16. package/dist/esm/app/Messenger/icons/CSVFileIcon.d.ts +4 -0
  17. package/dist/esm/app/Messenger/icons/CSVFileIcon.js +7 -0
  18. package/dist/esm/app/Messenger/icons/CSVFileIcon.js.map +1 -0
  19. package/dist/esm/app/Messenger/icons/MP4FileIcon.d.ts +4 -0
  20. package/dist/esm/app/Messenger/icons/MP4FileIcon.js +7 -0
  21. package/dist/esm/app/Messenger/icons/MP4FileIcon.js.map +1 -0
  22. package/package.json +91 -91
  23. package/src/__tests__/app/Messenger/classes/slaCalculations.spec.ts +122 -122
  24. package/src/app/ChatProvider/ChatProvider.tsx +20 -20
  25. package/src/app/Messenger/classes/slaCalculations.ts +197 -197
  26. package/src/app/Messenger/components/ChatButton/ChatButton.tsx +64 -64
  27. package/src/app/Messenger/components/ChatTabs/ChatTabs.less +18 -18
  28. package/src/app/Messenger/components/ChatTabs/ChatTabs.tsx +32 -32
  29. package/src/app/Messenger/components/DocMessage/DocMessage.less +71 -71
  30. package/src/app/Messenger/components/DocMessage/DocMessage.tsx +50 -50
  31. package/src/app/Messenger/components/ImagesContainer/ImagesContainer.less +79 -79
  32. package/src/app/Messenger/components/ImagesContainer/ImagesContainer.tsx +51 -51
  33. package/src/app/Messenger/components/IncomingMessage/IncomingMessage.tsx +170 -166
  34. package/src/app/Messenger/components/InfiniteScroll/InfiniteScroll.tsx +80 -80
  35. package/src/app/Messenger/components/InputFile/InputFile.tsx +147 -145
  36. package/src/app/Messenger/components/InputFile/inputFile.less +59 -59
  37. package/src/app/Messenger/components/MessageBallon/MessageBalloon.tsx +100 -100
  38. package/src/app/Messenger/components/MessengerAvatar/MessengerAvatar.tsx +29 -29
  39. package/src/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.tsx +62 -62
  40. package/src/app/Messenger/components/RenderFileIcon/RenderFileIcon.tsx +40 -34
  41. package/src/app/Messenger/components/SearchInput/SearchInput.less +45 -45
  42. package/src/app/Messenger/components/SearchInput/SearchInput.tsx +77 -77
  43. package/src/app/Messenger/components/Select/Select.less +22 -22
  44. package/src/app/Messenger/components/Select/Select.tsx +56 -56
  45. package/src/app/Messenger/components/SendMessageForm/SendMessageForm.tsx +254 -234
  46. package/src/app/Messenger/components/SenderMessages/SenderMessages.tsx +91 -89
  47. package/src/app/Messenger/components/SystemMessage/SystemMessage.tsx +25 -25
  48. package/src/app/Messenger/components/TextArea/TextArea.tsx +35 -35
  49. package/src/app/Messenger/components/TextArea/Textarea.less +22 -22
  50. package/src/app/Messenger/components/Tooltip/Tooltip.less +27 -27
  51. package/src/app/Messenger/components/Tooltip/Tooltip.tsx +17 -17
  52. package/src/app/Messenger/hooks/useConversations.tsx +143 -143
  53. package/src/app/Messenger/hooks/useMessages.tsx +49 -49
  54. package/src/app/Messenger/hooks/useThemes.tsx +14 -14
  55. package/src/app/Messenger/icons/AttachFileIcon.tsx +20 -20
  56. package/src/app/Messenger/icons/CSVFileIcon.tsx +26 -0
  57. package/src/app/Messenger/icons/CloseIcon.tsx +20 -20
  58. package/src/app/Messenger/icons/DOCFileIcon.tsx +54 -54
  59. package/src/app/Messenger/icons/DownloadMinimalistIcon.tsx +37 -37
  60. package/src/app/Messenger/icons/EmptyIcon.tsx +20 -20
  61. package/src/app/Messenger/icons/MP4FileIcon.tsx +26 -0
  62. package/src/app/Messenger/icons/MessageIcon.tsx +27 -27
  63. package/src/app/Messenger/icons/PDFFileIcon.tsx +54 -54
  64. package/src/app/Messenger/icons/ReadIcon.tsx +18 -18
  65. package/src/app/Messenger/icons/SearchIcon.tsx +20 -20
  66. package/src/app/Messenger/icons/TimerIcon.tsx +18 -18
  67. package/src/app/Messenger/icons/TrashIcon.tsx +21 -21
  68. package/src/app/Messenger/views/Messenger.less +623 -623
  69. package/src/app/Messenger/views/MessengerList.tsx +170 -170
  70. package/src/app/Messenger/views/MessengerListItem.tsx +178 -178
  71. package/src/app/Messenger/views/MessengerMessages.tsx +414 -414
  72. package/src/app/Messenger/views/NewFormChat.tsx +145 -145
  73. package/src/app/i18n/index.ts +36 -36
  74. package/src/app/i18n/locales/en.json +64 -64
  75. package/src/app/i18n/locales/pt.json +64 -64
  76. package/src/assets/right-arrow.svg +9 -9
  77. package/src/index.ts +23 -23
  78. package/src/react-app-env.d.ts +19 -19
  79. package/src/setupTests.ts +5 -5
  80. package/src/styles/abstracts/animations.less +8 -8
  81. package/src/styles/abstracts/mixins.less +5 -5
  82. package/src/styles/abstracts/variables.less +31 -31
  83. package/src/styles/base/base.less +6 -6
  84. package/src/styles/index.less +5 -5
  85. package/src/types.ts +174 -174
  86. package/dist/agx-chat.min.js.map +0 -1
@@ -1,178 +1,178 @@
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
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