@defra/flood-webchat 0.0.1-beta.10 → 0.0.1-beta.12

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/dist/client.js CHANGED
@@ -272,6 +272,55 @@ function Chat({
272
272
 
273
273
  /***/ }),
274
274
 
275
+ /***/ "./src/client/components/errorSummary/error-summary.jsx":
276
+ /*!**************************************************************!*\
277
+ !*** ./src/client/components/errorSummary/error-summary.jsx ***!
278
+ \**************************************************************/
279
+ /***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
280
+
281
+ __webpack_require__.r(__webpack_exports__);
282
+ /* harmony export */ __webpack_require__.d(__webpack_exports__, {
283
+ /* harmony export */ ErrorSummary: () => (/* binding */ ErrorSummary)
284
+ /* harmony export */ });
285
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "react");
286
+ /* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__);
287
+
288
+ const ErrorSummary = ({
289
+ errors
290
+ }) => {
291
+ const errs = Object.keys(errors);
292
+ const goToInput = e => {
293
+ e.preventDefault();
294
+ const key = e.target.getAttribute('data-key');
295
+ document.querySelector(`#wc-${key}`).focus();
296
+ };
297
+ if (errs.length === 0) {
298
+ return null;
299
+ }
300
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
301
+ className: "govuk-error-summary govuk-!-static-margin-bottom-7",
302
+ "data-module": "govuk-error-summary",
303
+ tabIndex: "-1"
304
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
305
+ role: "alert"
306
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", {
307
+ id: "wc-error",
308
+ className: "govuk-error-summary__title"
309
+ }, "There is a problem"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
310
+ className: "govuk-error-summary__body"
311
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
312
+ className: "govuk-list govuk-error-summary__list"
313
+ }, errs.map(key => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
314
+ key: key
315
+ }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
316
+ href: "#",
317
+ "data-key": key,
318
+ onClick: goToInput
319
+ }, errors[key])))))));
320
+ };
321
+
322
+ /***/ }),
323
+
275
324
  /***/ "./src/client/components/message/message.jsx":
276
325
  /*!***************************************************!*\
277
326
  !*** ./src/client/components/message/message.jsx ***!
@@ -531,7 +580,7 @@ function Panel() {
531
580
  "aria-modal": "true",
532
581
  "aria-labelledby": "wc-header-title"
533
582
  }, ScreenComponent);
534
- return /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(Component, document.body);
583
+ return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/(0,react_dom__WEBPACK_IMPORTED_MODULE_1__.createPortal)(Component, document.body));
535
584
  }
536
585
 
537
586
  /***/ }),
@@ -654,6 +703,8 @@ __webpack_require__.r(__webpack_exports__);
654
703
  /* harmony import */ var _panel_panel_header_jsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../panel/panel-header.jsx */ "./src/client/components/panel/panel-header.jsx");
655
704
  /* harmony import */ var _store_useApp_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../store/useApp.js */ "./src/client/store/useApp.js");
656
705
  /* harmony import */ var _store_useChatSdk_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../../store/useChatSdk.js */ "./src/client/store/useChatSdk.js");
706
+ /* harmony import */ var _errorSummary_error_summary_jsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../errorSummary/error-summary.jsx */ "./src/client/components/errorSummary/error-summary.jsx");
707
+
657
708
 
658
709
 
659
710
 
@@ -727,24 +778,9 @@ function RequestChat({
727
778
  href: "#",
728
779
  className: "wc-back-link govuk-back-link",
729
780
  onClick: onBack
730
- }, "What you can use webchat for"), Object.keys(errors).length > 0 ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
731
- className: "govuk-error-summary govuk-!-static-margin-bottom-7",
732
- "data-module": "govuk-error-summary",
733
- tabIndex: "-1"
734
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
735
- role: "alert"
736
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", {
737
- id: "wc-error",
738
- className: "govuk-error-summary__title"
739
- }, "There is a problem"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
740
- className: "govuk-error-summary__body"
741
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("ul", {
742
- className: "govuk-list govuk-error-summary__list"
743
- }, Object.keys(errors).map(key => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("li", {
744
- key: key
745
- }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("a", {
746
- href: `#${key}`
747
- }, errors[key]))))))) : null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
781
+ }, "What you can use webchat for"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_errorSummary_error_summary_jsx__WEBPACK_IMPORTED_MODULE_6__.ErrorSummary, {
782
+ errors: errors
783
+ }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h3", {
748
784
  className: "govuk-heading-s",
749
785
  "aria-live": "polite"
750
786
  }, "Your name and question"), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("form", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", {
@@ -1056,7 +1092,10 @@ const AppProvider = ({
1056
1092
  });
1057
1093
  };
