{"version":3,"file":"static/js/883.93d0b0d8.chunk.js","mappings":"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","sources":["app/__components__/icons/AlertIcon.jsx","app/__components__/icons/InformationIcon.jsx","app/__components__/icons/LeaveChatIcon.jsx","app/__components__/icons/RetryIcon.jsx","app/__components__/icons/SoundOffIcon.jsx","app/__components__/icons/SoundOnIcon.jsx","app/__components__/icons/StarIcon.jsx","app/__components__/icons/ValidationIcon.jsx","utils/hooks/useMarkdownComponents.js","app/markdown/index.jsx","app/window/Header.jsx","utils/helpers/generateSentAtFromLastMessage.js","app/TextArea.jsx","app/window/MessageComposer.jsx","app/conversation/messages/MessageStatus.jsx","app/conversation/messages/MessageSystem.jsx","app/conversation/messages/MessageLinkPreview.jsx","utils/queries/message.js","utils/regex/common.js","app/conversation/messages/MessageText.jsx","app/conversation/messages/Message.jsx","app/conversation/messages/MessageGroup.jsx","app/conversation/MessageList.jsx","utils/hooks/useAsyncEffect.js","app/conversation/visitorSatisfaction/StarRating.jsx","app/conversation/visitorSatisfaction/ValidationSection.jsx","app/conversation/visitorSatisfaction/index.jsx","app/conversation/index.jsx","app/window/index.jsx","utils/hooks/useVisualViewport.js"],"sourcesContent":["import React from \"react\";\n\nfunction AlertIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default AlertIcon;\n","import React from \"react\";\n\nfunction InformationIcon() {\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport default InformationIcon;\n","import React from \"react\";\n\nfunction LeaveChatIcon() {\n return (\n \n \n \n \n \n \n \n );\n}\n\nexport default LeaveChatIcon;\n","import React from \"react\";\n\nfunction RetryIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default RetryIcon;\n","import React from \"react\";\n\nfunction SoundOffIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default SoundOffIcon;\n","import React from \"react\";\n\nfunction SoundOnIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default SoundOnIcon;\n","import React from \"react\";\n\nfunction StarIcon() {\n return (\n \n \n \n \n \n \n );\n}\n\nexport default StarIcon;\n","import React from \"react\";\n\nfunction ValidationIcon() {\n return (\n \n \n \n \n );\n}\n\nexport default ValidationIcon;\n","import React from \"react\";\n\nimport PropTypes from \"prop-types\";\n\nfunction CustomLink({ href, children }) {\n return (\n \n {children}\n \n );\n}\n\nCustomLink.propTypes = {\n href: PropTypes.string.isRequired,\n children: PropTypes.node.isRequired,\n};\n\nfunction CustomH1({ children }) {\n return {children};\n}\n\nCustomH1.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nfunction CustomH2({ children }) {\n return {children};\n}\n\nCustomH2.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nfunction CustomH3({ children }) {\n return {children};\n}\n\nCustomH3.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nfunction CustomDel({ children }) {\n return {children};\n}\n\nCustomDel.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nfunction CustomP({ children }) {\n return

{children}

;\n}\n\nCustomP.propTypes = {\n children: PropTypes.node.isRequired,\n};\n\nfunction CustomBlockQuote({ children }) {\n return
{children}
;\n}\n\nCustomBlockQuote.propTypes = {\n children: PropTypes.node.isRequired,\n};\nfunction useMarkdownComponents() {\n return {\n CustomLink,\n CustomH1,\n CustomH2,\n CustomH3,\n CustomDel,\n CustomP,\n CustomBlockQuote,\n };\n}\n\nexport default useMarkdownComponents;\n","import React from \"react\";\n\nimport classNames from \"classnames\";\nimport PropTypes from \"prop-types\";\nimport ReactMarkdown from \"react-markdown\";\nimport remarkGfm from \"remark-gfm\";\n\nimport useMarkdownComponents from \"../../utils/hooks/useMarkdownComponents\";\n\nfunction Markdown({ content, className, notification, greeting, replied }) {\n const {\n CustomLink,\n CustomH1,\n CustomH2,\n CustomH3,\n CustomDel,\n CustomP,\n CustomBlockQuote,\n } = useMarkdownComponents();\n\n return (\n \n {content}\n \n );\n}\n\nMarkdown.propTypes = {\n content: PropTypes.string,\n className: PropTypes.string,\n notification: PropTypes.bool,\n greeting: PropTypes.bool,\n replied: PropTypes.bool,\n};\n\nMarkdown.defaultProps = {\n content: \"\",\n className: \"\",\n notification: false,\n greeting: false,\n replied: false,\n};\n\nexport default Markdown;\n","import React, { Suspense, useState } from \"react\";\n\nimport * as API from \"@ekonsilio/api-livechat\";\nimport PropTypes from \"prop-types\";\nimport { useQuery } from \"react-query\";\n\nimport { useSDK } from \"../../utils/sdk\";\nimport { useWebmessenger } from \"../../utils/webmessenger\";\nimport Markdown from \"../markdown\";\n\nconst PanelInformations = React.lazy(() => import(\"./PanelInformations\"));\nconst PrivacyPolicy = React.lazy(() => import(\"./PrivacyPolicy\"));\nconst CloseModal = React.lazy(() => import(\"./CloseModal\"));\n\nconst webmessengerApi = new API.Messaging.Webmessenger();\n\nfunction Header({ onMinimze, onToggleSoundNotification, soundNotification }) {\n const {\n greeting,\n operator,\n setOperator,\n conversation,\n integration,\n online,\n hide,\n } = useWebmessenger();\n const { emit } = useSDK();\n\n const [informationsPanel, setInformationsPanel] = useState(false);\n const [privacyShow, setPrivacyShow] = useState(false);\n const [closeModal, setCloseModal] = useState(false);\n\n useQuery(\n [\"operator\"],\n async () =>\n await webmessengerApi.getOperator(\n integration,\n operator?._id,\n operator?.avatar\n ),\n {\n onSuccess: (data) => {\n setOperator(data);\n },\n enabled: conversation === null,\n refetchOnWindowFocus: false,\n staleTime: 0,\n }\n );\n return (\n
\n {closeModal && (\n }>\n {\n setCloseModal(false);\n if (!online) {\n hide();\n }\n }}\n onCancel={() => {\n setCloseModal(false);\n }}\n />\n \n )}\n\n {informationsPanel && (\n }>\n {\n setInformationsPanel(false);\n }}\n openCloseModal={() => {\n setCloseModal(true);\n }}\n onClosePolicy={() => {\n if (privacyShow) {\n setPrivacyShow(false);\n } else setPrivacyShow(true);\n }}\n soundNotification={soundNotification}\n onToggleSoundNotification={onToggleSoundNotification}\n />\n \n )}\n\n
\n
\n
\n {operator && (\n
\n {operator.face && (\n \n \n \n )}\n {(!greeting?.header || conversation) && (\n
\n \n {operator.name}\n \n \n {operator.title}\n \n
\n )}\n
\n )}\n
\n
\n \n setInformationsPanel(!informationsPanel)\n }\n >\n \n \n \n \n \n \n \n \n {\n emit(\"window:minimized\", {\n conversation: conversation?._id || null,\n });\n sessionStorage.setItem(\n \"eK-chat-button-animation\",\n JSON.stringify(false)\n );\n onMinimze();\n }}\n >\n \n \n \n \n \n \n
\n
\n {greeting?.header && !conversation && (\n
\n \n {greeting.header?.title}\n \n \n
\n )}\n
\n {privacyShow && (\n <>\n setPrivacyShow(false)}\n className=\"ek-chat__header--hide-privacyPolicy ek-chat--button\"\n >\n \n \n \n \n \n \n \n }>\n \n \n \n )}\n
\n );\n}\n\nHeader.propTypes = {\n onMinimze: PropTypes.func,\n onToggleSoundNotification: PropTypes.func,\n soundNotification: PropTypes.bool,\n};\n\nHeader.defaultProps = {\n onMinimze: () => {},\n onToggleSoundNotification: () => {},\n soundNotification: false,\n};\n\nexport default Header;\n","import { DateTime } from \"luxon\";\n\nexport default (lastMessage) => {\n const dateNow = DateTime.now();\n\n if (!lastMessage) return dateNow.toISO();\n const lastMessageISODate = DateTime.fromISO(lastMessage.status.sentAt);\n\n const sentAt =\n dateNow > lastMessageISODate\n ? dateNow.toISO()\n : lastMessageISODate.plus(100).toISO();\n\n return sentAt;\n};\n","import React, { useState, useEffect } from \"react\";\n\nconst TextArea = React.forwardRef((props, ref) => {\n const {\n type, // destructure of the rest only (this props is not consumed by the component)\n name,\n id,\n placeholder,\n getValue,\n value,\n rows,\n error,\n displayError,\n onChange,\n reactourTextArea,\n resetValue,\n ...rest\n } = props;\n const [currentValue, setCurrentValue] = useState(value);\n\n useEffect(() => {\n if (value !== currentValue) {\n setCurrentValue(value);\n }\n }, [currentValue, value]);\n\n return (\n \n {\n setCurrentValue(e.target.value);\n onChange(e);\n }}\n {...rest}\n />\n \n );\n});\n\nexport default TextArea;\n","import React, { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport * as API from \"@ekonsilio/api-livechat\";\nimport { Transition } from \"@headlessui/react\";\nimport ObjectID from \"bson-objectid\";\nimport omit from \"lodash/omit\";\nimport { useCookies } from \"react-cookie\";\nimport {\n browserName,\n browserVersion,\n getUA,\n osName,\n osVersion,\n} from \"react-device-detect\";\nimport { useIntl } from \"react-intl\";\nimport { useMutation } from \"react-query\";\nimport { checkText } from \"smile2emoji\";\n\nimport generateSentAtFromLastMessage from \"../../utils/helpers/generateSentAtFromLastMessage\";\nimport { useAddHistoryMutation } from \"../../utils/queries/conversations\";\nimport { useSDK } from \"../../utils/sdk\";\nimport { getBehaviorsSessionStorage } from \"../../utils/session-storage\";\nimport { useWebmessenger } from \"../../utils/webmessenger\";\nimport { useWebSocket } from \"../../utils/websocket\";\nimport TextArea from \"../TextArea\";\n\nconst webmessengerApi = new API.Messaging.Webmessenger();\nconst authenticationApi = new API.Authentication.Auth();\n\nfunction MessageComposer() {\n const [, setCookie] = useCookies([\"eK-global\"]);\n\n const intl = useIntl();\n const {\n token,\n login,\n conversation,\n setConversation,\n setOperator,\n integration,\n operator,\n greeting,\n messages,\n handleSetMessages,\n setTyping,\n } = useWebmessenger();\n\n const { emit } = useSDK();\n const { websocket, connected } = useWebSocket();\n\n const textareaRef = useRef();\n const typing = useRef({\n timer: null,\n status: \"stop\",\n });\n\n const url = window.location.href;\n\n const [textareaFocused, setTextareaFocused] = useState(false);\n const [text, setText] = useState(\"\");\n const [typingId, setTypingId] = useState(null);\n const [authenticationIsLoading, setAuthenticationIsLoading] =\n useState(false);\n const [createConversationIsLoading, setCreateConversationIsLoading] =\n useState(false);\n\n const latestMessage = useMemo(() => {\n if (!messages?.length) return null;\n return messages[messages.length - 1];\n }, [messages]);\n\n const { mutate: addHistory } = useAddHistoryMutation();\n\n const { mutate: sendMessage, isLoading: sendMessageIsLoading } =\n useMutation(\n async (message) => {\n if (!token) {\n setAuthenticationIsLoading(true);\n const loginToken = await authenticationApi.register({\n device: {\n \"user-agent\": getUA,\n os: `${osName} ${osVersion}`,\n webbrowser: {\n name: browserName,\n version: browserVersion,\n },\n },\n location: window.location,\n integration,\n });\n login(loginToken.token);\n setAuthenticationIsLoading(false);\n }\n\n const getBehaviorsStore = getBehaviorsSessionStorage();\n\n if (!conversation || !conversation?._id)\n setCreateConversationIsLoading(true);\n\n const tracking = sessionStorage.getItem(\"eK-tracking\");\n\n const msg = await webmessengerApi.sendMessage({\n ...message,\n author: {\n type: \"visitor\",\n },\n ...(conversation && conversation._id\n ? {\n conversation: conversation._id,\n }\n : {\n url,\n user: operator._id,\n avatar: operator.avatar,\n /**\n * Send the greetingMessage parameter only if the message was not sent\n */\n ...(greeting?.message &&\n !getBehaviorsStore.triggered?.greeting\n ?.message?.sent && {\n greetingMessage: greeting.message,\n }),\n ...(tracking\n ? {\n tracking: JSON.parse(tracking),\n }\n : {}),\n }),\n });\n\n if (!conversation) {\n const expires = new Date();\n expires.setHours(expires.getHours() + 12);\n\n setCookie(\n \"eK-global\",\n {\n maximized: true,\n },\n {\n secure: true,\n path: \"/\",\n sameSite: \"strict\",\n expires,\n }\n );\n }\n\n /**\n * Set the message in the store as sent\n */\n if (\n greeting?.message &&\n !getBehaviorsStore.triggered.greeting?.message?.sent\n ) {\n getBehaviorsStore.triggered.greeting.message.sent = true;\n\n sessionStorage.setItem(\n \"eK-behaviors\",\n JSON.stringify(getBehaviorsStore)\n );\n }\n\n return msg;\n },\n {\n onSuccess: (message) => {\n if (!conversation) {\n setConversation(message.conversation);\n setOperator({\n ...omit(\n message.conversation.participants.operators.find(\n (o) => o.current\n ),\n [\"current\", \"startedAt\", \"endedAt\"]\n ),\n });\n\n addHistory({\n _id: message.conversation._id,\n url: window.location.href,\n });\n\n localStorage.setItem(\n \"eK-conversation:new\",\n integration\n );\n localStorage.removeItem(\"eK-conversation:new\");\n\n emit(\"conversation:new\", {\n conversation: message.conversation._id,\n });\n\n setCreateConversationIsLoading(false);\n }\n\n if (operator?.type === \"agent\") setTyping(true);\n },\n onError: (error, data) => {\n handleSetMessages((prevMessages) => {\n const messagesCopy = [...prevMessages];\n\n const messageIndex = messagesCopy.findIndex(\n (message) => message._id === data.messageId\n );\n\n if (messageIndex >= 0) {\n messagesCopy[messageIndex] = {\n ...messagesCopy[messageIndex],\n status: {\n ...messagesCopy[messageIndex].status,\n error: true,\n loading: false,\n },\n };\n }\n\n return messagesCopy;\n });\n },\n }\n );\n\n /** Handle change on ContentEditable */\n const handleChange = (ev) => {\n /** Convert emoji shortcut on native emoji */\n const newText = checkText(ev.target.value);\n\n if (conversation) {\n clearTimeout(typing.current.timer);\n\n typing.current.timer = setTimeout(\n () => {\n const newTypingId = ObjectID().toHexString();\n\n if (!newText) {\n setTypingId(null);\n } else if (!typingId) {\n setTypingId(newTypingId);\n }\n\n websocket.emit(\"conversation:typing\", {\n conversation: conversation._id,\n action: newText ? \"start\" : \"stop\",\n message: newText,\n typingId: typingId || newTypingId,\n });\n },\n typing.current.status === \"stop\" ? 0 : 350 // Emit the event on the first typing without delay\n );\n\n typing.current.status = newText ? \"start\" : \"stop\";\n }\n\n setText(newText);\n };\n\n /** Handle focus to display send button */\n const handleFocus = () => {\n setTextareaFocused(true);\n };\n\n /** Handle blur to hide with condition send button */\n const handleBlur = (ev) => {\n /** Only for unit tests */\n if (ev.target.jestContent)\n handleChange({\n ...ev,\n target: {\n ...ev.target,\n value: ev.target.jestContent,\n },\n });\n\n if (text.length === 0) setTextareaFocused(false);\n };\n\n /** Prepare function for future implmentations */\n const send = () => {\n const sentAt = generateSentAtFromLastMessage(latestMessage);\n\n if (\n text.trim().length > 0 &&\n !authenticationIsLoading &&\n !createConversationIsLoading\n ) {\n if (conversation && connected) {\n try {\n clearTimeout(typing.current.timer);\n websocket.emit(\"conversation:typing\", {\n conversation: conversation._id,\n action: \"stop\",\n message: \"\",\n typingId,\n });\n\n setTypingId(null);\n } catch (err) {\n // Nothing to do but without eslint error 👀\n }\n }\n\n const _id = ObjectID().toHexString();\n\n if (conversation) {\n handleSetMessages((prevState) => [\n ...prevState,\n {\n type: \"text\",\n content: text,\n author: {\n ...conversation.participants.visitor,\n type: \"visitor\",\n },\n status: {\n sentAt,\n loading: true,\n },\n _id,\n },\n ]);\n }\n\n sendMessage({\n type: \"text\",\n content: text,\n messageId: _id,\n });\n\n setText(\"\");\n\n textareaRef.current.focus();\n\n if (\n \"Notification\" in window &&\n // eslint-disable-next-line\n typeof Notification !== undefined &&\n Notification.permission === \"default\"\n ) {\n Notification.requestPermission();\n }\n }\n };\n\n /** Handle key down to detect Enter key and send message */\n const handleKeyDown = (ev) => {\n // send the message if press key enter and only if the message isn't on loading state\n if (!ev.shiftKey && ev.key === \"Enter\") {\n ev.preventDefault();\n send();\n textareaRef.current.focus();\n }\n };\n\n useEffect(() => {\n textareaRef?.current?.focus();\n }, [sendMessageIsLoading]);\n\n useEffect(() => {\n const handleResetTyping = () => {\n if (websocket) {\n websocket.emit(\"conversation:typing\", {\n conversation: conversation._id,\n action: \"stop\",\n message: \"\",\n skipUpdateUserActivity: true,\n typingId,\n });\n\n setTypingId(null);\n }\n\n return \"\";\n };\n\n window.addEventListener(\"beforeunload\", handleResetTyping);\n\n return () => {\n window.removeEventListener(\"beforeunload\", handleResetTyping);\n };\n }, [conversation, websocket]);\n\n const numberOfRows = (lineHeight) => {\n if (text === \"\") {\n return 1;\n }\n let height;\n\n if (textareaRef.current) {\n height = textareaRef.current.scrollHeight;\n }\n if (Math.floor(height / lineHeight) > 3) {\n return 3;\n }\n return Math.floor(height / lineHeight);\n };\n\n useEffect(() => {\n if (!conversation) {\n setText(\"\");\n }\n }, [conversation]);\n\n return (\n ((conversation && conversation.status !== \"closed\") ||\n !conversation) && (\n
\n
\n \n
\n 0}\n enter=\"ek-chat__writer--send-enter\"\n leave=\"ek-chat__writer--send-leave\"\n >\n \n \n \n \n \n \n \n \n
\n )\n );\n}\n\nexport default MessageComposer;\n","import React, { useMemo } from \"react\";\n\nimport * as API from \"@ekonsilio/api-livechat\";\nimport { DateTime } from \"luxon\";\nimport PropTypes from \"prop-types\";\nimport { FormattedMessage, useIntl } from \"react-intl\";\nimport { useMutation } from \"react-query\";\n\nimport { RetryIcon } from \"../../__components__/icons\";\n\nimport generateSentAtFromLastMessage from \"../../../utils/helpers/generateSentAtFromLastMessage\";\nimport { useWebmessenger } from \"../../../utils/webmessenger\";\n\nconst webmessengerApi = new API.Messaging.Webmessenger();\n\nfunction MessageStatus({\n _id,\n show,\n type,\n content,\n author,\n status,\n typing,\n onResetIsHover,\n}) {\n const intl = useIntl();\n\n const { conversation, messages, handleSetMessages } = useWebmessenger();\n\n const isOperator = author?.type === \"operator\" || author?.type === \"agent\";\n\n const latestMessage = useMemo(() => {\n if (!messages?.length) return null;\n return messages[messages.length - 1];\n }, [messages]);\n\n const messageStatusText = () => {\n if (status.error)\n return intl.formatMessage({\n id: \"WEBMESSENGER.MESSAGE_DETAILS.STATUS_ERROR\",\n defaultMessage: \"Échec de l'envoi\",\n });\n\n if (status.loading)\n return intl.formatMessage({\n id: \"WEBMESSENGER.MESSAGE_DETAILS.STATUS_LOADING\",\n defaultMessage: \"Envoi en cours\",\n });\n\n if (status.readAt)\n return intl.formatMessage({\n id: \"WEBMESSENGER.MESSAGE_DETAILS.STATUS_READ\",\n defaultMessage: \"Lu\",\n });\n\n if (status.receivedAt)\n return intl.formatMessage({\n id: \"WEBMESSENGER.MESSAGE_DETAILS.STATUS_DELIVERED\",\n defaultMessage: \"Distribué\",\n });\n\n return intl.formatMessage({\n id: \"WEBMESSENGER.MESSAGE_DETAILS.STATUS_SENT\",\n defaultMessage: \"Envoyé\",\n });\n };\n\n const { mutate: sendMessage } = useMutation(\n async (message) => await webmessengerApi.sendMessage(message),\n {\n onError: (error, data) => {\n handleSetMessages((prevMessages) => {\n const messagesCopy = [...prevMessages];\n\n const messageIndex = messagesCopy.findIndex(\n (message) => message._id === data.messageId\n );\n\n if (messageIndex >= 0) {\n messagesCopy[messageIndex] = {\n ...messagesCopy[messageIndex],\n status: {\n ...messagesCopy[messageIndex].status,\n error: true,\n loading: false,\n },\n };\n }\n\n return messagesCopy.sort(\n (a, b) =>\n new Date(a.createdAt || a.status.sentAt) -\n new Date(b.createdAt || b.status.sentAt)\n );\n });\n },\n }\n );\n\n const handleRetrySendMessage = () => {\n const sentAt = generateSentAtFromLastMessage(latestMessage);\n\n onResetIsHover();\n\n handleSetMessages((prevMessages) => {\n const messagesCopy = [...prevMessages];\n\n const messageIndex = messagesCopy.findIndex(\n (message) => message._id === _id\n );\n\n if (messageIndex >= 0) {\n messagesCopy[messageIndex] = {\n ...messagesCopy[messageIndex],\n status: {\n ...messagesCopy[messageIndex].status,\n sentAt,\n error: false,\n loading: true,\n },\n };\n }\n\n return messagesCopy.sort(\n (a, b) =>\n new Date(a.createdAt || a.status.sentAt) -\n new Date(b.createdAt || b.status.sentAt)\n );\n });\n\n sendMessage({\n type: \"text\",\n content,\n messageId: _id,\n author: {\n type: \"visitor\",\n },\n conversation: conversation._id,\n status: {\n sentAt,\n },\n });\n };\n\n return (\n type !== \"system\" &&\n show && (\n
\n {isOperator && author?.name}\n {!status.error &&\n author?.type === \"visitor\" &&\n intl.formatMessage({\n id: \"WEBMESSENGER.MESSAGE_DETAILS.AUTHOR_ME\",\n defaultMessage: \"Moi\",\n })}\n {!status.error && !typing && \" • \"}\n {!typing && DateTime.fromISO(status.sentAt).toFormat(\"HH'H'mm\")}\n {!typing &&\n author?.type === \"visitor\" &&\n ` - ${messageStatusText(status)}`}{\" \"}\n {status.error && (\n <>\n {\"- \"}\n
\n \n \n \n \n
\n \n )}\n
\n )\n );\n}\n\nMessageStatus.propTypes = {\n _id: PropTypes.string.isRequired,\n type: PropTypes.string,\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),\n /**\n * Author of the message\n */\n author: PropTypes.shape({\n _id: PropTypes.string,\n type: PropTypes.oneOf([\"operator\", \"supervisor\", \"visitor\", \"agent\"]),\n name: PropTypes.string,\n }),\n /**\n * Status of the message\n */\n status: PropTypes.shape({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n success: PropTypes.bool,\n sentAt: PropTypes.string,\n receivedAt: PropTypes.string,\n readAt: PropTypes.string,\n }),\n /**\n * Typing Mode\n */\n typing: PropTypes.bool,\n /**\n * Show / Hide the message\n */\n show: PropTypes.bool,\n /**\n * Reset the isHover state\n */\n onResetIsHover: PropTypes.func.isRequired,\n};\n\nMessageStatus.defaultProps = {\n type: \"\",\n content: \"\",\n author: {},\n status: {},\n typing: false,\n show: false,\n};\n\nexport default MessageStatus;\n","import React from \"react\";\n\nimport PropTypes from \"prop-types\";\nimport classNames from \"classnames\";\n\nimport { useIntl } from \"react-intl\";\n\nfunction MessageSystem({ content }) {\n const intl = useIntl();\n return (\n \n {/**\n * Transfer case\n */}\n {content.type === \"transfer\"\n ? intl.formatMessage({\n id: \"WEBMESSENGER.MESSAGE_SYSTEM.TRANSFER\",\n description:\n \"Texte : Vous avez été transféré vers un autre conseiller\",\n defaultMessage:\n \"Vous avez été transféré vers un autre conseiller\",\n })\n : \"\"}\n

\n );\n}\n\nMessageSystem.propTypes = {\n /**\n * Content\n */\n content: PropTypes.shape({\n type: PropTypes.string,\n }),\n};\n\nMessageSystem.defaultProps = {\n content: {\n type: \"\",\n },\n};\n\nexport default MessageSystem;\n","import React, { useEffect, useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport PropTypes from \"prop-types\";\n\nimport useDisplayLinkPreview from \"../../../utils/queries/message\";\n\nfunction MessageLinkPreview({ validContentLinks }) {\n const [currentLinkIndex, setCurrentLinkIndex] = useState(0);\n const [currentLinkPreview, setCurrentLinkPreview] = useState(null);\n const [displayImage, setDisplayImage] = useState(false);\n\n const { data: linkPreview } = useDisplayLinkPreview(currentLinkPreview, {\n options: {\n onError: () => {\n // Move to next link on error\n setCurrentLinkIndex((prevIndex) => prevIndex + 1);\n },\n enabled: !!currentLinkPreview,\n refetchOnWindowFocus: false,\n retry: 0,\n },\n });\n\n useEffect(() => {\n if (currentLinkIndex < validContentLinks?.length) {\n setCurrentLinkPreview(validContentLinks[currentLinkIndex]);\n }\n }, [currentLinkIndex, validContentLinks]);\n\n if (!validContentLinks || !linkPreview?.title) return null;\n\n const { image, title, description, domainName } = linkPreview;\n\n return (\n
\n {image && (\n \n setDisplayImage(true)}\n onError={() => setDisplayImage(false)}\n />\n \n )}\n
\n \n \n {title}\n \n \n \n {description}\n \n \n {domainName}\n \n
\n
\n );\n}\n\nMessageLinkPreview.propTypes = {\n validContentLinks: PropTypes.arrayOf(PropTypes.string),\n};\n\nMessageLinkPreview.defaultProps = {\n validContentLinks: [],\n};\n\nexport default MessageLinkPreview;\n","import axios from \"axios\";\nimport { useQuery } from \"react-query\";\n\n/**\n * Display link preview\n * @param {string} url\n * @param {Object} [reactQuery]\n */\nexport default function useDisplayLinkPreview(url, reactQuery = {}) {\n return useQuery(\n reactQuery?.key || [\"linkPreview\", url],\n async () => (await axios.post(\"/link-preview\", { url }))?.data,\n {\n ...reactQuery?.options,\n }\n );\n}\n","const matchAllUrlsRegex = /(https?:\\/\\/[^\\s)]+)/gi;\n\nexport default matchAllUrlsRegex;\n","import React, { useEffect, useMemo, useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport { decode } from \"html-entities\";\nimport PropTypes from \"prop-types\";\n\nimport MessageLinkPreview from \"./MessageLinkPreview\";\n\nimport matchAllUrlsRegex from \"../../../utils/regex/common\";\nimport Markdown from \"../../markdown/index\";\n\nfunction MessageText({ content, author, first, last, status }) {\n const [validContentLinks, setValidContentLinks] = useState(null);\n\n const checkLinksInMessageContent = useMemo(\n () => content.match(matchAllUrlsRegex),\n [content]\n );\n\n useEffect(() => {\n if (checkLinksInMessageContent)\n setValidContentLinks(checkLinksInMessageContent);\n }, [checkLinksInMessageContent]);\n\n const contentToDisplay =\n typeof content === \"string\" ? content : content.original;\n\n return (\n \n \n \n \n );\n}\n\nMessageText.propTypes = {\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),\n author: PropTypes.shape({\n _id: PropTypes.string,\n type: PropTypes.oneOf([\"operator\", \"supervisor\", \"visitor\", \"agent\"]),\n name: PropTypes.string,\n }),\n status: PropTypes.shape({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n }),\n first: PropTypes.bool,\n last: PropTypes.bool,\n};\n\nMessageText.defaultProps = {\n content: \"\",\n author: {},\n status: {},\n first: false,\n last: false,\n};\n\nexport default MessageText;\n","import React, { useEffect, useRef, useState } from \"react\";\n\nimport classNames from \"classnames\";\nimport PropTypes from \"prop-types\";\n\nimport { AlertIcon } from \"../../__components__/icons\";\n\nimport MessageStatus from \"./MessageStatus\";\nimport MessageSystem from \"./MessageSystem\";\nimport MessageText from \"./MessageText\";\n\nimport Markdown from \"../../markdown/index\";\n\nfunction Message({\n _id,\n typing,\n type,\n content,\n author,\n first,\n last,\n status,\n replyTo,\n writtenBy,\n}) {\n const timerRef = useRef(0);\n\n const [isHover, setIsHover] = useState(false);\n\n const isOperator = author?.type === \"operator\" || author?.type === \"agent\";\n\n const handleMouseEnter = () => {\n timerRef.current = setTimeout(() => {\n setIsHover(true);\n }, 600);\n };\n\n const handleMouseLeave = () => {\n clearTimeout(timerRef.current);\n setIsHover(false);\n };\n\n const handleClick = () => {\n const previousFocusedMessage = document.querySelector(\n \".ek-chat__message--animate-zoom\"\n );\n\n previousFocusedMessage?.classList.remove(\n \"ek-chat__message--animate-zoom\"\n );\n\n const messageToFocus = document.getElementById(\n `message-${replyTo?._id}`\n );\n\n if (messageToFocus) {\n messageToFocus.scrollIntoView({\n block: \"center\",\n behavior: \"smooth\",\n });\n\n setTimeout(() => {\n messageToFocus.classList.add(\"ek-chat__message--animate-zoom\");\n }, 150);\n }\n };\n\n useEffect(() => () => clearTimeout(timerRef.current), []);\n\n if (type === \"text\")\n return (\n \n {replyTo && replyTo?.content && !writtenBy.ai && (\n \n \n \n )}\n \n \n {status.error && author.type === \"visitor\" && }\n \n \n \n );\n\n if (type === \"system\")\n return (\n \n );\n\n return null;\n}\n\nexport default Message;\n\nMessage.propTypes = {\n _id: PropTypes.string.isRequired,\n type: PropTypes.string,\n /**\n * Content to display\n */\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),\n /**\n * Author of the message\n */\n author: PropTypes.shape({\n _id: PropTypes.string,\n type: PropTypes.oneOf([\"operator\", \"supervisor\", \"visitor\", \"agent\"]),\n name: PropTypes.string,\n }),\n /**\n * Status of the message\n */\n status: PropTypes.shape({\n loading: PropTypes.bool,\n error: PropTypes.bool,\n }),\n /**\n * Typing Mode\n */\n first: PropTypes.bool,\n last: PropTypes.bool,\n /**\n * Typing Mode\n */\n typing: PropTypes.bool,\n /**\n * Reply To\n */\n replyTo: PropTypes.shape({\n _id: PropTypes.string,\n type: PropTypes.string,\n content: PropTypes.oneOfType([PropTypes.string, PropTypes.shape({})]),\n translation: PropTypes.shape({}),\n author: PropTypes.shape({\n _id: PropTypes.string,\n type: PropTypes.oneOf([\"operator\", \"supervisor\", \"visitor\", \"agent\"]),\n name: PropTypes.string,\n }),\n }),\n writtenBy: PropTypes.shape({\n ai: PropTypes.bool,\n human: PropTypes.bool,\n }),\n};\n\nMessage.defaultProps = {\n type: \"\",\n content: \"\",\n author: {},\n status: {},\n first: false,\n last: false,\n typing: false,\n replyTo: {},\n writtenBy: {},\n};\n","import React, { Fragment } from \"react\";\n\nimport { Transition } from \"@headlessui/react\";\nimport classNames from \"classnames\";\nimport PropTypes from \"prop-types\";\n\nimport Message from \"./Message\";\n\nfunction MessageGroup({ author, messages, typing, type }) {\n const isOperator = author?.type === \"operator\" || author?.type === \"agent\";\n\n return (\n \n {isOperator && author?.face && (\n
\n \n
\n )}\n\n
\n {messages.map((message, key) => (\n \n \n \n ))}\n
\n \n );\n}\n\nMessageGroup.propTypes = {\n /**\n * Type of the message. The type of component returned by Message will depend on this props.\n */\n type: PropTypes.oneOf([\"text\", \"image\", \"file\", \"system\"]),\n /**\n * messages\n */\n messages: PropTypes.arrayOf(\n PropTypes.shape({\n status: PropTypes.shape({\n error: PropTypes.bool,\n }),\n })\n ),\n /**\n * Author of the message\n */\n author: PropTypes.shape({\n _id: PropTypes.string,\n type: PropTypes.oneOf([\"operator\", \"supervisor\", \"visitor\", \"agent\"]),\n name: PropTypes.string,\n face: PropTypes.string,\n }),\n /**\n * Status of the message\n */\n status: PropTypes.shape({\n success: PropTypes.bool,\n error: PropTypes.bool,\n sentAt: PropTypes.string,\n receivedAt: PropTypes.string,\n readAt: PropTypes.string,\n }),\n /**\n * Typing Mode\n */\n typing: PropTypes.bool,\n};\n\nMessageGroup.defaultProps = {\n type: \"text\",\n messages: [],\n author: {},\n status: {},\n typing: false,\n};\n\nexport default MessageGroup;\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport * as API from \"@ekonsilio/api-livechat\";\nimport { Transition } from \"@headlessui/react\";\nimport { useCookies } from \"react-cookie\";\nimport { FormattedMessage } from \"react-intl\";\nimport { useQuery } from \"react-query\";\n\nimport MessageGroup from \"./messages/MessageGroup\";\n\nimport useAsyncEffect from \"../../utils/hooks/useAsyncEffect\";\nimport useVisualViewport from \"../../utils/hooks/useVisualViewport\";\nimport { getBehaviorsSessionStorage } from \"../../utils/session-storage\";\nimport { useWebmessenger } from \"../../utils/webmessenger\";\nimport { useWebSocket } from \"../../utils/websocket\";\n\nconst webmessengerApi = new API.Messaging.Webmessenger();\n\nfunction MessageList() {\n const {\n conversation,\n operator,\n greeting,\n typing,\n setTyping,\n setConversation,\n online,\n messages,\n handleSetMessages,\n } = useWebmessenger();\n\n const container = useRef();\n const markMessagesAsReadSent = useRef({});\n const [, , removeCookie] = useCookies([\"eK-conversation\"]);\n\n const { websocket, connected } = useWebSocket();\n const { visualViewport, windowSize } = useVisualViewport();\n\n const [showTyping, setShowTyping] = useState(false);\n const [conversationTypings, setConversationTypings] = useState({});\n\n const isClosedByVisitor = conversation?.events.find(\n (event) => event.type === \"closedByVisitor\"\n );\n\n const markMessagesAsRead = useCallback(() => {\n const lastUnreadMessage = messages.findLast(\n (message) =>\n !message.status?.readAt && message.author?.type === \"operator\"\n );\n\n /** Send read status */\n if (\n conversation?._id &&\n lastUnreadMessage &&\n lastUnreadMessage?._id !== \"behavior-greeting-message\" &&\n !markMessagesAsReadSent.current[lastUnreadMessage._id]\n ) {\n markMessagesAsReadSent.current = {\n ...markMessagesAsReadSent.current,\n [lastUnreadMessage._id]: true,\n };\n\n webmessengerApi\n .markMessageAsRead(conversation._id, lastUnreadMessage._id)\n .catch(() => {\n markMessagesAsReadSent.current = {\n ...markMessagesAsReadSent.current,\n [lastUnreadMessage._id]: false,\n };\n });\n }\n }, [messages, conversation]);\n\n const { isLoading: messagesIsLoading } = useQuery(\n [\"messages\"],\n async () => await webmessengerApi.getMessages(conversation._id),\n {\n onSuccess: async (data) => {\n const messagesWithoutTyping = data.filter(\n (m) =>\n m.type !== \"typing:visitor\" &&\n m.type !== \"typing:operator\"\n );\n\n handleSetMessages((prevMessages) => {\n const messagesToPersist = prevMessages.filter(\n (message) => message.status.error\n );\n return [\n ...messagesToPersist,\n ...messagesWithoutTyping,\n ].sort(\n (a, b) =>\n new Date(a.createdAt || a.status.sentAt) -\n new Date(b.createdAt || b.status.sentAt)\n );\n });\n\n const typingMessage = data.find(\n (m) => m.type === \"typing:operator\"\n );\n\n if (typingMessage) setTyping(true);\n\n /** Send received status */\n const unreceivedMessages = messagesWithoutTyping.filter(\n (msg) => !msg.status.receivedAt\n );\n\n for (const msg of unreceivedMessages) {\n if (msg.author?.type === \"operator\") {\n await webmessengerApi\n .markMessageAsReceived(conversation._id, msg._id)\n .catch(() => {});\n }\n }\n\n /** Send read status */\n markMessagesAsRead();\n },\n enabled: !!conversation?._id && connected,\n refetchOnWindowFocus: false,\n staleTime: 0,\n }\n );\n\n const groupMessages = (msgs) => {\n let groupKey = 0;\n return msgs\n .filter((m) => m.type !== \"typing\")\n .reduce((res, message, key) => {\n if (key === 0) {\n groupKey += 1;\n return [\n ...res,\n {\n ...(message.author\n ? { author: message.author }\n : {}),\n ...(message.type === \"system\"\n ? { type: \"system\" }\n : {}),\n messages: [message],\n },\n ];\n }\n if (key > 0 && key < messages.length) {\n if (message.author?._id === res[groupKey - 1].author?._id) {\n res[groupKey - 1].messages.push(message);\n } else {\n groupKey += 1;\n res.push({\n author: message.author,\n messages: [message],\n ...(message.type === \"system\"\n ? { type: \"system\" }\n : {}),\n });\n }\n return res;\n }\n return res;\n }, []);\n };\n\n // if mobile & visualViewport change (keyboard open)\n useEffect(() => {\n let chatAutoScroll;\n\n if (windowSize.width < 769)\n chatAutoScroll = setTimeout(\n () =>\n container.current.scrollTo({\n top: container.current.scrollHeight,\n }),\n 100\n );\n\n return () => clearTimeout(chatAutoScroll);\n }, [visualViewport, windowSize]);\n\n useEffect(() => {\n if (conversation && messages && !document.hidden) {\n markMessagesAsRead();\n }\n }, [conversation, messages, document.hidden]);\n\n useEffect(() => {\n if (websocket && connected) {\n const onNewMessage = (message) => {\n if (message.conversation === conversation?._id) {\n if (\n message.author?.type === \"visitor\" &&\n messages.find(({ _id }) => message._id === _id)\n ) {\n handleSetMessages((prevState) => {\n const messagesCopy = [...prevState];\n\n const messageIndex = messagesCopy.findIndex(\n ({ _id }) => _id === message._id\n );\n\n if (messageIndex >= 0) {\n messagesCopy[messageIndex] = {\n ...messagesCopy[messageIndex],\n ...message,\n };\n }\n\n return messagesCopy;\n });\n } else {\n handleSetMessages((prevState) => {\n if (\n !prevState.find(\n ({ _id }) => _id === message._id\n )\n )\n return [\n ...prevState.filter(\n ({ _id }) => !_id.includes(\"behavior\")\n ),\n message,\n ].sort(\n (a, b) =>\n new Date(a.createdAt) -\n new Date(b.createdAt)\n );\n\n return prevState;\n });\n }\n\n if (message.author?.type !== \"visitor\") setTyping(false);\n\n if (\n (message.author?.type === \"operator\" ||\n message.author?.type === \"agent\") &&\n conversation?._id\n ) {\n webmessengerApi\n .markMessageAsReceived(\n conversation._id,\n message._id\n )\n .catch(() => {});\n }\n }\n };\n websocket.on(\"message:new\", onNewMessage);\n\n const onMessageUpdate = (res) => {\n handleSetMessages((previousState) => {\n const newState = [...previousState];\n\n for (const message of res.messages) {\n const index = newState.findIndex(\n (m) => m._id === message._id\n );\n newState[index] = message;\n }\n\n return newState;\n });\n };\n websocket.on(\"message:update\", onMessageUpdate);\n\n const onConversationTyping = (res) => {\n setConversationTypings((prevState) => ({\n ...prevState,\n [res.typingId]: res.action,\n }));\n\n if (\n res.action === \"start\" &&\n conversationTypings[res.typingId] !== \"stop\"\n )\n setTyping(true);\n if (res.action === \"stop\") setTyping(false);\n };\n websocket.on(\"conversation:typing\", onConversationTyping);\n\n return () => {\n websocket.removeListener(\"message:new\", onNewMessage);\n websocket.removeListener(\"message:update\", onMessageUpdate);\n websocket.removeListener(\n \"conversation:typing\",\n onConversationTyping\n );\n };\n }\n\n return () => {};\n }, [\n websocket,\n connected,\n conversation,\n setTyping,\n conversationTypings,\n messages,\n ]);\n\n useAsyncEffect(async () => {\n const delay = (ms) =>\n new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n await delay(50);\n\n container.current.scrollTo({\n top: container.current.scrollHeight,\n });\n }, [messages, typing]);\n\n useEffect(() => {\n if (showTyping !== typing) {\n setShowTyping(typing);\n }\n }, [typing, showTyping]);\n\n useEffect(() => {\n if (conversation === null) {\n /**\n * Reset the messages only if there are messages in the state or there is no greeting message (from behaviors) found\n */\n if (\n messages.length > 0 &&\n !messages.find(({ _id }) => _id === \"behavior-greeting-message\")\n ) {\n handleSetMessages([]);\n }\n\n /**\n * Display the greeting message (from behaviors) only if it is not present in the state and it has not been sent\n */\n const getBehaviorsStore = getBehaviorsSessionStorage();\n\n const alreadyGreetingMessage = messages.find(\n ({ _id }) => _id === \"behavior-greeting-message\"\n );\n\n if (\n operator &&\n greeting?.message &&\n !alreadyGreetingMessage &&\n !getBehaviorsStore?.triggered?.greeting?.message?.sent\n ) {\n handleSetMessages([\n {\n _id: \"behavior-greeting-message\",\n content: greeting.message.text,\n type: \"text\",\n zone: \"EU\",\n status: {\n sentAt: greeting.message.sentAt.toISO(),\n },\n author: {\n ...operator,\n type:\n operator.type === \"agent\"\n ? \"agent\"\n : \"operator\",\n },\n },\n ]);\n }\n }\n }, [conversation, messages, greeting, operator]);\n\n return (\n
\n
\n {!messagesIsLoading &&\n messages &&\n groupMessages(messages).map((group) => (\n \n ))}\n\n \n {operator?.face && (\n
\n \n
\n )}\n\n
\n {/* animation genius typing */}\n

\n \n \n \n

\n
\n \n\n {conversation && conversation.status === \"closed\" && (\n
\n
\n \n \n \n \n \n \n {isClosedByVisitor ? (\n

\n \n

\n ) : (\n

\n \n

\n )}\n
\n {online && (\n {\n setConversation(null);\n removeCookie(\"eK-conversation\", {\n path: \"/\",\n });\n }}\n >\n \n \n )}\n
\n )}\n
\n
\n );\n}\n\nexport default MessageList;\n","import { useEffect, useState } from \"react\";\n\n/**\n * useEffect pour une fonction asynchrone\n *\n * @param {function} fn\n * @param {array} deps\n * @param {boolean} throwOnError Make the component \"crash\" if the promise is not resolved\n */\nexport default function useAsyncEffect(fn, deps = [], throwOnError = true) {\n const [, setState] = useState(); // This is a fake state used to throw an error catchable by the errorBoundary\n /* eslint-disable */\n useEffect(() => {\n Promise.resolve(fn()).catch((e) => {\n if (throwOnError) {\n setState(() => {\n throw e; // The magic happens here ;)\n });\n }\n });\n }, deps);\n /* eslint-enable */\n}\n","import React from \"react\";\n\nimport PropTypes from \"prop-types\";\n\nimport { StarIcon } from \"../../__components__/icons\";\n\nfunction StarRating({ rating, selectedStars, disableStars, handleStarClick }) {\n return (\n \n handleStarClick(rating)}\n />\n \n \n );\n}\n\nStarRating.propTypes = {\n rating: PropTypes.number.isRequired,\n selectedStars: PropTypes.number,\n disableStars: PropTypes.bool,\n handleStarClick: PropTypes.func,\n};\n\nStarRating.defaultProps = {\n selectedStars: null,\n disableStars: false,\n handleStarClick: () => {},\n};\n\nexport default StarRating;\n","import React from \"react\";\n\nimport PropTypes from \"prop-types\";\nimport { FormattedMessage } from \"react-intl\";\n\nimport { ValidationIcon } from \"../../__components__/icons\";\n\nfunction ValidationSection({ selectedStars }) {\n return (\n
\n
\n \n
\n {selectedStars > 0.6 ? (\n \n \n \n ) : (\n \n \n \n )}\n
\n );\n}\n\nValidationSection.propTypes = {\n selectedStars: PropTypes.number,\n};\n\nValidationSection.defaultProps = {\n selectedStars: null,\n};\n\nexport default ValidationSection;\n","import React, { useState } from \"react\";\n\nimport { FormattedMessage } from \"react-intl\";\n\nimport StarRating from \"./StarRating\";\nimport ValidationSection from \"./ValidationSection\";\n\nimport { useRateConversationMutation } from \"../../../utils/queries/conversations\";\nimport { useWebmessenger } from \"../../../utils/webmessenger\";\n\nconst starsTable = [1, 0.8, 0.6, 0.4, 0.2];\n\nfunction VisitorSatisfaction() {\n const { conversation } = useWebmessenger();\n const [selectedStars, setSelectedStars] = useState(null);\n const [disableStars, setDisableStars] = useState(false);\n const [showValidation, setShowValidation] = useState(false);\n\n const { mutate: rateConversation } = useRateConversationMutation(\n conversation?._id,\n {\n onSuccess: () => {\n setTimeout(() => {\n setDisableStars(false);\n setShowValidation(true);\n }, 600);\n },\n enabled: !!conversation?._id && !disableStars,\n }\n );\n\n const handleStarClick = (rating) => {\n if (!disableStars) {\n setSelectedStars(rating);\n setDisableStars(true);\n\n rateConversation({ satisfactionRating: rating });\n }\n };\n\n return (\n
\n {!showValidation && (\n \n \n \n )}\n
\n {!showValidation &&\n starsTable.map((rating) => (\n \n ))}\n
\n {showValidation && (\n \n )}\n
\n );\n}\n\nexport default VisitorSatisfaction;\n","import React from \"react\";\n\nimport MessageList from \"./MessageList\";\nimport VisitorSatisfaction from \"./visitorSatisfaction\";\n\nimport { useWebmessenger } from \"../../utils/webmessenger\";\n\nconst PoweredBy = React.lazy(() => import(\"../window/PoweredBy\"));\n\nfunction Conversation() {\n const { conversation, visitorSatisfactionIntegration } = useWebmessenger();\n\n return (\n <>\n
\n \n
\n
\n\n \n {conversation &&\n conversation.status === \"closed\" &&\n conversation.satisfactionRating === null &&\n !!visitorSatisfactionIntegration && }\n \n );\n}\n\nexport default Conversation;\n","import React, { useEffect, useState } from \"react\";\n\nimport { Transition } from \"@headlessui/react\";\nimport PropTypes from \"prop-types\";\n\nimport Header from \"./Header\";\nimport MessageComposer from \"./MessageComposer\";\n\nimport useVisualViewport from \"../../utils/hooks/useVisualViewport\";\nimport { useSDK } from \"../../utils/sdk\";\nimport { getBehaviorsSessionStorage } from \"../../utils/session-storage\";\nimport { useWebmessenger } from \"../../utils/webmessenger\";\nimport Conversation from \"../conversation\";\n\nfunction Window({ onMinimze, soundNotification, onToggleSoundNotification }) {\n const { conversation } = useWebmessenger();\n const { emit } = useSDK();\n const [show, setShow] = useState(true);\n const { visualViewport } = useVisualViewport();\n\n const handleClickOutside = (e) => {\n if (\n e?.target?.className &&\n typeof e.target.className.includes !== \"undefined\" &&\n e.target.className.includes(\"ek-chat__mobile\")\n ) {\n emit(\"window:minimized\", {\n conversation: conversation?._id || null,\n });\n setShow(false);\n }\n };\n\n let startY;\n\n const handleTouchStart = (event) => {\n startY = event.touches[0].clientY;\n };\n\n const handleTouchMove = (event) => {\n const elem = event.target;\n\n const ekChatConversationNode = document.getElementsByClassName(\n \"ek-chat__conversation\"\n )?.[0];\n const ekChatMessageWrapper = document.getElementsByClassName(\n \"ek-chat__conversation--wrapper\"\n )?.[0];\n\n const endY = event.touches[0].clientY;\n\n let preventScrollMessageList = false;\n\n if (ekChatConversationNode) {\n if (\n !ekChatConversationNode?.contains(elem) ||\n elem.className.includes(\"ek-chat__conversation--mask\")\n ) {\n preventScrollMessageList = true;\n }\n }\n\n if (ekChatMessageWrapper) {\n if (\n ekChatMessageWrapper.contains(elem) &&\n ekChatMessageWrapper.scrollHeight ===\n ekChatMessageWrapper.clientHeight\n )\n preventScrollMessageList = true;\n\n if (\n startY > endY &&\n ekChatMessageWrapper.contains(elem) &&\n ekChatMessageWrapper.scrollHeight >\n ekChatMessageWrapper.clientHeight &&\n ekChatMessageWrapper.scrollHeight -\n ekChatMessageWrapper.scrollTop -\n ekChatMessageWrapper.clientHeight <\n 1\n )\n preventScrollMessageList = true;\n }\n\n if (preventScrollMessageList) event.preventDefault();\n };\n\n // const handleScroll = (event) => {\n // if (document.getElementsByClassName(\"ek-chat__screen\").length > 0 && window.innerWidth <= 769) {\n // window.scrollTo(0, 0);\n // event.stopPropagation();\n // }\n // };\n\n useEffect(() => {\n document.addEventListener(\"click\", handleClickOutside);\n document.addEventListener(\"touchmove\", handleTouchMove, {\n passive: false,\n });\n document.addEventListener(\"touchstart\", handleTouchStart, {\n passive: false,\n });\n document.addEventListener(\"scroll\", window.eK.handleScroll);\n\n const storage = getBehaviorsSessionStorage();\n\n /**\n * Store the behavior message as triggered when window has been open and if there is no conversation yet\n */\n if (\n storage.triggered?.greeting?.message?.behavior &&\n !storage.triggered?.notification?.[\n storage.triggered?.greeting?.message?.behavior\n ]\n ) {\n storage.triggered = {\n ...storage.triggered,\n notification: {\n ...storage.triggered.notification,\n [storage.triggered.greeting.message.behavior]: true,\n },\n };\n\n sessionStorage.setItem(\"eK-behaviors\", JSON.stringify(storage));\n }\n return () => {\n document.removeEventListener(\"click\", handleClickOutside);\n document.removeEventListener(\"touchmove\", handleTouchMove);\n document.removeEventListener(\"touchstart\", handleTouchStart);\n document.removeEventListener(\"scroll\", window.eK.handleScroll);\n };\n });\n\n return (\n {\n onMinimze();\n }}\n >\n \n {\n onMinimze();\n }}\n >\n {\n setShow(false);\n }}\n onToggleSoundNotification={onToggleSoundNotification}\n soundNotification={soundNotification}\n />\n \n \n \n
\n \n );\n}\n\nWindow.propTypes = {\n onMinimze: PropTypes.func,\n soundNotification: PropTypes.bool,\n onToggleSoundNotification: PropTypes.func,\n};\n\nWindow.defaultProps = {\n onMinimze: () => {},\n soundNotification: false,\n onToggleSoundNotification: () => {},\n};\n\nexport default Window;\n","import { useEffect, useState } from \"react\";\n\nconst getViewports = () => ({\n visualViewport: {\n width: window.visualViewport\n ? window.visualViewport.width\n : window.innerWidth,\n height: window.visualViewport\n ? window.visualViewport.height\n : window.innerHeight,\n },\n windowSize: {\n width: window.innerWidth,\n height: window.innerHeight,\n },\n});\n\nconst useVisualViewport = () => {\n const [size, setSize] = useState(getViewports);\n\n const handleResize = () => setSize(getViewports);\n\n useEffect(() => {\n window.addEventListener(\"resize\", handleResize);\n if (window.visualViewport)\n window.visualViewport.addEventListener(\"resize\", handleResize);\n\n return () => {\n window.removeEventListener(\"resize\", handleResize);\n if (window.visualViewport)\n window.visualViewport.removeEventListener(\n \"resize\",\n handleResize\n );\n };\n }, []);\n\n return size;\n};\n\nexport default useVisualViewport;\n"],"names":["className","width","height","viewBox","xmlns","clipPath","fill","opacity","d","id","fillRule","cx","cy","r","x","y","rx","stroke","strokeWidth","transform","version","points","CustomLink","href","children","target","rel","CustomH1","CustomH2","CustomH3","CustomDel","CustomP","CustomBlockQuote","Markdown","content","notification","greeting","replied","useMarkdownComponents","classNames","components","h1","h2","h3","a","del","p","blockquote","remarkPlugins","remarkGfm","disallowedElements","unwrapDisallowed","defaultProps","PanelInformations","React","PrivacyPolicy","CloseModal","webmessengerApi","API","Header","onMinimze","onToggleSoundNotification","soundNotification","useWebmessenger","operator","setOperator","conversation","integration","online","hide","emit","useSDK","useState","informationsPanel","setInformationsPanel","privacyShow","setPrivacyShow","closeModal","setCloseModal","useQuery","getOperator","_id","avatar","onSuccess","data","enabled","refetchOnWindowFocus","staleTime","Suspense","fallback","onClose","onCancel","onClosePanel","openCloseModal","onClosePolicy","face","src","type","process","alt","header","name","title","onClick","sessionStorage","setItem","JSON","stringify","text","showPrivacy","lastMessage","dateNow","DateTime","toISO","lastMessageISODate","status","sentAt","plus","props","ref","placeholder","value","getValue","rows","onChange","error","displayError","reactourTextArea","rest","resetValue","currentValue","setCurrentValue","useEffect","e","authenticationApi","useCookies","setCookie","intl","useIntl","token","login","setConversation","messages","handleSetMessages","setTyping","useWebSocket","websocket","connected","textareaRef","useRef","typing","timer","url","window","location","textareaFocused","setTextareaFocused","setText","typingId","setTypingId","authenticationIsLoading","setAuthenticationIsLoading","createConversationIsLoading","setCreateConversationIsLoading","latestMessage","useMemo","length","addHistory","useAddHistoryMutation","mutate","useMutation","message","register","device","getUA","os","osName","osVersion","webbrowser","browserName","browserVersion","loginToken","getBehaviorsStore","getBehaviorsSessionStorage","tracking","getItem","sendMessage","author","user","triggered","sent","greetingMessage","parse","msg","expires","Date","setHours","getHours","maximized","secure","path","sameSite","omit","participants","operators","find","o","current","localStorage","removeItem","onError","prevMessages","messagesCopy","messageIndex","findIndex","messageId","loading","sendMessageIsLoading","isLoading","handleChange","ev","newText","checkText","clearTimeout","setTimeout","newTypingId","ObjectID","toHexString","action","send","generateSentAtFromLastMessage","trim","err","prevState","visitor","focus","undefined","Notification","permission","requestPermission","handleResetTyping","skipUpdateUserActivity","addEventListener","removeEventListener","lineHeight","scrollHeight","Math","floor","numberOfRows","onFocus","onBlur","jestContent","onKeyDown","shiftKey","key","preventDefault","formatMessage","description","defaultMessage","disabled","as","show","enter","leave","MessageStatus","onResetIsHover","isOperator","sort","b","createdAt","toFormat","readAt","receivedAt","MessageSystem","MessageLinkPreview","validContentLinks","currentLinkIndex","setCurrentLinkIndex","currentLinkPreview","setCurrentLinkPreview","displayImage","setDisplayImage","reactQuery","axios","options","useDisplayLinkPreview","prevIndex","retry","linkPreview","image","domainName","onLoad","MessageText","first","last","setValidContentLinks","checkLinksInMessageContent","match","matchAllUrlsRegex","contentToDisplay","original","decode","Message","replyTo","writtenBy","timerRef","isHover","setIsHover","handleMouseLeave","onMouseEnter","onMouseLeave","ai","previousFocusedMessage","document","querySelector","classList","remove","messageToFocus","getElementById","scrollIntoView","block","behavior","add","MessageGroup","appear","enterFrom","enterTo","map","Fragment","container","markMessagesAsReadSent","removeCookie","useVisualViewport","visualViewport","windowSize","showTyping","setShowTyping","conversationTypings","setConversationTypings","isClosedByVisitor","events","event","markMessagesAsRead","useCallback","lastUnreadMessage","findLast","markMessageAsRead","catch","getMessages","messagesWithoutTyping","filter","m","messagesToPersist","unreceivedMessages","markMessageAsReceived","messagesIsLoading","chatAutoScroll","scrollTo","top","hidden","onNewMessage","includes","on","onMessageUpdate","res","previousState","newState","index","onConversationTyping","removeListener","fn","deps","throwOnError","setState","Promise","resolve","useAsyncEffect","delay","ms","alreadyGreetingMessage","zone","msgs","groupKey","reduce","push","groupMessages","group","unmount","StarRating","rating","selectedStars","disableStars","handleStarClick","htmlFor","style","cursor","ValidationSection","starsTable","setSelectedStars","setDisableStars","showValidation","setShowValidation","rateConversation","useRateConversationMutation","satisfactionRating","PoweredBy","visitorSatisfactionIntegration","Window","startY","setShow","handleClickOutside","handleTouchStart","touches","clientY","handleTouchMove","elem","ekChatConversationNode","getElementsByClassName","ekChatMessageWrapper","endY","preventScrollMessageList","contains","clientHeight","scrollTop","passive","eK","handleScroll","storage","entered","afterLeave","getViewports","innerWidth","innerHeight","size","setSize","handleResize"],"sourceRoot":""}