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