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.
- package/README.md +49 -49
- package/package.json +91 -91
- package/src/__tests__/app/Messenger/classes/slaCalculations.spec.ts +122 -122
- package/src/app/ChatProvider/ChatProvider.tsx +20 -20
- package/src/app/Messenger/classes/slaCalculations.ts +197 -197
- package/src/app/Messenger/components/ChatButton/ChatButton.tsx +64 -64
- package/src/app/Messenger/components/ChatTabs/ChatTabs.less +18 -18
- package/src/app/Messenger/components/ChatTabs/ChatTabs.tsx +32 -32
- package/src/app/Messenger/components/DocMessage/DocMessage.less +71 -71
- package/src/app/Messenger/components/DocMessage/DocMessage.tsx +50 -50
- package/src/app/Messenger/components/ImagesContainer/ImagesContainer.less +79 -79
- package/src/app/Messenger/components/ImagesContainer/ImagesContainer.tsx +51 -51
- package/src/app/Messenger/components/IncomingMessage/IncomingMessage.tsx +170 -170
- package/src/app/Messenger/components/InfiniteScroll/InfiniteScroll.tsx +80 -80
- package/src/app/Messenger/components/InputFile/InputFile.tsx +147 -147
- package/src/app/Messenger/components/InputFile/inputFile.less +59 -59
- package/src/app/Messenger/components/MessageBallon/MessageBalloon.tsx +100 -100
- package/src/app/Messenger/components/MessengerAvatar/MessengerAvatar.tsx +29 -29
- package/src/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.tsx +62 -62
- package/src/app/Messenger/components/RenderFileIcon/RenderFileIcon.tsx +40 -40
- package/src/app/Messenger/components/SearchInput/SearchInput.less +45 -45
- package/src/app/Messenger/components/SearchInput/SearchInput.tsx +77 -77
- package/src/app/Messenger/components/Select/Select.less +22 -22
- package/src/app/Messenger/components/Select/Select.tsx +56 -56
- package/src/app/Messenger/components/SendMessageForm/SendMessageForm.tsx +254 -254
- package/src/app/Messenger/components/SenderMessages/SenderMessages.tsx +91 -91
- package/src/app/Messenger/components/SystemMessage/SystemMessage.tsx +25 -25
- package/src/app/Messenger/components/TextArea/TextArea.tsx +35 -35
- package/src/app/Messenger/components/TextArea/Textarea.less +22 -22
- package/src/app/Messenger/components/Tooltip/Tooltip.less +27 -27
- package/src/app/Messenger/components/Tooltip/Tooltip.tsx +17 -17
- package/src/app/Messenger/hooks/useConversations.tsx +143 -143
- package/src/app/Messenger/hooks/useMessages.tsx +49 -49
- package/src/app/Messenger/hooks/useThemes.tsx +14 -14
- package/src/app/Messenger/icons/AttachFileIcon.tsx +20 -20
- package/src/app/Messenger/icons/CSVFileIcon.tsx +26 -26
- package/src/app/Messenger/icons/CloseIcon.tsx +20 -20
- package/src/app/Messenger/icons/DOCFileIcon.tsx +54 -54
- package/src/app/Messenger/icons/DownloadMinimalistIcon.tsx +37 -37
- package/src/app/Messenger/icons/EmptyIcon.tsx +20 -20
- package/src/app/Messenger/icons/MP4FileIcon.tsx +26 -26
- package/src/app/Messenger/icons/MessageIcon.tsx +27 -27
- package/src/app/Messenger/icons/PDFFileIcon.tsx +54 -54
- package/src/app/Messenger/icons/ReadIcon.tsx +18 -18
- package/src/app/Messenger/icons/SearchIcon.tsx +20 -20
- package/src/app/Messenger/icons/TimerIcon.tsx +18 -18
- package/src/app/Messenger/icons/TrashIcon.tsx +21 -21
- package/src/app/Messenger/views/Messenger.less +623 -623
- package/src/app/Messenger/views/MessengerList.tsx +170 -170
- package/src/app/Messenger/views/MessengerListItem.tsx +178 -178
- package/src/app/Messenger/views/MessengerMessages.tsx +414 -414
- package/src/app/Messenger/views/NewFormChat.tsx +145 -145
- package/src/app/i18n/index.ts +36 -36
- package/src/app/i18n/locales/en.json +64 -64
- package/src/app/i18n/locales/pt.json +64 -64
- package/src/assets/right-arrow.svg +9 -9
- package/src/index.ts +23 -23
- package/src/react-app-env.d.ts +19 -19
- package/src/setupTests.ts +5 -5
- package/src/styles/abstracts/animations.less +8 -8
- package/src/styles/abstracts/mixins.less +5 -5
- package/src/styles/abstracts/variables.less +31 -31
- package/src/styles/base/base.less +6 -6
- package/src/styles/index.less +5 -5
- package/src/types.ts +174 -174
- package/dist/agx-chat.esm.js +0 -2
- package/dist/agx-chat.esm.js.map +0 -1
- package/dist/agx-chat.min.js +0 -2
- package/dist/agx-chat.min.js.map +0 -1
- package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.d.ts +0 -1
- package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.js +0 -46
- package/dist/esm/__tests__/app/Messenger/classes/slaCalculations.spec.js.map +0 -1
- package/dist/esm/app/Messenger/classes/slaCalculations.d.ts +0 -30
- package/dist/esm/app/Messenger/classes/slaCalculations.js +0 -144
- package/dist/esm/app/Messenger/classes/slaCalculations.js.map +0 -1
- package/dist/esm/app/Messenger/components/ChatButton/ChatButton.d.ts +0 -14
- package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js +0 -31
- package/dist/esm/app/Messenger/components/ChatButton/ChatButton.js.map +0 -1
- package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.d.ts +0 -10
- package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js +0 -15
- package/dist/esm/app/Messenger/components/ChatTabs/ChatTabs.js.map +0 -1
- package/dist/esm/app/Messenger/components/DocMessage/DocMessage.d.ts +0 -5
- package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js +0 -35
- package/dist/esm/app/Messenger/components/DocMessage/DocMessage.js.map +0 -1
- package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.d.ts +0 -4
- package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js +0 -39
- package/dist/esm/app/Messenger/components/ImagesContainer/ImagesContainer.js.map +0 -1
- package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.d.ts +0 -7
- package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js +0 -49
- package/dist/esm/app/Messenger/components/IncomingMessage/IncomingMessage.js.map +0 -1
- package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.d.ts +0 -13
- package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js +0 -43
- package/dist/esm/app/Messenger/components/InfiniteScroll/InfiniteScroll.js.map +0 -1
- package/dist/esm/app/Messenger/components/InputFile/InputFile.d.ts +0 -11
- package/dist/esm/app/Messenger/components/InputFile/InputFile.js +0 -72
- package/dist/esm/app/Messenger/components/InputFile/InputFile.js.map +0 -1
- package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.d.ts +0 -9
- package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js +0 -34
- package/dist/esm/app/Messenger/components/MessageBallon/MessageBalloon.js.map +0 -1
- package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.d.ts +0 -4
- package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js +0 -13
- package/dist/esm/app/Messenger/components/MessengerAvatar/MessengerAvatar.js.map +0 -1
- package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.d.ts +0 -41
- package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js +0 -40
- package/dist/esm/app/Messenger/components/MessengerThemeWrapper/MessengerThemeWrapper.js.map +0 -1
- package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.d.ts +0 -6
- package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js +0 -21
- package/dist/esm/app/Messenger/components/RenderFileIcon/RenderFileIcon.js.map +0 -1
- package/dist/esm/app/Messenger/components/SearchInput/SearchInput.d.ts +0 -11
- package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js +0 -33
- package/dist/esm/app/Messenger/components/SearchInput/SearchInput.js.map +0 -1
- package/dist/esm/app/Messenger/components/Select/Select.d.ts +0 -14
- package/dist/esm/app/Messenger/components/Select/Select.js +0 -16
- package/dist/esm/app/Messenger/components/Select/Select.js.map +0 -1
- package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.d.ts +0 -13
- package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js +0 -119
- package/dist/esm/app/Messenger/components/SendMessageForm/SendMessageForm.js.map +0 -1
- package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.d.ts +0 -4
- package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js +0 -40
- package/dist/esm/app/Messenger/components/SenderMessages/SenderMessages.js.map +0 -1
- package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.d.ts +0 -4
- package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js +0 -14
- package/dist/esm/app/Messenger/components/SystemMessage/SystemMessage.js.map +0 -1
- package/dist/esm/app/Messenger/components/TextArea/TextArea.d.ts +0 -9
- package/dist/esm/app/Messenger/components/TextArea/TextArea.js +0 -14
- package/dist/esm/app/Messenger/components/TextArea/TextArea.js.map +0 -1
- package/dist/esm/app/Messenger/components/Tooltip/Tooltip.d.ts +0 -7
- package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js +0 -9
- package/dist/esm/app/Messenger/components/Tooltip/Tooltip.js.map +0 -1
- package/dist/esm/app/Messenger/hooks/useConversations.d.ts +0 -21
- package/dist/esm/app/Messenger/hooks/useConversations.js +0 -105
- package/dist/esm/app/Messenger/hooks/useConversations.js.map +0 -1
- package/dist/esm/app/Messenger/hooks/useMessages.d.ts +0 -9
- package/dist/esm/app/Messenger/hooks/useMessages.js +0 -37
- package/dist/esm/app/Messenger/hooks/useMessages.js.map +0 -1
- package/dist/esm/app/Messenger/hooks/useThemes.d.ts +0 -32
- package/dist/esm/app/Messenger/hooks/useThemes.js +0 -11
- package/dist/esm/app/Messenger/hooks/useThemes.js.map +0 -1
- package/dist/esm/app/Messenger/icons/AttachFileIcon.d.ts +0 -4
- package/dist/esm/app/Messenger/icons/AttachFileIcon.js +0 -10
- package/dist/esm/app/Messenger/icons/AttachFileIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/CloseIcon.d.ts +0 -2
- package/dist/esm/app/Messenger/icons/CloseIcon.js +0 -9
- package/dist/esm/app/Messenger/icons/CloseIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/DOCFileIcon.d.ts +0 -4
- package/dist/esm/app/Messenger/icons/DOCFileIcon.js +0 -18
- package/dist/esm/app/Messenger/icons/DOCFileIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.d.ts +0 -7
- package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js +0 -12
- package/dist/esm/app/Messenger/icons/DownloadMinimalistIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/EmptyIcon.d.ts +0 -2
- package/dist/esm/app/Messenger/icons/EmptyIcon.js +0 -8
- package/dist/esm/app/Messenger/icons/EmptyIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/MessageIcon.d.ts +0 -6
- package/dist/esm/app/Messenger/icons/MessageIcon.js +0 -12
- package/dist/esm/app/Messenger/icons/MessageIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/PDFFileIcon.d.ts +0 -4
- package/dist/esm/app/Messenger/icons/PDFFileIcon.js +0 -18
- package/dist/esm/app/Messenger/icons/PDFFileIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/ReadIcon.d.ts +0 -4
- package/dist/esm/app/Messenger/icons/ReadIcon.js +0 -7
- package/dist/esm/app/Messenger/icons/ReadIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/SearchIcon.d.ts +0 -2
- package/dist/esm/app/Messenger/icons/SearchIcon.js +0 -8
- package/dist/esm/app/Messenger/icons/SearchIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/TimerIcon.d.ts +0 -4
- package/dist/esm/app/Messenger/icons/TimerIcon.js +0 -7
- package/dist/esm/app/Messenger/icons/TimerIcon.js.map +0 -1
- package/dist/esm/app/Messenger/icons/TrashIcon.d.ts +0 -6
- package/dist/esm/app/Messenger/icons/TrashIcon.js +0 -7
- package/dist/esm/app/Messenger/icons/TrashIcon.js.map +0 -1
- package/dist/esm/app/Messenger/views/MessengerList.d.ts +0 -40
- package/dist/esm/app/Messenger/views/MessengerList.js +0 -46
- package/dist/esm/app/Messenger/views/MessengerList.js.map +0 -1
- package/dist/esm/app/Messenger/views/MessengerListItem.d.ts +0 -12
- package/dist/esm/app/Messenger/views/MessengerListItem.js +0 -99
- package/dist/esm/app/Messenger/views/MessengerListItem.js.map +0 -1
- package/dist/esm/app/Messenger/views/MessengerMessages.d.ts +0 -35
- package/dist/esm/app/Messenger/views/MessengerMessages.js +0 -181
- package/dist/esm/app/Messenger/views/MessengerMessages.js.map +0 -1
- package/dist/esm/app/Messenger/views/NewFormChat.d.ts +0 -13
- package/dist/esm/app/Messenger/views/NewFormChat.js +0 -68
- package/dist/esm/app/Messenger/views/NewFormChat.js.map +0 -1
- package/dist/esm/app/i18n/index.d.ts +0 -3
- package/dist/esm/app/i18n/index.js +0 -31
- package/dist/esm/app/i18n/index.js.map +0 -1
- package/dist/esm/app/i18n/locales/index.d.ts +0 -6
- package/dist/esm/app/i18n/locales/index.js +0 -7
- package/dist/esm/app/i18n/locales/index.js.map +0 -1
- package/dist/esm/index.d.ts +0 -10
- package/dist/esm/index.js +0 -11
- package/dist/esm/index.js.map +0 -1
- package/dist/esm/setupTests.d.ts +0 -1
- package/dist/esm/setupTests.js +0 -6
- package/dist/esm/setupTests.js.map +0 -1
- package/dist/esm/types.d.ts +0 -140
- package/dist/esm/types.js +0 -2
- package/dist/esm/types.js.map +0 -1
|
@@ -1,145 +1,145 @@
|
|
|
1
|
-
import React, { FormEvent, useState } from 'react'
|
|
2
|
-
|
|
3
|
-
import InputFile from '../components/InputFile/InputFile'
|
|
4
|
-
import Select from '../components/Select/Select'
|
|
5
|
-
import Textarea from '../components/TextArea/TextArea'
|
|
6
|
-
import useTheme from '../hooks/useThemes'
|
|
7
|
-
import CloseIcon from '../icons/CloseIcon'
|
|
8
|
-
import { IOption } from 'types'
|
|
9
|
-
import { useTranslation } from 'react-i18next'
|
|
10
|
-
|
|
11
|
-
interface IProps {
|
|
12
|
-
submitNewChat: (values: FormData) => void
|
|
13
|
-
cancelNewChat: () => void
|
|
14
|
-
reasons: Array<IOption>
|
|
15
|
-
products: Array<IOption>
|
|
16
|
-
loading: boolean
|
|
17
|
-
maxFileSize: string
|
|
18
|
-
loadingResources: boolean
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
function NewChatForm ({
|
|
22
|
-
submitNewChat,
|
|
23
|
-
cancelNewChat,
|
|
24
|
-
reasons,
|
|
25
|
-
products,
|
|
26
|
-
loading,
|
|
27
|
-
maxFileSize,
|
|
28
|
-
loadingResources,
|
|
29
|
-
}: IProps) {
|
|
30
|
-
const [reason, setReason] = useState<string>(reasons?.[0]?.value)
|
|
31
|
-
const [product, setProduct] = useState<string>(products?.[0]?.value)
|
|
32
|
-
const [message, setMessage] = useState<string>()
|
|
33
|
-
const [fileList, setFileList] = useState<File[]>([])
|
|
34
|
-
const { t } = useTranslation('newFormChat')
|
|
35
|
-
|
|
36
|
-
const { theme } = useTheme()
|
|
37
|
-
|
|
38
|
-
const onSubmit = (event: FormEvent) => {
|
|
39
|
-
const data2 = new FormData()
|
|
40
|
-
event.preventDefault()
|
|
41
|
-
|
|
42
|
-
fileList.forEach((file) => {
|
|
43
|
-
data2.append(`documents`, file, file.name)
|
|
44
|
-
})
|
|
45
|
-
|
|
46
|
-
if (reason) data2.append('reason', reason)
|
|
47
|
-
if (product) data2.append('product', product)
|
|
48
|
-
|
|
49
|
-
if (message) data2.append('message', message)
|
|
50
|
-
submitNewChat(data2)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const onUpdateFile = (file: File) => {
|
|
54
|
-
setFileList((files) => [...files, file])
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
const onRemoveFile = (file: File) => {
|
|
58
|
-
setFileList(fileList.filter((item: File) => item !== file))
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
return (
|
|
62
|
-
<div
|
|
63
|
-
className='messenger__new-chat-form'
|
|
64
|
-
style={{
|
|
65
|
-
backgroundColor: theme.newChatFormBg,
|
|
66
|
-
borderRadius: theme.newChatFormRadius,
|
|
67
|
-
}}
|
|
68
|
-
>
|
|
69
|
-
<div className='messenger__new-chat-form-header'>
|
|
70
|
-
<h2 className='messenger__new-chat-form-title'>
|
|
71
|
-
<b style={{ color: theme.newChatFormTexts }}>{t('newChat')}</b>
|
|
72
|
-
</h2>
|
|
73
|
-
|
|
74
|
-
<button
|
|
75
|
-
onClick={cancelNewChat}
|
|
76
|
-
className='messenger__new-chat-form-close'
|
|
77
|
-
>
|
|
78
|
-
<CloseIcon />
|
|
79
|
-
</button>
|
|
80
|
-
</div>
|
|
81
|
-
|
|
82
|
-
<h3
|
|
83
|
-
className='messenger__disclaimer'
|
|
84
|
-
style={{
|
|
85
|
-
borderColor: theme.disclaimerPrimaryColor,
|
|
86
|
-
color: theme.disclaimerTextColor,
|
|
87
|
-
backgroundColor: theme.disclaimerSecondaryColor,
|
|
88
|
-
}}
|
|
89
|
-
>
|
|
90
|
-
{t('description.1')} <b>{t('description.1/2bold')}</b>{' '}
|
|
91
|
-
{t('description.2')}
|
|
92
|
-
</h3>
|
|
93
|
-
|
|
94
|
-
<form onSubmit={onSubmit} className='messenger__new-chat-fields'>
|
|
95
|
-
<Select
|
|
96
|
-
onChange={(value) => setReason(value)}
|
|
97
|
-
options={reasons}
|
|
98
|
-
placeholder={t('fields.reasons.placeholder')}
|
|
99
|
-
name='reasons'
|
|
100
|
-
value={reason}
|
|
101
|
-
label={t('fields.reasons.label')}
|
|
102
|
-
/>
|
|
103
|
-
|
|
104
|
-
<Select
|
|
105
|
-
onChange={(value) => setProduct(value)}
|
|
106
|
-
options={products}
|
|
107
|
-
placeholder={t('fields.product.placeholder')}
|
|
108
|
-
value={product}
|
|
109
|
-
name='product'
|
|
110
|
-
label={t('fields.product.label')}
|
|
111
|
-
/>
|
|
112
|
-
|
|
113
|
-
<InputFile
|
|
114
|
-
fileList={fileList}
|
|
115
|
-
onUpdateFile={onUpdateFile}
|
|
116
|
-
onRemoveFile={onRemoveFile}
|
|
117
|
-
label={t('fields.document.label')}
|
|
118
|
-
maxSize={maxFileSize}
|
|
119
|
-
loading={loadingResources}
|
|
120
|
-
/>
|
|
121
|
-
|
|
122
|
-
<Textarea
|
|
123
|
-
onChange={(value) => setMessage(value)}
|
|
124
|
-
placeholder={t('fields.message.placeholder')}
|
|
125
|
-
name='message'
|
|
126
|
-
label={t('fields.message.label')}
|
|
127
|
-
/>
|
|
128
|
-
|
|
129
|
-
<button
|
|
130
|
-
className={`w-100 ${!loading ? 'messenger__new-chat-form-send' : 'messenger__new-chat-form-send messenger__new-chat-form-send--disabled'}`}
|
|
131
|
-
disabled={loading}
|
|
132
|
-
type='submit'
|
|
133
|
-
style={{
|
|
134
|
-
backgroundColor: !loading ? theme.buttonPrimary : '#ccc',
|
|
135
|
-
color: theme.buttonPrimaryText,
|
|
136
|
-
}}
|
|
137
|
-
>
|
|
138
|
-
{!loading ? t('buttons.send') : t('buttons.sendingButton')}
|
|
139
|
-
</button>
|
|
140
|
-
</form>
|
|
141
|
-
</div>
|
|
142
|
-
)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export default NewChatForm
|
|
1
|
+
import React, { FormEvent, useState } from 'react'
|
|
2
|
+
|
|
3
|
+
import InputFile from '../components/InputFile/InputFile'
|
|
4
|
+
import Select from '../components/Select/Select'
|
|
5
|
+
import Textarea from '../components/TextArea/TextArea'
|
|
6
|
+
import useTheme from '../hooks/useThemes'
|
|
7
|
+
import CloseIcon from '../icons/CloseIcon'
|
|
8
|
+
import { IOption } from 'types'
|
|
9
|
+
import { useTranslation } from 'react-i18next'
|
|
10
|
+
|
|
11
|
+
interface IProps {
|
|
12
|
+
submitNewChat: (values: FormData) => void
|
|
13
|
+
cancelNewChat: () => void
|
|
14
|
+
reasons: Array<IOption>
|
|
15
|
+
products: Array<IOption>
|
|
16
|
+
loading: boolean
|
|
17
|
+
maxFileSize: string
|
|
18
|
+
loadingResources: boolean
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
function NewChatForm ({
|
|
22
|
+
submitNewChat,
|
|
23
|
+
cancelNewChat,
|
|
24
|
+
reasons,
|
|
25
|
+
products,
|
|
26
|
+
loading,
|
|
27
|
+
maxFileSize,
|
|
28
|
+
loadingResources,
|
|
29
|
+
}: IProps) {
|
|
30
|
+
const [reason, setReason] = useState<string>(reasons?.[0]?.value)
|
|
31
|
+
const [product, setProduct] = useState<string>(products?.[0]?.value)
|
|
32
|
+
const [message, setMessage] = useState<string>()
|
|
33
|
+
const [fileList, setFileList] = useState<File[]>([])
|
|
34
|
+
const { t } = useTranslation('newFormChat')
|
|
35
|
+
|
|
36
|
+
const { theme } = useTheme()
|
|
37
|
+
|
|
38
|
+
const onSubmit = (event: FormEvent) => {
|
|
39
|
+
const data2 = new FormData()
|
|
40
|
+
event.preventDefault()
|
|
41
|
+
|
|
42
|
+
fileList.forEach((file) => {
|
|
43
|
+
data2.append(`documents`, file, file.name)
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
if (reason) data2.append('reason', reason)
|
|
47
|
+
if (product) data2.append('product', product)
|
|
48
|
+
|
|
49
|
+
if (message) data2.append('message', message)
|
|
50
|
+
submitNewChat(data2)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
const onUpdateFile = (file: File) => {
|
|
54
|
+
setFileList((files) => [...files, file])
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const onRemoveFile = (file: File) => {
|
|
58
|
+
setFileList(fileList.filter((item: File) => item !== file))
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<div
|
|
63
|
+
className='messenger__new-chat-form'
|
|
64
|
+
style={{
|
|
65
|
+
backgroundColor: theme.newChatFormBg,
|
|
66
|
+
borderRadius: theme.newChatFormRadius,
|
|
67
|
+
}}
|
|
68
|
+
>
|
|
69
|
+
<div className='messenger__new-chat-form-header'>
|
|
70
|
+
<h2 className='messenger__new-chat-form-title'>
|
|
71
|
+
<b style={{ color: theme.newChatFormTexts }}>{t('newChat')}</b>
|
|
72
|
+
</h2>
|
|
73
|
+
|
|
74
|
+
<button
|
|
75
|
+
onClick={cancelNewChat}
|
|
76
|
+
className='messenger__new-chat-form-close'
|
|
77
|
+
>
|
|
78
|
+
<CloseIcon />
|
|
79
|
+
</button>
|
|
80
|
+
</div>
|
|
81
|
+
|
|
82
|
+
<h3
|
|
83
|
+
className='messenger__disclaimer'
|
|
84
|
+
style={{
|
|
85
|
+
borderColor: theme.disclaimerPrimaryColor,
|
|
86
|
+
color: theme.disclaimerTextColor,
|
|
87
|
+
backgroundColor: theme.disclaimerSecondaryColor,
|
|
88
|
+
}}
|
|
89
|
+
>
|
|
90
|
+
{t('description.1')} <b>{t('description.1/2bold')}</b>{' '}
|
|
91
|
+
{t('description.2')}
|
|
92
|
+
</h3>
|
|
93
|
+
|
|
94
|
+
<form onSubmit={onSubmit} className='messenger__new-chat-fields'>
|
|
95
|
+
<Select
|
|
96
|
+
onChange={(value) => setReason(value)}
|
|
97
|
+
options={reasons}
|
|
98
|
+
placeholder={t('fields.reasons.placeholder')}
|
|
99
|
+
name='reasons'
|
|
100
|
+
value={reason}
|
|
101
|
+
label={t('fields.reasons.label')}
|
|
102
|
+
/>
|
|
103
|
+
|
|
104
|
+
<Select
|
|
105
|
+
onChange={(value) => setProduct(value)}
|
|
106
|
+
options={products}
|
|
107
|
+
placeholder={t('fields.product.placeholder')}
|
|
108
|
+
value={product}
|
|
109
|
+
name='product'
|
|
110
|
+
label={t('fields.product.label')}
|
|
111
|
+
/>
|
|
112
|
+
|
|
113
|
+
<InputFile
|
|
114
|
+
fileList={fileList}
|
|
115
|
+
onUpdateFile={onUpdateFile}
|
|
116
|
+
onRemoveFile={onRemoveFile}
|
|
117
|
+
label={t('fields.document.label')}
|
|
118
|
+
maxSize={maxFileSize}
|
|
119
|
+
loading={loadingResources}
|
|
120
|
+
/>
|
|
121
|
+
|
|
122
|
+
<Textarea
|
|
123
|
+
onChange={(value) => setMessage(value)}
|
|
124
|
+
placeholder={t('fields.message.placeholder')}
|
|
125
|
+
name='message'
|
|
126
|
+
label={t('fields.message.label')}
|
|
127
|
+
/>
|
|
128
|
+
|
|
129
|
+
<button
|
|
130
|
+
className={`w-100 ${!loading ? 'messenger__new-chat-form-send' : 'messenger__new-chat-form-send messenger__new-chat-form-send--disabled'}`}
|
|
131
|
+
disabled={loading}
|
|
132
|
+
type='submit'
|
|
133
|
+
style={{
|
|
134
|
+
backgroundColor: !loading ? theme.buttonPrimary : '#ccc',
|
|
135
|
+
color: theme.buttonPrimaryText,
|
|
136
|
+
}}
|
|
137
|
+
>
|
|
138
|
+
{!loading ? t('buttons.send') : t('buttons.sendingButton')}
|
|
139
|
+
</button>
|
|
140
|
+
</form>
|
|
141
|
+
</div>
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
export default NewChatForm
|
package/src/app/i18n/index.ts
CHANGED
|
@@ -1,36 +1,36 @@
|
|
|
1
|
-
import i18n from 'i18next'
|
|
2
|
-
import { initReactI18next } from 'react-i18next'
|
|
3
|
-
|
|
4
|
-
import pt from './locales/pt.json'
|
|
5
|
-
import en from './locales/en.json'
|
|
6
|
-
|
|
7
|
-
const resources = makeResources()
|
|
8
|
-
function makeResources () {
|
|
9
|
-
return {
|
|
10
|
-
en: {
|
|
11
|
-
newFormChat: en.newFormChat,
|
|
12
|
-
messengerMessages: en.messengerMessages,
|
|
13
|
-
messengerList: en.messengerList,
|
|
14
|
-
},
|
|
15
|
-
pt: {
|
|
16
|
-
newFormChat: pt.newFormChat,
|
|
17
|
-
messengerMessages: pt.messengerMessages,
|
|
18
|
-
messengerList: pt.messengerList,
|
|
19
|
-
},
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
i18n.use(initReactI18next).init({
|
|
24
|
-
resources,
|
|
25
|
-
lng: 'pt',
|
|
26
|
-
fallbackLng: 'pt',
|
|
27
|
-
interpolation: {
|
|
28
|
-
escapeValue: false,
|
|
29
|
-
},
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
export default i18n
|
|
33
|
-
|
|
34
|
-
export function setLanguage (lang: string) {
|
|
35
|
-
i18n.changeLanguage(lang)
|
|
36
|
-
}
|
|
1
|
+
import i18n from 'i18next'
|
|
2
|
+
import { initReactI18next } from 'react-i18next'
|
|
3
|
+
|
|
4
|
+
import pt from './locales/pt.json'
|
|
5
|
+
import en from './locales/en.json'
|
|
6
|
+
|
|
7
|
+
const resources = makeResources()
|
|
8
|
+
function makeResources () {
|
|
9
|
+
return {
|
|
10
|
+
en: {
|
|
11
|
+
newFormChat: en.newFormChat,
|
|
12
|
+
messengerMessages: en.messengerMessages,
|
|
13
|
+
messengerList: en.messengerList,
|
|
14
|
+
},
|
|
15
|
+
pt: {
|
|
16
|
+
newFormChat: pt.newFormChat,
|
|
17
|
+
messengerMessages: pt.messengerMessages,
|
|
18
|
+
messengerList: pt.messengerList,
|
|
19
|
+
},
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
i18n.use(initReactI18next).init({
|
|
24
|
+
resources,
|
|
25
|
+
lng: 'pt',
|
|
26
|
+
fallbackLng: 'pt',
|
|
27
|
+
interpolation: {
|
|
28
|
+
escapeValue: false,
|
|
29
|
+
},
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
export default i18n
|
|
33
|
+
|
|
34
|
+
export function setLanguage (lang: string) {
|
|
35
|
+
i18n.changeLanguage(lang)
|
|
36
|
+
}
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
{
|
|
2
|
-
"messengerList": {
|
|
3
|
-
"noChatFound": "No chat found",
|
|
4
|
-
"messengerAvatar": {
|
|
5
|
-
"alt": "image of a user avatar"
|
|
6
|
-
},
|
|
7
|
-
"searchInput": {
|
|
8
|
-
"placeholder": "Search chat..."
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
"messengerMessages": {
|
|
12
|
-
"selectConversation": "Select a conversation to view messages",
|
|
13
|
-
"noMessagesFound": "No messages found",
|
|
14
|
-
"errorSearchingMaxFileSize": "Error fetching maximum file size:",
|
|
15
|
-
"incommingMessage": {
|
|
16
|
-
"messageImage": "image in message"
|
|
17
|
-
},
|
|
18
|
-
"sendMessageForm": {
|
|
19
|
-
"maxFileField": "Maximum size: {{maxFileField}}",
|
|
20
|
-
"chatEnded": "Conversation ended",
|
|
21
|
-
"typeMessage": "Type a message",
|
|
22
|
-
"rightIcon": "Right icon"
|
|
23
|
-
},
|
|
24
|
-
"renderFileIcon": {
|
|
25
|
-
"altImage": "files sent via agx chat"
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
"newFormChat": {
|
|
29
|
-
"newChat": "New Ticket",
|
|
30
|
-
"description": {
|
|
31
|
-
"1": "Your ticket will be answered as soon as possible! If you are absent from the ticket for",
|
|
32
|
-
"1/2bold": "one hour",
|
|
33
|
-
"2": "it will be automatically closed."
|
|
34
|
-
},
|
|
35
|
-
"fields": {
|
|
36
|
-
"reasons": {
|
|
37
|
-
"label": "Reasons",
|
|
38
|
-
"placeholder": "Select a reason for the ticket"
|
|
39
|
-
},
|
|
40
|
-
"product": {
|
|
41
|
-
"label": "Product (optional)",
|
|
42
|
-
"placeholder": "Select the product related to the error"
|
|
43
|
-
},
|
|
44
|
-
"message": {
|
|
45
|
-
"label": "Message",
|
|
46
|
-
"placeholder": "Type your message here"
|
|
47
|
-
},
|
|
48
|
-
"document": {
|
|
49
|
-
"label": "Document (optional)",
|
|
50
|
-
"placeholder": "Select a document for the ticket"
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
"buttons": {
|
|
54
|
-
"send": "Send new ticket",
|
|
55
|
-
"sendingButton": "Sending..."
|
|
56
|
-
},
|
|
57
|
-
"inputFile": {
|
|
58
|
-
"chooseFile": "Choose file",
|
|
59
|
-
"allowDocuments": "Only .png, .jpg, .pdf, .csv, .mp4, .doc or .docx files are accepted",
|
|
60
|
-
"allowSizeDocument": "Maximum size: {{maxSize}}",
|
|
61
|
-
"documentSendError": "Choose a JPG/PNG image, PDF, CSV, MP4 or DOC/DOCX file."
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"messengerList": {
|
|
3
|
+
"noChatFound": "No chat found",
|
|
4
|
+
"messengerAvatar": {
|
|
5
|
+
"alt": "image of a user avatar"
|
|
6
|
+
},
|
|
7
|
+
"searchInput": {
|
|
8
|
+
"placeholder": "Search chat..."
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"messengerMessages": {
|
|
12
|
+
"selectConversation": "Select a conversation to view messages",
|
|
13
|
+
"noMessagesFound": "No messages found",
|
|
14
|
+
"errorSearchingMaxFileSize": "Error fetching maximum file size:",
|
|
15
|
+
"incommingMessage": {
|
|
16
|
+
"messageImage": "image in message"
|
|
17
|
+
},
|
|
18
|
+
"sendMessageForm": {
|
|
19
|
+
"maxFileField": "Maximum size: {{maxFileField}}",
|
|
20
|
+
"chatEnded": "Conversation ended",
|
|
21
|
+
"typeMessage": "Type a message",
|
|
22
|
+
"rightIcon": "Right icon"
|
|
23
|
+
},
|
|
24
|
+
"renderFileIcon": {
|
|
25
|
+
"altImage": "files sent via agx chat"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"newFormChat": {
|
|
29
|
+
"newChat": "New Ticket",
|
|
30
|
+
"description": {
|
|
31
|
+
"1": "Your ticket will be answered as soon as possible! If you are absent from the ticket for",
|
|
32
|
+
"1/2bold": "one hour",
|
|
33
|
+
"2": "it will be automatically closed."
|
|
34
|
+
},
|
|
35
|
+
"fields": {
|
|
36
|
+
"reasons": {
|
|
37
|
+
"label": "Reasons",
|
|
38
|
+
"placeholder": "Select a reason for the ticket"
|
|
39
|
+
},
|
|
40
|
+
"product": {
|
|
41
|
+
"label": "Product (optional)",
|
|
42
|
+
"placeholder": "Select the product related to the error"
|
|
43
|
+
},
|
|
44
|
+
"message": {
|
|
45
|
+
"label": "Message",
|
|
46
|
+
"placeholder": "Type your message here"
|
|
47
|
+
},
|
|
48
|
+
"document": {
|
|
49
|
+
"label": "Document (optional)",
|
|
50
|
+
"placeholder": "Select a document for the ticket"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"buttons": {
|
|
54
|
+
"send": "Send new ticket",
|
|
55
|
+
"sendingButton": "Sending..."
|
|
56
|
+
},
|
|
57
|
+
"inputFile": {
|
|
58
|
+
"chooseFile": "Choose file",
|
|
59
|
+
"allowDocuments": "Only .png, .jpg, .pdf, .csv, .mp4, .doc or .docx files are accepted",
|
|
60
|
+
"allowSizeDocument": "Maximum size: {{maxSize}}",
|
|
61
|
+
"documentSendError": "Choose a JPG/PNG image, PDF, CSV, MP4 or DOC/DOCX file."
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -1,64 +1,64 @@
|
|
|
1
|
-
{
|
|
2
|
-
"messengerList": {
|
|
3
|
-
"noChatFound": "Nenhuma conversa encontrada",
|
|
4
|
-
"messengerAvatar": {
|
|
5
|
-
"alt": "imagem de um avatar de usuário"
|
|
6
|
-
},
|
|
7
|
-
"searchInput": {
|
|
8
|
-
"placeholder": "Pesquisar conversa..."
|
|
9
|
-
}
|
|
10
|
-
},
|
|
11
|
-
"messengerMessages": {
|
|
12
|
-
"selectConversation": "Selecione uma conversa para visualizar as mensagens",
|
|
13
|
-
"noMessagesFound": "Nenhuma mensagem encontrada",
|
|
14
|
-
"errorSearchingMaxFileSize": "Erro ao buscar o tamanho máximo do arquivo:",
|
|
15
|
-
"incommingMessage": {
|
|
16
|
-
"messageImage": "imagem na mensagem"
|
|
17
|
-
},
|
|
18
|
-
"sendMessageForm": {
|
|
19
|
-
"maxFileField": "Tamanho máximo: {{maxFileField}}",
|
|
20
|
-
"chatEnded": "Conversa finalizada",
|
|
21
|
-
"typeMessage": "Digite uma mensagem",
|
|
22
|
-
"rightIcon": "Ícone para a direita"
|
|
23
|
-
},
|
|
24
|
-
"renderFileIcon": {
|
|
25
|
-
"altImage": "arquivos enviados pelo chat agx"
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
"newFormChat": {
|
|
29
|
-
"newChat": "Novo Chamado",
|
|
30
|
-
"description": {
|
|
31
|
-
"1": "Seu chamado será respondido o mais breve possível! Caso você se ausente do chamado pelo período de",
|
|
32
|
-
"1/2bold": "uma hora",
|
|
33
|
-
"2": "o mesmo será automaticamente fechado."
|
|
34
|
-
},
|
|
35
|
-
"fields": {
|
|
36
|
-
"reasons": {
|
|
37
|
-
"label": "Motivos",
|
|
38
|
-
"placeholder": "Selecione um motivo para o chamado"
|
|
39
|
-
},
|
|
40
|
-
"product": {
|
|
41
|
-
"label": "Produto (opcional)",
|
|
42
|
-
"placeholder": "Selecione o produto relacionado ao erro"
|
|
43
|
-
},
|
|
44
|
-
"message": {
|
|
45
|
-
"label": "Mensagem",
|
|
46
|
-
"placeholder": "Digite sua mensagem aqui"
|
|
47
|
-
},
|
|
48
|
-
"document": {
|
|
49
|
-
"label": "Documento (opcional)",
|
|
50
|
-
"placeholder": "Selecione um documento para o chamado"
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
"buttons": {
|
|
54
|
-
"send": "Enviar novo chamado",
|
|
55
|
-
"sendingButton": "Enviando..."
|
|
56
|
-
},
|
|
57
|
-
"inputFile": {
|
|
58
|
-
"chooseFile": "Escolha o arquivo",
|
|
59
|
-
"allowDocuments": "Só são aceitos arquivos no formato .png, .jpg, .pdf, .csv, .mp4, .doc ou .docx",
|
|
60
|
-
"allowSizeDocument": "Tamanho máximo: {{maxSize}}",
|
|
61
|
-
"documentSendError": "Escolha uma imagem JPG/PNG, PDF, CSV, MP4 ou arquivo DOC/DOCX."
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"messengerList": {
|
|
3
|
+
"noChatFound": "Nenhuma conversa encontrada",
|
|
4
|
+
"messengerAvatar": {
|
|
5
|
+
"alt": "imagem de um avatar de usuário"
|
|
6
|
+
},
|
|
7
|
+
"searchInput": {
|
|
8
|
+
"placeholder": "Pesquisar conversa..."
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
"messengerMessages": {
|
|
12
|
+
"selectConversation": "Selecione uma conversa para visualizar as mensagens",
|
|
13
|
+
"noMessagesFound": "Nenhuma mensagem encontrada",
|
|
14
|
+
"errorSearchingMaxFileSize": "Erro ao buscar o tamanho máximo do arquivo:",
|
|
15
|
+
"incommingMessage": {
|
|
16
|
+
"messageImage": "imagem na mensagem"
|
|
17
|
+
},
|
|
18
|
+
"sendMessageForm": {
|
|
19
|
+
"maxFileField": "Tamanho máximo: {{maxFileField}}",
|
|
20
|
+
"chatEnded": "Conversa finalizada",
|
|
21
|
+
"typeMessage": "Digite uma mensagem",
|
|
22
|
+
"rightIcon": "Ícone para a direita"
|
|
23
|
+
},
|
|
24
|
+
"renderFileIcon": {
|
|
25
|
+
"altImage": "arquivos enviados pelo chat agx"
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
"newFormChat": {
|
|
29
|
+
"newChat": "Novo Chamado",
|
|
30
|
+
"description": {
|
|
31
|
+
"1": "Seu chamado será respondido o mais breve possível! Caso você se ausente do chamado pelo período de",
|
|
32
|
+
"1/2bold": "uma hora",
|
|
33
|
+
"2": "o mesmo será automaticamente fechado."
|
|
34
|
+
},
|
|
35
|
+
"fields": {
|
|
36
|
+
"reasons": {
|
|
37
|
+
"label": "Motivos",
|
|
38
|
+
"placeholder": "Selecione um motivo para o chamado"
|
|
39
|
+
},
|
|
40
|
+
"product": {
|
|
41
|
+
"label": "Produto (opcional)",
|
|
42
|
+
"placeholder": "Selecione o produto relacionado ao erro"
|
|
43
|
+
},
|
|
44
|
+
"message": {
|
|
45
|
+
"label": "Mensagem",
|
|
46
|
+
"placeholder": "Digite sua mensagem aqui"
|
|
47
|
+
},
|
|
48
|
+
"document": {
|
|
49
|
+
"label": "Documento (opcional)",
|
|
50
|
+
"placeholder": "Selecione um documento para o chamado"
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
"buttons": {
|
|
54
|
+
"send": "Enviar novo chamado",
|
|
55
|
+
"sendingButton": "Enviando..."
|
|
56
|
+
},
|
|
57
|
+
"inputFile": {
|
|
58
|
+
"chooseFile": "Escolha o arquivo",
|
|
59
|
+
"allowDocuments": "Só são aceitos arquivos no formato .png, .jpg, .pdf, .csv, .mp4, .doc ou .docx",
|
|
60
|
+
"allowSizeDocument": "Tamanho máximo: {{maxSize}}",
|
|
61
|
+
"documentSendError": "Escolha uma imagem JPG/PNG, PDF, CSV, MP4 ou arquivo DOC/DOCX."
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve">
|
|
2
|
-
<desc>Created with Fabric.js 1.7.22</desc>
|
|
3
|
-
<defs>
|
|
4
|
-
</defs>
|
|
5
|
-
<g transform="translate(128 128) scale(0.72 0.72)" style="">
|
|
6
|
-
<g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05000000000004) scale(3.89 3.89)" >
|
|
7
|
-
<path d="M 87.85 41.551 L 5.545 1.167 C 2.414 -0.369 -0.979 2.725 0.263 5.984 l 14.342 37.648 c 0.336 0.881 0.336 1.854 0 2.735 L 0.263 84.016 c -1.241 3.259 2.152 6.353 5.282 4.817 L 87.85 48.449 C 90.717 47.043 90.717 42.957 87.85 41.551 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(255,255,255); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
|
8
|
-
</g>
|
|
9
|
-
</g>
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" width="256" height="256" viewBox="0 0 256 256" xml:space="preserve">
|
|
2
|
+
<desc>Created with Fabric.js 1.7.22</desc>
|
|
3
|
+
<defs>
|
|
4
|
+
</defs>
|
|
5
|
+
<g transform="translate(128 128) scale(0.72 0.72)" style="">
|
|
6
|
+
<g style="stroke: none; stroke-width: 0; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: none; fill-rule: nonzero; opacity: 1;" transform="translate(-175.05 -175.05000000000004) scale(3.89 3.89)" >
|
|
7
|
+
<path d="M 87.85 41.551 L 5.545 1.167 C 2.414 -0.369 -0.979 2.725 0.263 5.984 l 14.342 37.648 c 0.336 0.881 0.336 1.854 0 2.735 L 0.263 84.016 c -1.241 3.259 2.152 6.353 5.282 4.817 L 87.85 48.449 C 90.717 47.043 90.717 42.957 87.85 41.551 z" style="stroke: none; stroke-width: 1; stroke-dasharray: none; stroke-linecap: butt; stroke-linejoin: miter; stroke-miterlimit: 10; fill: rgb(255,255,255); fill-rule: nonzero; opacity: 1;" transform=" matrix(1 0 0 1 0 0) " stroke-linecap="round" />
|
|
8
|
+
</g>
|
|
9
|
+
</g>
|
|
10
10
|
</svg>
|