1058
1094
  const onMessageCreated = e => {
1059
- setMessage(e.detail.data.message);
1095
+ dispatch({
1096
+ type: 'SET_MESSAGE',
1097
+ payload: e.detail.data.message
1098
+ });
1060
1099
  dispatch({
1061
1100
  type: 'SET_AGENT_STATUS',
1062
1101
  payload: e.detail.data.case.status
@@ -1122,12 +1161,6 @@ const AppProvider = ({
1122
1161
  payload: thread
1123
1162
  });
1124
1163
  };
1125
- const setMessage = message => {
1126
- dispatch({
1127
- type: 'SET_MESSAGE',
1128
- payload: message
1129
- });
1130
- };
1131
1164
  const setMessages = messages => {
1132
1165
  dispatch({
1133
1166
  type: 'SET_MESSAGES',
@@ -1144,9 +1177,14 @@ const AppProvider = ({
1144
1177
  setCustomerId,
1145
1178
  setThreadId,
1146
1179
  setThread,
1147
- setMessage,
1148
1180
  setMessages,
1149
- setChatVisibility
1181
+ setChatVisibility,
1182
+ onLiveChatRecovered,
1183
+ onAssignedAgentChanged,
1184
+ onAgentTypingStarted,
1185
+ onAgentTypingEnded,
1186
+ onMessageCreated,
1187
+ onContactStatusChanged
1150
1188
  }));
1151
1189
  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(AppContext.Provider, {
1152
1190
  value: store
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","mappings":"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","sources":["webpack://@defra/flood-webchat/./src/client/components/availability/availability.jsx","webpack://@defra/flood-webchat/./src/client/components/chat/chat.jsx","webpack://@defra/flood-webchat/./src/client/components/message/message.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-footer.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-header.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/end-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/pre-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/request-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/unavailable.jsx","webpack://@defra/flood-webchat/./src/client/hooks/useFocusedElements.js","webpack://@defra/flood-webchat/./src/client/hooks/useTextareaAutosize.js","webpack://@defra/flood-webchat/./src/client/lib/check-availability.js","webpack://@defra/flood-webchat/./src/client/lib/classnames.js","webpack://@defra/flood-webchat/./src/client/lib/transform-messages.js","webpack://@defra/flood-webchat/./src/client/store/AppProvider.jsx","webpack://@defra/flood-webchat/./src/client/store/actions-map.js","webpack://@defra/flood-webchat/./src/client/store/reducer.js","webpack://@defra/flood-webchat/./src/client/store/useApp.js","webpack://@defra/flood-webchat/./src/client/store/useChatSdk.js","webpack://@defra/flood-webchat/external commonjs \"@nice-devone/nice-cxone-chat-web-sdk\"","webpack://@defra/flood-webchat/external commonjs \"react\"","webpack://@defra/flood-webchat/external commonjs \"react-dom\"","webpack://@defra/flood-webchat/external commonjs \"react-dom/client\"","webpack://@defra/flood-webchat/external commonjs \"sanitize-html\"","webpack://@defra/flood-webchat/external commonjs \"uuid\"","webpack://@defra/flood-webchat/webpack/bootstrap","webpack://@defra/flood-webchat/webpack/runtime/compat get default export","webpack://@defra/flood-webchat/webpack/runtime/define property getters","webpack://@defra/flood-webchat/webpack/runtime/hasOwnProperty shorthand","webpack://@defra/flood-webchat/webpack/runtime/make namespace object","webpack://@defra/flood-webchat/./src/client/index.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\n\nimport { classnames } from '../../lib/classnames'\nimport { Panel } from '../panel/panel.jsx'\nimport { useApp } from '../../store/useApp'\n\nexport function Availability () {\n const { availability, messages, isChatOpen, setChatVisibility } = useApp()\n\n const [isFixed, setIsFixed] = useState(false)\n const buttonRef = useRef()\n\n const onClick = () => {\n setChatVisibility(!isChatOpen)\n }\n\n const onKeyDown = event => {\n if (event.key === ' ') {\n event.preventDefault()\n }\n }\n\n const onKeyUp = event => {\n if (event.key === ' ') {\n setChatVisibility(!isChatOpen)\n }\n }\n\n const intersectionCallback = entries => {\n const [entry] = entries\n const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0\n setIsFixed(!isChatOpen && isBelowFold)\n }\n\n useEffect(() => {\n const observer = new window.IntersectionObserver(intersectionCallback, {\n rootMargin: '35px'\n })\n\n const parentElement = buttonRef.current?.parentElement\n\n if (parentElement) {\n observer.observe(parentElement)\n }\n\n return () => {\n if (parentElement) {\n observer.unobserve(parentElement)\n }\n }\n }, [buttonRef, isChatOpen])\n\n useEffect(() => {\n document.documentElement.classList.toggle('wc-scroll-padding', isFixed)\n document.body.classList.toggle('wc-scroll-padding', isFixed)\n }, [isFixed])\n\n let TextComponent = (<>Show Chat</>)\n\n if (!messages.length) {\n TextComponent = (<>Start Chat</>)\n }\n\n switch (availability) {\n case 'AVAILABLE':\n return (\n <>\n <div\n className={classnames('wc-availability', isFixed && 'wc-availability--fixed', isChatOpen && 'wc-open')}\n ref={buttonRef}\n >\n <div className='wc-availability__inner'>\n <a\n className='wc-availability__link'\n href='#webchat'\n draggable='false'\n onClick={onClick}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n >\n {TextComponent}\n </a>\n </div>\n </div>\n {isChatOpen && <Panel />}\n </>\n )\n case 'EXISTING':\n case 'UNAVAILABLE':\n return (\n <p className='govuk-body'>When it is available, a 'start chat' link will appear.</p>\n )\n default:\n return (\n <p className='govuk-body'>Checking availability</p>\n )\n }\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport sanitizeHtml from 'sanitize-html'\n\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { PanelFooter } from '../panel/panel-footer.jsx'\nimport { Message } from '../message/message.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useTextareaAutosize } from '../../hooks/useTextareaAutosize.js'\n\nexport function Chat ({ onEndChat }) {\n const { availability, thread, messages, agent, agentStatus, isAgentTyping } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\n\n const messageRef = useRef()\n\n useTextareaAutosize(messageRef.current, userMessage)\n\n useEffect(() => {\n if (messages.length !== 0) {\n const chatBody = document.querySelector('.wc-body')\n chatBody.scrollTop = chatBody.scrollHeight\n }\n }, [messages, isAgentTyping])\n\n useEffect(() => {\n const label = document.querySelector('.wc-form__label')\n\n if (userMessage.length === 0) {\n label.classList.remove('govuk-visually-hidden')\n } else {\n label.classList.add('govuk-visually-hidden')\n }\n }, [userMessage])\n\n const onChange = e => {\n setUserMessage(e.target?.value)\n }\n\n const agentName = agent?.nickname || agent?.firstName\n\n let connectionHeadlineText = 'Connecting to Floodline'\n\n if (agentStatus === 'closed') {\n connectionHeadlineText = agentName ? `${agentName} ended the session` : 'Session ended by advisor'\n } else if (agentStatus) {\n if (agentName) {\n connectionHeadlineText = `You are speaking with ${agentName}`\n } else {\n connectionHeadlineText = 'No advisers currently available'\n }\n }\n\n if (availability === 'UNAVAILABLE') {\n connectionHeadlineText = 'Webchat is not currently available'\n }\n\n const sendMessage = e => {\n e.preventDefault()\n\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(sanitizeHtml(messageRef.current.value.trim()))\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability govuk-body-s'>{connectionHeadlineText}</p>\n <a className='wc-status__link govuk-!-font-size-16' href='#' data-module='govuk-button' onClick={onEndChat}>End chat</a>\n </div>\n\n <div className='wc-body'>\n <div className='wc-chat__body'>\n <ul className='wc-chat__messages'>\n {messages.length\n ? messages.map((msg, index) => <Message key={msg.id} message={msg} previousMessage={messages[index - 1]} />)\n : null}\n {isAgentTyping\n ? (\n <li className='wc-chat__message govuk-body outbound'>\n <div className='wc-chat__from govuk-!-font-size-14'>{agentName} is typing</div>\n <div className='wc-chat__text outbound'>\n <svg width='28' height='16' x='0px' y='0px' viewBox='0 0 28 16'>\n <circle stroke='none' cx='3' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='14' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='25' cy='8' r='3' fill='currentColor' />\n </svg>\n </div>\n </li>\n )\n : null}\n </ul>\n </div>\n </div>\n\n <PanelFooter>\n <div className='wc-footer__input'>\n <form className='wc-form' noValidate>\n <label className='govuk-label wc-form__label govuk-!-font-size-16' htmlFor='wc-form-textarea'>\n Your message<span className='govuk-visually-hidden'> (enter key submits)</span>\n </label>\n\n <textarea\n ref={messageRef}\n rows='1'\n aria-required='true'\n className='wc-form__textarea govuk-textarea govuk-!-font-size-16'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button govuk-!-font-size-16'\n value='Send'\n data-prevent-double-click='true'\n onClick={sendMessage}\n />\n </form>\n </div>\n\n <div className='wc-footer__settings'>\n <a href='#' className='wc-footer__settings-link' data-module='govuk-button'>Settings</a>\n <a href='#' className='wc-footer__settings-link' data-module='govuk-button' download='transcript.txt'>Save chat</a>\n </div>\n </PanelFooter>\n </>\n )\n}\n","import React from 'react'\nimport { classnames } from '../../lib/classnames'\n\nexport function Message ({ message, previousMessage }) {\n const outbound = message.direction === 'outbound'\n\n const messageOwnerSameAsPrevious = message?.direction === previousMessage?.direction\n\n return (\n <li className={classnames('wc-chat__message govuk-body', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from govuk-!-font-size-14'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <p className={classnames('wc-chat__text', 'govuk-body-s', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </p>\n </li>\n )\n}\n","import React from 'react'\n\nexport function PanelFooter ({ children }) {\n return (\n <div className='wc-footer'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { useApp } from '../../store/useApp.js'\n\nexport function PanelHeader () {\n const { thread, setChatVisibility } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n }\n\n let ButtonComponent = (\n <button className='wc-header__close' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10,8.6L15.6,3L17,4.4L11.4,10L17,15.6L15.6,17L10,11.4L4.4,17L3,15.6L8.6,10L3,4.4L4.4,3L10,8.6Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n if (thread) {\n ButtonComponent = (\n <button className='wc-header__hide' aria-label='Minimise the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z' fill='currentColor' />\n </svg>\n </button>\n )\n }\n\n return (\n <div className='wc-header'>\n <h2 id='wc-header-title' className='wc-header__title govuk-heading-s'>\n Floodline Webchat\n </h2>\n\n {ButtonComponent}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { PreChat } from '../screens/pre-chat.jsx'\nimport { RequestChat } from '../screens/request-chat.jsx'\nimport { Chat } from '../chat/chat.jsx'\nimport { Unavailable } from '../screens/unavailable.jsx'\nimport { EndChat } from '../screens/end-chat.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { useFocusedElements } from '../../hooks/useFocusedElements.js'\n\nexport function Panel () {\n const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\n\n /**\n * Initializes the eventListener for pressing the escape key\n */\n useEffect(() => {\n const escapeKeyEvent = document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', escapeKeyEvent)\n }\n }, [])\n\n /**\n * Recovers the thread if there is a threadId but no thread loaded in to state\n */\n useEffect(() => {\n const recover = async () => {\n try {\n const fetchedThread = await fetchThread(threadId)\n setThread(fetchedThread)\n\n const fetchedMessages = await fetchMessages(fetchedThread, threadId)\n setMessages(fetchedMessages)\n } catch (err) {\n console.log('[Chat Error] fetchThread', err)\n\n setThreadId()\n setThread()\n setScreen(0)\n }\n }\n\n if (threadId) {\n (thread) ? setScreen(2) : recover()\n }\n }, [thread, threadId])\n\n const onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n setChatVisibility(false)\n }\n }, [])\n\n const handleScreenChange = newScreen => e => {\n e.preventDefault()\n setScreen(newScreen)\n }\n\n const onForward = handleScreenChange(screen + 1)\n const onBack = handleScreenChange(screen - 1)\n const onEndChat = handleScreenChange(3)\n const onResume = handleScreenChange(2)\n\n const onEndChatConfirm = e => {\n e.preventDefault()\n console.log('confirmed end chat')\n }\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onForward={onForward} />\n break\n case 1:\n ScreenComponent = <RequestChat onBack={onBack} />\n break\n case 2:\n ScreenComponent = <Chat setScreen={setScreen} onEndChat={onEndChat} />\n break\n case 3:\n ScreenComponent = <EndChat onResume={onResume} onEndChatConfirm={onEndChatConfirm} />\n break\n default:\n ScreenComponent = <PreChat onForward={onForward} />\n }\n\n if (availability === 'UNAVAILABLE') {\n ScreenComponent = <Unavailable />\n }\n\n const Component = (\n <div id='wc-panel' className='wc-panel' role='dialog' tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>\n {ScreenComponent}\n </div>\n )\n\n return createPortal(Component, document.body)\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function EndChat ({ onResume, onEndChatConfirm }) {\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <h3 className='govuk-heading-s' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={onEndChatConfirm}>Yes, end chat</a>\n <a href='#' className='govuk-link govuk-!-font-size-16' onClick={onResume}>No, resume chat</a>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function PreChat ({ onForward }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 className='govuk-heading-s' aria-live='polite'>What you can use webchat for</h3>\n <p className='govuk-body-s'>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p className='govuk-body-s'>You can use webchat to get:</p>\n <ul className='govuk-list govuk-list--bullet govuk-body-s'>\n <li>current flood warnings and alerts in your area</li>\n <li>information on the flood warning service</li>\n <li>advice on what to do before, during and after a flood</li>\n </ul>\n\n <p className='govuk-body-s'>\n {\n 'There are other ways to '\n }\n <a className='govuk-link' href='https://www.gov.uk/sign-up-for-flood-warnings'>\n sign up for flood warnings\n </a>\n {\n ' and '\n }\n <a className='govuk-link' href='https://www.fws.environment-agency.gov.uk/app/olr/login'>\n manage your flood warnings account\n </a>.\n </p>\n <p className='govuk-body-s'>Do not use webchat to <a className='govuk-link' href='https://www.gov.uk/report-flood-cause'>report a flood</a>.</p>\n\n <button className='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={onForward}>Continue</button>\n\n <h3 className='govuk-heading-s'>Other flood information</h3>\n\n <p className='govuk-body-s'>Call Floodline for all other flood and flood warning information.</p>\n <p className='govuk-body-s'>\n <strong>Floodline helpline</strong>\n <br />\n Telephone: 0345 988 1188\n <br />\n Textphone: 0345 602 6340\n <br />\n Open 24 hours a day, 7 days a week\n <br />\n <a className='govuk-link' href='https://gov.uk/call-charges'>Find out more about call charges</a>\n </p>\n </div>\n </>\n )\n}\n","import React, { useRef, useState, useEffect } from 'react'\nimport * as uuid from 'uuid'\n\nimport { classnames } from '../../lib/classnames.js'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\n\nconst QUESTION_MAX_LENGTH = 500\n\nexport function RequestChat ({ onBack }) {\n const { sdk, setCustomerId, setThreadId, setThread } = useApp()\n const { fetchCustomerId, fetchThread } = useChatSdk(sdk)\n\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n\n const nameRef = useRef()\n const questionRef = useRef()\n\n useEffect(() => {\n if (Object.keys(errors).length) {\n document.querySelector('.govuk-error-summary')?.focus()\n }\n }, [errors])\n\n const onQuestionChange = e => {\n setQuestionLength(e.target.value.length)\n }\n\n const onRequestChat = async e => {\n e.preventDefault()\n\n const errs = {}\n\n if (nameRef.current.value.length === 0) {\n errs.name = 'Enter your name'\n }\n\n if (questionRef.current.value.length === 0) {\n errs.question = 'Enter your question'\n }\n\n if (questionRef.current.value.length > QUESTION_MAX_LENGTH) {\n errs.question = 'Your question must be 500 characters or less'\n }\n\n if (Object.keys(errs).length === 0) {\n try {\n const threadId = uuid.v4()\n const customerId = await fetchCustomerId()\n const thread = await fetchThread(threadId)\n\n sdk.getCustomer().setName(nameRef.current.value)\n\n await thread.startChat(questionRef.current.value || 'Begin conversation')\n\n setCustomerId(customerId)\n setThreadId(threadId)\n setThread(thread)\n } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\n\n const isQuestionLengthValid = QUESTION_MAX_LENGTH >= questionLength\n const questionLengthRemaining = QUESTION_MAX_LENGTH - questionLength\n const questionLengthExceeded = questionLength - QUESTION_MAX_LENGTH\n\n let questionHint = `You have ${questionLengthRemaining} characters remaining`\n\n if (!isQuestionLengthValid) {\n questionHint = `You have ${questionLengthExceeded} characters too many`\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <a href='#' className='wc-back-link govuk-back-link' onClick={onBack}>What you can use webchat for</a>\n\n {Object.keys(errors).length > 0\n ? (\n <div className='govuk-error-summary govuk-!-static-margin-bottom-7' data-module='govuk-error-summary' tabIndex='-1'>\n <div role='alert'>\n <h2 id='wc-error' className='govuk-error-summary__title'>\n There is a problem\n </h2>\n <div className='govuk-error-summary__body'>\n <ul className='govuk-list govuk-error-summary__list'>\n {Object.keys(errors).map(key => (\n <li key={key}>\n <a href={`#${key}`}>{errors[key]}</a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n )\n : null}\n\n <h3 className='govuk-heading-s' aria-live='polite'>Your name and question</h3>\n\n <form>\n <div className={classnames('govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='govuk-label' htmlFor='wc-name'>\n Your name\n </label>\n {errors.name && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span> {errors.name}\n </p>\n )}\n <input\n ref={nameRef}\n className={classnames('govuk-input', errors.name && 'govuk-input--error')}\n id='wc-name'\n name='name'\n type='text'\n data-testid='request-chat-user-name'\n />\n </div>\n\n <div className='govuk-character-count' data-module='govuk-character-count' data-maxlength='500'>\n <div className={classnames('govuk-form-group', errors.question && 'govuk-form-group--error')}>\n <label className='govuk-label' htmlFor='wc-question'>\n Your question\n </label>\n {errors.question && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span>\n {errors.question}\n </p>\n )}\n <textarea\n ref={questionRef}\n id='wc-question'\n name='question'\n rows='5'\n aria-describedby='wc-question-info'\n onChange={onQuestionChange}\n className={classnames('govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div id='wc-question-info' className='govuk-hint govuk-character-count__message' style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }} aria-hidden='true'>\n {questionHint}\n </div>\n <div className='govuk-character-count__sr-status govuk-visually-hidden' aria-live='polite'>\n {questionHint}\n </div>\n </div>\n </div>\n\n <button\n className='govuk-button govuk-!-margin-top-1 govuk-!-font-size-16'\n data-module='govuk-button'\n onClick={onRequestChat}\n >\n Request chat\n </button>\n </form>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Unavailable () {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 id='wc-subtitle' className='govuk-heading-m'>Webchat is currently not available</h3>\n <p className='govuk-body-s'>Try again later, or call Floodline:</p>\n <p className='govuk-body-s'>\n <strong>Floodline helpline</strong>\n <br />Telephone: 0345 988 1188\n <br />Textphone: 0345 602 6340\n <br />Open 24 hours a day, 7 days a week\n <br /><a className='govuk-link' href='https://gov.uk/call-charges'>Find out more about call charges</a>\n </p>\n <p className='govuk-body-s'>We're running webchat as a trial, it will not always be available.</p>\n </div>\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\n\nconst setAriaHidden = bool => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n (bool) ? node.setAttribute('aria-hidden', 'true') : node.removeAttribute('aria-hidden')\n }\n }\n}\n\nexport const getFocusableElements = () => {\n const selectors = [\n '#wc-panel a:not([disabled])',\n '#wc-panel button:not([disabled])',\n '#wc-panel select:not([disabled])',\n '#wc-panel input:not([disabled])',\n '#wc-panel textarea:not([disabled])',\n '#wc-panel *[tabindex=\"0\"]:not([disabled])'\n ]\n\n const elements = document.body.querySelectorAll(selectors.join(','))\n return Array.from(elements).filter(e => !e.closest('[hidden]') && !e.closest('[aria-hidden=\"true\"]'))\n}\n\nconst useFocusedElements = screen => {\n const [panelElements, setPanelElements] = useState([])\n\n const onKeyDown = useCallback(e => {\n const webchatPanelElement = document.querySelector('#wc-panel')\n\n if (e.key === 'Tab') {\n if (webchatPanelElement && !document.activeElement.closest('#wc-panel')) {\n webchatPanelElement.focus()\n }\n\n if (e.shiftKey) {\n if (document.activeElement === panelElements[0]) {\n panelElements[panelElements.length - 1].focus()\n e.preventDefault()\n } else if (document.activeElement === document.querySelector('#wc-panel')) {\n panelElements[panelElements.length - 1]?.focus()\n e.preventDefault()\n }\n } else if (document.activeElement === panelElements[panelElements.length - 1]) {\n panelElements[0].focus()\n e.preventDefault()\n }\n }\n }, [panelElements])\n\n useEffect(() => {\n setPanelElements(getFocusableElements())\n }, [screen])\n\n useEffect(() => {\n setAriaHidden(true)\n\n const panelElement = document.querySelector('#wc-panel')\n panelElement.focus()\n\n document.addEventListener('keydown', onKeyDown)\n\n return () => {\n setAriaHidden()\n document.body.querySelector('.wc-availability__link')?.focus()\n document.removeEventListener('keydown', onKeyDown)\n }\n }, [panelElements])\n}\n\nexport { useFocusedElements }\n","import { useEffect } from 'react'\n\nexport const useTextareaAutosize = (textAreaRef, value) => {\n useEffect(() => {\n if (textAreaRef) {\n textAreaRef.style.height = '0px'\n\n const scrollHeight = textAreaRef.scrollHeight\n\n textAreaRef.style.height = `${scrollHeight}px`\n }\n }, [textAreaRef, value])\n}\n","export async function checkAvailability (endpoint) {\n const response = await fetch(endpoint)\n const data = await response.json()\n\n return {\n availability: data.availability || 'UNAVAILABLE'\n }\n}\n","export const classnames = (...classes) => classes.filter(classname => classname && typeof classname === 'string').join(' ')\n","import sanitizeHtml from 'sanitize-html'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: sanitizeHtml(message.messageContent?.text),\n createdAt: new Date(message.createdAt),\n user: message.authorEndUserIdentity?.fullName?.trim() || null,\n assignee: message.authorUser?.firstName || null,\n direction: message.direction\n }\n}\n\nexport const transformMessages = messages => messages.map(message => transformMessage(message))\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { initialState, reducer, CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY } from './reducer.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n /**\n * SDK event handlers\n */\n const onLiveChatRecovered = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.contact.status })\n }\n\n const onAssignedAgentChanged = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onAgentTypingStarted = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: true })\n }\n\n const onAgentTypingEnded = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: false })\n }\n\n const onMessageCreated = e => {\n setMessage(e.detail.data.message)\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n useEffect(() => {\n sdk.onChatEvent(ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered)\n sdk.onChatEvent(ChatEvent.MESSAGE_CREATED, onMessageCreated)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_ENDED, onAgentTypingEnded)\n sdk.onChatEvent(ChatEvent.ASSIGNED_AGENT_CHANGED, onAssignedAgentChanged)\n sdk.onChatEvent(ChatEvent.CONTACT_STATUS_CHANGED, onContactStatusChanged)\n }, [sdk])\n\n /**\n * Initialize customerId, threadId and whether the webchat should be open\n */\n useEffect(() => {\n dispatch({ type: 'SET_AVAILABILITY', payload: availability })\n\n setCustomerId(window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY))\n setThreadId(window.localStorage.getItem(THREAD_ID_STORAGE_KEY))\n\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\n if (!payload) {\n window.location.hash = ''\n }\n\n dispatch({ type: 'SET_CHAT_VISIBILITY', payload })\n }\n\n const setCustomerId = customerId => {\n dispatch({ type: 'SET_CUSTOMER_ID', payload: customerId })\n }\n\n const setThreadId = threadId => {\n dispatch({ type: 'SET_THREAD_ID', payload: threadId })\n }\n\n const setThread = thread => {\n dispatch({ type: 'SET_THREAD', payload: thread })\n }\n\n const setMessage = message => {\n dispatch({ type: 'SET_MESSAGE', payload: message })\n }\n\n const setMessages = messages => {\n dispatch({ type: 'SET_MESSAGES', payload: messages })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setCustomerId,\n setThreadId,\n setThread,\n setMessage,\n setMessages,\n setChatVisibility\n }))\n\n return (\n <AppContext.Provider value={store}>\n {children}\n </AppContext.Provider>\n )\n}\n","import { transformMessages, transformMessage } from '../lib/transform-messages'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY } from './reducer'\n\nconst setCustomerId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(CUSTOMER_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(CUSTOMER_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n customerId: payload\n }\n}\n\nconst setThreadId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(THREAD_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(THREAD_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n threadId: payload\n }\n}\n\nconst setChatVisibility = (state, payload) => {\n return {\n ...state,\n isChatOpen: payload\n }\n}\n\nconst setAvailability = (state, payload) => {\n return {\n ...state,\n availability: payload\n }\n}\n\nconst setThread = (state, payload) => {\n return {\n ...state,\n thread: payload\n }\n}\n\nconst setMessage = (state, payload) => {\n return {\n ...state,\n messages: [...state.messages, transformMessage(payload)]\n }\n}\n\nconst setMessages = (state, payload) => {\n return {\n ...state,\n messages: transformMessages(payload).reverse()\n }\n}\n\nconst setAgent = (state, payload) => {\n return {\n ...state,\n agent: payload\n }\n}\n\nconst setAgentIsTyping = (state, payload) => {\n return {\n ...state,\n isAgentTyping: payload\n }\n}\n\nconst setAgentStatus = (state, payload) => {\n return {\n ...state,\n agentStatus: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_CUSTOMER_ID: setCustomerId,\n SET_THREAD_ID: setThreadId,\n SET_THREAD: setThread,\n SET_MESSAGE: setMessage,\n SET_MESSAGES: setMessages,\n SET_AGENT: setAgent,\n SET_AGENT_TYPING: setAgentIsTyping,\n SET_AGENT_STATUS: setAgentStatus\n}\n","import { actionsMap } from './actions-map'\n\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false\n}\n\nexport const reducer = (state, action) => {\n const { type, payload } = action\n\n const fn = actionsMap[type]\n\n if (fn) {\n const actionFunction = fn.bind(this, state, payload)\n return actionFunction()\n }\n\n return state\n}\n","import { useContext } from 'react'\n\nimport { AppContext } from './AppProvider.jsx'\n\nexport const useApp = () => useContext(AppContext)\n","export const useChatSdk = sdk => {\n const connect = async () => sdk.authorize()\n\n const fetchCustomerId = async () => {\n const response = await connect()\n return response?.consumerIdentity.idOnExternalPlatform\n }\n\n const fetchThread = async threadId => {\n await connect()\n return sdk.getThread(threadId)\n }\n\n const fetchMessages = async (thread, threadId) => {\n await connect()\n\n const recovered = await thread.recover(threadId)\n\n const allMessages = []\n let fetchedMessages = recovered.messages\n\n while (fetchedMessages.length) {\n fetchedMessages.map(msg => allMessages.push(msg))\n\n try {\n const response = await thread.loadMoreMessages()\n fetchedMessages = response.data.messages\n } catch (err) {\n fetchedMessages = []\n }\n }\n\n return allMessages\n }\n\n return { connect, fetchCustomerId, fetchThread, fetchMessages }\n}\n","module.exports = require(\"@nice-devone/nice-cxone-chat-web-sdk\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","module.exports = require(\"sanitize-html\");","module.exports = require(\"uuid\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ChatSdk } from '@nice-devone/nice-cxone-chat-web-sdk'\nimport { Availability } from './components/availability/availability.jsx'\nimport { checkAvailability } from './lib/check-availability'\nimport { AppProvider } from './store/AppProvider.jsx'\nimport { CUSTOMER_ID_STORAGE_KEY } from './store/reducer.js'\n\nexport async function init (container, options) {\n const sdk = new ChatSdk({\n brandId: options.brandId,\n channelId: options.channelId,\n customerId: window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY) || '',\n environment: options.environment\n })\n\n const root = createRoot(container)\n let availability\n try {\n const result = await checkAvailability(options.availabilityEndpoint)\n availability = result.availability\n } catch (e) {\n availability = 'UNAVAILABLE'\n }\n root.render(\n <AppProvider sdk={sdk} availability={availability}>\n <Availability availability={availability} />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","useState","classnames","Panel","useApp","Availability","availability","messages","isChatOpen","setChatVisibility","isFixed","setIsFixed","buttonRef","onClick","onKeyDown","event","key","preventDefault","onKeyUp","intersectionCallback","entries","entry","isBelowFold","isIntersecting","boundingClientRect","top","observer","window","IntersectionObserver","rootMargin","parentElement","current","observe","unobserve","document","documentElement","classList","toggle","body","TextComponent","createElement","Fragment","length","className","ref","href","draggable","sanitizeHtml","PanelHeader","PanelFooter","Message","useTextareaAutosize","Chat","onEndChat","thread","agent","agentStatus","isAgentTyping","userMessage","setUserMessage","messageRef","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","e","target","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","map","msg","index","id","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","htmlFor","rows","name","type","download","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","onClose","ButtonComponent","focusable","d","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","useChatSdk","useFocusedElements","sdk","threadId","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","escapeKeyEvent","addEventListener","onEscapeKey","removeEventListener","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","onForward","onBack","onResume","onEndChatConfirm","ScreenComponent","Component","role","tabIndex","uuid","QUESTION_MAX_LENGTH","setCustomerId","fetchCustomerId","errors","setErrors","questionLength","setQuestionLength","nameRef","questionRef","Object","keys","focus","onQuestionChange","onRequestChat","errs","question","v4","customerId","getCustomer","setName","startChat","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","style","color","setAriaHidden","bool","node","setAttribute","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","shiftKey","panelElement","textAreaRef","checkAvailability","endpoint","response","fetch","data","json","classes","classname","transformMessage","messageContent","createdAt","Date","user","authorEndUserIdentity","fullName","authorUser","transformMessages","createContext","useReducer","useMemo","ChatEvent","initialState","reducer","CUSTOMER_ID_STORAGE_KEY","THREAD_ID_STORAGE_KEY","AppContext","AppProvider","state","dispatch","onLiveChatRecovered","payload","detail","inboxAssignee","contact","status","onAssignedAgentChanged","case","onAgentTypingStarted","onAgentTypingEnded","onMessageCreated","setMessage","onContactStatusChanged","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","localStorage","getItem","location","hash","store","Provider","setItem","removeItem","setAvailability","reverse","setAgent","setAgentIsTyping","setAgentStatus","actionsMap","SET_CHAT_VISIBILITY","SET_AVAILABILITY","SET_CUSTOMER_ID","SET_THREAD_ID","SET_THREAD","SET_MESSAGE","SET_MESSAGES","SET_AGENT","SET_AGENT_TYPING","SET_AGENT_STATUS","action","fn","actionFunction","bind","useContext","connect","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","options","brandId","channelId","environment","root","result","availabilityEndpoint","render"],"sourceRoot":""}
1
+ {"version":3,"file":"client.js","mappings":"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","sources":["webpack://@defra/flood-webchat/./src/client/components/availability/availability.jsx","webpack://@defra/flood-webchat/./src/client/components/chat/chat.jsx","webpack://@defra/flood-webchat/./src/client/components/errorSummary/error-summary.jsx","webpack://@defra/flood-webchat/./src/client/components/message/message.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-footer.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel-header.jsx","webpack://@defra/flood-webchat/./src/client/components/panel/panel.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/end-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/pre-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/request-chat.jsx","webpack://@defra/flood-webchat/./src/client/components/screens/unavailable.jsx","webpack://@defra/flood-webchat/./src/client/hooks/useFocusedElements.js","webpack://@defra/flood-webchat/./src/client/hooks/useTextareaAutosize.js","webpack://@defra/flood-webchat/./src/client/lib/check-availability.js","webpack://@defra/flood-webchat/./src/client/lib/classnames.js","webpack://@defra/flood-webchat/./src/client/lib/transform-messages.js","webpack://@defra/flood-webchat/./src/client/store/AppProvider.jsx","webpack://@defra/flood-webchat/./src/client/store/actions-map.js","webpack://@defra/flood-webchat/./src/client/store/reducer.js","webpack://@defra/flood-webchat/./src/client/store/useApp.js","webpack://@defra/flood-webchat/./src/client/store/useChatSdk.js","webpack://@defra/flood-webchat/external commonjs \"@nice-devone/nice-cxone-chat-web-sdk\"","webpack://@defra/flood-webchat/external commonjs \"react\"","webpack://@defra/flood-webchat/external commonjs \"react-dom\"","webpack://@defra/flood-webchat/external commonjs \"react-dom/client\"","webpack://@defra/flood-webchat/external commonjs \"sanitize-html\"","webpack://@defra/flood-webchat/external commonjs \"uuid\"","webpack://@defra/flood-webchat/webpack/bootstrap","webpack://@defra/flood-webchat/webpack/runtime/compat get default export","webpack://@defra/flood-webchat/webpack/runtime/define property getters","webpack://@defra/flood-webchat/webpack/runtime/hasOwnProperty shorthand","webpack://@defra/flood-webchat/webpack/runtime/make namespace object","webpack://@defra/flood-webchat/./src/client/index.jsx"],"sourcesContent":["import React, { useEffect, useRef, useState } from 'react'\n\nimport { classnames } from '../../lib/classnames'\nimport { Panel } from '../panel/panel.jsx'\nimport { useApp } from '../../store/useApp'\n\nexport function Availability () {\n const { availability, messages, isChatOpen, setChatVisibility } = useApp()\n\n const [isFixed, setIsFixed] = useState(false)\n const buttonRef = useRef()\n\n const onClick = () => {\n setChatVisibility(!isChatOpen)\n }\n\n const onKeyDown = event => {\n if (event.key === ' ') {\n event.preventDefault()\n }\n }\n\n const onKeyUp = event => {\n if (event.key === ' ') {\n setChatVisibility(!isChatOpen)\n }\n }\n\n const intersectionCallback = entries => {\n const [entry] = entries\n const isBelowFold = !entry.isIntersecting && entry.boundingClientRect.top > 0\n setIsFixed(!isChatOpen && isBelowFold)\n }\n\n useEffect(() => {\n const observer = new window.IntersectionObserver(intersectionCallback, {\n rootMargin: '35px'\n })\n\n const parentElement = buttonRef.current?.parentElement\n\n if (parentElement) {\n observer.observe(parentElement)\n }\n\n return () => {\n if (parentElement) {\n observer.unobserve(parentElement)\n }\n }\n }, [buttonRef, isChatOpen])\n\n useEffect(() => {\n document.documentElement.classList.toggle('wc-scroll-padding', isFixed)\n document.body.classList.toggle('wc-scroll-padding', isFixed)\n }, [isFixed])\n\n let TextComponent = (<>Show Chat</>)\n\n if (!messages.length) {\n TextComponent = (<>Start Chat</>)\n }\n\n switch (availability) {\n case 'AVAILABLE':\n return (\n <>\n <div\n className={classnames('wc-availability', isFixed && 'wc-availability--fixed', isChatOpen && 'wc-open')}\n ref={buttonRef}\n >\n <div className='wc-availability__inner'>\n <a\n className='wc-availability__link'\n href='#webchat'\n draggable='false'\n onClick={onClick}\n onKeyUp={onKeyUp}\n onKeyDown={onKeyDown}\n >\n {TextComponent}\n </a>\n </div>\n </div>\n {isChatOpen && <Panel />}\n </>\n )\n case 'EXISTING':\n case 'UNAVAILABLE':\n return (\n <p className='govuk-body'>When it is available, a 'start chat' link will appear.</p>\n )\n default:\n return (\n <p className='govuk-body'>Checking availability</p>\n )\n }\n}\n","import React, { useEffect, useRef, useState } from 'react'\nimport sanitizeHtml from 'sanitize-html'\n\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { PanelFooter } from '../panel/panel-footer.jsx'\nimport { Message } from '../message/message.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useTextareaAutosize } from '../../hooks/useTextareaAutosize.js'\n\nexport function Chat ({ onEndChat }) {\n const { availability, thread, messages, agent, agentStatus, isAgentTyping } = useApp()\n\n const [userMessage, setUserMessage] = useState('')\n\n const messageRef = useRef()\n\n useTextareaAutosize(messageRef.current, userMessage)\n\n useEffect(() => {\n if (messages.length !== 0) {\n const chatBody = document.querySelector('.wc-body')\n chatBody.scrollTop = chatBody.scrollHeight\n }\n }, [messages, isAgentTyping])\n\n useEffect(() => {\n const label = document.querySelector('.wc-form__label')\n\n if (userMessage.length === 0) {\n label.classList.remove('govuk-visually-hidden')\n } else {\n label.classList.add('govuk-visually-hidden')\n }\n }, [userMessage])\n\n const onChange = e => {\n setUserMessage(e.target?.value)\n }\n\n const agentName = agent?.nickname || agent?.firstName\n\n let connectionHeadlineText = 'Connecting to Floodline'\n\n if (agentStatus === 'closed') {\n connectionHeadlineText = agentName ? `${agentName} ended the session` : 'Session ended by advisor'\n } else if (agentStatus) {\n if (agentName) {\n connectionHeadlineText = `You are speaking with ${agentName}`\n } else {\n connectionHeadlineText = 'No advisers currently available'\n }\n }\n\n if (availability === 'UNAVAILABLE') {\n connectionHeadlineText = 'Webchat is not currently available'\n }\n\n const sendMessage = e => {\n e.preventDefault()\n\n if (messageRef.current.value.length === 0) {\n return\n }\n\n try {\n thread.sendTextMessage(sanitizeHtml(messageRef.current.value.trim()))\n } catch (err) {\n console.log('[Chat Error] sendMessage', err)\n }\n\n setUserMessage('')\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-status'>\n <p className='wc-status__availability govuk-body-s'>{connectionHeadlineText}</p>\n <a className='wc-status__link govuk-!-font-size-16' href='#' data-module='govuk-button' onClick={onEndChat}>End chat</a>\n </div>\n\n <div className='wc-body'>\n <div className='wc-chat__body'>\n <ul className='wc-chat__messages'>\n {messages.length\n ? messages.map((msg, index) => <Message key={msg.id} message={msg} previousMessage={messages[index - 1]} />)\n : null}\n {isAgentTyping\n ? (\n <li className='wc-chat__message govuk-body outbound'>\n <div className='wc-chat__from govuk-!-font-size-14'>{agentName} is typing</div>\n <div className='wc-chat__text outbound'>\n <svg width='28' height='16' x='0px' y='0px' viewBox='0 0 28 16'>\n <circle stroke='none' cx='3' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='14' cy='8' r='3' fill='currentColor' />\n <circle stroke='none' cx='25' cy='8' r='3' fill='currentColor' />\n </svg>\n </div>\n </li>\n )\n : null}\n </ul>\n </div>\n </div>\n\n <PanelFooter>\n <div className='wc-footer__input'>\n <form className='wc-form' noValidate>\n <label className='govuk-label wc-form__label govuk-!-font-size-16' htmlFor='wc-form-textarea'>\n Your message<span className='govuk-visually-hidden'> (enter key submits)</span>\n </label>\n\n <textarea\n ref={messageRef}\n rows='1'\n aria-required='true'\n className='wc-form__textarea govuk-textarea govuk-!-font-size-16'\n id='wc-form-textarea'\n name='message'\n onChange={onChange}\n value={userMessage}\n />\n\n <input\n type='submit'\n className='wc-form__button govuk-button govuk-!-font-size-16'\n value='Send'\n data-prevent-double-click='true'\n onClick={sendMessage}\n />\n </form>\n </div>\n\n <div className='wc-footer__settings'>\n <a href='#' className='wc-footer__settings-link' data-module='govuk-button'>Settings</a>\n <a href='#' className='wc-footer__settings-link' data-module='govuk-button' download='transcript.txt'>Save chat</a>\n </div>\n </PanelFooter>\n </>\n )\n}\n","import React from 'react'\n\nexport const ErrorSummary = ({ errors }) => {\n const errs = Object.keys(errors)\n\n const goToInput = e => {\n e.preventDefault()\n const key = e.target.getAttribute('data-key')\n document.querySelector(`#wc-${key}`).focus()\n }\n\n if (errs.length === 0) {\n return null\n }\n\n return (\n <div className='govuk-error-summary govuk-!-static-margin-bottom-7' data-module='govuk-error-summary' tabIndex='-1'>\n <div role='alert'>\n <h2 id='wc-error' className='govuk-error-summary__title'>\n There is a problem\n </h2>\n <div className='govuk-error-summary__body'>\n <ul className='govuk-list govuk-error-summary__list'>\n {errs.map(key => (\n <li key={key}>\n <a href='#' data-key={key} onClick={goToInput}>{errors[key]}</a>\n </li>\n ))}\n </ul>\n </div>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport { classnames } from '../../lib/classnames'\n\nexport function Message ({ message, previousMessage }) {\n const outbound = message.direction === 'outbound'\n\n const messageOwnerSameAsPrevious = message?.direction === previousMessage?.direction\n\n return (\n <li className={classnames('wc-chat__message govuk-body', outbound ? 'outbound' : 'inbound')}>\n <div className='wc-chat__from govuk-!-font-size-14'>\n {messageOwnerSameAsPrevious ? null : <span>{outbound ? message.assignee : 'You'}</span>}\n <span className='govuk-visually-hidden'>:</span>\n </div>\n <p className={classnames('wc-chat__text', 'govuk-body-s', outbound ? 'outbound' : 'inbound')}>\n {message.text}\n </p>\n </li>\n )\n}\n","import React from 'react'\n\nexport function PanelFooter ({ children }) {\n return (\n <div className='wc-footer'>\n {children}\n </div>\n )\n}\n","import React from 'react'\nimport { useApp } from '../../store/useApp.js'\n\nexport function PanelHeader () {\n const { thread, setChatVisibility } = useApp()\n\n const onClose = e => {\n e.preventDefault()\n setChatVisibility(false)\n }\n\n let ButtonComponent = (\n <button className='wc-header__close' aria-label='Close the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10,8.6L15.6,3L17,4.4L11.4,10L17,15.6L15.6,17L10,11.4L4.4,17L3,15.6L8.6,10L3,4.4L4.4,3L10,8.6Z' fill='currentColor' />\n </svg>\n </button>\n )\n\n if (thread) {\n ButtonComponent = (\n <button className='wc-header__hide' aria-label='Minimise the webchat' onClick={onClose}>\n <svg aria-hidden='true' focusable='false' width='20' height='20' viewBox='0 0 20 20'>\n <path d='M10 14.4l-7-7L4.4 6l5.6 5.6L15.6 6 17 7.4l-7 7z' fill='currentColor' />\n </svg>\n </button>\n )\n }\n\n return (\n <div className='wc-header'>\n <h2 id='wc-header-title' className='wc-header__title govuk-heading-s'>\n Floodline Webchat\n </h2>\n\n {ButtonComponent}\n </div>\n )\n}\n","import React, { useEffect, useState, useCallback } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { PreChat } from '../screens/pre-chat.jsx'\nimport { RequestChat } from '../screens/request-chat.jsx'\nimport { Chat } from '../chat/chat.jsx'\nimport { Unavailable } from '../screens/unavailable.jsx'\nimport { EndChat } from '../screens/end-chat.jsx'\n\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { useFocusedElements } from '../../hooks/useFocusedElements.js'\n\nexport function Panel () {\n const { sdk, availability, thread, threadId, setThread, setThreadId, setChatVisibility, setMessages } = useApp()\n const { fetchThread, fetchMessages } = useChatSdk(sdk)\n\n const [screen, setScreen] = useState(threadId ? 2 : 0)\n\n useFocusedElements(screen)\n\n /**\n * Initializes the eventListener for pressing the escape key\n */\n useEffect(() => {\n const escapeKeyEvent = document.addEventListener('keydown', onEscapeKey)\n\n return () => {\n document.removeEventListener('keydown', escapeKeyEvent)\n }\n }, [])\n\n /**\n * Recovers the thread if there is a threadId but no thread loaded in to state\n */\n useEffect(() => {\n const recover = async () => {\n try {\n const fetchedThread = await fetchThread(threadId)\n setThread(fetchedThread)\n\n const fetchedMessages = await fetchMessages(fetchedThread, threadId)\n setMessages(fetchedMessages)\n } catch (err) {\n console.log('[Chat Error] fetchThread', err)\n\n setThreadId()\n setThread()\n setScreen(0)\n }\n }\n\n if (threadId) {\n (thread) ? setScreen(2) : recover()\n }\n }, [thread, threadId])\n\n const onEscapeKey = useCallback(e => {\n if (e.key === 'Escape' || e.key === 'Esc') {\n setChatVisibility(false)\n }\n }, [])\n\n const handleScreenChange = newScreen => e => {\n e.preventDefault()\n setScreen(newScreen)\n }\n\n const onForward = handleScreenChange(screen + 1)\n const onBack = handleScreenChange(screen - 1)\n const onEndChat = handleScreenChange(3)\n const onResume = handleScreenChange(2)\n\n const onEndChatConfirm = e => {\n e.preventDefault()\n console.log('confirmed end chat')\n }\n\n let ScreenComponent\n\n switch (screen) {\n case 0:\n ScreenComponent = <PreChat onForward={onForward} />\n break\n case 1:\n ScreenComponent = <RequestChat onBack={onBack} />\n break\n case 2:\n ScreenComponent = <Chat setScreen={setScreen} onEndChat={onEndChat} />\n break\n case 3:\n ScreenComponent = <EndChat onResume={onResume} onEndChatConfirm={onEndChatConfirm} />\n break\n default:\n ScreenComponent = <PreChat onForward={onForward} />\n }\n\n if (availability === 'UNAVAILABLE') {\n ScreenComponent = <Unavailable />\n }\n\n const Component = (\n <div id='wc-panel' className='wc-panel' role='dialog' tabIndex='-1' aria-modal='true' aria-labelledby='wc-header-title'>\n {ScreenComponent}\n </div>\n )\n\n return (\n <>\n {createPortal(Component, document.body)}\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function EndChat ({ onResume, onEndChatConfirm }) {\n return (\n <>\n <PanelHeader />\n <div className='wc-body'>\n <h3 className='govuk-heading-s' aria-live='polite'>Are you sure you want to end the chat?</h3>\n <div className='govuk-button-group'>\n <a href='#' className='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={onEndChatConfirm}>Yes, end chat</a>\n <a href='#' className='govuk-link govuk-!-font-size-16' onClick={onResume}>No, resume chat</a>\n </div>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function PreChat ({ onForward }) {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 className='govuk-heading-s' aria-live='polite'>What you can use webchat for</h3>\n <p className='govuk-body-s'>Webchat lets you talk directly to a Floodline adviser.</p>\n\n <p className='govuk-body-s'>You can use webchat to get:</p>\n <ul className='govuk-list govuk-list--bullet govuk-body-s'>\n <li>current flood warnings and alerts in your area</li>\n <li>information on the flood warning service</li>\n <li>advice on what to do before, during and after a flood</li>\n </ul>\n\n <p className='govuk-body-s'>\n {\n 'There are other ways to '\n }\n <a className='govuk-link' href='https://www.gov.uk/sign-up-for-flood-warnings'>\n sign up for flood warnings\n </a>\n {\n ' and '\n }\n <a className='govuk-link' href='https://www.fws.environment-agency.gov.uk/app/olr/login'>\n manage your flood warnings account\n </a>.\n </p>\n <p className='govuk-body-s'>Do not use webchat to <a className='govuk-link' href='https://www.gov.uk/report-flood-cause'>report a flood</a>.</p>\n\n <button className='govuk-button govuk-!-font-size-16' data-module='govuk-button' onClick={onForward}>Continue</button>\n\n <h3 className='govuk-heading-s'>Other flood information</h3>\n\n <p className='govuk-body-s'>Call Floodline for all other flood and flood warning information.</p>\n <p className='govuk-body-s'>\n <strong>Floodline helpline</strong>\n <br />\n Telephone: 0345 988 1188\n <br />\n Textphone: 0345 602 6340\n <br />\n Open 24 hours a day, 7 days a week\n <br />\n <a className='govuk-link' href='https://gov.uk/call-charges'>Find out more about call charges</a>\n </p>\n </div>\n </>\n )\n}\n","import React, { useRef, useState, useEffect } from 'react'\nimport * as uuid from 'uuid'\n\nimport { classnames } from '../../lib/classnames.js'\nimport { PanelHeader } from '../panel/panel-header.jsx'\nimport { useApp } from '../../store/useApp.js'\nimport { useChatSdk } from '../../store/useChatSdk.js'\nimport { ErrorSummary } from '../errorSummary/error-summary.jsx'\n\nconst QUESTION_MAX_LENGTH = 500\n\nexport function RequestChat ({ onBack }) {\n const { sdk, setCustomerId, setThreadId, setThread } = useApp()\n const { fetchCustomerId, fetchThread } = useChatSdk(sdk)\n\n const [errors, setErrors] = useState({})\n const [questionLength, setQuestionLength] = useState(0)\n\n const nameRef = useRef()\n const questionRef = useRef()\n\n useEffect(() => {\n if (Object.keys(errors).length) {\n document.querySelector('.govuk-error-summary')?.focus()\n }\n }, [errors])\n\n const onQuestionChange = e => {\n setQuestionLength(e.target.value.length)\n }\n\n const onRequestChat = async e => {\n e.preventDefault()\n\n const errs = {}\n\n if (nameRef.current.value.length === 0) {\n errs.name = 'Enter your name'\n }\n\n if (questionRef.current.value.length === 0) {\n errs.question = 'Enter your question'\n }\n\n if (questionRef.current.value.length > QUESTION_MAX_LENGTH) {\n errs.question = 'Your question must be 500 characters or less'\n }\n\n if (Object.keys(errs).length === 0) {\n try {\n const threadId = uuid.v4()\n const customerId = await fetchCustomerId()\n const thread = await fetchThread(threadId)\n\n sdk.getCustomer().setName(nameRef.current.value)\n\n await thread.startChat(questionRef.current.value || 'Begin conversation')\n\n setCustomerId(customerId)\n setThreadId(threadId)\n setThread(thread)\n } catch (err) {\n console.log('[Request Chat Error]', err)\n }\n }\n\n setErrors(errs)\n }\n\n const isQuestionLengthValid = QUESTION_MAX_LENGTH >= questionLength\n const questionLengthRemaining = QUESTION_MAX_LENGTH - questionLength\n const questionLengthExceeded = questionLength - QUESTION_MAX_LENGTH\n\n let questionHint = `You have ${questionLengthRemaining} characters remaining`\n\n if (!isQuestionLengthValid) {\n questionHint = `You have ${questionLengthExceeded} characters too many`\n }\n\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <a href='#' className='wc-back-link govuk-back-link' onClick={onBack}>\n What you can use webchat for\n </a>\n\n <ErrorSummary errors={errors} />\n\n <h3 className='govuk-heading-s' aria-live='polite'>\n Your name and question\n </h3>\n\n <form>\n <div className={classnames('govuk-form-group', errors.name && 'govuk-form-group--error')}>\n <label className='govuk-label' htmlFor='wc-name'>\n Your name\n </label>\n {errors.name && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span> {errors.name}\n </p>\n )}\n <input\n ref={nameRef}\n className={classnames('govuk-input', errors.name && 'govuk-input--error')}\n id='wc-name'\n name='name'\n type='text'\n data-testid='request-chat-user-name'\n />\n </div>\n\n <div className='govuk-character-count' data-module='govuk-character-count' data-maxlength='500'>\n <div className={classnames('govuk-form-group', errors.question && 'govuk-form-group--error')}>\n <label className='govuk-label' htmlFor='wc-question'>\n Your question\n </label>\n {errors.question && (\n <p className='govuk-error-message'>\n <span className='govuk-visually-hidden'>Error:</span>\n {errors.question}\n </p>\n )}\n <textarea\n ref={questionRef}\n id='wc-question'\n name='question'\n rows='5'\n aria-describedby='wc-question-info'\n onChange={onQuestionChange}\n className={classnames('govuk-textarea', 'govuk-js-character-count', !isQuestionLengthValid || errors.question ? 'govuk-textarea--error' : '')}\n data-testid='request-chat-user-question'\n />\n <div id='wc-question-info' className='govuk-hint govuk-character-count__message' style={{ color: `${!isQuestionLengthValid ? '#d4351c' : ''}` }} aria-hidden='true'>\n {questionHint}\n </div>\n <div className='govuk-character-count__sr-status govuk-visually-hidden' aria-live='polite'>\n {questionHint}\n </div>\n </div>\n </div>\n\n <button\n className='govuk-button govuk-!-margin-top-1 govuk-!-font-size-16'\n data-module='govuk-button'\n onClick={onRequestChat}\n >\n Request chat\n </button>\n </form>\n </div>\n </>\n )\n}\n","import React from 'react'\nimport { PanelHeader } from '../panel/panel-header.jsx'\n\nexport function Unavailable () {\n return (\n <>\n <PanelHeader />\n\n <div className='wc-body'>\n <h3 id='wc-subtitle' className='govuk-heading-m'>Webchat is currently not available</h3>\n <p className='govuk-body-s'>Try again later, or call Floodline:</p>\n <p className='govuk-body-s'>\n <strong>Floodline helpline</strong>\n <br />Telephone: 0345 988 1188\n <br />Textphone: 0345 602 6340\n <br />Open 24 hours a day, 7 days a week\n <br /><a className='govuk-link' href='https://gov.uk/call-charges'>Find out more about call charges</a>\n </p>\n <p className='govuk-body-s'>We're running webchat as a trial, it will not always be available.</p>\n </div>\n </>\n )\n}\n","import { useState, useEffect, useCallback } from 'react'\n\nconst setAriaHidden = bool => {\n for (const node of document.body.children) {\n if (node.id !== 'wc-panel') {\n (bool) ? node.setAttribute('aria-hidden', 'true') : node.removeAttribute('aria-hidden')\n }\n }\n}\n\nexport const getFocusableElements = () => {\n const selectors = [\n '#wc-panel a:not([disabled])',\n '#wc-panel button:not([disabled])',\n '#wc-panel select:not([disabled])',\n '#wc-panel input:not([disabled])',\n '#wc-panel textarea:not([disabled])',\n '#wc-panel *[tabindex=\"0\"]:not([disabled])'\n ]\n\n const elements = document.body.querySelectorAll(selectors.join(','))\n return Array.from(elements).filter(e => !e.closest('[hidden]') && !e.closest('[aria-hidden=\"true\"]'))\n}\n\nconst useFocusedElements = screen => {\n const [panelElements, setPanelElements] = useState([])\n\n const onKeyDown = useCallback(e => {\n const webchatPanelElement = document.querySelector('#wc-panel')\n\n if (e.key === 'Tab') {\n if (webchatPanelElement && !document.activeElement.closest('#wc-panel')) {\n webchatPanelElement.focus()\n }\n\n if (e.shiftKey) {\n if (document.activeElement === panelElements[0]) {\n panelElements[panelElements.length - 1].focus()\n e.preventDefault()\n } else if (document.activeElement === document.querySelector('#wc-panel')) {\n panelElements[panelElements.length - 1]?.focus()\n e.preventDefault()\n }\n } else if (document.activeElement === panelElements[panelElements.length - 1]) {\n panelElements[0].focus()\n e.preventDefault()\n }\n }\n }, [panelElements])\n\n useEffect(() => {\n setPanelElements(getFocusableElements())\n }, [screen])\n\n useEffect(() => {\n setAriaHidden(true)\n\n const panelElement = document.querySelector('#wc-panel')\n panelElement.focus()\n\n document.addEventListener('keydown', onKeyDown)\n\n return () => {\n setAriaHidden()\n document.body.querySelector('.wc-availability__link')?.focus()\n document.removeEventListener('keydown', onKeyDown)\n }\n }, [panelElements])\n}\n\nexport { useFocusedElements }\n","import { useEffect } from 'react'\n\nexport const useTextareaAutosize = (textAreaRef, value) => {\n useEffect(() => {\n if (textAreaRef) {\n textAreaRef.style.height = '0px'\n\n const scrollHeight = textAreaRef.scrollHeight\n\n textAreaRef.style.height = `${scrollHeight}px`\n }\n }, [textAreaRef, value])\n}\n","export async function checkAvailability (endpoint) {\n const response = await fetch(endpoint)\n const data = await response.json()\n\n return {\n availability: data.availability || 'UNAVAILABLE'\n }\n}\n","export const classnames = (...classes) => classes.filter(classname => classname && typeof classname === 'string').join(' ')\n","import sanitizeHtml from 'sanitize-html'\n\nexport const transformMessage = message => {\n return {\n id: message.id,\n text: sanitizeHtml(message.messageContent?.text),\n createdAt: new Date(message.createdAt),\n user: message.authorEndUserIdentity?.fullName?.trim() || null,\n assignee: message.authorUser?.firstName || null,\n direction: message.direction\n }\n}\n\nexport const transformMessages = messages => messages.map(message => transformMessage(message))\n","import React, { createContext, useEffect, useReducer, useMemo } from 'react'\nimport { ChatEvent } from '@nice-devone/nice-cxone-chat-web-sdk'\n\nimport { initialState, reducer, CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY } from './reducer.js'\n\nexport const AppContext = createContext(initialState)\n\nexport const AppProvider = ({ sdk, availability, children }) => {\n const [state, dispatch] = useReducer(reducer, initialState)\n\n /**\n * SDK event handlers\n */\n const onLiveChatRecovered = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.contact.status })\n }\n\n const onAssignedAgentChanged = e => {\n dispatch({ type: 'SET_AGENT', payload: e.detail.data.inboxAssignee })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onAgentTypingStarted = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: true })\n }\n\n const onAgentTypingEnded = () => {\n dispatch({ type: 'SET_AGENT_TYPING', payload: false })\n }\n\n const onMessageCreated = e => {\n dispatch({ type: 'SET_MESSAGE', payload: e.detail.data.message })\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n const onContactStatusChanged = e => {\n dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })\n }\n\n useEffect(() => {\n sdk.onChatEvent(ChatEvent.LIVECHAT_RECOVERED, onLiveChatRecovered)\n sdk.onChatEvent(ChatEvent.MESSAGE_CREATED, onMessageCreated)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_STARTED, onAgentTypingStarted)\n sdk.onChatEvent(ChatEvent.AGENT_TYPING_ENDED, onAgentTypingEnded)\n sdk.onChatEvent(ChatEvent.ASSIGNED_AGENT_CHANGED, onAssignedAgentChanged)\n sdk.onChatEvent(ChatEvent.CONTACT_STATUS_CHANGED, onContactStatusChanged)\n }, [sdk])\n\n /**\n * Initialize customerId, threadId and whether the webchat should be open\n */\n useEffect(() => {\n dispatch({ type: 'SET_AVAILABILITY', payload: availability })\n\n setCustomerId(window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY))\n setThreadId(window.localStorage.getItem(THREAD_ID_STORAGE_KEY))\n\n if (window.location.hash === '#webchat') {\n setChatVisibility(true)\n }\n }, [])\n\n /**\n * State update functions\n */\n const setChatVisibility = payload => {\n if (!payload) {\n window.location.hash = ''\n }\n\n dispatch({ type: 'SET_CHAT_VISIBILITY', payload })\n }\n\n const setCustomerId = customerId => {\n dispatch({ type: 'SET_CUSTOMER_ID', payload: customerId })\n }\n\n const setThreadId = threadId => {\n dispatch({ type: 'SET_THREAD_ID', payload: threadId })\n }\n\n const setThread = thread => {\n dispatch({ type: 'SET_THREAD', payload: thread })\n }\n\n const setMessages = messages => {\n dispatch({ type: 'SET_MESSAGES', payload: messages })\n }\n\n /**\n * Application-wide state and state functions\n */\n const store = useMemo(() => ({\n ...state,\n sdk,\n setCustomerId,\n setThreadId,\n setThread,\n setMessages,\n setChatVisibility,\n onLiveChatRecovered,\n onAssignedAgentChanged,\n onAgentTypingStarted,\n onAgentTypingEnded,\n onMessageCreated,\n onContactStatusChanged\n }))\n\n return (\n <AppContext.Provider value={store}>\n {children}\n </AppContext.Provider>\n )\n}\n","import { transformMessages, transformMessage } from '../lib/transform-messages'\nimport { CUSTOMER_ID_STORAGE_KEY, THREAD_ID_STORAGE_KEY } from './reducer'\n\nconst setCustomerId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(CUSTOMER_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(CUSTOMER_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n customerId: payload\n }\n}\n\nconst setThreadId = (state, payload) => {\n if (payload) {\n window.localStorage.setItem(THREAD_ID_STORAGE_KEY, payload)\n } else {\n window.localStorage.removeItem(THREAD_ID_STORAGE_KEY)\n }\n\n return {\n ...state,\n threadId: payload\n }\n}\n\nconst setChatVisibility = (state, payload) => {\n return {\n ...state,\n isChatOpen: payload\n }\n}\n\nconst setAvailability = (state, payload) => {\n return {\n ...state,\n availability: payload\n }\n}\n\nconst setThread = (state, payload) => {\n return {\n ...state,\n thread: payload\n }\n}\n\nconst setMessage = (state, payload) => {\n return {\n ...state,\n messages: [...state.messages, transformMessage(payload)]\n }\n}\n\nconst setMessages = (state, payload) => {\n return {\n ...state,\n messages: transformMessages(payload).reverse()\n }\n}\n\nconst setAgent = (state, payload) => {\n return {\n ...state,\n agent: payload\n }\n}\n\nconst setAgentIsTyping = (state, payload) => {\n return {\n ...state,\n isAgentTyping: payload\n }\n}\n\nconst setAgentStatus = (state, payload) => {\n return {\n ...state,\n agentStatus: payload\n }\n}\n\nexport const actionsMap = {\n SET_CHAT_VISIBILITY: setChatVisibility,\n SET_AVAILABILITY: setAvailability,\n SET_CUSTOMER_ID: setCustomerId,\n SET_THREAD_ID: setThreadId,\n SET_THREAD: setThread,\n SET_MESSAGE: setMessage,\n SET_MESSAGES: setMessages,\n SET_AGENT: setAgent,\n SET_AGENT_TYPING: setAgentIsTyping,\n SET_AGENT_STATUS: setAgentStatus\n}\n","import { actionsMap } from './actions-map'\n\nexport const CUSTOMER_ID_STORAGE_KEY = 'webchat_customer_id'\nexport const THREAD_ID_STORAGE_KEY = 'webchat_thread_id'\n\nexport const initialState = {\n availability: null,\n customerId: null,\n threadId: null,\n thread: null,\n messages: [],\n agent: null,\n agentStatus: null,\n isAgentTyping: false,\n isChatOpen: false\n}\n\nexport const reducer = (state, action) => {\n const { type, payload } = action\n\n const fn = actionsMap[type]\n\n if (fn) {\n const actionFunction = fn.bind(this, state, payload)\n return actionFunction()\n }\n\n return state\n}\n","import { useContext } from 'react'\n\nimport { AppContext } from './AppProvider.jsx'\n\nexport const useApp = () => useContext(AppContext)\n","export const useChatSdk = sdk => {\n const connect = async () => sdk.authorize()\n\n const fetchCustomerId = async () => {\n const response = await connect()\n return response?.consumerIdentity.idOnExternalPlatform\n }\n\n const fetchThread = async threadId => {\n await connect()\n return sdk.getThread(threadId)\n }\n\n const fetchMessages = async (thread, threadId) => {\n await connect()\n\n const recovered = await thread.recover(threadId)\n\n const allMessages = []\n let fetchedMessages = recovered.messages\n\n while (fetchedMessages.length) {\n fetchedMessages.map(msg => allMessages.push(msg))\n\n try {\n const response = await thread.loadMoreMessages()\n fetchedMessages = response.data.messages\n } catch (err) {\n fetchedMessages = []\n }\n }\n\n return allMessages\n }\n\n return { connect, fetchCustomerId, fetchThread, fetchMessages }\n}\n","module.exports = require(\"@nice-devone/nice-cxone-chat-web-sdk\");","module.exports = require(\"react\");","module.exports = require(\"react-dom\");","module.exports = require(\"react-dom/client\");","module.exports = require(\"sanitize-html\");","module.exports = require(\"uuid\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","import React from 'react'\nimport { createRoot } from 'react-dom/client'\nimport { ChatSdk } from '@nice-devone/nice-cxone-chat-web-sdk'\nimport { Availability } from './components/availability/availability.jsx'\nimport { checkAvailability } from './lib/check-availability'\nimport { AppProvider } from './store/AppProvider.jsx'\nimport { CUSTOMER_ID_STORAGE_KEY } from './store/reducer.js'\n\nexport async function init (container, options) {\n const sdk = new ChatSdk({\n brandId: options.brandId,\n channelId: options.channelId,\n customerId: window.localStorage.getItem(CUSTOMER_ID_STORAGE_KEY) || '',\n environment: options.environment\n })\n\n const root = createRoot(container)\n let availability\n try {\n const result = await checkAvailability(options.availabilityEndpoint)\n availability = result.availability\n } catch (e) {\n availability = 'UNAVAILABLE'\n }\n root.render(\n <AppProvider sdk={sdk} availability={availability}>\n <Availability availability={availability} />\n </AppProvider>\n )\n}\n"],"names":["React","useEffect","useRef","useState","classnames","Panel","useApp","Availability","availability","messages","isChatOpen","setChatVisibility","isFixed","setIsFixed","buttonRef","onClick","onKeyDown","event","key","preventDefault","onKeyUp","intersectionCallback","entries","entry","isBelowFold","isIntersecting","boundingClientRect","top","observer","window","IntersectionObserver","rootMargin","parentElement","current","observe","unobserve","document","documentElement","classList","toggle","body","TextComponent","createElement","Fragment","length","className","ref","href","draggable","sanitizeHtml","PanelHeader","PanelFooter","Message","useTextareaAutosize","Chat","onEndChat","thread","agent","agentStatus","isAgentTyping","userMessage","setUserMessage","messageRef","chatBody","querySelector","scrollTop","scrollHeight","label","remove","add","onChange","e","target","value","agentName","nickname","firstName","connectionHeadlineText","sendMessage","sendTextMessage","trim","err","console","log","map","msg","index","id","message","previousMessage","width","height","x","y","viewBox","stroke","cx","cy","r","fill","noValidate","htmlFor","rows","name","type","download","ErrorSummary","errors","errs","Object","keys","goToInput","getAttribute","focus","tabIndex","role","outbound","direction","messageOwnerSameAsPrevious","assignee","text","children","onClose","ButtonComponent","focusable","d","useCallback","createPortal","PreChat","RequestChat","Unavailable","EndChat","useChatSdk","useFocusedElements","sdk","threadId","setThread","setThreadId","setMessages","fetchThread","fetchMessages","screen","setScreen","escapeKeyEvent","addEventListener","onEscapeKey","removeEventListener","recover","fetchedThread","fetchedMessages","handleScreenChange","newScreen","onForward","onBack","onResume","onEndChatConfirm","ScreenComponent","Component","uuid","QUESTION_MAX_LENGTH","setCustomerId","fetchCustomerId","setErrors","questionLength","setQuestionLength","nameRef","questionRef","onQuestionChange","onRequestChat","question","v4","customerId","getCustomer","setName","startChat","isQuestionLengthValid","questionLengthRemaining","questionLengthExceeded","questionHint","style","color","setAriaHidden","bool","node","setAttribute","removeAttribute","getFocusableElements","selectors","elements","querySelectorAll","join","Array","from","filter","closest","panelElements","setPanelElements","webchatPanelElement","activeElement","shiftKey","panelElement","textAreaRef","checkAvailability","endpoint","response","fetch","data","json","classes","classname","transformMessage","messageContent","createdAt","Date","user","authorEndUserIdentity","fullName","authorUser","transformMessages","createContext","useReducer","useMemo","ChatEvent","initialState","reducer","CUSTOMER_ID_STORAGE_KEY","THREAD_ID_STORAGE_KEY","AppContext","AppProvider","state","dispatch","onLiveChatRecovered","payload","detail","inboxAssignee","contact","status","onAssignedAgentChanged","case","onAgentTypingStarted","onAgentTypingEnded","onMessageCreated","onContactStatusChanged","onChatEvent","LIVECHAT_RECOVERED","MESSAGE_CREATED","AGENT_TYPING_STARTED","AGENT_TYPING_ENDED","ASSIGNED_AGENT_CHANGED","CONTACT_STATUS_CHANGED","localStorage","getItem","location","hash","store","Provider","setItem","removeItem","setAvailability","setMessage","reverse","setAgent","setAgentIsTyping","setAgentStatus","actionsMap","SET_CHAT_VISIBILITY","SET_AVAILABILITY","SET_CUSTOMER_ID","SET_THREAD_ID","SET_THREAD","SET_MESSAGE","SET_MESSAGES","SET_AGENT","SET_AGENT_TYPING","SET_AGENT_STATUS","action","fn","actionFunction","bind","useContext","connect","authorize","consumerIdentity","idOnExternalPlatform","getThread","recovered","allMessages","push","loadMoreMessages","createRoot","ChatSdk","init","container","options","brandId","channelId","environment","root","result","availabilityEndpoint","render"],"sourceRoot":""}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@defra/flood-webchat",
3
- "version": "0.0.1-beta.10",
3
+ "version": "0.0.1-beta.12",
4
4
  "description": "",
5
5
  "main": "dist/server.js",
6
6
  "browser": "dist/client.js",
@@ -0,0 +1,34 @@
1
+ import React from 'react'
2
+
3
+ export const ErrorSummary = ({ errors }) => {
4
+ const errs = Object.keys(errors)
5
+
6
+ const goToInput = e => {
7
+ e.preventDefault()
8
+ const key = e.target.getAttribute('data-key')
9
+ document.querySelector(`#wc-${key}`).focus()
10
+ }
11
+
12
+ if (errs.length === 0) {
13
+ return null
14
+ }
15
+
16
+ return (
17
+ <div className='govuk-error-summary govuk-!-static-margin-bottom-7' data-module='govuk-error-summary' tabIndex='-1'>
18
+ <div role='alert'>
19
+ <h2 id='wc-error' className='govuk-error-summary__title'>
20
+ There is a problem
21
+ </h2>
22
+ <div className='govuk-error-summary__body'>
23
+ <ul className='govuk-list govuk-error-summary__list'>
24
+ {errs.map(key => (
25
+ <li key={key}>
26
+ <a href='#' data-key={key} onClick={goToInput}>{errors[key]}</a>
27
+ </li>
28
+ ))}
29
+ </ul>
30
+ </div>
31
+ </div>
32
+ </div>
33
+ )
34
+ }
@@ -105,5 +105,9 @@ export function Panel () {
105
105
  </div>
106
106
  )
107
107
 
108
- return createPortal(Component, document.body)
108
+ return (
109
+ <>
110
+ {createPortal(Component, document.body)}
111
+ </>
112
+ )
109
113
  }
@@ -5,6 +5,7 @@ import { classnames } from '../../lib/classnames.js'
5
5
  import { PanelHeader } from '../panel/panel-header.jsx'
6
6
  import { useApp } from '../../store/useApp.js'
7
7
  import { useChatSdk } from '../../store/useChatSdk.js'
8
+ import { ErrorSummary } from '../errorSummary/error-summary.jsx'
8
9
 
9
10
  const QUESTION_MAX_LENGTH = 500
10
11
 
@@ -81,30 +82,15 @@ export function RequestChat ({ onBack }) {
81
82
  <PanelHeader />
82
83
 
83
84
  <div className='wc-body'>
84
- <a href='#' className='wc-back-link govuk-back-link' onClick={onBack}>What you can use webchat for</a>
85
-
86
- {Object.keys(errors).length > 0
87
- ? (
88
- <div className='govuk-error-summary govuk-!-static-margin-bottom-7' data-module='govuk-error-summary' tabIndex='-1'>
89
- <div role='alert'>
90
- <h2 id='wc-error' className='govuk-error-summary__title'>
91
- There is a problem
92
- </h2>
93
- <div className='govuk-error-summary__body'>
94
- <ul className='govuk-list govuk-error-summary__list'>
95
- {Object.keys(errors).map(key => (
96
- <li key={key}>
97
- <a href={`#${key}`}>{errors[key]}</a>
98
- </li>
99
- ))}
100
- </ul>
101
- </div>
102
- </div>
103
- </div>
104
- )
105
- : null}
85
+ <a href='#' className='wc-back-link govuk-back-link' onClick={onBack}>
86
+ What you can use webchat for
87
+ </a>
88
+
89
+ <ErrorSummary errors={errors} />
106
90
 
107
- <h3 className='govuk-heading-s' aria-live='polite'>Your name and question</h3>
91
+ <h3 className='govuk-heading-s' aria-live='polite'>
92
+ Your name and question
93
+ </h3>
108
94
 
109
95
  <form>
110
96
  <div className={classnames('govuk-form-group', errors.name && 'govuk-form-group--error')}>
@@ -30,7 +30,7 @@ export const AppProvider = ({ sdk, availability, children }) => {
30
30
  }
31
31
 
32
32
  const onMessageCreated = e => {
33
- setMessage(e.detail.data.message)
33
+ dispatch({ type: 'SET_MESSAGE', payload: e.detail.data.message })
34
34
  dispatch({ type: 'SET_AGENT_STATUS', payload: e.detail.data.case.status })
35
35
  }
36
36
 
@@ -84,10 +84,6 @@ export const AppProvider = ({ sdk, availability, children }) => {
84
84
  dispatch({ type: 'SET_THREAD', payload: thread })
85
85
  }
86
86
 
87
- const setMessage = message => {
88
- dispatch({ type: 'SET_MESSAGE', payload: message })
89
- }
90
-
91
87
  const setMessages = messages => {
92
88
  dispatch({ type: 'SET_MESSAGES', payload: messages })
93
89
  }
@@ -101,9 +97,14 @@ export const AppProvider = ({ sdk, availability, children }) => {
101
97
  setCustomerId,
102
98
  setThreadId,
103
99
  setThread,
104
- setMessage,
105
100
  setMessages,
106
- setChatVisibility
101
+ setChatVisibility,
102
+ onLiveChatRecovered,
103
+ onAssignedAgentChanged,
104
+ onAgentTypingStarted,
105
+ onAgentTypingEnded,
106
+ onMessageCreated,
107
+ onContactStatusChanged
107
108
  }))
108
109
 
109
110
  return (